
Для тех, кому некогда читать. Ролик короче текста, точные цифры и детали - ниже.
Загородный экоотель "Киногородок" стоит в Тверской области, рядом с Валдайским биосферным заповедником. Гостям здесь предлагают деревянные домики, банный комплекс и отдых на природе.
Гость писал в чат amoCRM, и дальше разговор вёл менеджер, от дат и выбора номера до ссылки на оплату. Эту переписку нужно было отдать AI-агентам.
Ещё по теме - AI-боты и ИИ-агенты для CRM · Сопровождение amoCRM и Kommo · CRM и автоматизация в Петербурге
Обращения шли однотипные, и менеджеры не успевали за их потоком. Гости ждали ответа часами.
Систему я собрал на n8n + GPT-4o. Она вела разговор с гостем от первого сообщения до подтверждения оплаты. Уровней два. Боевой воркфлоу отвечал гостю, а управляющий агент присматривал за самим воркфлоу.
Понять, чего хочет гость
AI Router относил каждое сообщение к одному из намерений - поиск, выбор номера, бронь, оплата, вопрос об отеле, отмена или передача менеджеру.
Спросить mehotel
Свободные номера бот искал через API mehotel, системы управления отелем. Там же в реальном времени создавал и отменял бронь и получал ссылку на оплату.
Ответить в amoCRM
Ответ бот писал обычным человеческим языком и отправлял прямо в чат amoCRM, туда же, где раньше отвечал менеджер.
Проследить оплату
Отдельный воркфлоу каждые 5 минут проверял, оплачена ли бронь, и, как только оплата проходила, писал менеджеру в Telegram.
Через эту цепочку проходило каждое сообщение гостя. Семь веток, по одной на намерение. Поиск, бронь и отмена шли в mehotel, вопросы об отеле в базу знаний, а в конце бот сохранял сессию и обновлял поля лида в amoCRM.
.png)
Второй уровень, управляющий агент, следил за боевым воркфлоу. Он ловил ошибки, а типовые исправлял сам, правкой через API n8n. Запускался по команде в Telegram, сам при ошибке в воркфлоу и по расписанию, раз в 30 минут.
| Субагент | Что делал |
|---|---|
| WorkflowAnalyst | Читал воркфлоу, искал проблемы и писал отчёт о состоянии системы |
| WorkflowEditor | Вносил правки в воркфлоу через n8n REST API, без ручного вмешательства |
| ErrorFixer | Разбирал типовые ошибки выполнения и исправлял их сам |
| SessionDebugger | Смотрел сессии гостей в PostgreSQL и искал в них аномалии |
| APITester | Проверял, что mehotel API доступен и отвечает правильно |

Разбирал сообщение гостя и возвращал строгий JSON - намерение, параметры поиска, текст ответа и флаг "нужен менеджер". Дальше по этому JSON работал воркфлоу.
Правило - только JSON, ни слова вне скобок
Отвечал на вопросы гостей по базе знаний отеля kinoDoc. Где отель, сколько стоит, какие есть услуги и скидки, можно ли приехать с детьми и с питомцем.
6 видов скидок · 4 площадки · 50+ позиций меню
Вёл гостя по скрипту продаж - приветствие → даты → дети → приоритеты → варианты → тип кровати → контакты → апсейл.
Баню и прокат лодок предлагал сам

На каждого гостя в PostgreSQL заводилась сессия. В ней лежали найденные варианты, выбранный номер, данные гостя, статус брони и ссылка на оплату. Поэтому разговор мог растянуться на много сообщений, и бот не терял, о чём шла речь.

.png)
| Система | Зачем | Что именно |
|---|---|---|
| amoCRM | Здесь гость писал и получал ответы | Chat API v1, поля лида обновлялись после каждого шага |
| mehotel API | Система управления отелем | Поиск номеров, создание и отмена брони, статус оплаты |
| PostgreSQL | Сессии гостей | Таблицы hotelsession, kinogorodok_rooms, room_photos |
| OpenAI GPT-4o | Понимал гостя и писал ответы | Намерения, ответы на вопросы, ведение диалога |
| Telegram Bot | Уведомления менеджеру | Статус оплаты, ошибки, команды управляющему агенту (/analyze workflow) |
| Google Docs | База знаний отеля (kinoDoc) | Описание отеля, цены, услуги и скидки, по ним отвечал FAQ-агент |
Раньше оплату менеджер проверял сам. В новой схеме это делал отдельный воркфлоу по расписанию (cron), и смотрел он все активные брони.
Найти активные брони
Брал из PostgreSQL брони в статусе HOLD или CREATED
Спросить mehotel
По каждой брони запрашивал свежий статус оплаты
Написать менеджеру
Если бронь оплачена, обновлял сессию и сразу писал менеджеру в Telegram
| Ошибка | Как чинил |
|---|---|
items is not defined |
Переключить Code-ноду на Run Once For All Items |
invalid input syntax for integer undefined |
Добавить ноду-строитель перед HTTP-вызовом |
JSON parameter needs valid JSON |
Добавить Set-ноду с правильным JSON |
Text.Required (amoCRM) |
Добавить проверку replyText перед отправкой |
ORIGININVALIDSIGNATURE |
Переключить на Chat API v1 |
.png)
Гости пишут в чат CRM, а менеджер весь день отвечает на одно и то же? Напишите. Посмотрю, какие вопросы бот может закрыть сам, а какие лучше оставить человеку.