Skip to content

Polling

Polling — это режим, при котором ваш сервер периодически запрашивает обновления у Telegram. Подходит для разработки и тестирования.

  • ✅ Не требует публичного URL
  • ✅ Простая настройка
  • ✅ Подходит для разработки
  • ✅ Можно использовать локально
  • ❌ Задержка получения обновлений
  • ❌ Неэффективное использование ресурсов
  • ❌ Не рекомендуется для production с высокой нагрузкой

1. Конфигурация в config/hybridgram.php

Section titled “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. Переменные окружения

Section titled “2. Переменные окружения”
BOT_TOKEN=ваш_токен
BOT_ID=main
TELEGRAM_UPDATE_MODE=POLLING
TELEGRAM_POLLING_LIMIT=100
TELEGRAM_POLLING_TIMEOUT=0
ALLOWED_TELEGRAM_UPDATES=message,callback_query
Terminal window
php artisan hybridgram:polling main

С hot-reload (для разработки)

Section titled “С hot-reload (для разработки)”
Terminal window
php artisan hybridgram:polling main --hot-reload

Hot-reload автоматически перезапускает команду при изменении кода.

Terminal window
php artisan hybridgram:polling main \
--hot-reload \
--watch=app,routes,config,src \
--watch-interval=1

Параметры:

  • --watch — директории для отслеживания (через запятую)
  • --watch-interval — интервал проверки в секундах

Ограничение типов обновлений

Section titled “Ограничение типов обновлений”
Terminal window
php artisan hybridgram:polling main --allowed-updates=message,callback_query

Или в конфиге:

'allowed_updates' => ['message', 'callback_query'],

Максимальное количество обновлений за один запрос (1-100):

'polling_limit' => 100, // Максимум

Больше обновлений = меньше запросов, но больше задержка.

Таймаут запроса в секундах (0 = короткий polling):

'polling_timeout' => 0, // Короткий polling

Для длинного polling (long polling):

'polling_timeout' => 60, // Длинный polling (до 60 секунд)

Длинный polling уменьшает количество запросов, но увеличивает задержку ответа на команды.

Hot-reload автоматически перезапускает команду при изменении файлов:

Terminal window
php artisan hybridgram:polling main --hot-reload --watch=app,routes

Это позволяет:

  • Не перезапускать команду вручную
  • Быстро видеть изменения в коде
  • Удобно разрабатывать локально

Запуск через Supervisor (production)

Section titled “Запуск через Supervisor (production)”

Для постоянной работы в production:

[program:telegram-polling]
command=php /path/to/artisan hybridgram:polling main
directory=/path/to/project
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
redirect_stderr=true
stdout_logfile=/path/to/storage/logs/polling.log

Ограничьте типы обновлений для уменьшения нагрузки:

'allowed_updates' => [
'message',
'callback_query',
// Только нужные типы
],

Не запускайте несколько процессов polling для одного бота одновременно — это может привести к дублированию обновлений.

Команда выводит информацию о получаемых обновлениях:

Processing update 12345...
Processing update 12346...

Проверьте, что polling работает:

Terminal window
ps aux | grep "hybridgram:polling"

Когда будете готовы к production:

  1. Настройте вебхук:

    Terminal window
    php artisan hybridgram:set-webhook main
  2. Остановите polling:

    Terminal window
    # Найти и остановить процесс
    pkill -f "hybridgram:polling"
  3. Удалите вебхук (если нужно вернуться к polling):

    Terminal window
    php artisan hybridgram:delete-webhook main
  • ✅ Используйте hot-reload
  • ✅ Ограничьте allowed_updates только нужными типами
  • ✅ Используйте polling_limit = 10-20 для быстрой реакции
  • ❌ Не рекомендуется использовать polling в production
  • ✅ Используйте webhook вместо polling
  • ✅ Если необходимо, используйте длинный polling с таймаутом

Когда использовать Polling

Section titled “Когда использовать Polling”

Используйте polling когда:

  • Разрабатываете бота локально
  • Тестируете функциональность
  • Нет возможности настроить HTTPS
  • Низкая нагрузка и нет критичных задержек

Не используйте polling когда:

  • Production окружение
  • Высокая нагрузка
  • Критичны задержки получения обновлений
  • Нужна максимальная производительность