📋 NextBot → Chatwoot: Полная карта сценариев
Проект: EastPay (ID:
276a96dd-9dea-41f6-8828-3666a84d85c1)
n8n Webhook URL:https://n8n.flowzzy.com/webhook/nextbot-message-sync
Документ для ручной настройки в NextBot UI
🏗️ Архитектура потоков данных
┌──────────────────────────────────────────────────────────────────┐
│ ПОЛНАЯ КАРТА ПОТОКОВ │
│ │
│ 👤 Клиент │
│ │ │
│ ▼ (Telegram Bot) │
│ ┌──────────┐ Сценарий 1-4 ┌──────┐ ┌───────────┐ │
│ │ NextBot │ ──── Custom API ──→ │ n8n │ ──→ │ Chatwoot │ │
│ │ (AI Bot) │ │ WF-1 │ │ (Менеджер) │ │
│ └──────────┘ └──────┘ └───────────┘ │
│ ▲ │ │ │
│ │ │ (бот отправляет ┌──────┐ │ │
│ │ │ через TG API) │ n8n │ ←──┘ │
│ │ └─ клиент видит ←──────────────│ WF-2 │ CW webhook │
│ │ └──────┘ │
│ │ Webhook: forwarded_output │ │
│ └────────────────────────────────────────┘ │
│ │
│ ⚠️ НИКОГДА не слать в Telegram напрямую! │
│ Все сообщения клиенту → ТОЛЬКО через NextBot webhook. │
└──────────────────────────────────────────────────────────────────┘
📋 Справочник: Доступные system_data переменные
| UI Name (в dropdown Value) | Что содержит | Тип данных |
|---|---|---|
| Dialog ID | ID диалога в NextBot (число) | число |
| User ID | ID пользователя в мессенджере (TG chat_id) | число |
| Telegram: user name | @username в Telegram | строка |
| Messenger name | Полное имя мессенджера ("Telegram") | строка |
| Messenger | Тип мессенджера | строка |
| Dialog start (text) | Текст первого сообщения клиента | строка |
| Full dialog | Вся история разговора | строка |
| AI agent reply | Последний ответ AI-агента | строка |
| Error message | Текст ошибки отправки | строка |
| Dialog link | Ссылка на диалог в NextBot | URL |
| User link in messenger | Ссылка на профиль юзера в TG | URL |
| Agent hash | Hash агента (проект) | строка |
🔧 Общие настройки (для ВСЕХ сценариев одинаковые)
Перед созданием каждого сценария:
Шаг A: Создание сценария
- Перейдите: Scenarios → + Create scenario
- Введите название (указано ниже для каждого)
- Выберите Condition (триггер) (указан ниже)
- Нажмите + Add action → выберите Custom API
Шаг B: Настройка Custom API (одинаково для всех)
| Поле | Значение |
|---|---|
| Request method | POST |
| Request URL | https://n8n.flowzzy.com/webhook/nextbot-message-sync |
Шаг C: Request headers
Нажмите + NEW PARAMETER и добавьте:
| Name | Value |
|---|---|
Content-Type |
application/json |
Шаг D: Request body
Заполняется по таблице ниже для каждого сценария.
⚠️ ВАЖНО: Типы значений (Value type):
Text— вы сами вводите фиксированный текст (например, название события)System data— выбираете из dropdown переменную NextBot (динамическое значение)
📦 Сценарий 1: CW Sync: Старт диалога
Настройки сценария
| Параметр | Значение |
|---|---|
| Название | CW Sync: Старт диалога |
| Condition (триггер) | Начало диалога / Dialog start |
| Action | Custom API |
Request body — добавьте 6 параметров:
Нажимайте + NEW PARAMETER для каждой строки:
| # | Field name | Value type | Value | Пояснение |
|---|---|---|---|---|
| 1 | event |
Text | dialog_start |
⚠️ Именно Text, НЕ System data! Это имя события |
| 2 | dialog_id |
System data | Dialog ID |
ID диалога |
| 3 | text |
System data | Dialog start (text) |
Текст первого сообщения |
| 4 | user_id |
System data | User ID |
ID пользователя в TG |
| 5 | user_name |
System data | Telegram: user name |
@username в Telegram |
| 6 | messenger |
System data | Messenger name |
Имя мессенджера |
✅ JSON structure preview должен выглядеть так:
{
"event": "dialog_start",
"dialog_id": "<System data: Dialog ID>",
"text": "<System data: Dialog start (text)>",
"user_id": "<System data: User ID>",
"user_name": "<System data: Telegram: user name>",
"messenger": "<System data: Messenger name>"
}
Проверка:
- Нажмите
RUN TEST - Откройте n8n → Executions для WF-1: должно появиться новое выполнение
- Если ответ
200 OK— сценарий работает ✅
📦 Сценарий 2: CW Sync: Входящее от клиента
Настройки сценария
| Параметр | Значение |
|---|---|
| Название | CW Sync: Входящее от клиента |
| Condition (триггер) | Новое сообщение клиента / New client message |
| Action | Custom API |
Request body — 5 параметров:
| # | Field name | Value type | Value | Пояснение |
|---|---|---|---|---|
| 1 | event |
Text | client_message |
Фиксированное имя события |
| 2 | dialog_id |
System data | Dialog ID |
ID диалога |
| 3 | full_dialog |
System data | Full dialog |
Полная история (n8n извлечёт последнее сообщение) |
| 4 | user_id |
System data | User ID |
ID пользователя |
| 5 | user_name |
System data | Telegram: user name |
@username |
✅ JSON structure preview:
{
"event": "client_message",
"dialog_id": "<System data: Dialog ID>",
"full_dialog": "<System data: Full dialog>",
"user_id": "<System data: User ID>",
"user_name": "<System data: Telegram: user name>"
}
💡 Почему Full dialog, а не отдельное сообщение?
В system_data нет переменной "текст текущего сообщения клиента".Full dialogсодержит всю историю, и n8n Code node автоматически извлечёт последнюю реплику.
📦 Сценарий 3: CW Sync: Ответ агента
Настройки сценария
| Параметр | Значение |
|---|---|
| Название | CW Sync: Ответ агента |
| Condition (триггер) | Новое сообщение агента / New agent message |
| Action | Custom API |
Request body — 5 параметров:
| # | Field name | Value type | Value | Пояснение |
|---|---|---|---|---|
| 1 | event |
Text | agent_message |
Фиксированное имя события |
| 2 | dialog_id |
System data | Dialog ID |
ID диалога |
| 3 | text |
System data | AI agent reply |
Точный текст ответа AI |
| 4 | user_id |
System data | User ID |
ID пользователя |
| 5 | messenger |
System data | Messenger name |
Мессенджер |
✅ JSON structure preview:
{
"event": "agent_message",
"dialog_id": "<System data: Dialog ID>",
"text": "<System data: AI agent reply>",
"user_id": "<System data: User ID>",
"messenger": "<System data: Messenger name>"
}
📦 Сценарий 4: CW Sync: Ошибка отправки
Настройки сценария
| Параметр | Значение |
|---|---|
| Название | CW Sync: Ошибка отправки |
| Condition (триггер) | Ошибка отправки сообщения / Message send error |
| Action | Custom API |
Request body — 4 параметра:
| # | Field name | Value type | Value | Пояснение |
|---|---|---|---|---|
| 1 | event |
Text | send_error |
Фиксированное имя события |
| 2 | dialog_id |
System data | Dialog ID |
ID диалога |
| 3 | text |
System data | Error message |
Текст ошибки |
| 4 | user_id |
System data | User ID |
ID пользователя |
✅ JSON structure preview:
{
"event": "send_error",
"dialog_id": "<System data: Dialog ID>",
"text": "<System data: Error message>",
"user_id": "<System data: User ID>"
}
📦 Сценарий 5: CW Sync: Менеджер в NextBot (⚠️ создавать ПОСЛЕ тестов 1-4!)
Настройки сценария
| Параметр | Значение |
|---|---|
| Название | CW Sync: Менеджер в NextBot |
| Condition (триггер) | Новое сообщение менеджера / Manager message |
| Action | Custom API |
Request body — 4 параметра:
| # | Field name | Value type | Value | Пояснение |
|---|---|---|---|---|
| 1 | event |
Text | manager_message |
Фиксированное имя события |
| 2 | dialog_id |
System data | Dialog ID |
ID диалога |
| 3 | full_dialog |
System data | Full dialog |
Полная история |
| 4 | user_id |
System data | User ID |
ID пользователя |
⚠️ ОСТОРОЖНО с петлями! Создавайте только после того, как сценарии 1-4 протестированы и работают стабильно.
⚠️ Частые ошибки (НЕ допускайте!)
❌ Ошибка 1: Неправильный Value type для event
НЕПРАВИЛЬНО:
event | System data | Dialog start (text) ← Это текст сообщения, НЕ имя события!
ПРАВИЛЬНО:
event | Text | dialog_start ← Статический текст
❌ Ошибка 2: Перепутан источник текста
НЕПРАВИЛЬНО:
text | System data | Full dialog ← Это ВСЯ история! Огромная строка!
ПРАВИЛЬНО (для Сценария 1):
text | System data | Dialog start (text) ← Первое сообщение
ПРАВИЛЬНО (для Сценария 3):
text | System data | AI agent reply ← Ответ агента
ПРАВИЛЬНО (для Сценария 2):
full_dialog | System data | Full dialog ← n8n сам извлечёт последнее
❌ Ошибка 3: Забыли Content-Type в headers
Без Content-Type: application/json n8n не сможет разобрать body.
❌ Ошибка 4: Создали сценарий для другого проекта
Убедитесь, что в шапке NextBot написано EastPay (а не другой проект!).
🔄 Обратный поток: Chatwoot → NextBot
⚠️ АРХИТЕКТУРНОЕ ПРАВИЛО: Все сообщения клиенту идут ТОЛЬКО через NextBot webhook.
НИКОГДА не через Telegram API (sendMessage) напрямую!
Когда менеджер пишет из Chatwoot:
Chatwoot → Global Webhook → n8n WF-2 → NextBot Webhook API → бот отправляет клиенту
NextBot Webhook URL:
https://app.nextbot.kz/api/webhooks/v1/276a96dd-9dea-41f6-8828-3666a84d85c1/41a58518d5a44d66bb656df141ad0963
n8n отправляет в NextBot:
{
"dialog_id": 10177062,
"text": "Подтверждаю ваш заказ.",
"message_type": "forwarded_output"
}
Типы message_type:
| Тип | Что происходит | Когда |
|---|---|---|
forwarded_output |
✅ Отправляется клиенту + записывается в историю AI | Ответ менеджера |
notification |
Системное уведомление (клиент не видит) | Логирование |
input |
Имитация входящего (клиент не видит) | Контекст для ИИ |
🛡️ Защита от петель
5 уровней защиты:
- NextBot:
forwarded_outputчерез HTTP webhook — НЕ триггерит сценарий "Manager message" - n8n WF-1:
event: manager_message→ private note в CW (видно, но не пересылается) - n8n WF-2: фильтр
sender.type === "user"+message_type === 1+private === false - Supabase: idempotency по
message_id + direction - n8n WF-2: проверка
content_attributes.external_id— свои игнорируем
⚙️ Настройки оператора (T9)
Где: NextBot → EastPay → Agent Settings → Управление активностью
| Настройка | Значение | Зачем |
|---|---|---|
| Автозасыпание при менеджере | ✅ ВКЛ | ИИ молчит пока менеджер в диалоге |
| Авто-возобновление | 30 мин | Менеджер ушёл → ИИ продолжает |
| Буфер сообщений | 10 сек | Собирает короткие реплики в один запрос |
📝 Чек-лист выполнения
Фаза 1: Создание сценариев
- Сценарий 1 создан (Dialog start) → JSON preview корректный
- Сценарий 1: RUN TEST → n8n execution появился
- Сценарий 2 создан (New client message) → JSON preview корректный
- Сценарий 3 создан (New agent message) → JSON preview корректный
- Сценарий 4 создан (Message send error) → JSON preview корректный
Фаза 2: Проверка на реальном боте
- Отправить сообщение боту в Telegram
- В n8n Executions (WF-1): появились 2 execution (client + agent)
- В Chatwoot: создался контакт и разговор с сообщениями
- В Supabase: записи в
channel_mappingиsync_message_log
Фаза 3: Настройки оператора (T9)
- Автозасыпание включено
- Авто-возобновление 30 мин
- (Позже) Сценарий 5 создан и протестирован
Обновлено: 2026-03-05 16:10
Версия: 3.0 (Real UI — Request body form)
Автор: CTO Architecture Team