Как отправить аудиофайл в телеграм в виде голосового сообщения через PHP
Такое бывает полезно, если вы хотите обработать голосовое сообщение (например, в Reaper) перед отправкой. Или чтобы у пользователя была возможность расшифровать текст (работает только с тг-премиум). А раньше это был способ отправить аудио, которое можно прослушать на х2 скорости :)
Итак, есть несколько нюансов:
- файл должен иметь тип
audio/ogg
и быть закодирован кодекомopus
; - если файл имеет размер более 1МБ, то расшифровка текста, к сожалению, будет недоступна;
- файл надо отправлять через бота.
Теперь перейдем, непосредственно, к подготовке файла. Самый легкий способ - это использовать ffmpeg
для конвертации аудио в нужный формат
ffmpeg -i input-file.mp3 -vn -acodec libopus -b:a 16k output-file.ogg
Быстро пробежимся по параметрам:
-i input-file.mp3
- указываем файл-источник;-vn
блокируем видеопоток;-acodec libopus
устанавливаем нужный аудио кодек (в нашел случае opus);-b:a 16k
задаем битрейт аудио в 16 кбит;output-file.ogg
указываем файл вывода.
Осталось самое простое - отправить голосовое. Я использую для этого PHP и композер-пакет telegram-bot/api
:
<?php $botApi = new BotApi('YOUR_TOKEN_HERE'); $botApi->sendVoice($chatId, new \CURLFile('/path/to/output-file.ogg', 'audio/ogg'), 'test voice message');
И на этом все. Для удобства можно поднять себе на сервере простой телеграм-бот, который будет принимать аудио (или видео) файл, конвертировать его по описанному алгоритму и отправлять обратно в виде голосового.