Работа с несколькими ботами
Пакет поддерживает работу с несколькими ботами одновременно. Каждый бот имеет свою конфигурацию и маршруты.
Конфигурация нескольких ботов
Section titled “Конфигурация нескольких ботов”В файле config/hybridgram.php:
'bots' => [ [ 'token' => env('BOT_TOKEN_1'), 'bot_id' => 'main', 'update_mode' => UpdateModeEnum::WEBHOOK, 'webhook_url' => env('TELEGRAM_WEBHOOK_URL_1'), 'routes_file' => base_path('routes/telegram-main.php'), ], [ 'token' => env('BOT_TOKEN_2'), 'bot_id' => 'support', 'update_mode' => UpdateModeEnum::WEBHOOK, 'webhook_url' => env('TELEGRAM_WEBHOOK_URL_2'), 'routes_file' => base_path('routes/telegram-support.php'), ], [ 'token' => env('BOT_TOKEN_3'), 'bot_id' => 'admin', 'update_mode' => UpdateModeEnum::POLLING, 'routes_file' => base_path('routes/telegram-admin.php'), ],],Переменные окружения
Section titled “Переменные окружения”# Первый ботBOT_TOKEN_1=токен_первого_ботаTELEGRAM_WEBHOOK_URL_1=https://ваш-домен.com/telegram/bot/webhook/main
# Второй ботBOT_TOKEN_2=токен_второго_ботаTELEGRAM_WEBHOOK_URL_2=https://ваш-домен.com/telegram/bot/webhook/support
# Третий ботBOT_TOKEN_3=токен_третьего_ботаРоутинг для конкретного бота
Section titled “Роутинг для конкретного бота”Использование forBot()
Section titled “Использование forBot()”use HybridGram\Facades\TelegramRouter;
TelegramRouter::forBot('main')->onCommand('/start', function(CommandData $data) { // Обработка только для бота 'main'});
// routes/telegram-support.phpTelegramRouter::forBot('support')->onCommand('/start', function(CommandData $data) { // Обработка только для бота 'support'});Общие роуты для всех ботов
Section titled “Общие роуты для всех ботов”// Роут для всех ботовTelegramRouter::onCommand('/help', function(CommandData $data) { // $data->botId содержит ID бота, для которого сработал роут $botId = $data->botId;
// Разная логика в зависимости от бота match($botId) { 'main' => $this->handleMainHelp($data), 'support' => $this->handleSupportHelp($data), default => $this->handleDefaultHelp($data), };});Получение экземпляра TelegramBotApi для конкретного бота
Section titled “Получение экземпляра TelegramBotApi для конкретного бота”// Для конкретного бота$telegram = app(\HybridGram\Telegram\TelegramBotApi::class, ['botId' => 'main']);$telegram->sendMessage($chatId, 'Сообщение от main бота');
$telegram = app(\HybridGram\Telegram\TelegramBotApi::class, ['botId' => 'support']);$telegram->sendMessage($chatId, 'Сообщение от support бота');Группировка роутов по ботам
Section titled “Группировка роутов по ботам”TelegramRouter::group([ 'botId' => 'main',], function($router) { $router->onCommand('/start', function(CommandData $data) { // ... });
$router->onCommand('/menu', function(CommandData $data) { // ... });});Разные режимы работы
Section titled “Разные режимы работы”Каждый бот может работать в своем режиме:
'bots' => [ [ 'bot_id' => 'main', 'update_mode' => UpdateModeEnum::WEBHOOK, // Production бот ], [ 'bot_id' => 'dev', 'update_mode' => UpdateModeEnum::POLLING, // Dev бот ],],Управление вебхуками
Section titled “Управление вебхуками”Установка вебхука для конкретного бота
Section titled “Установка вебхука для конкретного бота”php artisan hybridgram:set-webhook mainphp artisan hybridgram:set-webhook supportПолучение информации о вебхуке
Section titled “Получение информации о вебхуке”php artisan hybridgram:get-webhook-info mainphp artisan hybridgram:get-webhook-info supportЗапуск Polling для нескольких ботов
Section titled “Запуск Polling для нескольких ботов”Запустите отдельный процесс для каждого бота:
# Терминал 1php artisan hybridgram:polling main
# Терминал 2php artisan hybridgram:polling supportИли используйте Supervisor:
[program:telegram-main]command=php /path/to/artisan hybridgram:polling main
[program:telegram-support]command=php /path/to/artisan hybridgram:polling supportИзоляция данных
Section titled “Изоляция данных”Каждый бот имеет:
- Свои роуты
- Свой rate limit (отдельный счетчик)
- Свои состояния (изолированные)
- Свой конфиг
Общий код между ботами
Section titled “Общий код между ботами”Вы можете вынести общую логику в сервисы:
class CommonService{ public function handleWelcome(CommandData $data, string $botId): void { $telegram = app(\HybridGram\Telegram\TelegramBotApi::class, ['botId' => $botId]);
$message = match($botId) { 'main' => 'Добро пожаловать в основной бот!', 'support' => 'Добро пожаловать в поддержку!', default => 'Добро пожаловать!', };
$telegram->sendMessage($data->getChat()->id, $message); }}
// ИспользованиеTelegramRouter::forBot('main')->onCommand('/start', function(CommandData $data) { app(CommonService::class)->handleWelcome($data, 'main');});Пример: Многоязычный бот
Section titled “Пример: Многоязычный бот”'bots' => [ [ 'bot_id' => 'ru', 'routes_file' => base_path('routes/telegram-ru.php'), ], [ 'bot_id' => 'en', 'routes_file' => base_path('routes/telegram-en.php'), ],],
// routes/telegram-ru.phpTelegramRouter::forBot('ru')->onCommand('/start', function(CommandData $data) { $telegram = app(\HybridGram\Telegram\TelegramBotApi::class, ['botId' => 'ru']); $telegram->sendMessage($data->getChat()->id, 'Привет!');});
// routes/telegram-en.phpTelegramRouter::forBot('en')->onCommand('/start', function(CommandData $data) { $telegram = app(\HybridGram\Telegram\TelegramBotApi::class, ['botId' => 'en']); $telegram->sendMessage($data->getChat()->id, 'Hello!');});Рекомендации
Section titled “Рекомендации”- ✅ Используйте уникальные
bot_idдля каждого бота - ✅ Разделяйте роуты по файлам для лучшей организации
- ✅ Используйте префиксы в именах переменных окружения
- ✅ Документируйте назначение каждого бота
- ✅ Мониторьте rate limits для каждого бота отдельно
Что дальше?
Section titled “Что дальше?”- Конфигурация — детальная настройка
- Webhook — настройка вебхуков для нескольких ботов