32 lines
2.1 KiB
Markdown
32 lines
2.1 KiB
Markdown
|
|
# Профиль: ответ N8N_CONTACT_WEBHOOK из SQL
|
|||
|
|
|
|||
|
|
## Цепочка в n8n
|
|||
|
|
|
|||
|
|
1. **Webhook** (POST) — получает от бэкенда `unified_id`, `entry_channel`, `chat_id`, `session_token`, `contact_id`, `phone`.
|
|||
|
|
2. **SQL** — по `unified_id`/`contact_id` выбирает контакт из БД. Возвращает массив строк в формате:
|
|||
|
|
- `contactid`, `firstname`, `lastname`, `email`, `mobile`, `phone`, `birthday`, `mailingstreet`, `middle_name`, `birthplace`, `inn`, `verification`, `bank`
|
|||
|
|
3. **Code** — преобразует строки в JSON для ответа вебхука (см. `N8N_CODE_PROFILE_CONTACT_RESPONSE.js`).
|
|||
|
|
4. **Respond to Webhook** — отдаёт ответ клиенту (тело = вывод Code).
|
|||
|
|
|
|||
|
|
## Формат ответа
|
|||
|
|
|
|||
|
|
- **Ничего не нашли:** вернуть **HTTP 200** и тело `{ "items": [] }`.
|
|||
|
|
- **Нашли контакт(ы):** **HTTP 200** и тело `{ "items": [ { ...поля в snake_case... } ] }`.
|
|||
|
|
|
|||
|
|
Поля контакта (уже в формате мини-апа после Code):
|
|||
|
|
|
|||
|
|
- `last_name`, `first_name`, `middle_name`
|
|||
|
|
- `birth_date`, `birth_place`
|
|||
|
|
- `inn`, `email`, `phone`
|
|||
|
|
- `registration_address` (в SQL: `mailingstreet` — адрес регистрации)
|
|||
|
|
- `mailing_address`, `bank_for_compensation`
|
|||
|
|
|
|||
|
|
## Подстановка Code-ноды
|
|||
|
|
|
|||
|
|
- Скопировать код из `aiform_prod/docs/N8N_CODE_PROFILE_CONTACT_RESPONSE.js` в ноду **Code**.
|
|||
|
|
- Вход Code — вывод SQL (один item с массивом в `json` или несколько items по одному контакту).
|
|||
|
|
- Выход Code — один item с `{ "items": [ ... ] }`.
|
|||
|
|
- В **Respond to Webhook** указать: ответить телом из предыдущей ноды (всё из Code), чтобы в ответ ушёл именно `{ "items": [...] }`.
|
|||
|
|
|
|||
|
|
Если SQL не нашёл строк — перед Code добавьте условие (IF): при пустом результате отдавать в Respond to Webhook тело `{ "items": [] }` и статус 200.
|