Telegram-бот, который собирает и правит ботов в конструкторе через удалённый MCP. Модель берётся из OpenRouter. Доступ берётся из блока, который выдаёт вкладка «Агент».
Как устроены инструменты конструктора: обзор MCP. Что стоит за этими вызовами: справочник API.
Бот принимает задачу текстом и вызывает инструменты конструктора. Список инструментов приходит с сервера (tools/list), в код агента он не зашит.
Через чат можно:
- собрать и поправить сценарий в живой базе, холст обновится сам
- смотреть проекты, подключать токен BotFather, смотреть статус и логи
- менять срок хранения сообщений:
0,7,30,60,90,180,365
Поля нод модель не выдумывает: перед новой нодой она смотрит схему. Команды бота только латиницей (/start, /buy). Тексты сообщений можно писать по-русски.
| Из этого чата | В панели конструктора |
|---|---|
| Простой бот по описанию | Сложный граф и много медиа |
| Правка сценария словами | Точная раскладка нод на холсте |
| Статус, логи, старт и стоп | Массовая работа с карточками |
Нужны Go 1.26, токен этого бота от BotFather, ключ OpenRouter и уже запущенный конструктор.
- Скопируйте окружение и заполните его.
cp .env.example .envBOT_BUILDER_URLнужен только если в чат пришлют голый токенmcp_…. По умолчанию этоhttps://telegram-bot-builder-e3u-production.up.railway.app. Путь/mcpдопишется сам.- Запустите:
go run ./cmd/bot-builder-agent- В конструкторе откройте вкладку «Агент», создайте токен и пришлите боту весь блок
mcpServers. В нём адрес и заголовокAuthorization: Bearer mcp_…. - Откройте «Задача» и опишите бота.
Проверка без сети и без Telegram: go test ./....
| Переменная | Зачем |
|---|---|
TELEGRAM_BOT_TOKEN |
Токен этого бота |
OPENROUTER_API_KEY |
Ключ OpenRouter |
AI_MODEL |
Модель с вызовом инструментов |
BOT_BUILDER_URL |
Адрес, если в чат прислали только mcp_…. Пусто: публичный хост Railway |
TELEGRAM_ALLOWED_IDS |
Telegram id через запятую. Пусто: бот открыт всем, у кого есть свой токен |
AGENT_MAX_ROUNDS |
Сколько кругов с инструментами, по умолчанию 16 |
AGENT_MAX_RESULT_CHARS |
Обрезка ответа инструмента, по умолчанию 12000 |
AGENT_HISTORY_MESSAGES |
Сколько сообщений помнить, по умолчанию 40 |
DATABASE_URL |
SQLite, по умолчанию sqlite://data/agent.db |
Блок mcpServers в .env не кладётся. Токен и адрес из него хранятся в SQLite отдельно для каждого чата. Файл базы создаётся с правами 0600.
Кнопки внизу и команды делают одно и то же.
| Кнопка | Команда | Что делает |
|---|---|---|
| Задача | обычный текст | Текст уходит модели |
| Проекты | /projects |
Список, создание, архив, карточка |
| Боты | /bots |
Токены активного проекта |
| Аккаунт | /token |
Сохранить блок mcpServers или токен mcp_… |
| Аккаунт | /status |
Хост конструктора, маска токена, активный проект |
| Аккаунт | /reset |
Очистить диалог, токен остаётся |
| Аккаунт | /logout |
Забыть токен и активный проект |
| Отмена | /cancel |
Выйти из ввода |
/start и /help показывают это же меню.
На карточке бота: статус, старт, стоп, перезапуск, логи, удаление и срок хранения сообщений.
Пока идёт ответ, в статусе видно только имя инструмента и кнопку «Остановить». Второй текст в этот момент не принимается.
Удаление проекта, удаление токена бота, стоп и массовый запуск модель не выполняет сразу. Чат спрашивает «Да» или «Нет». Молчание две минуты считается отказом.
Запрос идёт на url из блока mcpServers. Заголовок: Authorization: Bearer mcp_…, как в выданном конфиге.
Тело: JSON-RPC initialize, затем tools/list и tools/call. Ответ бывает JSON или SSE. После первого initialize дальше уходит заголовок MCP-Protocol-Version.
Список инструментов кэшируется (по умолчанию 300 секунд). Ошибка 401 значит, что токен не подошёл: его нужно прислать заново.
load_project и save_project на удалённом /mcp сервер не отдаёт. Сценарий пишется инструментами db_* и update_project_db.
- Адрес и токен у каждого чата свои: они берутся из выданного блока. Голый
mcp_…идёт наBOT_BUILDER_URL. - Одновременно в чате идёт одна задача.
- В лог пишется имя инструмента и id пользователя. Аргументы и сырой
mcp_…в лог не попадают. - В исходящие сообщения Telegram токены вырезаются. В истории для модели текст пользователя сохраняется как есть, иначе токен BotFather не дойдёт до
db_add_bot_token.
- Обзор MCP: зачем инструменты и с чего начать в конструкторе
- Справочник API: REST под тем же хостом и тем же Bearer-токеном