Описание
Используйте этот метод для отправки ответов на инлайн-запрос. При успешном выполнении возвращается True.
Разрешено не более 50 результатов на запрос.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| inline_query_id | String | Да | Уникальный идентификатор отвечаемого запроса |
| results | Массив InlineQueryResult | Да | Массив результатов для инлайн-запроса в формате JSON |
| cache_time | Integer | Опционально | Максимальное время в секундах, в течение которого результат инлайн-запроса может кэшироваться на сервере. По умолчанию 300. |
| is_personal | Boolean | Опционально | Передайте True, если результаты могут кэшироваться на стороне сервера только для пользователя, отправившего запрос. По умолчанию результаты могут возвращаться любому пользователю, отправившему тот же запрос. |
| next_offset | String | Опционально | Передайте смещение, которое клиент должен отправить в следующем запросе с тем же текстом для получения дополнительных результатов. Передайте пустую строку, если больше нет результатов или если вы не поддерживаете постраничную навигацию. Длина смещения не может превышать 64 байта. |
| button | InlineQueryResultsButton | Опционально | Объект в формате JSON, описывающий кнопку, которая будет показана над результатами инлайн-запроса |
Примеры
php
<?php
$botToken = 'YOUR_BOT_TOKEN';
$apiUrl = "https://api.telegram.org/bot{$botToken}/";
// Пример обработки inline-запроса
$update = json_decode(file_get_contents('php://input'), true);
if (isset($update['inline_query'])) {
$inlineQueryId = $update['inline_query']['id'];
$query = $update['inline_query']['query'];
// Создаем массив результатов
$results = [
[
'type' => 'article',
'id' => '1',
'title' => 'Результат 1',
'input_message_content' => [
'message_text' => 'Это результат 1 для запроса: ' . $query
],
'description' => 'Описание результата 1'
],
[
'type' => 'article',
'id' => '2',
'title' => 'Результат 2',
'input_message_content' => [
'message_text' => 'Это результат 2 для запроса: ' . $query
],
'description' => 'Описание результата 2'
]
];
// Параметры для answerInlineQuery
$params = [
'inline_query_id' => $inlineQueryId,
'results' => json_encode($results),
'cache_time' => 300,
'is_personal' => false,
'next_offset' => '',
'button' => json_encode([
'text' => 'Больше результатов',
'web_app' => ['url' => 'https://example.com']
])
];
// Отправка запроса
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl . 'answerInlineQuery');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
// Обработка ответа
$responseData = json_decode($response, true);
if ($responseData['ok']) {
// Успешный ответ
error_log('Inline query answered successfully');
} else {
error_log('Error: ' . $responseData['description']);
}
}
// Альтернативный вариант с использованием готовой библиотеки (пример)
class TelegramBot {
private $token;
public function __construct($token) {
$this->token = $token;
}
public function answerInlineQuery($inlineQueryId, $results, $options = []) {
$defaultOptions = [
'cache_time' => 300,
'is_personal' => false,
'next_offset' => '',
'button' => null
];
$options = array_merge($defaultOptions, $options);
$data = [
'inline_query_id' => $inlineQueryId,
'results' => json_encode($results)
];
if ($options['cache_time'] !== null) {
$data['cache_time'] = $options['cache_time'];
}
if ($options['is_personal'] !== null) {
$data['is_personal'] = $options['is_personal'];
}
if ($options['next_offset'] !== null) {
$data['next_offset'] = $options['next_offset'];
}
if ($options['button'] !== null) {
$data['button'] = json_encode($options['button']);
}
return $this->sendRequest('answerInlineQuery', $data);
}
private function sendRequest($method, $data) {
$url = "https://api.telegram.org/bot{$this->token}/{$method}";
$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: multipart/form-data']);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
}
// Пример использования класса
$bot = new TelegramBot('YOUR_BOT_TOKEN');
// Создание результатов разных типов
$inlineResults = [
[
'type' => 'photo',
'id' => 'photo_1',
'photo_url' => 'https://example.com/photo1.jpg',
'thumb_url' => 'https://example.com/thumb1.jpg',
'title' => 'Фото 1'
],
[
'type' => 'video',
'id' => 'video_1',
'video_url' => 'https://example.com/video1.mp4',
'mime_type' => 'video/mp4',
'thumb_url' => 'https://example.com/thumb_video1.jpg',
'title' => 'Видео 1'
]
];
// Кнопка для результатов
$button = [
'text' => 'Открыть веб-приложение',
'web_app' => [
'url' => 'https://example.com/webapp'
]
];
// Отправка ответа
$response = $bot->answerInlineQuery(
'123456789', // inline_query_id
$inlineResults,
[
'cache_time' => 600,
'is_personal' => true,
'next_offset' => '2',
'button' => $button
]
);
if ($response['ok']) {
echo "Ответ на inline-запрос успешно отправлен";
} else {
echo "Ошибка: " . $response['description'];
}
?>
python
import json
from telegram import InlineQueryResultArticle, InputTextMessageContent
from telegram.ext import Application, InlineQueryHandler
async def inline_query_handler(update, context):
query = update.inline_query.query
# Создаем результаты для inline-запроса
results = [
InlineQueryResultArticle(
id='1',
title="Пример результата 1",
input_message_content=InputTextMessageContent(
message_text="Это результат 1 для запроса: " + query
),
description="Описание результата 1"
),
InlineQueryResultArticle(
id='2',
title="Пример результата 2",
input_message_content=InputTextMessageContent(
message_text="Это результат 2 для запроса: " + query
),
description="Описание результата 2"
)
]
# Используем метод answerInlineQuery
await update.inline_query.answer(
results=results,
cache_time=300,
is_personal=False,
next_offset='',
button=None
)
# Инициализация бота
application = Application.builder().token("YOUR_BOT_TOKEN").build()
application.add_handler(InlineQueryHandler(inline_query_handler))
История изменений
- API 2.0. Обновлен метод answerInlineQuery: Добавлены параметры switch_pm_text и switch_pm_parameter
- API 6.7. Обновлен метод answerInlineQuery: Параметры switch_pm_text и switch_pm_parameter заменены на параметр button типа InlineQueryResultsButton
Дополнительно
- InlineQueryResult - Этот объект представляет один результат inline-запроса и может быть одного из 20 поддерживаемых типов, таких как аудио, фото, видео, документы и другие медиаформаты.
- InlineQueryResultsButton - Объект, представляющий кнопку над результатами инлайн-запроса, которая может запускать веб-приложение или передавать стартовый параметр боту.