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

Подписка


ЛУЧШЕЕ

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

«Ошибка выжившего», или как я, проработав тренером 10 лет, с первого собеседования попал в IT +26

06:18

Авторизация в Kafka: управление изменениями, когда у тебя тысячи клиентов и миллионы RPS +18

05:26

Больше никаких правок! Или как я сдаю прототипы с первого раза +17

08:07

Раздувание таблиц в PostgreSQL: работа с vacuum и pg_repack +16

08:52

ЦИПР-2025: российский рынок взрослеет, но велосипеды изобретает по-прежнему +14

07:06

10 мифов об A/B-тестировании: как избежать распространённых заблуждений в статистическом анализе +14

09:01

Нелюбимая многими педаль перегруза Marshall Jackhammer JH-1 +11

08:02

Шум вокруг ИИ подобен парадоксу Солоу +10

05:01

PHP и Laravel дайджест новостей за май 2025 года +10

07:35

Трудности перевода: поучительные истории о работе проджекта с зарубежными клиентами +8

06:31

Заходят как-то в бар Сократ, DeepSeek и 1000 серверов +8

07:47

Подкаст «Скрамное ИТ». 404: Взрослая жизнь не найдена +7

06:00

Как разработчику написать своего K8S-оператора. Часть 1: о Kubernetes +7

07:30

Между печеньем и морковкой: удержание команды в условиях неопределенности +6

09:00

О модальных формах в Obsidian +5

08:59

Как нанимаем, грейдируем и решаем типовые задачи prompt-инженеров в Точке +5

08:13

Математики нашли совершенно новый способ поиска простых чисел +5

08:12

Ошибки ИИ, которые спасают вашу работу: как нейросети генерируют баги +5

07:31

Ремонт Nintendo Switch Lite после залития водой. Это не всегда приговор +5

07:30

Как спасти проект, если нашли баги перед релизом +5

07:49

Юра, мы всё: как Россия проиграла новую космическую гонку +186

13:01

Что же такое TPU +54

13:16

Visopsys — ОС, которую написал один человек +42

10:03

Как мы учим роботов ходить плавно, или Почему градиент градиента — это не опечатка, а ключ к безопасной робототехнике +40

11:18

Основная проблема с кадрами или на заметку HR +39

18:06

Всё, что мы узнали с юристом о запрете рекламы в запрещённых соцсетях с 1 сентября +35

11:05

Запускаем MIPI DSI экраны от смартфонов. Разработка схемы основной платы. Часть 1. Обзор решений, создаём своё +31

09:01

Жизнь и смерть Карла Коха: первый хакер на службе КГБ в поисках всемирного заговора и тайны числа 23. Часть 8 +31

08:02

Интерфейсы без экрана: как разговаривают голосовые ассистенты, когда никто не слышит +31

13:24

BA + UX: смешать, но не взбалтывать. Как мы объединили дизайн и аналитику на примере очень запутанной фичи +28

11:41

Эволюция UI за 35 лет: от GIF и Comic Sans к нейросетям и адаптивам +28

13:16

Почему Go такой странный, и ещё 8 холиварных тем про Golang +20

12:47

Я тестировщик и два месяца работал без рук. Вот, что я понял +18

09:02

Под капотом WordPress — разбираем движок и изучаем инструменты +18

10:40

Использование open source в KasperskyOS +17

09:16

Обнаружение дронов (БПЛА) с использованием ИИ и компьютерного зрения +17

11:23

Обновление контроллеров Cisco APIC.  Что же может пойти не так? +12

09:46

Как обобрать дерево в несколько потоков? +11

07:20

Китайцы разработали ИИ-платформу для разработки чипов. Что это за инструмент? +11

13:46

«IT-Планета 2025»: задачи второго этапа по PostgreSQL +10

09:05

Сервер за копейки +169

02:42

Недавно потенциальный клиент спросил, сколько стоит час моей работы +84

13:01

Цифровая чёрно-белая фотография +69

07:00

Как недовольный инженер часовые пояса придумал +63

09:04

Hello, World!“ и прощай: Почему новички сливаются из IT быстрее, чем успевают написать первую программу +55

11:06

Что на сегодня ясно про распад жира ( внутри человека ) +43

11:11

Нестыдные вопросы про телеком: как устроена опорная сеть 5G простыми словами +41

08:01

Векторный поиск внутри PostgreSQL: что умеет и где может пригодиться pgvector +40

15:14

Генерация юнит-тестов с LLM: если бы посуда мылась сама +36

09:02

Почему в бюджете ЦОДа лидирует статья «электричество» +36

07:30

Похмелье и тесты, где мужчины плакали +34

07:52

Как прошел день рождения Хабра с авторами, компаниями и партнерами +30

20:31

Плохие JOIN’ы: приемы, которые (нечаянно) кладут прод +29

10:31

Уникальная компания Disco и её система Will: работа как игра +27

09:35

Пошаговое руководство по написанию эксплойта ядра iOS +25

06:48

Штрафуем рёбра: новая логика перестроения маршрутов в 2ГИС +21

12:30

HandReader и Znaki — лучшая архитектура и самый большой набор данных для распознавания русского дактиля +19

13:34

Новые модели электронных книг 2025 года и кое-что еще. Что предлагает рынок? +16

12:59

Топ-5 нейросетей для генерации видео в 2025 году +16

14:38

Как спроектировать потокобезопасный класс в Java +15

ОБСУЖДАЕМОЕ

  • Юра, мы всё: как Россия проиграла новую космическую гонку +186

    • 462   52000

    Сервер за копейки +169

    • 200   50000

    Hello, World!“ и прощай: Почему новички сливаются из IT быстрее, чем успевают написать первую программу +55

    • 184   34000

    Почему сознание нельзя запрограммировать (критика механистических теорий сознания) +7

    • 82   1800

    Что на сегодня ясно про распад жира ( внутри человека ) +43

    • 60   7100

    Недавно потенциальный клиент спросил, сколько стоит час моей работы +84

    • 59   27000

    Цифровая чёрно-белая фотография +69

    • 52   5000

    Это база(!) -1

    • 42   4800

    Обнаружение дронов (БПЛА) с использованием ИИ и компьютерного зрения +17

    • 39   3300

    «Вайтишная» — сервис, где тебя обучают реальные специалисты, а не школы -6

    • 34   2400

    Как недовольный инженер часовые пояса придумал +63

    • 33   6400

    Как новичку выбрать компьютер для программирования -1

    • 30   4100

    C#, Кодогенерация и DDD. Часть 2 — Получаем данные и пробуем генерировать +1

    • 29   2100

    Всё, что мы узнали с юристом о запрете рекламы в запрещённых соцсетях с 1 сентября +35

    • 28   4000

    Основная проблема с кадрами или на заметку HR +39

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