Метод answerCallbackQuery

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

Описание

Используйте этот метод для отправки ответов на callback-запросы, отправленные из инлайн-клавиатур. Ответ будет отображен пользователю в виде уведомления в верхней части экрана чата или в виде алерта. При успешном выполнении возвращается True.

Альтернативно, пользователь может быть перенаправлен на указанный URL игры. Для работы этой опции вы должны сначала создать игру для вашего бота через @BotFather и принять условия. В противном случае вы можете использовать ссылки вида t.me/your_bot?start=XXXX, которые открывают вашего бота с параметром.

Параметр Тип Обязательный Описание
callback_query_id String Да Уникальный идентификатор запроса, на который нужно ответить
text String Опционально Текст уведомления. Если не указан, пользователю ничего не будет показано, 0-200 символов
show_alert Boolean Опционально Если True, клиент покажет алерт вместо уведомления в верхней части экрана чата. По умолчанию false.
url String Опционально URL, который будет открыт клиентом пользователя. Если вы создали Game и приняли условия через @BotFather, укажите URL, открывающий вашу игру — обратите внимание, что это будет работать только если запрос пришел от кнопки InlineKeyboardButton.

В противном случае вы можете использовать ссылки вида t.me/your_bot?start=XXXX, которые открывают вашего бота с параметром.
cache_time Integer Опционально Максимальное время в секундах, в течение которого результат callback-запроса может кэшироваться на стороне клиента. Приложения Telegram начнут поддерживать кэширование с версии 3.14. По умолчанию 0.

Примеры

php

<?php

$botToken = 'YOUR_BOT_TOKEN';
$callbackQueryId = $_POST['callback_query_id'] ?? ''; // Получаем из вебхука

// Пример 1: Простой ответ с текстом
$data = [
    'callback_query_id' => $callbackQueryId,
    'text' => 'Действие выполнено!',
    'show_alert' => false
];

// Пример 2: Ответ с алертом
$dataWithAlert = [
    'callback_query_id' => $callbackQueryId,
    'text' => 'Внимание! Это важное сообщение.',
    'show_alert' => true
];

// Пример 3: Ответ с редиректом на бота
$dataWithUrl = [
    'callback_query_id' => $callbackQueryId,
    'text' => 'Переходим в бота...',
    'url' => 'https://t.me/your_bot?start=parameter123'
];

// Пример 4: Ответ без текста (только снятие загрузки)
$dataEmpty = [
    'callback_query_id' => $callbackQueryId
];

// Функция для отправки запроса
function answerCallbackQuery($botToken, $data) {
    $url = "https://api.telegram.org/bot{$botToken}/answerCallbackQuery";
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/x-www-form-urlencoded']);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    return json_decode($response, true);
}

// Использование (раскомментировать нужный вариант):
// $result = answerCallbackQuery($botToken, $data);
// $result = answerCallbackQuery($botToken, $dataWithAlert);
// $result = answerCallbackQuery($botToken, $dataWithUrl);
// $result = answerCallbackQuery($botToken, $dataEmpty);

// Проверка результата
if ($result['ok'] ?? false) {
    echo 'Callback query answered successfully';
} else {
    echo 'Error: ' . ($result['description'] ?? 'Unknown error');
}

// Альтернативный вариант с использованием file_get_contents
function answerCallbackQuerySimple($botToken, $callbackQueryId, $text = null, $showAlert = false, $url = null) {
    $query = http_build_query([
        'callback_query_id' => $callbackQueryId,
        'text' => $text,
        'show_alert' => $showAlert,
        'url' => $url
    ]);
    
    $apiUrl = "https://api.telegram.org/bot{$botToken}/answerCallbackQuery?{$query}";
    $response = file_get_contents($apiUrl);
    
    return json_decode($response, true);
}

// Пример использования альтернативной функции
// $result = answerCallbackQuerySimple($botToken, $callbackQueryId, 'Готово!', false);

?>

python

import requests

def answer_callback_query(bot_token, callback_query_id, text=None, show_alert=False, url=None, cache_time=0):
    """
    Отправляет ответ на callback query.
    
    :param bot_token: Токен вашего бота
    :param callback_query_id: Уникальный идентификатор запроса
    :param text: Текст уведомления (0-200 символов)
    :param show_alert: Показывать alert вместо уведомления
    :param url: URL для открытия
    :param cache_time: Время кэширования в секундах
    :return: Результат запроса
    """
    
    api_url = f"https://api.telegram.org/bot{bot_token}/answerCallbackQuery"
    
    payload = {
        "callback_query_id": callback_query_id,
        "show_alert": show_alert,
        "cache_time": cache_time
    }
    
    if text:
        payload["text"] = text
    
    if url:
        payload["url"] = url
    
    response = requests.post(api_url, json=payload)
    return response.json()

# Пример использования 1: Простое уведомление
bot_token = "YOUR_BOT_TOKEN"
callback_query_id = "123456789"

# Ответ с текстовым уведомлением
result = answer_callback_query(
    bot_token=bot_token,
    callback_query_id=callback_query_id,
    text="Действие выполнено успешно!"
)

# Пример использования 2: Alert с предупреждением
result = answer_callback_query(
    bot_token=bot_token,
    callback_query_id=callback_query_id,
    text="Вы уверены, что хотите удалить этот элемент?",
    show_alert=True
)

# Пример использования 3: Ссылка на бота с параметром
result = answer_callback_query(
    bot_token=bot_token,
    callback_query_id=callback_query_id,
    url="t.me/your_bot?start=XXXX"
)

# Пример использования 4: Без текста (только закрытие callback)
result = answer_callback_query(
    bot_token=bot_token,
    callback_query_id=callback_query_id
)

# Пример с использованием python-telegram-bot библиотеки
from telegram import Bot

async def answer_callback_query_ptb():
    bot = Bot(token=bot_token)
    
    # Вариант 1: Простое уведомление
    await bot.answer_callback_query(
        callback_query_id=callback_query_id,
        text="Запрос обработан"
    )
    
    # Вариант 2: Alert
    await bot.answer_callback_query(
        callback_query_id=callback_query_id,
        text="Внимание! Это важное сообщение",
        show_alert=True
    )
    
    # Вариант 3: Ссылка
    await bot.answer_callback_query(
        callback_query_id=callback_query_id,
        url="t.me/your_bot?start=XXXX"
    )

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

  • API 2.0. Добавлен метод answerCallbackQuery
  • API 2.2.. Обновлен метод answerCallbackQuery: Добавлен параметр url
  • API 2.3. Обновлен метод answerCallbackQuery: Добавлен параметр cache_time для управления временем кэширования результатов

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

  • Game - Объект Game представляет игру в Telegram, создаваемую через BotFather, и содержит её название, описание, медиафайлы и текст с возможными сущностями.
  • InlineKeyboardButton - Этот объект представляет одну кнопку встроенной клавиатуры в Telegram Bot API, где для определения её действия используется ровно одно из необязательных полей, таких как URL, callback-данные, веб-приложение или другие типы.
Комментарии