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