📋 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: Создание сценария

  1. Перейдите: Scenarios+ Create scenario
  2. Введите название (указано ниже для каждого)
  3. Выберите Condition (триггер) (указан ниже)
  4. Нажмите + 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>"
}

Проверка:

  1. Нажмите RUN TEST
  2. Откройте n8n → Executions для WF-1: должно появиться новое выполнение
  3. Если ответ 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 уровней защиты:

  1. NextBot: forwarded_output через HTTP webhook — НЕ триггерит сценарий "Manager message"
  2. n8n WF-1: event: manager_message → private note в CW (видно, но не пересылается)
  3. n8n WF-2: фильтр sender.type === "user" + message_type === 1 + private === false
  4. Supabase: idempotency по message_id + direction
  5. n8n WF-2: проверка content_attributes.external_id — свои игнорируем

⚙️ Настройки оператора (T9)

Где: NextBot → EastPay → Agent Settings → Управление активностью

Настройка Значение Зачем
Автозасыпание при менеджере ✅ ВКЛ ИИ молчит пока менеджер в диалоге
Авто-возобновление 30 мин Менеджер ушёл → ИИ продолжает
Буфер сообщений 10 сек Собирает короткие реплики в один запрос

📝 Чек-лист выполнения

Фаза 1: Создание сценариев

Фаза 2: Проверка на реальном боте

Фаза 3: Настройки оператора (T9)


Обновлено: 2026-03-05 16:10
Версия: 3.0 (Real UI — Request body form)
Автор: CTO Architecture Team