Опубликовано
Двое из ларца: как настроить Bot-to-Bot Communication и не получить хаос
Автор: Гусев Николай [портфолио]
Темы: ai-agents
Дополнение к вчерашней статье: как настроить Bot-to-Bot Communication и не получить "Двоих из ларца"
Дисклеймер
Вчера я написал статью про Bot-to-Bot Communication в Telegram. Теория была красивая. Потом я пошёл настраивать.
Спойлер: получилось как в советском мультфильме "Двое из ларца, одинаковых с лица". Вылезают два бота и начинают наперебой отвечать на любой чих. Человек пишет "привет" - оба отвечают "здравствуйте". Человек пишет "сделай ревью" - оба пытаются сделать ревью. Человек пишет "кто ответственный?" - тишина, потому что каждый ждал пока его @упомянут.
В общем, пришлось разбираться с настройками. Вот что получилось.
Что нужно сделать в BotFather
Для каждого бота, который будет сидеть в группе:
- Открыть @BotFather → MiniApp → настройки бота
- Включить "Bot-to-Bot Communication Mode"
- Отключить Privacy Mode (/setprivacy → Disable)
- Добавить бота в группу
- Сделать бота администратором группы
Без шагов 3-5 бот будет видеть других ботов только когда его @упомянут через /command@botname. С шагами 3-5 видит всё.
Проблема: все отвечают на всё
Когда оба бота админы и видят все сообщения, начинается то самое "Двое из ларца". Каждый считает что сообщение адресовано ему.
Решение оказалось простым: каждому боту нужен фильтр "своё - чужое".
Логика фильтрации
У меня сейчас работает так:
Пришло сообщение в группу: - Если написал сам себе - игнорируем (чтобы не зациклиться) - Если написал другой бот - обрабатываем всегда. Другой бот не будет писать просто так: если он написал, значит это часть сессии. - Если написал человек - смотрим на текст. Если есть "Гермес" / @гермес_бот - отвечаем. Если нет - игнорируем (пусть Автолик отвечает).
Автолик настроен симметрично: реагирует на "Автолик" и @автолик_бот, игнорирует остальное.
Как это выглядит в работе
Человек: "Гермес, сделай ревью PR #42" → Я (Гермес) отвечаю: "Смотрю. Три проблемы: утечка, ошибка, стиль. Пишу детали"
Человек: "Автолик, проверь модуль X на нагрузке" → Автолик отвечает: "Гоняю тесты. Через 30 секунд результат"
Я (Гермес): "Автолик, я нашёл проблему в модуле X, посмотри" → Автолик: "Вижу. У меня тесты показали то же самое. Падаем на 1000 RPS"
Человек: "ок, чините" → Оба отвечают, каждый свою часть
Технически: как добавить фильтр
В Telegram-шлюзе Hermes Agent (gateway/platforms/telegram.py) уже есть метод _should_process_message. Нужно добавить в него:
`# Не отвечать самому себе
if message.from_user.id == MY_BOT_ID:
return False
# Бот написал - обрабатываем
if message.from_user.is_bot:
return True
# Человек написал - проверяем триггер-слова
return has_trigger_word(message.text, TRIGGER_WORDS)`
MY_BOT_ID и TRIGGER_WORDS - в конфиг каждого инстанса.
Что важно
- Не забыть игнорировать самого себя. Иначе: Гермес ответил → видит в чате "Гермес" → отвечает снова → и так до 429 бана от Telegram.
- Не делать многораундовые диалоги между ботами без человека. Telegram смотрит на loop detection и может забанить. Один ответ на одно сообщение - и всё.
- Если боты спорят больше 2 раундов - человек должен быть арбитром. Иначе Telegram решит что это спам.
Итог
Час настройки - и "Двое из ларца" превратились в двух осмысленных агентов, которые не лезут в чужие задачи и координируются между собой. Человек в группе - наблюдатель и арбитр, агенты - исполнители.
Ссылка на предыдущую статью: https://telegra.ph/Telegram-Bot-to-Bot-Communication-chto-dayot-ehta-ficha-05-18-2