• Главная
  • Контакты
Подписаться:
  • Twitter
  • Facebook
  • RSS
  • VK
  • PushAll
logo

logo

  • Все
    • Положительные
    • Отрицательные
  • За сегодня
    • Положительные
    • Отрицательные
  • За вчера
    • Положительные
    • Отрицательные
  • За 3 дня
    • Положительные
    • Отрицательные
  • За неделю
    • Положительные
    • Отрицательные
  • За месяц
    • Положительные
    • Отрицательные
  • За год
    • Положительные
    • Отрицательные
  • Сортировка
    • По дате (возр)
    • По дате (убыв)
    • По рейтингу (возр)
    • По рейтингу (убыв)
    • По комментам (возр)
    • По комментам (убыв)
    • По просмотрам (возр)
    • По просмотрам (убыв)
Главная
  • Все
    • Положительные
    • Отрицательные
  • За сегодня
    • Положительные
    • Отрицательные
  • За вчера
    • Положительные
    • Отрицательные
  • За 3 дня
    • Положительные
    • Отрицательные
  • За неделю
    • Положительные
    • Отрицательные
  • За месяц
    • Положительные
    • Отрицательные
  • Главная
  • Отправка голосовых сообщений ВКонтакте с помощью VK API

Отправка голосовых сообщений ВКонтакте с помощью VK API +18

24.04.2017 15:57
PeterSamokhin 6 5700 Источник
Вконтакте API*, Java*
Всем, кто работал с VK API, давно известно, что доступ к любой работе с аудиозаписями ВКонтакте был закрыт 16 декабря 2016 года, а информация о голосовых сообщениях вообще отсутствует в документации.

imageНа примере моего пустого сообщества-песочницы

Так как же это делается?

Используем скрытые параметры для загрузки документа


Предварительно необходимо обратить внимание на один очень важный момент: чтобы отправить голосовое сообщение от имени группы или публичной страницы, загружать его придется все равно с токеном пользователя, но прикреплять этот документ потом можно и при отправке сообществами, уже с их токеном.

Как и для обычного документа, получаем адрес сервера для загрузки:

https://api.vk.com/method/docs.getUploadServer?access_token=ACCESS_TOKEN&type=audio_message&v=5.63

Основной момент здесь: параметр type=audio_message.

В ответ мы должны получить следующий JSON:

{
  "response":
             {
               "upload_url":"https://..."
             }
}

Как правильно загрузить файл на сервер ВКонтакте


Если отправлять файл не в формате multipart/form-data, ничего не выйдет.
В формате mp3 загрузить аудио тоже не получится, лучше всего использовать ogg, хотя можно и поэкспериментировать.

Можно использовать код отсюда, чтобы загрузить файл в нужном формате (пример указан на Java, аналоги для себя, я думаю, можно найти в интернете):

Используем экземпляр класса MultipartUtility, в нём ничего менять не нужно:

StringBuilder response_sb = new StringBuilder();
try {
    MultipartUtility multipart = new MultipartUtility("адрес_сервера_для_загрузки", "UTF-8");

    multipart.addFilePart("путь_до_файла_с_голосовым_сообщением");

    List<String> response = multipart.finish();

    for (String line : response) {
       response_sb.append(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

Всё, аудиосообщение загружено. Ответ от сервера в случае удачи будет похожим на это:

{
   "file":"62802565|0|0|805131|многосимволов|ogg|9943|file.ogg|многосимволов|многосимволов||||многосимволов="
}

Сохраняем документ на сервере


Здесь также важно подметить: если вы сохраните документ не у пользователя, то при отправке он будет выглядеть как документ, а не как голосовое сообщение. Либо же вы отправите просто пустое сообщение.

Делаем следующий запрос:

https://api.vk.com/method/docs.save?file=полученный_ранее_file&access_token=ACCESS_TOKEN&v=5.63

Это была последняя стадия. Получаем ответ:

{
    "response": [
                    {
                        "id": 000000000,
                        "owner_id": 000000000
                        ...  и ещё куча параметров, которые нам сейчас не нужны
                    }
                ]
}

Вот и всё. Можно отправлять сообщения обычным способом, в attachments указав ссылку doc(owner_id)_(id), используя owner_id и id, полученные выше.

P.S. Обычный пользователь не может отправить сообщение, содержащее что-то кроме записи голоса. А через API это делается очень легко. Раньше это работало и в комментариях/обсуждениях и так далее, но сейчас, видимо, лавочку прикрыли, как и загрузку (но не отправку!) голосовых сообщений сообществами.



Я не являюсь автором «расследования» по поиску способа отправки аудиосообщений через API, я лишь собрал всю информацию в кучу и постарался красиво оформить. Заметил на просторах интернета много вопросов по этому поводу.

Данная статья написана для тех, кто работал с ВКонтакте API, и описывать неинтересные вещи я не стал, стараясь писать лишь по делу. Если решусь, напишу еще пару статеек о том, как написать бота на Java с использованием LongPoll-сервера VK (для личных страниц) и с использованием Callback API и web-сервлетов (для сообществ).

За предоставленные материалы и помощь благодарность Станиславу Куделко.
Поделиться с друзьями
-->

Комментарии (6)


  1. Ockonal
    25.04.2017 00:51
    #10189486

    Если решусь, напишу еще пару статеек о том, как написать бота на Java с использованием LongPoll-сервера VK (для личных страниц) и с использованием Callback API и web-сервлетов (для сообществ).

    Для каких целей это может быть полезно?


    1. PeterSamokhin
      25.04.2017 00:57
      #10189490
      +1

      Ockonal видел краткие и, возможно, не очень полезные для начинающих разработчиков статьи по этой теме, а также увидел, что людям это интересно. Здесь же недавно тоже была статья про ботов на python и я подумал, что, возможно, подобного рода статьи заинтересуют кого-то, и хотел подробно написать от А до Я, как это сделать, и прикрепить готовый вариант. И всё же: зачем? Думаю, с той же целью, зачем написал и эту статью: донести информацию, о которой в интернете встречал немало вопросов, возможно она кому-то покажется интересной.


      1. jasonOk
        25.04.2017 16:47
        #10190642

        Статься хорошая, но всё это (практически) уже было написано здесь

        Ещё и так же на Java.


        1. PeterSamokhin
          25.04.2017 16:47
          #10190646

          jasonOk это и писал Станислав Куделко, указанный в статье.


  1. XRain
    25.04.2017 11:22
    #10189918

    Это уже пофиксили, и теперь можно от имени сообщества грузить и отправлять аудиосообщение. Если слишком часто от имени пользователя загружать, то можно капчу словить. Да и mp3 наравне с ogg нормально грузится.


  1. sbnur
    25.04.2017 16:25
    #10190570
    -4

    Вот чего бы я никогда не рекомендовал, так это использовать VK API

МЕТКИ

  • Хабы
  • Теги

JAVA

Вконтакте API

java

вконтакте api

СЕРВИСЫ
  • logo

    CloudLogs.ru - Облачное логирование

    • Храните логи вашего сервиса или приложения в облаке. Удобно просматривайте и анализируйте их.
Все публикации автора
  • Создаём динамическую обложку ВКонтакте +39

    • 11.06.2017 15:33

    Отправка голосовых сообщений ВКонтакте с помощью VK API +18

    • 24.04.2017 15:57

Подписка


ЛУЧШЕЕ

  • Сегодня
  • Вчера
  • Позавчера
08:05

Спасаем электронный микроскоп JEOL JEM-6A +36

06:56

PEP-734: Субинтерпретаторы в Python 3.14 +28

07:05

Как учёные про мегалодона спорили +13

07:00

Когда LLM — это не чат, а мозг: путь к VLA‑архитектуре +13

08:01

Автоматизируем сканирование IT-инфраструктуры: версия 2.0 +10

08:07

Шпаргалка для новичков — от GIT до Деплоя +8

08:00

Detection as code: как мы в VK SOC превращали правила в код +8

07:51

Как незрячему системному администратору не потеряться в мире IT +6

07:00

Чёрт в табакерке: инструмент для диагностики сети на базе ОС FreeBSD +6

06:59

Чем заняться в выходные? Как я собрал домашнюю виртуализацию в контейнерах за 34 500 рублей +5

06:57

Циклические зависимости в Spring: проблема и способы её решения +5

09:01

Децентрализованные системы радиосвязи +4

06:54

Spring boot, многопоточка и магия вне хогвартса +3

06:27

1-on-1? А смысл? +3

08:38

Amazon для Латинской Америки: история Mercado Libre +2

07:00

Qual-AI-ty Assurance: как ИИ меняет QA +2

06:59

Игры на бумаге: как прокачать ребёнка без Wi-Fi и нервов +2

05:43

Связанные одной сетью: что происходит в мире высокой скорости передачи данных +2

04:54

Смарт-контрактов ещё нет, а адреса уже есть: зачем нужен CREATE2 (EIP-1014) +2

09:27

ИИ в управлении мастер-данными: от точечных улучшений к новому опыту взаимодействия +1

07:15

Советы новичкам в карьере программиста +76

15:01

Рабочая точка биполярного транзистора +39

09:01

Puter.js: бесплатный бэкенд для сайтов, приложений и игр +36

07:00

Как законы механики и математики помогли нам с балансировкой нагрузки в 300K RPS +36

18:42

Как я зарегистрировал CVE и разозлил вендора +29

13:01

«Ratchet & Clank» — угасающий привет из прошлого +29

08:57

Как мы засунули Git в браузер (и чего нам это стоило) +27

10:02

История K2 Cloud: эволюция от провайдера до партнёра +25

08:19

Сетевой стек по-майнкрафтовски +25

12:16

Как я прогулялся из 1С в Java и захотел обратно +24

13:01

Что такое динамическая документация, как ее внедрить и, главное, зачем +22

14:05

ИИ (не) отнимает работу у разработчиков, или Почему вас пока не уволят +19

12:51

Приложение для генерации QR-кодов +18

13:20

Б/У Antminer S9 в помощь радиолюбителю. Часть II +16

08:06

Запускаем несколько интерпретаторов в коде на Python — невероятная скорость +16

07:37

Занятия программированием и обучением шагающего двуного мини-робота в кружке от Центра робототехники Сбера +16

16:54

Учим Xiaomi Mi Band 9 ходить в сауну +14

15:22

Как выбрать оффер? Задача о разборчивой невесте и правило 37% +14

10:28

Прощай, Zone.js: ускоряем Angular с Signal API и Zoneless-подходом +13

03:40

Автоматизация для всех: как n8n революционизирует рабочие процессы в бизнесе +13

06:00

Запустили векторный поиск в YDB: рассказываем, как он работает +87

13:01

Ну, погоди! Как я создал свою версию культовой игры: от схемы до корпуса +72

07:49

Почему 21 см — это «магическая длина» нашей Вселенной +68

11:56

Меню потоков уже на Хабре +35

11:38

Гидроакустические «кубики» +35

09:33

Призраки в коммитах: пылесосим историю Git в поиске утекших секретов +34

13:08

«Почему компилятор Rust такой медленный?» +33

09:01

10 популярных мифов о VDS-хостинге +33

10:31

А вдруг прочитают? Как писать для инопланетян +31

08:22

Топ-5 мини-ПК с фокусом на производительность: от Arrow Lake до Strix Halo +29

08:05

Шифрование скриптов +28

16:35

Распродажа в издательстве «Питер» +23

17:15

Всё об устройстве FT8/FT4 с примерами на Python +22

08:33

Атомные реакторы для лечения рака (и почему они больше не нужны) +21

16:52

Как работает память в LLM и почему вы не обучаете ChatGPT своим prompt +20

07:44

Мы сделали химическую защиту собачьих лап +19

11:24

Как построить отказоустойчивый кластер СУБД +17

07:41

Вы точно их собеседовали: 8 личностей, которые приходят на интервью +17

12:44

Выгорание одно. Причины разные +16

07:37

Python в enterprise-разработке: почему популярность ЯП распространилась и на корпоративный сектор. Часть 2 +16

ОБСУЖДАЕМОЕ

  • Кто осознаёт? Почему главный вопрос о сознании — это не «что?», а «кто?» +7

    • 131   1500

    Вы точно их собеседовали: 8 личностей, которые приходят на интервью +17

    • 127   44000

    Почему 21 см — это «магическая длина» нашей Вселенной +68

    • 98   67000

    Меню потоков уже на Хабре +35

    • 56   1700

    Headhunter больше не работает. Как искать работу по-новому? -3

    • 48   6000

    Эксперимент: смогут ли бесплатные чат-боты написать Sci-Fi роман, достойный публикации на Литресе +8

    • 46   1600

    Ну, погоди! Как я создал свою версию культовой игры: от схемы до корпуса +72

    • 44   9300

    DDR4 или DDR5 в играх и на домашнем ПК: пора ли обновлять оперативную память? +7

    • 40   18000

    Как я прогулялся из 1С в Java и захотел обратно +24

    • 38   11000

    Как выбрать оффер? Задача о разборчивой невесте и правило 37% +14

    • 37   3800

    Почему люди с техническим мышлением реже попадают в ловушки на рынке недвижимости +8

    • 36   3600

    Советы новичкам в карьере программиста +76

    • 35   5800

    Как работает память в LLM и почему вы не обучаете ChatGPT своим prompt +20

    • 29   7800

    Мы достигли пика в развитии ИИ!… или нет? +1

    • 29   5000

    Как сыграть с СХД в имитацию ошибки и выйти победителем? Используем паттерны ООП на C++ +12

    • 29   1400
  • Главная
  • Контакты
© 2025. Все публикации принадлежат авторам.