Polling
Polling — это режим, при котором ваш сервер периодически запрашивает обновления у Telegram. Подходит для разработки и тестирования.
Преимущества
Заголовок раздела «Преимущества»- ✅ Не требует публичного URL
- ✅ Простая настройка
- ✅ Подходит для разработки
- ✅ Можно использовать локально
Недостатки
Заголовок раздела «Недостатки»- ❌ Задержка получения обновлений
- ❌ Неэффективное использование ресурсов
- ❌ Не рекомендуется для production с высокой нагрузкой
Настройка
Заголовок раздела «Настройка»1. Конфигурация в config/hybridgram.php
Заголовок раздела «1. Конфигурация в config/hybridgram.php»'bots' => [ [ 'token' => env('BOT_TOKEN'), 'bot_id' => 'main', 'update_mode' => UpdateModeEnum::POLLING, 'routes_file' => base_path('routes/telegram.php'), 'polling_limit' => env('TELEGRAM_POLLING_LIMIT', 100), 'polling_timeout' => env('TELEGRAM_POLLING_TIMEOUT', 0), 'allowed_updates' => explode(',', env('ALLOWED_TELEGRAM_UPDATES', '')), ],],2. Переменные окружения
Заголовок раздела «2. Переменные окружения»BOT_TOKEN=ваш_токенBOT_ID=mainTELEGRAM_UPDATE_MODE=POLLINGTELEGRAM_POLLING_LIMIT=100TELEGRAM_POLLING_TIMEOUT=0ALLOWED_TELEGRAM_UPDATES=message,callback_query3. Запуск polling
Заголовок раздела «3. Запуск polling»Базовый запуск
Заголовок раздела «Базовый запуск»php artisan hybridgram:polling mainС hot-reload (для разработки)
Заголовок раздела «С hot-reload (для разработки)»php artisan hybridgram:polling main --hot-reloadHot-reload автоматически перезапускает команду при изменении кода.
С настройками watch
Заголовок раздела «С настройками watch»php artisan hybridgram:polling main \ --hot-reload \ --watch=app,routes,config,src \ --watch-interval=1Параметры:
--watch— директории для отслеживания (через запятую)--watch-interval— интервал проверки в секундах
Ограничение типов обновлений
Заголовок раздела «Ограничение типов обновлений»php artisan hybridgram:polling main --allowed-updates=message,callback_queryИли в конфиге:
'allowed_updates' => ['message', 'callback_query'],Опции команды hybridgram:polling
Заголовок раздела «Опции команды hybridgram:polling»| Опция | Короткая | Описание |
|---|---|---|
--log-updates | -L | Выводить краткую строку по каждому полученному апдейту |
--full | -F | Выводить полный JSON апдейта (подразумевает --log-updates) |
--hot-reload | -R | Автоперезапуск при изменении кода (для разработки) |
--watch= | -W= | Пути для отслеживания через запятую (по умолчанию: app,routes,config,src) |
--watch-interval=1 | -I | Интервал проверки файлов в секундах (режим hot-reload) |
Примеры с короткими алиасами:
php artisan hybridgram:polling main -Lphp artisan hybridgram:polling main -Fphp artisan hybridgram:polling main -R -W=app,routes -I 2Параметры Polling
Заголовок раздела «Параметры Polling»polling_limit
Заголовок раздела «polling_limit»Максимальное количество обновлений за один запрос (1-100):
'polling_limit' => 100, // МаксимумБольше обновлений = меньше запросов, но больше задержка.
polling_timeout
Заголовок раздела «polling_timeout»Таймаут запроса в секундах (0 = короткий polling):
'polling_timeout' => 0, // Короткий pollingДля длинного polling (long polling):
'polling_timeout' => 60, // Длинный polling (до 60 секунд)Длинный polling уменьшает количество запросов, но увеличивает задержку ответа на команды.
Hot-reload в разработке
Заголовок раздела «Hot-reload в разработке»Hot-reload автоматически перезапускает команду при изменении файлов:
php artisan hybridgram:polling main --hot-reload --watch=app,routesЭто позволяет:
- Не перезапускать команду вручную
- Быстро видеть изменения в коде
- Удобно разрабатывать локально
Запуск через Supervisor (production)
Заголовок раздела «Запуск через Supervisor (production)»Для постоянной работы в production:
[program:telegram-polling]command=php /path/to/artisan hybridgram:polling maindirectory=/path/to/projectautostart=trueautorestart=truestopasgroup=truekillasgroup=trueuser=www-dataredirect_stderr=truestdout_logfile=/path/to/storage/logs/polling.logОграничения
Заголовок раздела «Ограничения»allowed_updates
Заголовок раздела «allowed_updates»Ограничьте типы обновлений для уменьшения нагрузки:
'allowed_updates' => [ 'message', 'callback_query', // Только нужные типы],Один процесс на бота
Заголовок раздела «Один процесс на бота»Не запускайте несколько процессов polling для одного бота одновременно — это может привести к дублированию обновлений.
Отладка
Заголовок раздела «Отладка»Логирование
Заголовок раздела «Логирование»Чтобы видеть в консоли получаемые апдейты, используйте опции -l (краткая строка по каждому апдейту) или -f (полный JSON):
php artisan hybridgram:polling main -Lphp artisan hybridgram:polling main -FПример вывода с -L:
Processing update 12345...Processing update 12346...Проверка статуса
Заголовок раздела «Проверка статуса»Проверьте, что polling работает:
ps aux | grep "hybridgram:polling"Переход с Polling на Webhook
Заголовок раздела «Переход с Polling на Webhook»Когда будете готовы к production:
-
Настройте вебхук:
Окно терминала php artisan hybridgram:set-webhook main -
Остановите polling:
Окно терминала # Найти и остановить процессpkill -f "hybridgram:polling" -
Удалите вебхук (если нужно вернуться к polling):
Окно терминала php artisan hybridgram:delete-webhook main
Рекомендации
Заголовок раздела «Рекомендации»Для разработки
Заголовок раздела «Для разработки»- ✅ Используйте hot-reload
- ✅ Ограничьте
allowed_updatesтолько нужными типами - ✅ Используйте
polling_limit = 10-20для быстрой реакции
Для production
Заголовок раздела «Для production»- ❌ Не рекомендуется использовать polling в production
- ✅ Используйте webhook вместо polling
- ✅ Если необходимо, используйте длинный polling с таймаутом
Когда использовать Polling
Заголовок раздела «Когда использовать Polling»Используйте polling когда:
- Разрабатываете бота локально
- Тестируете функциональность
- Нет возможности настроить HTTPS
- Низкая нагрузка и нет критичных задержек
Не используйте polling когда:
- Production окружение
- Высокая нагрузка
- Критичны задержки получения обновлений
- Нужна максимальная производительность
Что дальше?
Заголовок раздела «Что дальше?»- Webhook — рекомендуемый режим для production
- Отправка сообщений — работа с TelegramBotApi