hybridgram / tgbot-laravel
Super fast package for Laravel to build Telegram bots powered by Go
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/hybridgram/tgbot-laravel
Requires
- php: ^8.4
- laravel/prompts: ^0.3.7
- laravel/serializable-closure: ^2.0
- nyholm/psr7: ^1.8
- php-http/multipart-stream-builder: ^1.4
- phptg/bot-api: dev-master
- symfony/console: ^6.0|^7.0
- symfony/process: ^6.4|^7.0
Requires (Dev)
- laravel/framework: ^11.0
- laravel/pint: ^1.25
- marcocesarato/php-conventional-changelog: ^1.17
- orchestra/testbench: ^9.0
- pestphp/pest: ^4.1
This package is not auto-updated.
Last update: 2026-01-15 01:47:47 UTC
README
publish assets
php artisan vendor:publish --provider="HybridGram\Providers\TelegramServiceProvider"
- Polling режим (dev hot-reload)
Если вы используете polling, можно включить авто‑перезапуск при изменении кода (удобно в дебаге — не нужно вручную перезапускать команду).
# обычный polling php artisan hybridgram:polling # polling c hot-reload (dev only) php artisan hybridgram:polling --hot-reload # выбор бота + настройка watch путей php artisan hybridgram:polling main --hot-reload --watch=app,routes,config,src --watch-interval=1
- Кеширование и очистка роутов через php artisan optimize
- Для контроллера реализовать принуждение к работе через json ответы
- Добавить сохранение в базу при полинге
- Публикация миграций
- Реализовать базовую работу через вебхук
- мидлварь для авторизации по ключу и сикреттокену
- Удобный интерфейс для отправки асинхронных сообщений с поддержкой очередей
- Система отслеживания количества запросов в телеграм в минуту через кеш с приоритизацией
- При установке вебхука командой парсить роуты и предлагать поставить только необходимый набор экшеноов на прослушивание
- Проверить работу мидлварей в клиентском коде и создание своих
- Протестировать асинхронную отправку в телеграм
- Протестировать асинхронное получение данных от телеграма
- Написать тесты
- Протестировать LoggingTelegramRouteMiddleware::class
- Метод автоматически отвечающий телеграму $this->botApi->answerCallbackQuery($data->query->id);
- Скопировать логику из пакета https://github.com/mollsoft/laravel-telegram-bot через view чтобы можно было формировать ответы
- Вебморда которая будет эмулитровать телеграм для тетсировая и сразу тест кейсы можно будет писать еще
- Удобный инстрмент (скорее всего команда по настроке бота, или в сервис провайдере описание). Установка имени команд программно на разных языках.
- Миддлварь для устаовки языка на основе пользовательской локали или модели зера по заданому в конфиге полю
- Мидлварь для авторизации юзера по указанной в конфиге модели или по гарду
- Доработаь мидлварь с логирование
- рисовалку стейтов и транзишенов на основе роута
- стаб для роутинга пример (протестить)
- событие вызывать что стейт переключисля чтобы в клиентском коде можно было завязаться и делать какие-то действия нарпимер удалять клавиатуру
- \HybridGram\Http\Middlewares\SetStateTelegramRouteMiddleware должен поддерживать еще постустановку стейта
- Атоматическоге экранирование точки при отправке запросыо с етстовм в телеграм
Outgoing Message Sending
Пакет поддерживает производительную отправку сообщений с автоматическим управлением rate limiting и приоритизацией.
Настройка
В файле конфигурации config/hybridgram.php:
'sending' => [ // Включить отправку через очереди 'queue_enabled' => env('TELEGRAM_QUEUE_ENABLED', false), // Лимит запросов в минуту на бота (по умолчанию 1800 ≈ 30/сек) 'rate_limit_per_minute' => env('TELEGRAM_RATE_LIMIT_PER_MINUTE', 1800), // Резерв слотов для HIGH приоритета (ответы на входящие апдейты) 'reserve_high_per_minute' => env('TELEGRAM_RESERVE_HIGH_PER_MINUTE', 300), // Максимальное время ожидания в sync режиме (мс) // Note: rate limiting is applied only in queue mode. This option is used by the worker job sender. 'sync_max_wait_ms' => env('TELEGRAM_SYNC_MAX_WAIT_MS', 2000), // Имена очередей для разных приоритетов 'queues' => [ 'high' => env('TELEGRAM_QUEUE_HIGH', 'telegram-high'), 'low' => env('TELEGRAM_QUEUE_LOW', 'telegram-low'), ], ],
Режимы работы
Sync режим (queue_enabled = false)
Все запросы отправляются синхронно без rate limiting.
Queue режим (queue_enabled = true)
Запросы ставятся в очереди Laravel с приоритетами:
- HIGH — ответы на входящие апдейты (обрабатываются первыми)
- LOW — рассылки (заполняют свободные слоты)
Запуск воркеров:
# Обработка всех очередей php artisan queue:work --queue=telegram-high,telegram-low # Или отдельно по приоритетам php artisan queue:work --queue=telegram-high php artisan queue:work --queue=telegram-low
Использование
В route handlers
use HybridGram\Telegram\TelegramBotApi; use HybridGram\Telegram\Priority; TelegramRouter::onCommand('/start', function(CommandData $data) { $telegram = app(TelegramBotApi::class); // Автоматически HIGH приоритет для ответов на входящие $telegram->sendMessage($data->chatId, 'Hello!'); }); // Или с явным указанием приоритета TelegramRouter::onMessage(function(MessageData $data) { $telegram = app(TelegramBotApi::class); // Рассылка с LOW приоритетом $telegram->withPriority(Priority::LOW) ->sendMessage($data->chatId, 'Newsletter message'); });
Прямое использование
use HybridGram\Telegram\TelegramBotApi; use HybridGram\Telegram\Priority; $telegram = app(TelegramBotApi::class); // Обычная отправка (приоритет из контекста или DEFAULT) $telegram->sendMessage($chatId, 'Message'); // Явный приоритет $telegram->withPriority(Priority::LOW)->sendMessage($chatId, 'Low priority'); // Использование call() напрямую (всегда через dispatcher) use Phptg\BotApi\Method\SendMessage; $telegram->call(new SendMessage($chatId, 'Text'));
Приоритеты
- HIGH: Приоритет по умолчанию (включая ответы на входящие апдейты)
- LOW: Рассылки и фоновые задачи
Низкоприоритетные запросы не могут использовать зарезервированные слоты (reserve_high_per_minute), гарантируя что ответы на входящие всегда обрабатываются.
Rate Limiting
- Лимит считается per bot (отдельно для каждого бота)
- Используется скользящее окно через кеш (60 секунд)
- В queue режиме лимит применяется на воркерах: job будет
release()-иться обратно в очередь до момента, когда появится слот. Воркеры не блокируютсяsleep()-ом.
Важные замечания
-
InputFile с resource: Методы с
InputFile(resource)не поддерживаются в queue режиме. Используйте sync режим или конвертируйте файл в путь. -
Служебные методы: Методы типа
getUpdates,setWebhook,getMeвсегда выполняются синхронно без rate limiting (они не проходят через dispatcher). -
Приоритет по умолчанию: В route handlers автоматически используется HIGH приоритет. Для рассылок явно указывайте LOW.