• Главная
  • Контакты
Подписаться:
  • Twitter
  • Facebook
  • RSS
  • VK
  • PushAll

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

Подписка


ЛУЧШЕЕ

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

Откуда у Xiaomi так много разных устройств? +24

01:28

Самоорганизация неприятностей +12

08:25

ООП для кота – моделируем кота через классы +11

04:41

Генератор синусоиды из LC-контура и отрицательного сопротивления +11

04:50

О типах отрицательных сопротивлений — и как они используются в генераторах сигналов +9

06:37

Курсы по тестированию — развод, маркетинг и пустышки +6

03:28

Технологии изобилия, общество дефицита: куда свернуло будущее? +6

07:02

Четыре ошибки при работе с диаграммой Ганта и как их можно избежать +4

09:31

В поисках хорошего стиля. Часть 2. Пишем свой линтер на Go для golangci-lint +3

09:01

Оптимизация Spark-приложений: шаг за шагом от базовых техник до продвинутых приёмов +3

08:40

Шестидесятилетний заключённый и лабораторная крыса. F# на Godot. Часть 5. Ошибки и исключения +3

07:50

Microsoft подтвердила проблемы с обновлением Windows 11 24H2: WSUS снова в ударе +3

07:16

Как построить надежную архитектуру B2B-системы на основе 1С +3

07:07

Моя попытка №2. Как мы тестировали совместимость платформы контейнеризации с Astra Linux +3

04:26

Токсы и как с ними работать. Памятка руководителю +3

04:15

Саммари книги AI Value Creators, глава 1 +3

09:20

Как использовать японские подходы в IT. Часть 5: в плену процесса +2

09:09

Почему мы делаем собственное объектное хранилище в MWS +2

09:05

Проект «Мультиключ». Эмулятор ключей от домофона на ESP8266 +2

08:34

Исследование SETI выявило необъяснимые импульсы от далеких звезд +2

13:00

Как мы под Новый Год загрузили в PostgreSQL петабайт данных и что из этого вышло +74

21:18

Любителям x86-64 assembler посвящается: DIY волокна в C++ +73

13:01

Веб-разработка на ванильном HTML, CSS и JavaScript +48

10:51

За полчаса установил DeepSeek 1.5B, пока вы искали GPT подешевле +44

08:23

MLечный путь 2025 — знания, опыт, коммьюнити. Как это было? +40

15:01

Как отстроить гитару — акустическую или электро +33

06:00

Сделали copilot-сервис для техподдержки и делимся секретами RAG c глубоким пониманием контекста +32

06:00

Альтернативы свинцовому аккумулятору ИБП +29

13:31

Add-on pack из 90-х: Microsoft 95 Plus! для Windows +24

09:01

Jellyfin Web на своём сервере. Фронтенд для медиастриминга +24

07:18

Этот крошечный винт отвечает за будущее гуманоидных роботов +24

13:36

Разбираем древо ArangoDB «по веточкам». Подробный гайд по графовой БД +23

07:00

Автоматизация трехуровневой квартиры: хочу лучше, чем в Дубае +22

08:00

Распределённый инференс и шардирование LLM. Часть 2: скрипт vLLM, Ray Serve для вывода API и настройка KubeRay Cluster +20

13:16

Как декомпозиция повышает точность распознавания текста: опыт с фотографиями СТС +18

10:46

Ортодоксальный косплеер решает задачу Перельмана про демографию, проезжая мимо Вудстока +17

09:00

Terraform уже не тот? Как Pulumi меняет правила игры в Infrastructure as Code +17

09:00

Terraform уже не тот? Как Pulumi меняет правила игры в Infrastructure as Code +17

08:07

IQ — во многом псевдонаучный обман +17

08:05

Объяснение графических процессоров для тех, кто привык работать с ЦП +17

05:26

One-shot промптинг. Как я начал вайбкодить в 10? раз быстрее +95

08:05

Самодельная паяльная станция с цифровой индикацией температуры на жесткой логике +68

13:00

Массовые увольнения в российском IT: что на самом деле происходит в компаниях — взгляд CEO +65

08:34

Лабиринты текста как игровая механика, или как неэкранизируемая литература становится источником геймдизайна +52

08:00

Всё везде и сразу +46

13:01

Введение в RawTherapee +40

06:54

Picodata: вторая жизнь in-memory баз данных +36

05:15

Как я разработал расширение для браузера за 3 дня — и получил первого платного пользователя уже на следующий день +31

09:34

Криптография эпохи Ренессанса: классика не стареет +29

07:58

Я нашёл огромную дыру в дейтинг-приложении, а разработчики попытались её скрыть +28

14:45

Переходим от legacy к построению Feature Store +27

09:01

ЦОД 2050: три реалистичные концепции развития дата-центров +26

14:12

Как я сменил лопату на клавиатуру: мой путь в IT после 30 +23

10:57

Вселенная дистрибутивов Linux: От Ubuntu до Arch, от Mint до Fedora – подробный гид по выбору +22

09:18

Распродажа в издательстве «Питер» +20

06:09

Left Shift Testing: как выстроить процесс, чтобы тесты реально помогали +20

11:41

Зрение и его коррекция — не то, чем кажется +19

07:01

Финансовый учет: всё и немного больше про проводки +19

07:00

LLM as a Judge: опыт оптимизации генератора описаний Pull Request +18

15:14

История развития языковых моделей: ч. 2, от ChatGPT до рассуждающего режима +15

ОБСУЖДАЕМОЕ

  • Массовые увольнения в российском IT: что на самом деле происходит в компаниях — взгляд CEO +65

    • 488   105000

    Личный VPN: юзер ликует, VLESS смеётся, а РКН плачет -8

    • 121   71000

    ООП или не ООП — вот в чём ревью +4

    • 90   2200

    Альтернативы свинцовому аккумулятору ИБП +27

    • 85   8400

    Почему найм в ИТ теперь выглядит именно так +4

    • 82   28000

    За полчаса установил DeepSeek 1.5B, пока вы искали GPT подешевле +44

    • 73   26000

    Интервью про ИИ, которое меня выбесило +15

    • 72   5000

    Самодельная паяльная станция с цифровой индикацией температуры на жесткой логике +68

    • 66   6400

    One-shot промптинг. Как я начал вайбкодить в 10? раз быстрее +95

    • 65   28000

    Шесть лет на диване: мои выводы об удалённой работе +1

    • 60   28000

    Этот крошечный винт отвечает за будущее гуманоидных роботов +24

    • 57   6900

    Зрение и его коррекция — не то, чем кажется +19

    • 54   14000

    Вселенная дистрибутивов Linux: От Ubuntu до Arch, от Mint до Fedora – подробный гид по выбору +22

    • 36   12000

    Почему «Agile» и особенно Scrum ужасны +7

    • 36   5900

    IQ — во многом псевдонаучный обман +17

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