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

GigaChat 3.5 — меньше, быстрее, сильнее +46

08:00

6 pro-фишек FluxCD. Выжимаем все соки из GitOps +32

08:55

Готовы проверить свои знания в AI и ML? Попробуйте решить кроссворд и выиграть мерч Selectel +29

07:00

Профессия «погоняла» теряет смысл: 80% менеджеров пойдут лесом +20

07:03

Почему алмаз твердый, но хрупкий +17

11:56

Как сделать технические интервью предсказуемее: опыт внутренней школы Островка +14

10:45

Важные языки. Часть 3. Оберон +14

06:13

YouTube 17-го века +14

08:00

От wow-эффекта и быстрых побед вайбкодинга к проектированию архитектуры и формированию полноценной AI-driven команды +13

07:04

Как проект из ШАДа попал в Spotlight статей на конференции ICML 2026 +12

12:08

Автоматическая трассировка вместо ручной: что реально нового в Delta Design 4.2 +11

04:50

Физическая память +11

13:01

Как устроен двигатель внутреннего сгорания +10

12:00

От полной выгрузки к S3 и PostgreSQL: как мы доставляем гигабайты данных в память подов +10

11:05

Панорамный DOOM 1.1 на трёх экранах: повторяем легенду под MS-DOS +10

09:30

Iron Core. Часть 3: Бессмертная командная строка +10

09:05

Если я в чем‑то и опытнее всех, так это в активном поиске работы +10

09:01

Борис Чёрный: уроженец Одессы и создатель Claude Code +10

07:26

LumaBloom — DIY‑цветок, который автоматически регулирует яркость мониторов +10

10:38

Недельный геймдев: #285 — 5 июля, 2026 +9

10:53

Как троттлинг процессора ломает видеокарту через PCIe: хроники абсурда в сервисном центре DNS +63

13:30

Тегеран, 1978: Диско бессмертно +58

09:01

Вот бы вернуть те старые неказистые форумы +36

06:40

Старый трансивер эфир не испортит. Часть 3. Умощняемся +35

17:59

Слишком умный, чтобы размножиться +34

13:01

ЭВМ в народном хозяйстве: лампы, кибернетика, «Урал-1» +34

09:00

ИИ добрался до раритетов: цены на память DDR2 взлетели на 60% за три месяца +33

05:52

Книга среднего уровня — 1 +21

13:10

Съездили к ByteDance и Z.ai: роботы по паспорту, серверные карты на рынке и восемь дней внутри китайского AI +20

11:09

Галлюцинации: почему LLM «тупеют» от «умных» промптов +15

15:38

«Бот, теперь ты коммунист!» — почему бизнес под управлением ИИ проваливается, а компании не хотят в это верить? +14

16:07

Age of Mythology в 2026 году: от мифов Древней Греции до ацтеков — почему стратегия все еще жива +11

21:17

Claude Desktop на Linux, через прокси +10

08:47

Действительно богатые сообщения в Telegram-ботах: разбираем Rich Messages +10

12:05

Гибель богов. Fable и ещё 10 LLM реорганизуют код. Сравнение +9

08:31

Чума оказалась очень древней. Что произошло в Сибири 5 500 лет назад +9

17:59

Как мы научили большую языковую модель говорить на карачаево-балкарском +8

13:00

Unreal Engine 6 на Verse — это что-то крышесносное +8

17:03

Ghidra — фреймворк АНБ для реверс-инжиниринга ПО +7

15:37

«Мы сделали это»: Как мы готовили доклад в тандеме через пол-России и что поняли только после +7

08:00

«Иностранные холодные кошельки» — или нами когда-нибудь перестанут управлять идиоты? +91

23:14

Taskbar с живыми превью работающих приложений (олдскул на NET11) +44

13:19

Носители данных — «игра на выбывание» (2026.07) +35

08:15

Сэнди Петерсен и Джон Кармак: как Quake сломал id Software +34

13:02

Самодельная электрогитара: тонируем деку и подгоняем к ней гриф +32

17:37

Используем старый Mikrotik как сигнализацию +31

08:30

5 новых одноплатников лета 2026 года: x86, Snapdragon и сменные процессоры +31

09:01

«Из ниоткуда в Грецию» и похищенный врач: что стояло за волной сообщений о странных дирижаблях в США 1890-х годов? +29

09:05

Пока все ждут GTA. Вспоминаем, что ещё делала Rockstar и удивляемся некоторым наименованиям +27

10:03

Телефон из 1999 года: Alcatel One Touch Pocket. Что внутри? +24

18:05

Игра проигравшего +20

13:05

Подземный гигант: зачем Швейцария строит самую мощную батарею в мире +19

11:50

USB-ключ для ввода TOTP-кодов и сохранённого пароля +16

12:55

Различие между научной гипотезой, теорией и законом +15

09:16

Нужен ли здесь `useEffect`? 12 сценариев из React-код-ревью — от производного состояния до React 19.2 +14

14:07

«Уэбб» обнаружил новый сюрприз в ранней Вселенной: зрелое скопление галактик +13

08:27

От игры за $999 до симулятора автобуса: самые странные проекты в истории Steam +13

18:53

Как я обучил русский RAG‑сплиттер, который режет документы по индексам, а не по тексту +12

16:52

Переоценённый король +12

17:04

Иллюзия безопасности или как ваши сотрудники прямо сейчас обучают конкурентов +11

ОБСУЖДАЕМОЕ

  • Как троттлинг процессора ломает видеокарту через PCIe: хроники абсурда в сервисном центре DNS +63

    • 152   21000

    Тегеран, 1978: Диско бессмертно +58

    • 143   17000

    «Иностранные холодные кошельки» — или нами когда-нибудь перестанут управлять идиоты? +91

    • 135   26000

    Слишком умный, чтобы размножиться +34

    • 112   25000

    Хватит винить HR: почему «плохие рекрутёры» — самый удобный, но неверный ответ на кризис найма +4

    • 50   7400

    Подземный гигант: зачем Швейцария строит самую мощную батарею в мире +19

    • 49   13000

    Taskbar с живыми превью работающих приложений (олдскул на NET11) +44

    • 46   17000

    Игра проигравшего +20

    • 45   13000

    Профессия «погоняла» теряет смысл: 80% менеджеров пойдут лесом +20

    • 42   12000

    Готовы проверить свои знания в AI и ML? Попробуйте решить кроссворд и выиграть мерч Selectel +29

    • 38   5900

    Переоценённый король +12

    • 37   11000

    В чем смысл жизни с точки зрения термодинамики? -4

    • 33   10000

    Используем старый Mikrotik как сигнализацию +31

    • 29   20000

    Вот бы вернуть те старые неказистые форумы +36

    • 28   13000

    Носители данных — «игра на выбывание» (2026.07) +35

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