Skip to content

Работа с несколькими ботами

Пакет поддерживает работу с несколькими ботами одновременно. Каждый бот имеет свою конфигурацию и маршруты.

Конфигурация нескольких ботов

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'),
],
],
# Первый бот
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 “Роутинг для конкретного бота”
routes/telegram-main.php
use HybridGram\Facades\TelegramRouter;
TelegramRouter::forBot('main')->onCommand('/start', function(CommandData $data) {
// Обработка только для бота 'main'
});
// routes/telegram-support.php
TelegramRouter::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) {
// ...
});
});

Каждый бот может работать в своем режиме:

'bots' => [
[
'bot_id' => 'main',
'update_mode' => UpdateModeEnum::WEBHOOK, // Production бот
],
[
'bot_id' => 'dev',
'update_mode' => UpdateModeEnum::POLLING, // Dev бот
],
],

Установка вебхука для конкретного бота

Section titled “Установка вебхука для конкретного бота”
Terminal window
php artisan hybridgram:set-webhook main
php artisan hybridgram:set-webhook support

Получение информации о вебхуке

Section titled “Получение информации о вебхуке”
Terminal window
php artisan hybridgram:get-webhook-info main
php artisan hybridgram:get-webhook-info support

Запуск Polling для нескольких ботов

Section titled “Запуск Polling для нескольких ботов”

Запустите отдельный процесс для каждого бота:

Terminal window
# Терминал 1
php artisan hybridgram:polling main
# Терминал 2
php 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

Каждый бот имеет:

  • Свои роуты
  • Свой rate limit (отдельный счетчик)
  • Свои состояния (изолированные)
  • Свой конфиг

Вы можете вынести общую логику в сервисы:

app/Telegram/Services/CommonService.php
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.php
TelegramRouter::forBot('ru')->onCommand('/start', function(CommandData $data) {
$telegram = app(\HybridGram\Telegram\TelegramBotApi::class, ['botId' => 'ru']);
$telegram->sendMessage($data->getChat()->id, 'Привет!');
});
// routes/telegram-en.php
TelegramRouter::forBot('en')->onCommand('/start', function(CommandData $data) {
$telegram = app(\HybridGram\Telegram\TelegramBotApi::class, ['botId' => 'en']);
$telegram->sendMessage($data->getChat()->id, 'Hello!');
});
  1. ✅ Используйте уникальные bot_id для каждого бота
  2. ✅ Разделяйте роуты по файлам для лучшей организации
  3. ✅ Используйте префиксы в именах переменных окружения
  4. ✅ Документируйте назначение каждого бота
  5. ✅ Мониторьте rate limits для каждого бота отдельно
  • Конфигурация — детальная настройка
  • Webhook — настройка вебхуков для нескольких ботов