• Главная
  • Контакты
Подписаться:
  • 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

Подписка


ЛУЧШЕЕ

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

Радио почти из ничего. Самодельные радиодетали 1920-х. Гальванические элементы +43

08:00

Прятал пакеты и все отрицал — как мы отладили DHCP‑балансировщик +33

08:05

Хакаем цифровую мыльницу с ROM-DOS и x86-процессором +27

09:01

Барби-комп: трагическая история компьютера Mattel Aquarius +24

12:00

От архитектуры RISC-V в ЦОД до 256-ядерных чипов Diamond Rapids: новинки серверного железа за август 2026 +22

07:37

Самая простая самодельная солнечная батарея: просто из куска меди или медного провода +21

09:13

Как изменится меню в условиях глобального потепления? +17

01:22

Луддиты 2.0: почему борьба с нейрослопом проиграна +14

15:50

Cloud Trust vs Zero Trust: стандарты безопасности в гибридном окружении +12

07:43

Как мигрировать Gitlab под рабочей нагрузкой из одного в десять Docker‑контейнеров +12

17:00

Почему сеньоры не хотят становиться тимлидами (и правильно делают) +11

07:46

Heartbeat: как мы создали систему управления системой вместо обычных сигналов +11

14:32

Как австралийца судят за утечку судебных документов из-за нейросети +9

11:28

Где в IT зарплаты растут быстрее всего в 2026 году +9

10:52

Федерация корпоративного мессенджера: как связать независимые On-Premise-контуры и сохранить контроль над данными +9

10:52

Федерация корпоративного мессенджера: как связать независимые On-Premise-контуры и сохранить контроль над данными +9

10:00

Все, что вы не знали о киберпанке — как появился, что с ним стало и наконец — что он такое на самом деле. Часть 1 +9

12:08

Как мы научили ИИ-модель понимать документы и теперь оформляем новых сотрудников в 2 раза быстрее +8

11:45

async def или def в FastAPI: как одна строчка делает сервис в 40 раз медленнее +8

07:53

На что обратить внимание при выборе вендора системы электронного документооборота +8

06:24

Восстановление данных с нуля со сломанной пополам SD-карты памяти +233

08:03

Переделка радиоприемника «Электроника 26–01» +134

12:00

Создать правильную карту мира невозможно. Но есть много отличных неправильных +68

13:01

Чем заменить top, ps и netstat в 2026 году, и когда их лучше не трогать +67

10:48

Я перестал пользоваться самыми умными ИИ‑моделями. Программировать стало быстрее и дешевле +52

19:53

FNIRSI 2C53T — классный прибор с отвратительной зарядкой. Доделываем то, что не смог завод‑изготовитель +49

09:01

Зачем и чем протыкать бактерии? +41

11:00

Отреверсили проприетарный gRPC и выложили в опенсорс 100% совместимый аналог их сервера, потом CLI +36

08:30

Отказоустойчивость в мультиклауде: архитектура и реальные кейсы +36

15:12

Diablo II, римские стратегии и Prince of Persia: что фронтенду стоит перенять у геймдева +25

08:55

Не только PyTorch. О чём на самом деле новая книга Лоуренса Морони +25

08:00

Платформа данных на минималках. Часть 3. Вычислительный движок +25

07:00

Как у нас горели лидары в стальковше +25

05:58

Не хватает RAM для тяжелого софта на роутере? Поставьте его на мини-сервер из старого смартфона +21

10:01

OpenAI пообещали впредь вовремя рассказывать о «бедокурстве» своих нейронок +20

12:25

Бактериальные логические вентили и рибосомная память +19

07:48

«Лучшие» практики Rust, которые вас подведут. Часть 2 +16

07:00

Электрокарниз — это не профиль + мотор. А что еще? +16

07:45

Как мы делали масло — МАСЛО, КАРЛ! — для мытья рук и как оно работает +14

15:03

Диалектический кейс за искусственный интеллект для прогресса цивилизации +12

ОБСУЖДАЕМОЕ

  • Я перестал пользоваться самыми умными ИИ‑моделями. Программировать стало быстрее и дешевле +52

    • 259   94000

    Выбираем бэкенд в 2026 (PHP, Dart и C++ Drogon) +12

    • 56   11000

    Переделка радиоприемника «Электроника 26–01» +134

    • 55   17000

    FNIRSI 2C53T — классный прибор с отвратительной зарядкой. Доделываем то, что не смог завод‑изготовитель +49

    • 54   19000

    Восстановление данных с нуля со сломанной пополам SD-карты памяти +233

    • 44   17000

    Чем заменить top, ps и netstat в 2026 году, и когда их лучше не трогать +67

    • 35   84000

    70-летний пенсионер выпустил 445 книг с помощью ChatGPT. Но тут интересно не это +1

    • 34   7100

    Как я выбирал локальную модель для кодинга на 16 ГБ VRAM — и трижды менял победителя +7

    • 33   8700

    Можем ли мы быть уверены, что время действительно существует? +2

    • 29   7300

    Не хватает RAM для тяжелого софта на роутере? Поставьте его на мини-сервер из старого смартфона +21

    • 28   11000

    Создать правильную карту мира невозможно. Но есть много отличных неправильных +68

    • 24   15000

    3. Почему мы положили компьютер горизонтально и залили его жидкостью? +5

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