Проєкти
Webhook + черга
Проекты — раздел, где мы реализуем полноценные приложения на базе Telegram-бота. Основной акцент делается на интеграцию webhook-подключения с асинхронной очередью обработки обновлений. Это подход превосходит polling-модель, так как снижает нагрузку на сервер и обеспечивает мгновенный ответ пользователя.
Webhook работает по принципу: при получении нового сообщения или события Telegram-сервер отправляет POST-запрос на вашу стороннюю URL. Ваша приложение принимает этот запрос, парсит payload и выполняет нужную логику. Для реализации этого механизма необходимо поднять HTTP-эндпоинт, который будет принимать запросы от api.telegram.org.
Основная идея проекта — разделить обработку обновлений на два этапа: получение и обработку. Сначала используется long polling для получения list of update IDs, затем эти обновления перехватываются через webhook в реальном времени. Это позволяет не держать постоянное соединение и эффективно масштабировать систему.
Для реализации используем библиотеку telegramApi(), которая уже описана в главе Первый запрос: getMe. Эта функция возвращает объект бота с идентификатором update_id, который необходим для подписывания на обновления.
<?php
function webhookHandler($request) {
// Проверяем, что запрос пришел от Telegram
if (!isset($request->incomingWebhook)) {
http_response_code(403);
exit;
}
// Парсим payload
$data = json_decode($request->getContent(), true);
if (json_last_error() !== JSON_ERROR_NONE) {
http_response_code(400);
exit;
}
// Обрабатываем обновления
if (\$data["type"] === "message") {
handleMessage(\$data["message"]); // Функция из главы sendmessage
}
}
EOF
После получения обновлений через webhook следует отправить их в очередь для дальнейшей обработки. Очередь может быть реализована с помощью Redis, RabbitMQ или даже простого файлового журнала. При этом важно обрабатывать ошибки и повторять попытки (retry) при неудачных записях в базу данных.
Пример полной реализации очереди на PHP: 1. Настраиваем webhook-эндпоинт с правильным заголовком `X-Telegram-Bot-Api-Version`. 2. Создаем обработчик, который принимает POST-запросы. 3. Извлекаем список update_id и добавляем их в очередь. 4. Запускаем фоновый процесс (worker), который периодически забирает задачи из очереди и выполняет соответствующие действия (отправка сообщений, обновление статуса заказа и т.д.). This подход используется в проектах Webhook + очередь и демонстрирует практическое применение API Telegram в реальных условиях.