Руководство оператора
Управляйте проектами aichat-go целиком из Telegram
/prompt2, /prompt3 и /price_prompt убраны — остался только /prompt1. Подробности в changelog миграции.
Для кого это руководство
Вы управляете одним или несколькими проектами продажного бота через Telegram — создаёте новых ботов, обновляете промты, добавляете контент в базу знаний, смотрите статистику чатов. Доступ по SSH и запуск каких-либо бинарников вручную при этом не требуется.
Все операции с проектами доступны через slash-команды в Telegram-группах. Работа идёт в двух типах групп:
-
Админ-группа — одна особая группа, привязанная к
админ-проекту. Из неё можно управлять любым проектом (создавать, наполнять,
редактировать, выводить список, удалять). Админ-команды начинаются с
/project_. -
Собственная лид-группа проекта — чат, в который этот проект
доставляет лидов. Здесь работают короткие команды (
/prompt1,/stats,/info...) и относятся только к текущему проекту.
Что должно быть готово
Прежде чем какие-либо команды из этого руководства начнут работать, инженер должен один раз настроить платформу. Проверьте три условия:
- Сервис aichat-go запущен и доступен Telegram (вебхук зарегистрирован).
- В базе данных существует админ-проект со своим Telegram-ботом.
- Этот бот добавлен в Telegram-группу и подтвердил «Лид-группа подключена для проекта «admin»!». Именно эта группа — ваша админ-группа, в которой вы будете вводить все команды ниже.
Если что-то из этого отсутствует, попросите инженера выполнить первичную настройку. Дальше мы исходим из того, что рабочая админ-группа уже есть.
Создание нового проекта
Запуск нового продажного бота — это три шага и пара минут времени. Бот делает почти всё за вас — вы только указываете имя, источник контента и токен Telegram-бота.
Создайте бота в BotFather
В Telegram откройте @BotFather и выполните
/newbot. Задайте отображаемое имя и уникальный username, заканчивающийся на
_bot. BotFather пришлёт токен вида
123456:AAH... — скопируйте его.
Выполните /project_init в админ-группе
Выберите короткое имя проекта в нижнем регистре (используется внутри системы и в URL). Затем выберите один из трёх способов задать стартовый контент:
Вариант A — URL карты сайта (sitemap), самый частый
Если у сайта клиента есть sitemap.xml — это самый простой путь:
бот автоматически обходит все страницы из карты сайта.
Chunking completed: 156 chunks
Embeddings completed: 156 vectors
Upload completed: 42 pages, 156 chunks indexed
Test the bot: https://t.me/acme_bot
Вариант B — список конкретных URL
Для небольших сайтов или когда нужно проиндексировать только несколько страниц — передавайте URL прямо через запятую.
Вариант C — вложенный XML-файл sitemap
Если sitemap не выложен публично (например, экспорт от клиента) — приложите его к сообщению как файл. Бот скачает его и использует как источник для обхода.
debug_info.txt с
подробным журналом пайплайна (и при успехе, и при ошибке). Сохраните его, если что-то
выглядит подозрительно — в нём полная трассировка обхода сайта.
--force удаляет записи проекта в БД и коллекции в Qdrant перед
пересозданием. Это удаляет всю историю чатов этого проекта. Если нужно только
обновить базу знаний — используйте /project_seed.
Подключите лид-группу проекта по deep-ссылке
После наполнения базы знаний бот пришлёт deep-ссылку вида
https://t.me/<bot>?startgroup=connect_<name>. Кликните по ней
— Telegram откроет окно «создать / выбрать группу» с уже добавленным
ботом. Создайте новую группу (например, «Acme Leads») и нажмите
Создать.
Бот автоматически обнаружит группу, привяжет её как лид-группу проекта и подтвердит:
Используйте /help для просмотра доступных команд.
/start connect_<name>, которое Telegram присылает при добавлении бота
через deep-ссылку. Если у проекта пока нет лид-группы, доставка лидов
приостанавливается с предупреждением.
Проект полностью готов к работе. Клиенты могут писать @acme_bot, а завершённые
лиды попадают в группу «Acme Leads».
Повседневные операции
Когда проект уже работает, почти любая задача — это одна команда в админ-группе. В карточках ниже показано, что делает команда и когда её применять. Все админ-команды первым аргументом принимают имя проекта — так из одного места можно управлять несколькими проектами.
Промты и цены
Промты задают, что бот говорит на каждой стадии. Настройки цен определяют, как бот отвечает на вопросы о стоимости — либо подтягивая чанки из специальной страницы цен, либо из запасного текстового блока.
Обновить системный промпт проекта — тон, что собирать у клиента, критерии передачи заявки, чего не делать.
Отметить URL базы знаний как «страницу цен». Когда клиент спрашивает про цены,
агент вызывает hybrid_search с фильтром по этому URL.
/prompt1, /price_url...)
не требуют имени проекта и применяются к текущему чату. См.
Лид-группа проекта ниже.
База знаний — добавление и удаление URL
База знаний — это то, по чему бот ищет, когда отвечает клиентам. Можно добавлять новые страницы, переиндексировать изменённые и удалять устаревшие — всё без пересоздания проекта.
Добавить URL к существующей базе знаний. Бот скачивает каждый, разбивает на чанки, эмбеддит и индексирует поверх уже имеющегося контента.
То же, но для каждого URL сначала удаляются все существующие чанки этого URL, а потом он переиндексируется. Используйте, когда страница изменилась и нужна свежая копия.
Удалить все чанки указанных URL из базы знаний. Полезно для устаревших услуг или страниц, которые клиент попросил убрать.
Перезагрузка существующего проекта
Когда сайт клиента поменялся целиком и нужно перезалить базу знаний с нуля —
не удаляя сам проект, его историю чатов и промты — используйте
/project_seed. Это тот же пайплайн обхода, что и у /project_init,
но применённый к уже существующему проекту.
Перезагрузить из свежей карты сайта.
Перезагрузить из явного списка URL.
Перезагрузить из вложенного XML-файла sitemap (приложите его к тому же сообщению).
/project_seed индексирует новый контент, но
не удаляет старые чанки тех URL, которых больше нет в карте сайта. Если нужен
жёсткий сброс базы знаний — либо обратитесь к инженеру за продвинутым CLI, либо из
Telegram самый простой путь — /project_init --force, который удаляет проект
и создаёт заново. (Это также удалит историю чатов.)
Просмотр и статистика
Три команды только-для-чтения, чтобы увидеть, что происходит — как по конкретному проекту, так и по всей платформе.
Список всех проектов в базе с датой создания. Админ-проект и проекты в состоянии «удалён» помечаются отдельно.
admin — 2026-01-09 [admin]
legacycorp — 2025-11-22 [deleted]
widgets — 2026-03-01
Показать UUID проекта, язык, привязку лид-группы и текущий price_url.
Полезно убедиться, что проект существует и правильно настроен.
Сводная статистика чатов проекта за период: всего чатов, завершённых, незавершённых (старше 24 часов), среднее число сообщений.
Формат периода — интервал PostgreSQL: 1 month
(по умолчанию), 1 week, 3 days, 6 months. Пробел
обязателен — 1month не сработает.
Total chats: 87
Finished: 23
Unfinished (>24h): 41
Unfinished total: 64
Avg messages (all): 6.3
Avg messages (finished): 11.8
Avg messages (unfinished): 4.4
Удаление и восстановление проекта
Удаление и восстановление обратимы. Они переключают флаг проекта — данные, история чатов и база знаний остаются в базе. Чтобы изменения стали видны клиентам, инженер перезапускает сервис бота.
Пометить проект как удалённый. После следующего перезапуска бот перестаёт обрабатывать сообщения для бота этого проекта. Сам админ-проект удалить нельзя.
Снять флаг удаления. После перезапуска (или после повторной регистрации проекта инженером) бот снова отвечает на сообщения.
Прочие настройки — /project_set
Одна универсальная команда обновляет любую настройку проекта, у которой нет отдельной команды. Используйте её для приветственного сообщения, языка и смены токена бота.
Обновляет одну настройку проекта. Поддерживаемые ключи:
| Ключ | Что делает | Нужен перезапуск? |
|---|---|---|
prompt1 |
Системный промпт проекта (синоним /project_prompt1) |
Нет |
price_url |
URL-подсказка, которую агент использует через hybrid_search, когда клиент спрашивает про цены |
Нет |
start-reply |
Приветственное сообщение, которое бот возвращает клиенту на /start |
Нет |
tg_api_key |
Сменить токен Telegram-бота для проекта | Да |
language |
Язык проекта — ru или en |
Да |
tg_api_key и language
вступают в силу только после перезапуска сервиса — живой бот кэширует эти значения
при старте. Попросите инженера перезапустить сервис или дождитесь следующего деплоя.
Команды лид-группы проекта
Внутри собственной лид-группы любого проекта (не админ-группы) доступен сокращённый набор команд. Они всегда применяются к проекту, который владеет этим чатом — имя проекта вводить не нужно.
| Команда | Что делает |
|---|---|
/help |
Показать все команды, доступные в этой группе (а в админ-группе — ещё и админ-команды) |
/prompt |
Показать текущий системный промпт |
/prompt1 [текст] |
Показать или обновить системный промпт проекта.
Без аргументов: текущий промпт приходит файлом prompt1-<UTC-timestamp>.md ответом на вашу команду
(без текстового сообщения).
С прикреплённым файлом .md или .txt и подписью
/prompt1: содержимое файла заменяет промпт — удобно
редактировать локально без копипаста.
|
/price_url [url] |
Показать или установить URL-подсказку о ценах для агента |
/stats [период] |
Статистика чатов этого проекта (по умолчанию 1 month) |
/info |
Показать UUID проекта, язык, лид-группу, настройки цен |
/settings |
Открыть встроенное меню настроек (кнопки на те же команды) |
/connect_bitrix <webhook-url> |
Подключить портал Bitrix24 как вторую CRM. Бот проверит вебхук, выберет первую доступную воронку, сохранит настройки и пересоберёт активную CRM — без перезапуска. Разовая настройка вебхука в Bitrix описана ниже. |
/set_bitrix_funnel [id] |
Без аргументов: покажет список воронок портала (всегда тянется в живую из
Bitrix — список воронок не кешируется).
С id: переключит активную воронку для новых сделок. |
/disconnect_bitrix |
Удалить настройки Bitrix и вернуть CRM к режиму «только Telegram». |
- Bitrix → Разработчикам → Другое → Входящий вебхук → создать.
- Обязательно: поставьте галку CRM в правах и сохраните.
Без неё
/connect_bitrixупадёт с ошибкойinsufficient_scope, и бот пришлёт пошаговую инструкцию по её включению на вашем языке. - Скопируйте URL (вида
https://<portal>.bitrix24.ru/rest/<uid>/<token>/). - В лид-группе проекта:
/connect_bitrix <url>.
/connect_bitrix запускает полный smoke-тест до сохранения настроек: создаёт
тестовый Контакт + Сделку + комментарий с inline-файлом в выбранной воронке и удаляет обе сущности.
Если что-то не так — нет прав, заблокирована воронка, запрещены вложения, сеть — вы увидите
точную ошибку Bitrix как есть (а для отсутствующей CRM-галки — ещё и пошаговую инструкцию).
Ничего не сохраняется, пока проверка не прошла полностью.
Каждый новый лид после подключения уходит и в Telegram, и в Bitrix: Контакт → Сделка → комментарий в таймлайне с полным транскриптом. Файлы прикрепляются встроенно; всё, что больше 10 МБ, заменяется маркером со ссылкой на пост в лид-группе.
/prompt1 без текста вернёт действующий системный промпт
файлом prompt1-<UTC-timestamp>.md — отредактируйте локально
и пришлите тот же файл с подписью /prompt1, чтобы заменить промпт
без копипаста.
/project_* — всеми остальными.
Что видят клиенты
Для контекста — у клиентов, которые пишут боту, есть всего две команды. Вы их не запускаете — просто чтобы вы понимали, что это такое в логах.
Сбрасывает диалог: очищает текущую историю и состояние чата, после чего возвращает
приветственное сообщение проекта (start-reply). Настраивается командой
/project_set <name> start-reply ....
Переключает режим отладки для конкретного чата клиента. В режиме отладки к каждому ответу бота добавляется короткая трассировка (текущая стадия, найденные результаты, оценки) — так видно, почему бот ответил именно так. Состояние сохраняется в чате клиента.
Решение проблем
Частые проблемы и их значение. Если что-то здесь не совпадает с тем, что вы видите —
эскалируйте инженеру с прикреплённым файлом debug_info.txt от последнего запуска
/project_init или /project_seed.
«Project «X» already exists. Use --force to reinit.»
Либо имя действительно занято, либо предыдущий /project_init завершился
частично. Три варианта:
- Выберите другое имя.
-
Запустите
/project_init --force <имя> ...— это удалит существующий проект (записи в БД, коллекции Qdrant, историю чатов) и создаст заново. Это деструктивно. -
Если нужно только обновить базу знаний — запустите
/project_seed <имя> .... Он сохраняет промты, привязку лид-группы и историю чатов.
Бот создан, но не отвечает на тестовые сообщения
Две самые частые причины:
-
Лид-группа не подключена. Запустите
/project_info <имя>и посмотрите на строку «Lead group: not connected». Если так — кликните deep-ссылку из ответа на исходный/project_initи добавьте бота в новую группу. Без лид-группы бот всё равно общается с клиентами, но доставка лидов отключена. - Вебхук не зарегистрирован в Telegram. Если несколько токенов смотрят на один и тот же бэкенд, выигрывает только последний зарегистрированный. Попросите инженера проверить вебхук вашего бота.
«Лид-группа ещё не подключена» в ответе бота
В сообщении бота есть deep-ссылка — кликните по ней. Telegram откроет окно «создать группу с этим ботом». Создайте новую группу — бот сам её обнаружит. Никакого chat ID копировать не нужно.
/project_stats показывает ноль чатов, хотя бот работает
Проверьте аргумент период. Это должен быть PostgreSQL-интервал с пробелом:
1 month, 2 weeks, 3 days, 6 hours.
Без пробела (1month) база считает, что в окно ничего не попадает — и
вы получаете нули.
Если период не указан — используется 1 month.
Только что выполнил /project_delete, а бот всё равно отвечает клиентам
Мягкое удаление меняет только флаг в базе. Активные бандлы проектов загружены в память
бота при старте, поэтому изменение применится только после перезапуска сервиса.
Обратитесь к инженеру. /project_restore + перезапуск отменяет удаление.
Поменял язык через /project_set ... language en, а бот всё равно отвечает по-русски
language и tg_api_key — ключи, требующие перезапуска.
Активный агент кэширует язык при старте: значение в базе обновлено сразу, но живой бандл
держит старое до следующего рестарта. Об этом явно пишется в ответе — попросите
инженера перезапустить сервис.
Проект есть в /projects, но команды говорят «not found»
Имена проектов чувствительны к регистру. Скопируйте точное написание из вывода
/projects.
Новый проект не появился в /projects сразу после создания инженером
Проекты, созданные не из Telegram (через продвинутый CLI), требуют отдельного шага
регистрации, прежде чем работающий бот их подхватит. /project_init из
Telegram делает это автоматически, CLI — нет. Попросите инженера зарегистрировать
проект.
Глоссарий
Термины, которые встречаются в этом руководстве и в ответах бота.
- Проект
- Один продажный бот — один тенант. У каждого проекта свой Telegram-бот, промты,
база знаний и лид-группа. Идентифицируется коротким уникальным именем, например
acme.
- Админ-проект
- Особый проект, чья лид-группа разрешает запускать команды
/project_*по любому другому проекту. Админ-проект ровно один.
- Лид-группа
- Telegram-группа, привязанная к проекту, в которую попадают завершённые лиды. В этой же группе вы запускаете команды этого проекта. Подключается один раз через deep-ссылку.
- База знаний (БЗ)
- Проиндексированные страницы и чанки, по которым бот ищет ответы клиентам. Создаётся при
/project_initили/project_seed; меняется командами/project_add_urlsи/project_delete_urls.
- Стадии 1 / 2 / 3
- Три фазы продажного диалога. 1-я стадия — приветствие и определение услуги; 2-я — ответы на вопросы и сбор контакта; 3-я — завершение и передача лида специалисту.
- Завершён
- Чат считается «завершённым» (finished), когда 3-я стадия сформировала лид и бот перестал отвечать. Завершённые чаты с успешной доставкой в CRM помечаются как «lead-sent».
- Мягкое удаление
- Обратимый флаг проекта. Запись в базе остаётся; бот перестаёт его обрабатывать после
перезапуска. Отменяется командой
/project_restore.
- price_url
- Опциональная URL-подсказка, которая добавляется агенту в системный промпт. Когда клиент
спрашивает про цены, агент вызывает
hybrid_searchс фильтром по этому URL.
- start-reply
- Приветственное сообщение, которое бот возвращает клиенту на
/start. Настраивается командой/project_set <name> start-reply <text>.
aichat-go · Руководство оператора · нажмите t для смены темы