Эко-отель Киногородок
КЕЙС · ЭКООТЕЛЬ · 2026

AI-бот бронирования
для экоотеля "Киногородок"

Менеджеры отеля сами отвечали гостям в чате amoCRM, уточняли даты, подбирали номера и отправляли ссылки на оплату. Я собрал на n8n и GPT-4o бота, который вёл этот разговор от первого сообщения до подтверждения оплаты. Он искал свободные номера в mehotel, создавал бронь, следил за оплатой и звал менеджера, когда без человека было не обойтись. Над ботом стоял второй агент, он ловил ошибки в самом воркфлоу.

n8n OpenAI GPT-4o amoCRM mehotel API PostgreSQL Telegram
6.4с
от сообщения гостя до вариантов
74%
обращений закрывал бот
1.1М₽
экономии в год
7
намерений гостя, от поиска до отмены
КОРОТКО · РОЛИК

Коротко,
в ролике

Для тех, кому некогда читать. Ролик короче текста, точные цифры и детали - ниже.

КОРОТКИЙ РОЛИК · 0:48 · субтитры можно включить в плеере
01 · СИТУАЦИЯ

Заявки в чате amoCRM разбирали вручную

Загородный экоотель "Киногородок" стоит в Тверской области, рядом с Валдайским биосферным заповедником. Гостям здесь предлагают деревянные домики, банный комплекс и отдых на природе.

Гость писал в чат amoCRM, и дальше разговор вёл менеджер, от дат и выбора номера до ссылки на оплату. Эту переписку нужно было отдать AI-агентам.

Клиент
Экоотель "Киногородок"
Год
2026
Локация
Тверская обл., д. Михайловское · охраняемая биосферная зона ЮНЕСКО
Стек
n8n · OpenAI GPT-4o · amoCRM
mehotel API · PostgreSQL · Telegram Bot

Ещё по теме - AI-боты и ИИ-агенты для CRM · Сопровождение amoCRM и Kommo · CRM и автоматизация в Петербурге

02 · ДО БОТА

Менеджеры отвечали на одно и то же

Обращения шли однотипные, и менеджеры не успевали за их потоком. Гости ждали ответа часами.

  • Вне рабочих часов менеджер не успевал ответить, и гости уходили к конкурентам
  • Цены, условия, как добраться. Эти вопросы повторялись десятки раз в день
  • От первого запроса до брони уходило несколько дней ручной переписки
  • Оплату автоматически никто не отслеживал, менеджер проверял её сам
03 · КАК УСТРОЕН БОТ

Гостя вёл бот, бота проверял агент

Систему я собрал на n8n + GPT-4o. Она вела разговор с гостем от первого сообщения до подтверждения оплаты. Уровней два. Боевой воркфлоу отвечал гостю, а управляющий агент присматривал за самим воркфлоу.

  1. 01

    Понять, чего хочет гость

    AI Router относил каждое сообщение к одному из намерений - поиск, выбор номера, бронь, оплата, вопрос об отеле, отмена или передача менеджеру.

  2. 02

    Спросить mehotel

    Свободные номера бот искал через API mehotel, системы управления отелем. Там же в реальном времени создавал и отменял бронь и получал ссылку на оплату.

  3. 03

    Ответить в amoCRM

    Ответ бот писал обычным человеческим языком и отправлял прямо в чат amoCRM, туда же, где раньше отвечал менеджер.

  4. 04

    Проследить оплату

    Отдельный воркфлоу каждые 5 минут проверял, оплачена ли бронь, и, как только оплата проходила, писал менеджеру в Telegram.

04 · УРОВЕНЬ 1

Боевой воркфлоу
примерно на сотню нод

Через эту цепочку проходило каждое сообщение гостя. Семь веток, по одной на намерение. Поиск, бронь и отмена шли в mehotel, вопросы об отеле в базу знаний, а в конце бот сохранял сессию и обновлял поля лида в amoCRM.

// Цепочка обработки каждого сообщения гостя Сообщение гостя (amoCRM webhook) → Нормализация вебхука → Загрузка сессии (PostgreSQL) → AI Router (определение намерения + извлечение данных) → Маршрутизация по намерению: ├─ search → mehotel /rooms/search → Сохранить → Ответить ├─ select → Выбрать из offersAll[index] → Загрузить фото → Ответить ├─ create_booking → Проверить данные → mehotel /reservations/create → Ответить ├─ pay → Вернуть ссылку оплаты или статус → Ответить ├─ cancel → mehotel /reservations/cancel → Обновить → Ответить ├─ faq → AI_manager (база знаний) → Ответить └─ manager → Пометить лид «Нужен менеджер» → Остановить автоматику → Сохранить сессию → Обновить поля лида в amoCRM
Воркфлоу в n8n — общий вид
ВОРКФЛОУ В n8n · весь граф, около 100 нод и ветки по семи намерениям гостя
05 · УРОВЕНЬ 2

Пять субагентов и проверка раз в 30 минут

Второй уровень, управляющий агент, следил за боевым воркфлоу. Он ловил ошибки, а типовые исправлял сам, правкой через API n8n. Запускался по команде в Telegram, сам при ошибке в воркфлоу и по расписанию, раз в 30 минут.

Субагент Что делал
WorkflowAnalyst Читал воркфлоу, искал проблемы и писал отчёт о состоянии системы
WorkflowEditor Вносил правки в воркфлоу через n8n REST API, без ручного вмешательства
ErrorFixer Разбирал типовые ошибки выполнения и исправлял их сам
SessionDebugger Смотрел сессии гостей в PostgreSQL и искал в них аномалии
APITester Проверял, что mehotel API доступен и отвечает правильно
Управляющий агент в n8n
УПРАВЛЯЮЩИЙ АГЕНТ В n8n · воркфлоу KG_ManagementAgent, пять субагентов и три способа запуска
06 · ТРИ АГЕНТА

Кто в боте
за что отвечал

01

AI Router

Разбирал сообщение гостя и возвращал строгий JSON - намерение, параметры поиска, текст ответа и флаг "нужен менеджер". Дальше по этому JSON работал воркфлоу.

Правило - только JSON, ни слова вне скобок

02

AI Manager

Отвечал на вопросы гостей по базе знаний отеля kinoDoc. Где отель, сколько стоит, какие есть услуги и скидки, можно ли приехать с детьми и с питомцем.

6 видов скидок · 4 площадки · 50+ позиций меню

03

Sales Agent

Вёл гостя по скрипту продаж - приветствие → даты → дети → приоритеты → варианты → тип кровати → контакты → апсейл.

Баню и прокат лодок предлагал сам

Так отвечал AI Router

{ "intent": "search", "search": { "dateStart": "2026-04-25", "dateEnd": "2026-04-27", "adults": 2, "childrenAges": [] }, "replyText": "Ищу доступные номера...", "needsManager": false }
Диалог с AI в amoCRM
ДИАЛОГ В amoCRM · гость пишет даты, бот отвечает вариантами с ценами
07 · ПАМЯТЬ ДИАЛОГА

Гостю не приходилось
повторять даты

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

// n8n OUTPUT · Run 2 of 2 · action: saveContext chatHistory[0] HumanMessage content "Хотим приехать к вам на следующей неделе с пятницы и на все выходные, нас будет двое. Есть свободные номера?" chatHistory[1] AIMessage content { "intent": "search", "needsManager": false, "replyText": "Подбираю варианты на 15–17 мая для 2 взрослых.", "missingFields": [], "search": { "dateStart": "2026-05-15", "dateEnd": "2026-05-17", "adults": 2, "childrenAges": [], "roomPreference": null }, "selection": { "optionIndex": null }, "guest": { "firstName": null, "lastName": null, "phone": null, "email": null }, "customerComment": null }
ПОЛЯ СЕССИИ
dateStart · dateEnd · adults · childrenAges
offersAll · selection · guestName · guestPhone
booking · paymentLink · paymentStatus · flags
Данные сессии в PostgreSQL
СЕССИЯ В PostgreSQL · таблица hotelsession, в одной JSONB-записи весь контекст разговора с гостем
08 · РЕАЛЬНЫЙ ПРОГОН

Гость написал даты,
через 6.4 секунды получил варианты

ГОСТЬ
2 взрослых, 25.04–27.04, нужен домик
AI Router → intent: search · dateStart: 2026-04-25 · adults: 2
mehotel /rooms/search → 10 вариантов ← ~3.2с
AI-БОТ
На даты с 25.04.2026 по 27.04.2026 нашёл подходящие варианты:

1. Стандарт одноместный — 7 000 ₽, тариф «Базовый»
2. Эконом двухместный — 7 800 ₽, тариф «Базовый»
3. Стандарт Е — 7 800 ₽, тариф «Базовый»

Напишите: вариант 1, вариант 2 или вариант 3.
✓ Ответ за 6.4 секунды ✓ Менеджер не участвовал ✓ Номера и цены прямо из mehotel
Реальный вывод в amoCRM
ОТВЕТ БОТА В ЧАТЕ amoCRM · три варианта номеров с ценами
09 · ИНТЕГРАЦИИ

Шесть систем,
один разговор с гостем

Система Зачем Что именно
amoCRM Здесь гость писал и получал ответы Chat API v1, поля лида обновлялись после каждого шага
mehotel API Система управления отелем Поиск номеров, создание и отмена брони, статус оплаты
PostgreSQL Сессии гостей Таблицы hotelsession, kinogorodok_rooms, room_photos
OpenAI GPT-4o Понимал гостя и писал ответы Намерения, ответы на вопросы, ведение диалога
Telegram Bot Уведомления менеджеру Статус оплаты, ошибки, команды управляющему агенту (/analyze workflow)
Google Docs База знаний отеля (kinoDoc) Описание отеля, цены, услуги и скидки, по ним отвечал FAQ-агент
10 · ОПЛАТА

Payment Watcher
раз в 5 минут

Раньше оплату менеджер проверял сам. В новой схеме это делал отдельный воркфлоу по расписанию (cron), и смотрел он все активные брони.

  1. 01

    Найти активные брони

    Брал из PostgreSQL брони в статусе HOLD или CREATED

  2. 02

    Спросить mehotel

    По каждой брони запрашивал свежий статус оплаты

  3. 03

    Написать менеджеру

    Если бронь оплачена, обновлял сессию и сразу писал менеджеру в Telegram

11 · АВТОФИКС

Пять типовых ошибок агент
чинил сам

Ошибка Как чинил
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
12 · ИТОГ

Что собрано
и что записано

Wiki-документация проекта в Obsidian
ДОКУМЕНТАЦИЯ В OBSIDIAN · 21 страница о том, как устроена система
13 · СТЕК

На чём
всё держалось

n8n
Все воркфлоу, на своём сервере (self-hosted)
OpenAI GPT-4o
Агенты Intent, FAQ, Sales, Management
amoCRM
Чат с гостями, Chat API v1
mehotel API
PMS отеля, номера и брони
PostgreSQL
Сессии гостей и база номеров
Telegram Bot API
Уведомления менеджерам и команды агенту
Google Docs
База знаний kinoDoc для FAQ-агента
Claude Code + MCP
Здесь я писал воркфлоу, через n8n MCP
СЛЕДУЮЩИЙ ШАГ

Обсудим
задачу.

Гости пишут в чат CRM, а менеджер весь день отвечает на одно и то же? Напишите. Посмотрю, какие вопросы бот может закрыть сам, а какие лучше оставить человеку.

TELEGRAM @Edgar_Pucinsh EMAIL pucinsh@yandex.ru КЕЙС AI-бот бронирования, 2024