Описание
Используйте этот метод для отправки аудиофайлов, если вы хотите, чтобы клиенты Telegram отображали файл как воспроизводимое голосовое сообщение. Для этого ваш аудиофайл должен быть в формате .OGG, закодированном с помощью OPUS, или в формате .MP3, или в формате .M4A (другие форматы могут быть отправлены как Audio или Document). При успешной отправке возвращается отправленное Message. В настоящее время боты могут отправлять голосовые сообщения размером до 50 МБ, это ограничение может быть изменено в будущем.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| business_connection_id | String | Опционально | Уникальный идентификатор бизнес-подключения, от имени которого будет отправлено сообщение |
| chat_id | Integer или String | Да | Уникальный идентификатор целевого чата или имя пользователя целевого канала (в формате @channelusername) |
| message_thread_id | Integer | Опционально | Уникальный идентификатор целевой ветки сообщений (темы) форума; только для супергрупп-форумов |
| direct_messages_topic_id | Integer | Опционально | Идентификатор темы прямых сообщений, в которую будет отправлено сообщение; требуется, если сообщение отправляется в чат прямых сообщений |
| voice | InputFile или String | Да | Аудиофайл для отправки. Передайте file_id в виде String, чтобы отправить файл, существующий на серверах Telegram (рекомендуется), передайте HTTP-URL в виде String, чтобы Telegram получил файл из Интернета, или загрузите новый файл, используя multipart/form-data. Подробнее об отправке файлов » |
| caption | String | Опционально | Подпись к голосовому сообщению, 0-1024 символа после обработки сущностей |
| parse_mode | String | Опционально | Режим обработки сущностей в подписи голосового сообщения. Подробнее см. параметры форматирования. |
| caption_entities | Массив MessageEntity | Опционально | Сериализованный в JSON список специальных сущностей, которые появляются в подписи и могут быть указаны вместо parse_mode |
| duration | Integer | Опционально | Длительность голосового сообщения в секундах |
| disable_notification | Boolean | Опционально | Отправляет сообщение беззвучно. Пользователи получат уведомление без звука. |
| protect_content | Boolean | Опционально | Защищает содержимое отправленного сообщения от пересылки и сохранения |
| allow_paid_broadcast | Boolean | Опционально | Передайте True, чтобы разрешить до 1000 сообщений в секунду, игнорируя ограничения на рассылку за плату в размере 0,1 Telegram Stars за сообщение. Соответствующие Stars будут списаны с баланса бота |
| message_effect_id | String | Опционально | Уникальный идентификатор эффекта сообщения, который будет добавлен к сообщению; только для личных чатов |
| suggested_post_parameters | SuggestedPostParameters | Опционально | Сериализованный в JSON объект, содержащий параметры предлагаемой публикации для отправки; только для чатов прямых сообщений. Если сообщение отправляется в ответ на другую предлагаемую публикацию, то эта предлагаемая публикация автоматически отклоняется. |
| reply_parameters | ReplyParameters | Опционально | Описание сообщения, на которое нужно ответить |
| reply_markup | InlineKeyboardMarkup или ReplyKeyboardMarkup или ReplyKeyboardRemove или ForceReply | Опционально | Дополнительные параметры интерфейса. Сериализованный в JSON объект для встроенной клавиатуры, пользовательской клавиатуры ответа, инструкций по удалению клавиатуры ответа или принудительному ответу от пользователя |
Примеры
php
<?php
// Пример использования метода sendVoice Telegram Bot API
// Токен вашего бота
$botToken = 'ВАШ_ТОКЕН_БОТА';
$apiUrl = "https://api.telegram.org/bot{$botToken}/sendVoice";
// Параметры запроса
$params = [
'chat_id' => 123456789, // ID чата или @username канала
'voice' => 'https://example.com/path/to/voice.ogg', // URL файла или file_id
'caption' => 'Это голосовое сообщение',
'parse_mode' => 'HTML',
'duration' => 30,
'disable_notification' => false,
'protect_content' => false,
'reply_markup' => json_encode([
'inline_keyboard' => [
[
['text' => 'Кнопка 1', 'callback_data' => 'btn1'],
['text' => 'Кнопка 2', 'callback_data' => 'btn2']
]
]
])
];
// Вариант 1: Отправка через file_id (уже загруженный файл)
$params_file_id = [
'chat_id' => 123456789,
'voice' => 'AgACAgIAAxkBAAIB...', // file_id существующего голосового сообщения
'caption' => 'Голосовое сообщение из file_id'
];
// Вариант 2: Загрузка нового файла (multipart/form-data)
function sendVoiceWithUpload($chatId, $filePath) {
$botToken = 'ВАШ_ТОКЕН_БОТА';
$apiUrl = "https://api.telegram.org/bot{$botToken}/sendVoice";
$postFields = [
'chat_id' => $chatId,
'caption' => 'Новое голосовое сообщение',
'voice' => new CURLFile(realpath($filePath))
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// Отправка запроса (для вариантов 1 и 3)
function sendTelegramRequest($url, $params) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/x-www-form-urlencoded']);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 200) {
return ['ok' => false, 'error' => "HTTP {$httpCode}: {$response}"];
}
return json_decode($response, true);
}
// Пример отправки с reply_parameters
$params_with_reply = [
'chat_id' => 123456789,
'voice' => 'https://example.com/voice.mp3',
'caption' => 'Ответ на сообщение',
'reply_parameters' => json_encode([
'message_id' => 123,
'chat_id' => 123456789,
'allow_sending_without_reply' => true
])
];
// Отправка запроса
$result = sendTelegramRequest($apiUrl, $params);
// Обработка результата
if ($result['ok'] ?? false) {
$messageId = $result['result']['message_id'];
echo "Сообщение отправлено! ID: {$messageId}\n";
} else {
echo "Ошибка: " . ($result['description'] ?? 'Неизвестная ошибка') . "\n";
}
// Пример с дополнительными параметрами
$params_full = [
'chat_id' => '@channelusername',
'message_thread_id' => 456, // Для тем форума
'voice' => 'FILE_ID_ГОЛОСОВОГО',
'caption' => 'Сообщение с <b>HTML</b> разметкой',
'parse_mode' => 'HTML',
'caption_entities' => json_encode([
[
'type' => 'bold',
'offset' => 12,
'length' => 4
]
]),
'duration' => 45,
'disable_notification' => true,
'protect_content' => true,
'allow_paid_broadcast' => false,
'reply_markup' => json_encode([
'keyboard' => [
[['text' => 'Ответить']]
],
'resize_keyboard' => true,
'one_time_keyboard' => true
])
];
?>
python
import requests
def send_voice(bot_token, chat_id, voice_file, caption=None, parse_mode=None, duration=None, disable_notification=False, protect_content=False, reply_markup=None):
"""
Отправка голосового сообщения в Telegram чат.
:param bot_token: Токен вашего бота
:param chat_id: ID чата или username канала
:param voice_file: Путь к файлу или file_id
:param caption: Подпись к голосовому сообщению (0-1024 символа)
:param parse_mode: Режим парсинга ('HTML' или 'Markdown')
:param duration: Длительность в секундах
:param disable_notification: Отправлять без звука
:param protect_content: Защитить от пересылки и сохранения
:param reply_markup: Разметка клавиатуры
:return: Ответ от Telegram API
"""
url = f"https://api.telegram.org/bot{bot_token}/sendVoice"
# Определяем, является ли voice_file file_id или URL
if voice_file.startswith('http'):
# Если это URL
params = {
'chat_id': chat_id,
'voice': voice_file
}
else:
# Если это локальный файл
files = {'voice': open(voice_file, 'rb')}
params = {'chat_id': chat_id}
# Добавляем опциональные параметры
if caption:
params['caption'] = caption
if parse_mode:
params['parse_mode'] = parse_mode
if duration:
params['duration'] = duration
if disable_notification:
params['disable_notification'] = True
if protect_content:
params['protect_content'] = True
if reply_markup:
params['reply_markup'] = reply_markup
# Отправляем запрос
if 'files' in locals():
response = requests.post(url, params=params, files=files)
files['voice'].close() # Закрываем файл
else:
response = requests.post(url, params=params)
return response.json()
# Пример использования 1: Отправка по file_id
bot_token = "YOUR_BOT_TOKEN"
chat_id = "123456789" # или "@channelusername"
# Пример с file_id (уже загруженный файл)
result = send_voice(
bot_token=bot_token,
chat_id=chat_id,
voice_file="AwACAgIAAxkBAAIB...", # file_id
caption="Это голосовое сообщение",
parse_mode="HTML",
duration=30,
disable_notification=True
)
# Пример использования 2: Загрузка нового файла
result = send_voice(
bot_token=bot_token,
chat_id=chat_id,
voice_file="path/to/voice.ogg", # Локальный файл
caption="<b>Важное</b> голосовое сообщение",
parse_mode="HTML",
reply_markup={
'inline_keyboard': [[
{'text': 'Кнопка 1', 'callback_data': 'btn1'},
{'text': 'Кнопка 2', 'callback_data': 'btn2'}
]]
}
)
# Пример использования 3: Отправка по URL
result = send_voice(
bot_token=bot_token,
chat_id=chat_id,
voice_file="https://example.com/voice.ogg",
caption="Голосовое с интернета",
protect_content=True
)
print(result)
История изменений
- API 2.2.. Обновлен метод sendVoice: Добавлено поле caption
- API 5.0. Обновлен метод sendVoice: Добавлена возможность ручного указания текстовых сущностей и поле allow_sending_without_reply
- API 5.6. Обновлен метод sendVoice: Добавлено поле protect_content
- API 6.3. Обновлен метод sendVoice: Добавлен параметр message_thread_id
- API 7.0. Обновлен метод sendVoice: Заменены параметры reply_to_message_id и allow_sending_without_reply на reply_parameters
- API 7.4. Обновлен метод sendVoice: Добавлен параметр message_effect_id
- API 7.11. Обновлен метод sendVoice: Добавлен параметр allow_paid_broadcast
- API 9.2. Обновлен метод sendVoice: Добавлен параметр direct_messages_topic_id
- API 9.3. Обновлен метод sendVoice: Поддержан параметр message_thread_id в личных чатах с темами для отправки сообщения в конкретную тему.
Дополнительно
- Audio - Объект, представляющий музыкальный аудиофайл в Telegram с метаданными, такими как длительность, исполнитель и обложка альбома.
- Document - Объект, представляющий общий файл (не фото, голосовое или аудио) с метаданными для загрузки и идентификации.
- Message - Это основной объект, представляющий сообщение в Telegram, который содержит информацию об отправителе, чате, контенте (текст, медиа, служебные данные) и различные метаданные.
- InputFile - Объект, представляющий содержимое файла для загрузки через multipart/form-data.
- MessageEntity - Объект MessageEntity представляет специальную форматированную сущность в тексте сообщения, такую как упоминания, хэштеги, ссылки или стилизованный текст.
- SuggestedPostParameters - Объект содержит параметры публикации, предлагаемой ботом, включая цену и дату отправки.
- ReplyParameters - Объект, описывающий параметры для ответа на сообщение, включая идентификатор сообщения, чат, цитирование и дополнительные настройки.
- InlineKeyboardMarkup - Объект для создания встроенной клавиатуры, которая отображается непосредственно в сообщении.
- ReplyKeyboardMarkup - Объект, представляющий пользовательскую клавиатуру с вариантами ответа для ботов Telegram.
- ReplyKeyboardRemove - Объект для удаления пользовательской клавиатуры и возврата к стандартной буквенной клавиатуре в клиентах Telegram.
- ForceReply - Объект ForceReply принудительно отображает интерфейс ответа в клиентах Telegram, упрощая создание пошаговых диалогов с ботом.