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

Сказ о том, как нейросеть занялась reward hacking прямо у меня на кухне +16

07:46

Как я перешёл с React на Angular и не пожалел +13

08:48

Я обнаружил крупномасштабное распространение вирусов в GitHub +11

07:57

КД по ГОСТ за один клик +10

07:05

Позвонить бесплатно: история взлома аналоговой телефонии. Часть 1 +10

07:00

Как мы научились видеть иерархию корутин в Android‑приложении: Coroutine Tracer в библиотеке Demeter +10

07:00

Когда нашим дорогим инженерам сильно надоело 5 раз проверять документацию за подрядчиками +10

07:01

Телеметрия для сети ресторанов: как в «Жар Пицце» контролируют холодильники и инженерные системы +9

06:31

Несколько собак и другие наши заблуждения об адресах электронной почты +8

03:20

Погружение в многозадачность Python: процессы, потоки, GIL и асинхронность +7

07:43

Новые серверы в облаке mClouds: обзор Dell R7725 с 64-х ядерными AMD EPYC 9555 +6

07:01

Релиз Linux 7.1: улучшенное управление питанием, новый драйвер NTFS и оптимизация для видеокарт +6

05:00

Делаю игру, где бактерии живут в чашке +6

09:01

Безымянный китайский телекастер +5

07:54

Я собрал свой мессенджер по вечерам после работы +5

07:00

Целая прорва связных списков, чтобы выучить Rust +5

09:53

Заглядываем внутрь ESE: от B+ деревьев до артефактов Windows +4

09:00

Линеаризация. Увеличиваем мощность А/Б тестов с метрикой отношения +4

07:42

Как попасть в ответы ChatGPT: технический разбор механики цитирования и актуальный гайд по GEO на июнь 2026 +4

07:30

Анатомия хардварных факапов: 10 типовых причин, почему проваливаются проекты +4

11:00

Новые правила Хабра. Версия от 2026 +187

07:01

Звуки музыки советских ПЭВМ +62

14:05

Почему мы до сих пор неправильно пишем физические движки и 3D-графику +59

07:52

YaFF в опенсорсе: как и зачем мы сделали zero‑copy представление для Protobuf +48

12:01

Интервью автора легендарной Elite Йена Белла (Эксклюзив для Хабра) +43

08:00

История виртуализации от chroot и jails до современных гипервизоров +31

07:12

Почему советы «как улучшить резюме» в IT в 2026 — это издевательство (и что делать вместо этого) +31

14:17

Как «Союз» считал орбиту шестерёнками: внутри навигационного компьютера «Глобус» +30

13:01

Docker Fundamentals: теория и базовая эксплуатация +27

22:46

Адаптация в команде есть? А если найду? +23

14:38

Условная агрегация в SQL: ускоряем отчеты, избавляясь от лишних JOIN-ов и подзапросов +22

09:01

Как выбрать самый безопасный мессенджер +18

13:17

Как незаметная indirect-зависимость в Go дописала ручку в ваш HTTP-сервер +16

12:39

Как в 1915 году взялись собирать базу данных на всю страну без единого компьютера +16

08:00

Код в эпоху AI: как перестать бороться за качество и начать контролировать деградацию +15

07:05

Zynq 7000. Переносим I²C Master Controller.  Linux + buildroot + kernel driver +15

12:37

Лонсдейлитовая кромка. Перспективы искусственного расширения шкалы Мооса. Guest Post +14

11:29

Серьёзная ретро-консоль за адекватные деньги: разбираем по винтикам DVTech And-001 +14

13:05

Оптический компьютер из телефона и зеркала: считаем нейросеть светом +13

09:07

Пора редактировать людей +13

13:01

Как я написал «Обратную змейку» на чистом Canvas +65

12:06

Реальные профессии будущего, а не «промпт-инженер» и про то, как мировой средний класс исчезает +59

09:01

Вы не знаете HTML. Мои вопросы об HTML с ответами +56

07:50

Claude Code убрал из моей работы рутину и почему я этому не долго радовался +55

07:00

Рояль на даче: использую ПЛК на Linux как real-time-синтезатор фортепиано +38

12:00

Железный дайджест за май: тесты B300, GPU от Alibaba и PCIe 8.0 +37

07:05

1 Вольт, как эталон: как, когда, каким образом +35

13:06

Как работает передача данных в радиоэфире: прогоняем картинки с котиками через ресурсную сетку +34

08:00

Как я пытался создать шедевр в Qwen, Luma и Pika, и что из этого вышло +30

07:02

О конференции OpenTalks.AI 2026: мои впечатления и 5 полезных докладов +30

07:01

MCP vs CLI + Skill: что выгоднее для ИИ‑агента при работе с внутренними API +27

15:53

ID, token, UUID и slug: в чём разница и почему их нельзя мешать +24

14:27

Banned Book Library +24

08:10

Время нанимать overqualified +23

11:14

QA на уровне платформы: как мы строили систему качества +21

08:26

IP подов кончились, а обычные решения не подошли: как мы расширили сеть на проде, не пересоздавая кластер (кейс + гайд) +17

12:02

PostgreSQL не тормозит. Почему мы перестали масштабировать базу данных и начали масштабировать архитектуру +16

09:43

Человек, укравший бесконечность: подлинная история Георга Кантора +16

07:00

Как я проектировал космический ковчег, который не ломает физику +16

06:41

Как ораклист сертификацию по Postgres сдавал +16

ОБСУЖДАЕМОЕ

  • Новые правила Хабра. Версия от 2026 +187

    • 314   19000

    Реальные профессии будущего, а не «промпт-инженер» и про то, как мировой средний класс исчезает +59

    • 197   32000

    Claude Code убрал из моей работы рутину и почему я этому не долго радовался +55

    • 71   13000

    Почему советы «как улучшить резюме» в IT в 2026 — это издевательство (и что делать вместо этого) +31

    • 60   11000

    Цена одного канала видеонаблюдения на нейронных сетях +3

    • 58   5700

    Generic Repository обещал три вещи — не сдержал ни одной и забрал доменную модель +5

    • 48   11000

    Как я проектировал космический ковчег, который не ломает физику +16

    • 45   7200

    Парадокс Open-Source: Единственный способ победить корпорации — раздать свой код бесплатно +9

    • 40   8200

    OS Personium: инженерный подход к психологии +5

    • 38   6000

    ЦОДам в Москве отказывают в сети, они вынуждены строить электростанции +4

    • 31   7700

    Звуки музыки советских ПЭВМ +62

    • 31   11000

    Время нанимать overqualified +23

    • 30   9400

    Как я написал «Обратную змейку» на чистом Canvas +65

    • 27   16000

    Я год не писал код руками. Но я не вайбкодер — и это две разные профессии +9

    • 26   9600

    Как я перестал исправлять ИИ код и начал проектировать под него архитектуру +9

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