Описание
Используйте этот метод, чтобы установить результат взаимодействия с Веб-приложением и отправить соответствующее сообщение от имени пользователя в чат, из которого поступил запрос. При успешном выполнении возвращается объект SentWebAppMessage.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| web_app_query_id | String | Да | Уникальный идентификатор запроса, на который нужно ответить |
| result | InlineQueryResult | Да | JSON-сериализованный объект, описывающий отправляемое сообщение |
Примеры
php
<?php
$botToken = 'YOUR_BOT_TOKEN';
$apiUrl = "https://api.telegram.org/bot{$botToken}/";
// ID веб-приложения, полученный из callback query
$webAppQueryId = 'UNIQUE_QUERY_ID_FROM_WEB_APP';
// Создаем InlineQueryResultArticle как пример результата
$inlineQueryResult = [
'type' => 'article',
'id' => uniqid(),
'title' => 'Результат из веб-приложения',
'input_message_content' => [
'message_text' => 'Это сообщение отправлено от имени пользователя через веб-приложение!',
'parse_mode' => 'HTML'
],
'description' => 'Пример результата взаимодействия с Web App'
];
// Подготавливаем данные для запроса
$postData = [
'web_app_query_id' => $webAppQueryId,
'result' => json_encode($inlineQueryResult)
];
// Отправляем запрос к API Telegram
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl . 'answerWebAppQuery');
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);
if ($response === false) {
$error = curl_error($ch);
curl_close($ch);
throw new Exception("cURL Error: {$error}");
}
curl_close($ch);
// Обрабатываем ответ
$responseData = json_decode($response, true);
if (!$responseData['ok']) {
throw new Exception("API Error: {$responseData['description']}");
}
// Возвращаем объект SentWebAppMessage
$sentMessage = $responseData['result'];
echo "Сообщение отправлено. ID: " . $sentMessage['inline_message_id'] ?? 'N/A';
// Альтернативный вариант с использованием готовой библиотеки (например, TelegramBotPHP)
class TelegramBot {
private $token;
public function __construct($token) {
$this->token = $token;
}
public function answerWebAppQuery($webAppQueryId, array $inlineQueryResult) {
$data = [
'web_app_query_id' => $webAppQueryId,
'result' => json_encode($inlineQueryResult)
];
return $this->apiRequest('answerWebAppQuery', $data);
}
private function apiRequest($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);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
}
// Пример использования класса
$bot = new TelegramBot($botToken);
// Создаем другой тип результата - фото
$photoResult = [
'type' => 'photo',
'id' => uniqid(),
'photo_url' => 'https://example.com/photo.jpg',
'thumb_url' => 'https://example.com/thumb.jpg',
'caption' => 'Фото из веб-приложения',
'parse_mode' => 'HTML'
];
try {
$result = $bot->answerWebAppQuery($webAppQueryId, $photoResult);
if ($result['ok']) {
$sentWebAppMessage = $result['result'];
// Работаем с результатом
if (isset($sentWebAppMessage['inline_message_id'])) {
echo "Inline message ID: " . $sentWebAppMessage['inline_message_id'];
}
} else {
echo "Ошибка: " . $result['description'];
}
} catch (Exception $e) {
echo "Ошибка: " . $e->getMessage();
}
?>
python
import requests
def answer_web_app_query(bot_token, web_app_query_id, result):
"""
Отправляет результат взаимодействия с Web App.
:param bot_token: Токен вашего бота
:param web_app_query_id: Уникальный идентификатор запроса
:param result: Объект InlineQueryResult в виде словаря
:return: Ответ от Telegram API
"""
url = f"https://api.telegram.org/bot{bot_token}/answerWebAppQuery"
payload = {
"web_app_query_id": web_app_query_id,
"result": result
}
response = requests.post(url, json=payload)
return response.json()
# Пример использования
if __name__ == "__main__":
BOT_TOKEN = "YOUR_BOT_TOKEN"
WEB_APP_QUERY_ID = "unique_query_id_from_web_app"
# Пример InlineQueryResultArticle
result = {
"type": "article",
"id": "1",
"title": "Пример результата",
"input_message_content": {
"message_text": "Это результат из Web App!"
}
}
response = answer_web_app_query(BOT_TOKEN, WEB_APP_QUERY_ID, result)
print(response)
История изменений
- API 6.0. Добавлен метод answerWebAppQuery
Дополнительно
- SentWebAppMessage - Объект, описывающий встроенное сообщение, отправленное веб-приложением от имени пользователя.
- InlineQueryResult - Этот объект представляет один результат inline-запроса и может быть одного из 20 поддерживаемых типов, таких как аудио, фото, видео, документы и другие медиаформаты.