Метод sendVoice

Метод для отправки голосовых сообщений в форматах OGG, MP3 или M4A, которые отображаются в клиентах Telegram как воспроизводимые аудиозаписи.

Описание

Используйте этот метод для отправки аудиофайлов, если вы хотите, чтобы клиенты 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, упрощая создание пошаговых диалогов с ботом.
Комментарии