Метод sendGame

Метод для отправки игры в чат с возможностью настройки параметров уведомлений, защиты контента и интерактивной клавиатуры.

Описание

Используйте этот метод для отправки игры. В случае успеха возвращается отправленное Message.

Параметр Тип Обязательный Описание
business_connection_id String Опционально Уникальный идентификатор бизнес-подключения, от имени которого будет отправлено сообщение
chat_id Integer Да Уникальный идентификатор целевого чата. Игры нельзя отправлять в личные сообщения каналов и чаты каналов.
message_thread_id Integer Опционально Уникальный идентификатор целевой ветки сообщений (темы) форума; только для супергрупп-форумов
game_short_name String Да Короткое название игры, служит уникальным идентификатором игры. Настройте свои игры через @BotFather.
disable_notification Boolean Опционально Отправляет сообщение беззвучно. Пользователи получат уведомление без звука.
protect_content Boolean Опционально Защищает содержимое отправленного сообщения от пересылки и сохранения
allow_paid_broadcast Boolean Опционально Передайте True, чтобы разрешить до 1000 сообщений в секунду, игнорируя ограничения рассылки за плату 0.1 Telegram Stars за сообщение. Соответствующие Stars будут списаны с баланса бота
message_effect_id String Опционально Уникальный идентификатор эффекта сообщения, который будет добавлен к сообщению; только для личных чатов
reply_parameters ReplyParameters Опционально Описание сообщения, на которое нужно ответить
reply_markup InlineKeyboardMarkup Опционально JSON-сериализованный объект для встроенной клавиатуры. Если пусто, будет показана одна кнопка 'Play game_title'. Если не пусто, первая кнопка должна запускать игру.

Примеры

php

<?php

// Токен вашего бота
$botToken = 'YOUR_BOT_TOKEN';
$apiUrl = "https://api.telegram.org/bot{$botToken}/sendGame";

// Параметры запроса
$chatId = 123456789; // Замените на реальный chat_id
$gameShortName = 'your_game_short_name'; // Замените на short_name игры, созданной через @BotFather

$postData = [
    'chat_id' => $chatId,
    'game_short_name' => $gameShortName,
    'disable_notification' => false,
    'protect_content' => false,
    'allow_paid_broadcast' => false,
    'reply_markup' => json_encode([
        'inline_keyboard' => [
            [
                [
                    'text' => '🎮 Играть',
                    'callback_game' => [
                        'game_short_name' => $gameShortName
                    ]
                ],
                [
                    'text' => '📊 Статистика',
                    'callback_data' => 'game_stats'
                ]
            ]
        ]
    ])
];

// Опциональные параметры (раскомментируйте при необходимости)
// $postData['business_connection_id'] = 'your_business_connection_id';
// $postData['message_thread_id'] = 123; // Для тем форума
// $postData['message_effect_id'] = 'effect_id';
// $postData['reply_parameters'] = json_encode(['message_id' => 12345]);

// Отправка запроса
$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_SSL_VERIFYPEER, false); // Отключить для локального тестирования

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($response === false) {
    echo 'Ошибка cURL: ' . curl_error($ch);
} else {
    $responseData = json_decode($response, true);
    
    if ($responseData['ok']) {
        echo "Игра успешно отправлена! ID сообщения: " . $responseData['result']['message_id'];
    } else {
        echo "Ошибка: " . $responseData['description'];
    }
}

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);
echo $response;
*/
?>

python

import requests

def send_game(bot_token, chat_id, game_short_name, **kwargs):
    """
    Отправляет игру в указанный чат.
    
    :param bot_token: Токен бота
    :param chat_id: ID чата
    :param game_short_name: Короткое название игры
    :param kwargs: Дополнительные параметры:
        - business_connection_id: ID бизнес-соединения
        - message_thread_id: ID темы форума
        - disable_notification: Отключить уведомление
        - protect_content: Защитить содержимое
        - allow_paid_broadcast: Разрешить платную рассылку
        - message_effect_id: ID эффекта сообщения
        - reply_parameters: Параметры ответа (dict)
        - reply_markup: Разметка inline-клавиатуры (dict)
    :return: Ответ от Telegram API
    """
    url = f"https://api.telegram.org/bot{bot_token}/sendGame"
    
    payload = {
        "chat_id": chat_id,
        "game_short_name": game_short_name
    }
    
    # Добавляем опциональные параметры если они переданы
    optional_params = [
        "business_connection_id",
        "message_thread_id",
        "disable_notification",
        "protect_content",
        "allow_paid_broadcast",
        "message_effect_id",
        "reply_parameters",
        "reply_markup"
    ]
    
    for param in optional_params:
        if param in kwargs:
            payload[param] = kwargs[param]
    
    response = requests.post(url, json=payload)
    return response.json()

# Пример использования
if __name__ == "__main__":
    BOT_TOKEN = "YOUR_BOT_TOKEN"
    CHAT_ID = 123456789
    GAME_SHORT_NAME = "your_game_name"
    
    # Пример 1: Простая отправка игры
    result = send_game(BOT_TOKEN, CHAT_ID, GAME_SHORT_NAME)
    print(result)
    
    # Пример 2: Отправка с дополнительными параметрами
    result = send_game(
        bot_token=BOT_TOKEN,
        chat_id=CHAT_ID,
        game_short_name=GAME_SHORT_NAME,
        disable_notification=True,
        protect_content=True,
        reply_markup={
            "inline_keyboard": [[
                {
                    "text": "🎮 Play Game",
                    "callback_game": {}
                },
                {
                    "text": "📊 Scores",
                    "callback_data": "show_scores"
                }
            ]]
        }
    )
    print(result)
    
    # Пример 3: Отправка с ответом на сообщение
    result = send_game(
        bot_token=BOT_TOKEN,
        chat_id=CHAT_ID,
        game_short_name=GAME_SHORT_NAME,
        reply_parameters={
            "message_id": 123,
            "chat_id": CHAT_ID
        }
    )
    print(result)

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

  • API 2.2.. Добавлен метод sendGame
  • API 5.0. Обновлен метод sendGame: Добавлено поле allow_sending_without_reply
  • API 5.6. Обновлен метод sendGame: Добавлено поле protect_content
  • API 6.3. Обновлен метод sendGame: Добавлен параметр message_thread_id
  • API 7.0. Обновлен метод sendGame: Заменены параметры reply_to_message_id и allow_sending_without_reply на reply_parameters
  • API 7.4. Обновлен метод sendGame: Добавлен параметр message_effect_id
  • API 7.11. Обновлен метод sendGame: Добавлен параметр allow_paid_broadcast
  • API 9.3. Обновлен метод sendGame: Поддержан параметр message_thread_id в личных чатах с темами для отправки сообщения в конкретную тему.

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

  • Message - Это основной объект, представляющий сообщение в Telegram, который содержит информацию об отправителе, чате, контенте (текст, медиа, служебные данные) и различные метаданные.
  • ReplyParameters - Объект, описывающий параметры для ответа на сообщение, включая идентификатор сообщения, чат, цитирование и дополнительные настройки.
  • InlineKeyboardMarkup - Объект для создания встроенной клавиатуры, которая отображается непосредственно в сообщении.
Комментарии