Советы PHP-разработчика

Блог содержащий короткие заметки касающиеся программирования для web.

Как отправить аудиофайл в телеграм в виде голосового сообщения через PHP

Пишем телеграмм бота на 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');

И на этом все. Для удобства можно поднять себе на сервере простой телеграм-бот, который будет принимать аудио (или видео) файл, конвертировать его по описанному алгоритму и отправлять обратно в виде голосового.

  • 2024-12-17 16:26:15