← На главную

Опубликовано

Двое из ларца: как настроить 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