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

Измеритель силы хвата. Когда реально переоценил свою силу +45

09:01

Георгий Герганов, автор llama.cpp и звукового кейлогера +36

04:57

Илон Маск создал новую партию, а Цукерберг продолжает повышать ставки в битве за AI-таланты +20

12:30

Как настроить синхронизацию в Obsidian с помощью S3 +18

11:03

VPS сервер по цене пачки чипсов: обзор самых дешёвых тарифов российских хостеров +18

09:15

Программируем квадрокоптер на STM32 +16

08:00

Новое в контроллерах Bitrix Framework: фильтры и валидация +14

06:45

Интеграция Flutter Mobile SDK в ОС Аврора +13

13:01

Ходим в Интернет с отключённым IPv4 +11

11:10

Почему разработчики не делают «по уму», даже когда знают как +11

08:15

Универсальное языковое приложение. Часть 1: по-фразовый плеер с параллельными текстами и редактор субтитров +9

12:03

Современные подходы «из текста в SQL»: RAG, CoT и другие хитрости +8

12:15

Введение в WebRTC +7

12:11

Квадрат и косые линии: логотипы Антона Станковского +7

12:00

Как Android-разработчик в iOS погружался: мой опыт внедрения Kotlin Multiplatform +7

11:43

Java Digest # 26 +6

10:01

Нейроуловки для изучения английского: как запоминать слова без зубрежки +6

08:41

Странная физика, которая дала жизнь искусственному интеллекту +6

06:58

Портативное железо 2025: подборка новых мини-ноутбуков для работы и отдыха +6

05:15

Автоматизация документации: MkDocs Material + GitLab CI/CD + Битрикс +6

11:30

Я 10 лет искал причину головной боли, оказалось — чипсы +154

09:01

Программирование как разработка теорий: почему senior-разработчики стали ценны как никогда? +106

20:06

VHS-Decode — новый метод оцифровки видео +86

11:15

Мы — не семья: как компании заставляют тебя работать за идею и спасибо +38

19:05

Компьютерные сети для начинающих +33

13:01

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

08:12

Плотнее, быстрее, дешевле: керамические накопители Cerabyte бросают вызов LTO +30

08:00

От дефицита к ажиотажу: почему DDR4 снова в центре внимания… по тройной цене +22

13:49

Процессор на коленке ч.4. Конвейер +20

06:48

EngEasy.ru — моё приложение английского. Идея, процесс, технологии +19

06:15

Внедрение зависимостей в PHP: от основ до фреймворков +17

20:07

Оптимизация языковой модели Mamba для выполнения на CPU +14

15:00

Почему все ломается, или Зачем менеджеру в ИТ софт-скилы +13

14:05

Вы могли и не знать. Какие проекты делал Хидэо Кодзима помимо Metal Gear Solid и Death Stranding +11

16:43

В ReactOS заключен контракт для улучшения набора тестов +10

13:04

Изобретатель механического светофора: история Гаррета Моргана +10

11:13

Docker + Neovim: поднимаем конфиг на любом сервере и не засоряем систему +8

12:08

Деревья умеют выделять «дождеобразующие» вещества +7

10:40

Как мы подняли современный портал документации из россыпи .md файлов: пошаговое руководство по MkDocs + Material +7

04:15

Собираем комплекс для качественного офлайн-перевода текстов, работающий на самом обычном игровом компьютере +7

09:01

Первые анекдоты о программистах: как выглядел юмор айтишников в 1996-1998 годах? +134

12:55

Лучшие игры легендарной машины: 45 лет назад на свет появилась линейка компьютеров ZX +55

09:56

Датчик утечки воды и не только, просто и почти даром +55

13:01

GPS в городских джунглях: почему навигатор «прыгает» между небоскрёбами +46

14:05

Пишем 3D-игру для ретро-устройств весом в 600Кб… +39

09:44

Как я почти продал ник за $9500 в Telegram +35

08:04

Deepin 25: китайский дистрибутив Linux с ИИ и обновленным DDE +25

10:16

Как сделать любую поверхность сенсорной +23

08:05

О мягких и жёстких ссылках в Linux +22

00:00

Оптимизация индексов базы данных: проблемы, решения, практические рекомендации +22

07:34

Продаешь крипту через P2P? Налоговая может потребовать 6% со всего оборота +16

08:02

Лучшие нейросети для создания игр +15

13:50

PHP и Laravel дайджест новостей за июнь 2025 года +12

12:00

История создания процессора ARM: от амбициозного проекта до сердца цифровой революции +12

08:00

Алгоритм релакса: как пазлы помогают сконцентрироваться на сложных задачах и не выгореть +12

09:16

SOLID, DRY, KISS, YAGNI и др. принципы разработки, пугающие новичка в IT +11

07:00

Покажи свой стартап/пет-проект (июль) +9

06:38

Система позиционирования и фиксации дрона на посадочном столе +8

10:35

Часть 2: Создание пользовательского интерфейса на дисплее Guition с ESPHome и библиотекой LVGL +7

09:56

Скриншот-тестирование фронтенда: руководство по применению в 2025 году +6

ОБСУЖДАЕМОЕ

  • Тебе не поступить на программиста. Всё кончено -14

    • 401   103000

    Я 10 лет искал причину головной боли, оказалось — чипсы +154

    • 328   26000

    Первые анекдоты о программистах: как выглядел юмор айтишников в 1996-1998 годах? +134

    • 184   50000

    Датчик утечки воды и не только, просто и почти даром +55

    • 98   25000

    VHS-Decode — новый метод оцифровки видео +88

    • 90   7600

    От PHP к Zig: как я избавился от костылей в биллинг-системе -1

    • 83   5000

    Лучшие игры легендарной машины: 45 лет назад на свет появилась линейка компьютеров ZX +55

    • 78   13000

    Метафизика мнимой единицы -7

    • 73   3500

    Программирование как разработка теорий: почему senior-разработчики стали ценны как никогда? +106

    • 63   19000

    Покажи свой стартап/пет-проект (июль) +9

    • 40   2700

    Как я почти продал ник за $9500 в Telegram +35

    • 39   9200

    Компьютерные сети для начинающих +35

    • 36   13000

    Мы — не семья: как компании заставляют тебя работать за идею и спасибо +38

    • 34   7400

    Почему ваш ИИ превращается в ваше эхо: Гипотеза архитектурного слияния и как с этим бороться +5

    • 33   837

    EngEasy.ru — моё приложение английского. Идея, процесс, технологии +19

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