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

Подписка


ЛУЧШЕЕ

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

Загадочный «Блок №20» +60

06:55

Я выкачал 1 000 лучших статей Хабра за год, чтобы понять, почему меня так мало плюсуют +37

06:42

Что стало с «убийцами 1С»? +24

07:01

Фишки кастдева: личный опыт +22

12:14

Таск-трекер, Петрович и три пачки сигарет. История одной цифровизации +18

09:53

Три стадии развития коммуникации с клиентом в ИТ +18

08:00

Можно ли собрать сервер из игровых комплектующих +18

13:01

Gravity Defied: стик-человечек на мотоцикле +17

07:05

Питание пульта ДУ от нестандартных источников: индукционное и не только +17

07:00

ИТ-шаманизм — когда айтишники старой волны замыкают на себя как можно больше процессов, чтобы их не уволили +17

07:32

Студенты против ИИ-агентов на фоне падения прибыли ИТ-рынка на 34%: единственный способ стать востребованным инженером +14

12:15

Air gap-кластеры Kubernetes: сеть закрыта, но не безопасна +13

12:13

Краткий обзор фейкового планшета: что нового в 2026-м году +13

06:10

Свой CAM для фрезеровки плат: Windows 7, станок без API и карта высот самой фрезой +11

09:12

Gemini получила доступ в интернет и атаковала системы трех реальных компаний +10

07:55

Тестируем работу WEB-proxy для Telegram +10

06:43

Китайский гигант в мире мобильных игр: история NetEase +10

10:08

Российские ИБП в 2026 году: как читать реестр и где ломается замена APC +9

08:00

Осознанное возведение барьеров и сокращение взаимодействия между командами +9

09:49

10 000 вентилей NAND в реальном времени: как устроен симулятор в нашей игре на Rust +8

11:54

Электронный микроскоп — штука, которая позволяет увидеть атомы +111

05:46

Как меня сократили из крупной IT‑компании и через 3 месяца я стал зарабатывать больше, чем на прошлой работе +77

05:36

Почему автобус никогда не приходит вовремя, или Теорема о том, что вам не повезло +61

07:51

Что полезно знать про процедуру увольнения по соглашению сторон +59

06:25

«Инцидент в Сасово» как зеркало современного капитализма +56

10:32

PaperKey — современная замена пароля +52

08:00

Ваш смартфон разговаривает сам с собой. Введение в UART, I2C и SPI +40

07:03

И восстали люди из пепла ядрёного нейрослопа +39

07:01

Как работает акустическая камера, которая показывает окружающие звуки +39

13:01

Кто стоит за бэкдорами в криптокошельках Ledger? +38

07:57

Один профессор, один калькулятор и 475 миллионов долларов, которые Intel пришлось списать +33

09:01

Милорд, серверное железо пожрал ИИ. Арендуем Bare Metal +31

20:55

Нужно больше инстансов, Милорд +27

07:05

Zynq 7 020 + AD9361. Часть 1. Вводная +20

08:15

От толмачей до локальных нейросетей: как я собрал приложение для перевода книг +17

13:50

Дребезг цифрового сигнала: почему инвертор ведет себя как усилитель +16

13:00

Странные олдскульные технологии, которые так и не взлетели, часть 5 +13

19:10

Миллион ферритовых колец ради 128 КБ: разбираем память компьютера Spacelab 1980 года +12

13:30

Прежде чем работать с AIDL: разбираемся, как устроен IDL +12

08:00

PromptBeats: музыка из текста прямо в браузере +11

13:01

Компьютер в кармане: вспоминаем легендарный Sony CLIE PEG-UX50 +56

08:05

Раньше были основой, а потом пропали без следа. Какие мобильные ОС мы потеряли +55

09:01

Разбор отличий между клавиатурами под Windows и Mac +52

09:04

Учим английский или любой другой иностранный язык с Claude Code: личный репетитор за 5 минут +38

16:02

Звёздные хороводы в галактике Hen 2–10 +27

10:30

Идеи Тома Вуджека об инженерном творчестве +26

08:00

Орбитальная свалка: как человечество рискует закрыть себе дорогу в космос +25

14:30

Hotreload в Rust +22

12:25

Пьеса про дежурство с AIOps‑агентом. Внутри 340 алертов, три ошибки и кнопка «Отмена» +18

15:30

Почти выбрались из постапокалипсиса: расцвет НКР и ядерный удар в лоре Fallout +16

13:20

J. W. — мечтатель, неудачник, законодатель моды +16

09:20

YPtun — один клиент вместо десятка или как мы собрали кучу протоколов в одном месте +13

11:08

ИИ в работе: воркслоп и как его избежать +12

07:47

Сверка таблиц в PostgreSQL, или О том, нужны ли для этого специальные утилиты +12

21:28

Замена Lens, которую целиком написала модель: что получилось и где мы проигрываем +10

06:31

Хронология языков программирования — и открытый редактор хронологий +9

15:30

SQL, NoSQL, NewSQL, Distributed SQL: как читать архитектуру СУБД +8

13:18

Методология оптимизации игр, или как 3 дня работы над тестовым стендом дало больше FPS, чем месяц написания кода +7

12:55

Возвращение в прошлое, которого у нас ещё не было +7

18:50

Приключения вайбкодера в Ворде, или Как две нейронки не осилили простенькую задачку +6

ОБСУЖДАЕМОЕ

  • «Инцидент в Сасово» как зеркало современного капитализма +56

    • 550   76000

    Как мы горим +9

    • 175   20000

    PaperKey — современная замена пароля +52

    • 124   76000

    Как меня сократили из крупной IT‑компании и через 3 месяца я стал зарабатывать больше, чем на прошлой работе +77

    • 119   22000

    Компьютер в кармане: вспоминаем легендарный Sony CLIE PEG-UX50 +56

    • 81   15000

    Инженерный штраф: как зарабатывать, оставаясь инженером +6

    • 62   14000

    Учим английский или любой другой иностранный язык с Claude Code: личный репетитор за 5 минут +38

    • 48   60000

    Раньше были основой, а потом пропали без следа. Какие мобильные ОС мы потеряли +55

    • 48   14000

    Что стало с «убийцами 1С»? +24

    • 46   8700

    ИТ-шаманизм — когда айтишники старой волны замыкают на себя как можно больше процессов, чтобы их не уволили +17

    • 42   5200

    И восстали люди из пепла ядрёного нейрослопа +39

    • 37   9700

    Электронный микроскоп — штука, которая позволяет увидеть атомы +111

    • 36   13000

    Почему автобус никогда не приходит вовремя, или Теорема о том, что вам не повезло +61

    • 36   13000

    Если вы дочитаете эту статью, вы уже сопротивляетесь +7

    • 32   3800

    Спросите Итана: Если существует разумная внеземная жизнь, сможем ли мы вступить в контакт? +1

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