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

Как сэкономить миллиард, если правильно подуть на раскаленную железку +54

08:05

Вышли 25 лет назад и изменили игровую индустрию навсегда. 5 самых важных игр 2001 года +22

09:01

Как я воскресил Canon 7D Mark II, который продавался «на запчасти» +17

05:54

«Оценка 300 часов? ИИ мне сделает за вечер!». Считаем тремя методами, и 300 — ниже плинтуса в индустрии +13

05:33

JOIN как в ORM: связи по foreign key в PostgreSQL +11

09:00

Как мы подвели Кира Булычёва и почему его книги — об украденном детстве и о том, как его сохранить другим +10

05:45

Спустя 6 лет я докопался до ядра компьютера, и там была математическая формула +9

00:21

Феномены памяти +6

08:22

История о том, как я написал компилятор Svelte на Rust +5

00:37

Обзор препринтов научных статей в области астрофизики за июнь 2026 года +5

08:00

Геометрия ОТО на Python: рисуем эргосферу, черную дыру и фотонную сферу в различных метриках +4

10:16

Как оценить стоимость ручного поиска документов в компании на 200 человек +3

09:06

Если вы думаете, что знаете, чем отличается «Expression» от «Statement», то, скорее всего, вы ошибаетесь +3

11:46

Homelab для дата инженерии из игрового ПК +2

09:57

Квадриллион параметров (1Q) для LLM. Когда нам ждать такую модель? +2

09:23

Агент изменил рабочую базу данных, хотя это было запрещено в правилах +2

07:20

Ловушка добавления АБГШ +2

11:30

Тропа хиппи: утраченный маршрут +1

09:37

Почему люди проходят курсы по нейросетям и всё равно не умеют ими пользоваться? +1

06:27

Rider и базы данных: неочевидные возможности IDE, которые экономят время +1

10:49

Фильтрация ТСПУ у серверов Таймвеб Cloud: диагностика, обход через reverse-proxy и СDN +56

09:00

Эхолокация: микрофон и фазированная решётка из колонок +45

19:23

7 месяцев вайбкодинга: как в одиночку делать то, что раньше требовало команду +36

14:05

Подробная история развития 2D-графики в PC +31

13:01

Не самый дешёвый суперстрат Cort G250 Spectrum +31

09:01

Как изобрели письменность? Часть 3. От египетских иероглифов к финикийскому алфавиту через синайские копи +31

09:01

От Dune II до Dune: Awakening: как менялась легендарная серия игр по «Дюне» +25

08:00

5 странных гаджетов 2026 года: смартфоны с E‑Ink, Linux‑раскладушка, наладонник и кое‑что еще +21

00:03

Детектор жизни +20

16:35

Нейронные сети нетрадиционного квантования +19

11:30

О микроводорослях, недостижимых идеалах и оплачиваемом веганами будущем +16

12:16

Ловушка для ума разработчика №3: почему самые надёжные инженеры остаются без поддержки +14

21:46

Тёмные паттерны: как закон в России впервые прямо запрещает манипулятивный дизайн +13

11:02

DroneCan. Анатомия +13

07:21

Папа, мне нужен пульт: как я подключил DualSense к детской машинке +10

07:19

«У вас в резюме указаны навыки ИИ. Что вы имели в виду?» Что отвечать, кроме количества потраченных токенов +10

18:19

Стохастический клеточный автомат на системе типов +9

16:14

Делаем себе сложно +9

12:33

ИИ-агент 4 месяца дежурит на наших прод-логах: 113 алертов, 2 галлюцинации и фикс за 3,5 часа +9

08:57

Двенадцать символов, двадцать один байт: как я научил голый RISC-V говорить «Привет, мир!» +9

19:49

Мой агент Ouroboros побил Codex с Claude Code на Terminal-Bench, OSWorld и CL-Bench. Он написал себя сам +80

12:35

Леопольд Ашенбреннер: Как 24-летний щегол заработал $30 млрд на инвестициях в AI (и потерял их вчера) +72

07:01

MicroBee — история маленького компьютера, сумевшего победить Apple +62

13:27

Находки в опенсорсе: мир питона за июль 2026 +46

13:01

Писать от руки полезно для мозга, и вот вам несколько советов +46

07:02

Последние из серверной: почему эпоха трушных сисадминов заканчивается (или только начинается) +44

09:01

Не все герои носят плащи. Некоторые носят патчкорды +36

07:05

Механический «диодный мост»? +34

18:10

Моя котельная +32

08:00

IaC в гибридной IT-инфраструктуре: решаем проблемы разрозненного управления с Terraform +32

06:05

Полтора месяца зависаний, ноль дампов и 44 байта нулей +32

10:35

Окраины городов и полукабины-призраки. Ищем последние рабочие таксофоны +31

07:05

Программируемые калькуляторы. Часть 4.1. «Лаборатория счетных машин доктора Вана. LOCI-2» +20

11:00

Как выбрать OCR в 2026-м: тестируем девять моделей на трех движках инференса на рукописном русском +19

11:00

Как выбрать OCR в 2026-м: тестируем девять моделей на трех движках инференса на рукописном русском +19

09:44

Боты уже составляют большую часть интернет-трафика. Почему это проблема не только ИБ +18

08:49

Следующая ИТ‑революция уже на пороге: как Physical AI меняет наше представление о роботах +18

08:33

Сбрасываем счетчик на принтере Epson с помощью ghidra-mcp +18

19:19

Уведомления на Android без Google: почему UnifiedPush через публичный ntfy у вас не работает +17

17:15

ИИ умеет придумывать идеи, но не умеет в них верить +15

ОБСУЖДАЕМОЕ

  • Леопольд Ашенбреннер: Как 24-летний щегол заработал $30 млрд на инвестициях в AI (и потерял их вчера) +72

    • 89   24000

    7 месяцев вайбкодинга: как в одиночку делать то, что раньше требовало команду +36

    • 86   20000

    Писать от руки полезно для мозга, и вот вам несколько советов +46

    • 73   16000

    Фильтрация ТСПУ у серверов Таймвеб Cloud: диагностика, обход через reverse-proxy и СDN +56

    • 70   21000

    Последние из серверной: почему эпоха трушных сисадминов заканчивается (или только начинается) +44

    • 54   29000

    Мой агент Ouroboros побил Codex с Claude Code на Terminal-Bench, OSWorld и CL-Bench. Он написал себя сам +80

    • 37   16000

    Моя котельная +32

    • 37   15000

    Эхолокация: микрофон и фазированная решётка из колонок +45

    • 34   10000

    Находки в опенсорсе: мир питона за июль 2026 +46

    • 34   11000

    Уведомления на Android без Google: почему UnifiedPush через публичный ntfy у вас не работает +17

    • 33   12000

    «Оценка 300 часов? ИИ мне сделает за вечер!». Считаем тремя методами, и 300 — ниже плинтуса в индустрии +13

    • 32   6600

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

    • 29   14000

    Селлеры плакали, кололись, но продолжали торговать на маркетплейсах +5

    • 28   5600

    Механический «диодный мост»? +34

    • 28   14000

    Чтение на выходные: «Теория каст и ролей» Алекса Крола +5

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