Метод sendChatAction

Метод для отображения статуса действия бота (например, «печатает», «загружает фото») в интерфейсе пользователя, пока бот выполняет операцию.

Описание

Используйте этот метод, когда вам нужно сообщить пользователю, что что-то происходит на стороне бота. Статус устанавливается на 5 секунд или меньше (когда от вашего бота приходит сообщение, клиенты Telegram сбрасывают его статус набора). Возвращает True при успехе.

Пример: ImageBot требуется некоторое время для обработки запроса и загрузки изображения. Вместо отправки текстового сообщения вроде «Получаю изображение, пожалуйста, подождите…», бот может использовать sendChatAction с action = upload_photo. Пользователь увидит статус «отправка фото» для бота.

Мы рекомендуем использовать этот метод только тогда, когда ответ от бота займёт заметное количество времени.

Параметр Тип Обязательный Описание
business_connection_id String Опционально Уникальный идентификатор бизнес-подключения, от имени которого будет отправлено действие
chat_id Integer или String Да Уникальный идентификатор целевого чата или имя пользователя целевой супергруппы (в формате @supergroupusername). Чаты каналов и прямые сообщения каналов не поддерживаются.
message_thread_id Integer Опционально Уникальный идентификатор целевой ветки сообщений; только для супергрупп
action String Да Тип действия для трансляции. Выберите один, в зависимости от того, что пользователь скоро получит: typing для sendMessage, upload_photo для sendPhoto, record_video или upload_video для sendVideo, record_voice или upload_voice для sendVoice, upload_document для sendDocument, choose_sticker для sendSticker, find_location для sendLocation, record_video_note или upload_video_note для sendVideoNote.

Примеры

php

<?php

// Токен вашего бота
$botToken = 'YOUR_BOT_TOKEN';

// ID чата (можно получить из $update['message']['chat']['id'])
$chatId = 123456789;

// Действие, которое будет отображаться пользователю
$action = 'upload_photo'; // Например, для загрузки фото

// URL API Telegram
$apiUrl = "https://api.telegram.org/bot{$botToken}/sendChatAction";

// Подготовка данных
$postData = [
    'chat_id' => $chatId,
    'action' => $action
];

// Опциональные параметры (раскомментировать при необходимости)
// $postData['business_connection_id'] = 'business_connection_id';
// $postData['message_thread_id'] = 123; // Только для супергрупп

// Инициализация cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: multipart/form-data'
]);

// Выполнение запроса
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// Проверка ошибок cURL
if (curl_errno($ch)) {
    echo 'cURL Error: ' . curl_error($ch);
} else {
    // Декодирование ответа
    $responseData = json_decode($response, true);
    
    if ($httpCode == 200 && $responseData['ok']) {
        echo "Chat action sent successfully!\n";
        // Здесь можно продолжить выполнение длительной операции
        // Например, обработка и отправка фото
    } else {
        echo "Error: " . print_r($responseData, true);
    }
}

// Закрытие соединения
curl_close($ch);

// Альтернативный вариант с использованием file_get_contents (требует allow_url_fopen)
/*
$context = stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => 'Content-Type: application/x-www-form-urlencoded',
        'content' => http_build_query($postData)
    ]
]);

$response = file_get_contents($apiUrl, false, $context);
$responseData = json_decode($response, true);
*/

?>

python

import requests

def send_chat_action(bot_token, chat_id, action):
    """
    Отправляет действие чата (например, "печатает", "загружает фото" и т.д.)
    
    :param bot_token: Токен вашего бота
    :param chat_id: ID чата или username (например, 123456 или "@supergroupusername")
    :param action: Тип действия (typing, upload_photo, record_video и т.д.)
    :return: Результат запроса
    """
    url = f"https://api.telegram.org/bot{bot_token}/sendChatAction"
    
    payload = {
        "chat_id": chat_id,
        "action": action
    }
    
    response = requests.post(url, json=payload)
    return response.json()

# Пример использования:
if __name__ == "__main__":
    # Конфигурация
    BOT_TOKEN = "ВАШ_ТОКЕН_БОТА"
    CHAT_ID = 123456789  # или "@supergroupusername"
    
    # Пример 1: Показать, что бот печатает текст
    result = send_chat_action(BOT_TOKEN, CHAT_ID, "typing")
    print(f"Результат отправки действия 'typing': {result}")
    
    # Пример 2: Показать, что бот загружает фото (перед отправкой фото)
    result = send_chat_action(BOT_TOKEN, CHAT_ID, "upload_photo")
    print(f"Результат отправки действия 'upload_photo': {result}")
    
    # Пример 3: Показать, что бот записывает голосовое сообщение
    result = send_chat_action(BOT_TOKEN, CHAT_ID, "record_voice")
    print(f"Результат отправки действия 'record_voice': {result}")
    
    # Пример с дополнительными параметрами (для супергрупп с темами)
    def send_chat_action_with_thread(bot_token, chat_id, action, message_thread_id=None, business_connection_id=None):
        url = f"https://api.telegram.org/bot{bot_token}/sendChatAction"
        
        payload = {
            "chat_id": chat_id,
            "action": action
        }
        
        if message_thread_id:
            payload["message_thread_id"] = message_thread_id
        
        if business_connection_id:
            payload["business_connection_id"] = business_connection_id
        
        response = requests.post(url, json=payload)
        return response.json()
    
    # Пример использования с thread_id
    result = send_chat_action_with_thread(
        BOT_TOKEN, 
        CHAT_ID, 
        "upload_document", 
        message_thread_id=456
    )
    print(f"Результат с thread_id: {result}")

История изменений

  • API 3.0. Обновлен метод sendChatAction: Добавлены новые действия record_video_note и upload_video_note
  • API 5.2. Обновлен метод sendChatAction: Исправлена документация: заменены названия действий с 'record_audio' и 'upload_audio' на 'record_voice' и 'upload_voice'
  • API 5.4. Обновлен метод sendChatAction: Добавлена поддержка действия choose_sticker
  • API 6.4. Обновлен метод sendChatAction: Добавлен параметр message_thread_id
  • API 9.3. Обновлен метод sendChatAction: Поддержан параметр message_thread_id в личных чатах для отправки действий чата в конкретную тему.

Дополнительно

  • sendMessage - Метод для отправки текстовых сообщений в чаты Telegram с поддержкой форматирования, клавиатур и дополнительных параметров.
  • sendPhoto - Метод для отправки фотографий в чат с поддержкой подписей, форматирования и различных параметров настройки.
  • sendVideo - Метод для отправки видеофайлов в чат с поддержкой MPEG4 и множеством дополнительных параметров, таких как подпись, миниатюра и настройки уведомлений.
  • sendVoice - Метод для отправки голосовых сообщений в форматах OGG, MP3 или M4A, которые отображаются в клиентах Telegram как воспроизводимые аудиозаписи.
  • sendDocument - Метод для отправки файлов любого типа размером до 50 МБ в чат Telegram с поддержкой подписей, миниатюр и различных параметров настройки.
  • sendSticker - Метод для отправки статических, анимированных или видео-стикеров в чат Telegram.
  • sendLocation - Метод для отправки географического местоположения в чат с поддержкой живых геопозиций и дополнительных параметров.
  • sendVideoNote - Метод для отправки круглых видеосообщений длительностью до 1 минуты в чаты Telegram.
Комментарии