Здесь про это не сказано ровным счётом ничего. В ходе "расследования" скачивал различные клиенты. Kate mobile может отправить такое сообщение, но как-то раз я увидел его "голым". Скажем так, как файл с расширением. С этого момента начал рыть документацию в этом месте и мне кажется, что message.send и docs связаны. Как бы на практике только отправить такое сообщение? P. 's. То, что я смог отрыть : там все засунули в документы. В полученном URL методом docs.getUploadServer добавляется один параметр, ... не скажу сейчас какой (не помню, кажется, type) равный audio_msg Update: С помощью сниффинга трафика Kate смог отрыть, что загружается аудио-сообщение путем передачи СКРЫТОГО параметра. Пример: https://api.vk.com/method/docs.getUploadServer?access_token=your_token&type=audio_message&v=5.38 Теперь новая стадия вопроса: Как передать файл голосовой в формате multipart/form-data Update: Ответ с Tostera (там тоже активчик по такому вопросу): Пытался реализовать то же самое, но на питоне, в итоге перепробовав все пришел к выводу, что камнем преткновения становится UUID который присутствует в заголовке "boundary=", а так-же передается сразу перед тем как улетит файл. Подобной дупликации нет при загрузке других документов, там UUID передается однажды. [Скриншот перехваченого пакета с официального приложения во время отправки аудиосообщения] Кстати, если это важно - из пакета я достал формат файла: Kate: .3gp Официальный клиент: .ogg/.mp3
Ответ Троекратное ура! Ответ найден! Итак, для того, чтобы загрузить аудио-сообщение на сервера VK, надо: Получаем ссылку для загрузки на сервер. Обратите внимание на параметр: type=audio_message https://api.vk.com/method/docs.getUploadServer?access_token=your_token&type=audio_message&v=5.38 В ответ нам придет вот такой JSON: {"response":{"upload_url":"https:\/\/pu.vk.com\/c806630\/upload.php?act=add_doc&mid=151665536&aid=0&gid=0&type=audio_message&hash=a171e6bf246f389425f23a62ba4165d4&rhash=6e0e444008a2186f484af9f02c2ac49f&api=1"}} Забираем из него URL для загрузки: https://pu.vk.com/c806630/upload.php?act=add_doc&mid=151665536&aid=0&gid=0&type=audio_message&hash=a171e6bf246f389425f23a62ba4165d4&rhash=6e0e444008a2186f484af9f02c2ac49f&api=1 Заимствуем код отсюда: http://www.codejava.net/java-se/networking/upload-files-by-sending-multipart-request-programmatically Поясню: здесь мы берем код, который поможет загрузить нам файл на сервера VK в формате multipart/form-data, который VK и требует. Возможные форматы файлов: mp3 (Использует официальный клиент), 3gp (использует Kate) В классе MultipartFileUploader добавляем поле "file", как того требует VK: Передайте файл на адрес upload_url, полученный в предыдущем пункте, сформировав POST-запрос с полем file. Это поле должно содержать файл в формате multipart/form-data. multipart.addFilePart("file", uploadFile1) Выполняем запрос, ПРОФИТ! Получаем вот такой JSON в ответ: "file":"123456|65421|0|415317|20ee43693a|jpg|81897|Document.jpg|6798bc4fe908cc476cb1c13ce844a985|105d984a920fe7ee9042681bb6d30fbd|m_20ee43693a||m:130x72,s:100x55,x:604x331,y:807x442,o:748x409" Далее сохраняем наш документ на сервере VK: https://api.vk.com/method/docs.save?file=ЗДЕСЬ_ПОЛУЧЕННЫЙ_ПАРАМЕТР_ФАЙЛ&access_token=your_token&v=5.60
Данные owner_id и media_id мы получаем из предыдущего пункта И благополучно получаем в лс аудио-сообщение. Спасибо за внимание! P Кстати, версия 5.60 тоже работает (проверил), поэтому можно в запросах использовать и её.
Update: Тут возник новый вопрос - как ответить аудио-сообщением юзеру в сообщениях сообщества? Отвечаем-с...
Для группы: Первым делом открываем доступ администраторам к документам группы ("ограниченный" режим) Потом заходим в настройки сообщества и там берем ключ сообщества Дальше делаем такой запрос на загрузку: https://api.vk.com/method/docs.getWallUploadServer?group_id=&access_token=&v=5.60 Загружаем файл так, как я показывал выше и сохраняем таким же образом Отправляем сообщение юзеру от имени сообщества вот так: https://api.vk.com/method/messages.send?user_id=&attachment=doc_&access_token=&v=5.60 Профит!
Для публичной страницы: Казалось бы, все так просто будет и публичной страницей, но не тут-то было. Так как для пабликов не предусмотрены голосовые сообщения и Вам будет отдавать ошибку авторизации,используем небольшой лайфхак.. Переводим наш паблик в группу и обязательно получаем новый ключ уже группы с доступом к документам и аудио Снова переводим группу в паблик В меню Управление сообществом -> Настройки -> Разделы ставим галочки на пунктах: "Ссылки" и "Аудиозаписи" Благополучно используем все, что я написал для группы
Ну и немножко веселья: В комменты/на стену/в обсуждения (оказывается), можно отправить АУДИО-СООБЩЕНИЕ (вчитайтесь еще раз, пожалуйста). Делается весьма просто. Обычным запросом на отправку в комменты/на стену/в обсуждения. В аттаче прикрепляем наше аудио (выглядит действительно как аудио-сообщение, что вызвало вой удивления в пабликах, в которых я это тестировал) Еще одна замечательная вещь - пустые энтити аудио-сообщений. Для отправки вместо формата doc в описании attachment пишем audio И снова новый баг. Можно отправить пустое аудио (просто убираем флаг на чтение и отправляем "ничего". Было проверено на Python): Пустые комменты.... Magic! Делается так же. При отправке коммента вместо формата doc в описании attachment пишем audio. Заметил, однако, что в разных комментариях баг выглядит по-разному. Где-то без пустого места внутри, а где-то с пустым... P Кстати, проверил, прокатывает и в обсуждениях. Оставил в группе vk api напоминание :)
Update: Вместо формата аттача doc или audio можно вставить почти что угодно. Хоть вики. Возможно, чем то полезно. Правда, photo не вставляется...
Update: Большие файлы загружать НЕЛЬЗЯ! Получим ошибку: 504 Gateway Time-out
Update: Техподдержка ответила: Новый ответ:
Ну и собственно, завершение спектакля:
Update: Ну раз тех.поддержка говорит про закрытый AudioAPI, то почему бы его не использовать, пока не прикрыли? Накатал недавно небольшой текст по его использованию. Такой простой доступ был неожиданностью... В конце, кстати, приводятся интересные сайты, до сих пор работающие с вк. http://telegra.ph/Работа-с-закрытым-VK-API-12-31