Webhook
Webhook — это режим, при котором Telegram отправляет обновления на ваш сервер через HTTP запросы. Это рекомендуемый способ для production окружений.
Преимущества
Заголовок раздела «Преимущества»- ✅ Мгновенная доставка обновлений
- ✅ Эффективное использование ресурсов
- ✅ Подходит для production
- ✅ Поддержка нескольких ботов
Настройка
Заголовок раздела «Настройка»1. Конфигурация в config/hybridgram.php
Заголовок раздела «1. Конфигурация в config/hybridgram.php»'bots' => [ [ 'token' => env('BOT_TOKEN'), 'bot_id' => 'main', 'update_mode' => UpdateModeEnum::WEBHOOK, 'webhook_url' => env('TELEGRAM_WEBHOOK_URL'), 'secret_token' => env('TELEGRAM_SECRET_TOKEN'), // Рекомендуется 'routes_file' => base_path('routes/telegram.php'), ],],2. Переменные окружения
Заголовок раздела «2. Переменные окружения»BOT_TOKEN=ваш_токенBOT_ID=mainTELEGRAM_UPDATE_MODE=WEBHOOKTELEGRAM_WEBHOOK_URL=https://ваш-домен.com/telegram/bot/webhook/mainTELEGRAM_SECRET_TOKEN=ваш_секретный_токен3. Установка вебхука
Заголовок раздела «3. Установка вебхука»Через команду Artisan
Заголовок раздела «Через команду Artisan»php artisan hybridgram:set-webhook mainИли с дополнительными параметрами:
php artisan hybridgram:set-webhook main \ --url=https://ваш-домен.com/telegram/bot/webhook/main \ --secret-token=ваш_секретный_токен \ --drop-pendingЧерез код
Заголовок раздела «Через код»use HybridGram\Telegram\TelegramBotApi;
$telegram = app(TelegramBotApi::class, ['botId' => 'main']);$telegram->setWebhook( url: 'https://ваш-домен.com/telegram/bot/webhook/main', secretToken: 'ваш_секретный_токен');4. Роут для вебхука
Заголовок раздела «4. Роут для вебхука»Пакет автоматически регистрирует роут, но вы можете настроить свой:
// routes/web.php или routes/api.phpRoute::post('/telegram/bot/webhook/{botId}', [\HybridGram\Http\Controllers\WebhookController::class, 'handle'])->name('telegram.bot.webhook');Параметр {botId} из URL автоматически преобразуется в объект BotConfig. Метод handle получает уже готовую конфигурацию бота, а не строку:
use HybridGram\Core\Config\BotConfig;use HybridGram\Http\Controllers\WebhookController;
// Сигнатура метода handle — второй аргумент это BotConfig, не stringpublic function handle(\Illuminate\Http\Request $request, BotConfig $botConfig): \Illuminate\Http\Response{ // $botConfig — объект с токеном, bot_id, routes_file и другими настройками бота // ...}Безопасность
Заголовок раздела «Безопасность»Secret Token
Заголовок раздела «Secret Token»Рекомендуется использовать secret token для проверки подлинности запросов:
-
Сгенерируйте случайный токен:
Окно терминала php artisan tinker>>> Str::random(32) -
Установите в
.env:TELEGRAM_SECRET_TOKEN=ваш_сгенерированный_токен -
Используйте при установке вебхука:
Окно терминала php artisan hybridgram:set-webhook main --secret-token=ваш_сгенерированный_токен
Пакет автоматически проверяет secret token в заголовке X-Telegram-Bot-Api-Secret-Token.
Telegram требует HTTPS для вебхуков. Используйте:
- SSL сертификат (Let’s Encrypt, Cloudflare и т.д.)
- Локальный сертификат для разработки (не рекомендуется для production)
SSL сертификат
Заголовок раздела «SSL сертификат»Если у вас самоподписанный сертификат:
php artisan hybridgram:set-webhook main \ --certificate=/path/to/certificate.pemИли в конфиге:
'certificate_path' => env('TELEGRAM_CERTIFICATE_PATH'),Проверка вебхука
Заголовок раздела «Проверка вебхука»Получить информацию о вебхуке
Заголовок раздела «Получить информацию о вебхуке»php artisan hybridgram:get-webhook-info mainИли через код:
$telegram = app(TelegramBotApi::class, ['botId' => 'main']);$info = $telegram->getWebhookInfo();Удалить вебхук
Заголовок раздела «Удалить вебхук»php artisan hybridgram:delete-webhook mainРазрешенные обновления
Заголовок раздела «Разрешенные обновления»Вы можете ограничить типы обновлений, которые будет получать бот:
'allowed_updates' => ['message', 'callback_query', 'inline_query'],Или в .env:
ALLOWED_TELEGRAM_UPDATES=message,callback_queryУдаление ожидающих обновлений
Заголовок раздела «Удаление ожидающих обновлений»При установке вебхука можно удалить все ожидающие обновления:
php artisan hybridgram:set-webhook main --drop-pendingИли в конфиге:
'webhook_drop_pending_updates' => true,Go обработчик tgook (опционально)
Заголовок раздела «Go обработчик tgook (опционально)»Пакет поддерживает отдельный Go‑прокси tgook для максимальной производительности и асинхронной обработки обновлений.
'webhook_port' => env('TELEGRAM_WEBHOOK_PORT', 9070),В этом режиме Telegram шлёт запросы на Go‑сервис, который кладёт обновления в Redis очередь, а Laravel воркеры обрабатывают их в фоне.
Подробная схема работы и инструкция по настройке — в разделе «Go proxy tgook» (/advanced/go-proxy-tgook/).
Отладка
Заголовок раздела «Отладка»Логирование
Заголовок раздела «Логирование»Включите логирование в config/logging.php:
'channels' => [ 'telegram' => [ 'driver' => 'single', 'path' => storage_path('logs/telegram.log'), ],],Проверка запросов
Заголовок раздела «Проверка запросов»Все входящие обновления логируются в таблицу telegram_updates (если миграция выполнена).
Типичные проблемы
Заголовок раздела «Типичные проблемы»429 Too Many Requests
Заголовок раздела «429 Too Many Requests»Если получаете ошибку 429:
- Проверьте rate limiting настройки
- Убедитесь, что используете queue режим
- Проверьте, нет ли дублирования запросов
Вебхук не работает
Заголовок раздела «Вебхук не работает»- Проверьте, что HTTPS настроен
- Убедитесь, что URL доступен извне
- Проверьте secret token
- Проверьте логи сервера
Задержка обновлений
Заголовок раздела «Задержка обновлений»- Проверьте настройки вебхука через
get-webhook-info - Убедитесь, что сервер не перегружен
- Проверьте размер очереди
Production рекомендации
Заголовок раздела «Production рекомендации»- ✅ Используйте HTTPS с валидным сертификатом
- ✅ Настройте secret token
- ✅ Используйте queue режим для отправки
- ✅ Настройте мониторинг и алерты
- ✅ Регулярно проверяйте статус вебхука
- ✅ Ограничьте
allowed_updatesтолько нужными типами
Что дальше?
Заголовок раздела «Что дальше?»- Polling — альтернативный режим получения обновлений
- Отправка сообщений — работа с TelegramBotApi