Files
aiform_dev/docs/N8N_FORM_APPROVAL_WORKFLOW.md
AI Assistant 521831be5e docs: Add n8n workflow documentation for form approval
Added documentation for n8n workflow setup:
- Redis channel subscription (clientright:webform:approve)
- Data structure description
- SQL script usage for marking forms as approved
- Verification steps

Files:
- docs/N8N_FORM_APPROVAL_WORKFLOW.md
2025-11-25 16:42:28 +03:00

121 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Настройка n8n Workflow для обработки подтвержденных форм
## Описание
После того, как пользователь подтвердил форму и прошел SMS-верификацию, данные публикуются в Redis канал `clientright:webform:approve`. n8n workflow должен:
1. Подписаться на Redis канал `clientright:webform:approve`
2. Обработать данные формы
3. Отметить форму как подтвержденную в PostgreSQL (чтобы она больше не показывалась в черновиках)
## Структура данных в Redis канале
```json
{
"event_type": "form_approve",
"status": "approved",
"message": "Форма подтверждена после SMS-верификации",
"claim_id": "0eb051ec-23a6-4e06-8b98-f02d20d35f68",
"session_token": "sess_xxx",
"unified_id": "usr_xxx",
"phone": "79262306381",
"sms_code": "123456",
"sms_verified": true,
"idempotency_key": "claim_id_timestamp_user_id",
"timestamp": "2025-11-25T12:30:36.262855",
"form_data": { /* данные формы */ },
"user": { /* данные пользователя */ },
"project": { /* данные проекта */ },
"offenders": [ /* нарушители */ ],
"meta": { /* метаданные */ }
}
```
## Настройка n8n Workflow
### Шаг 1: Redis Subscribe Node
1. Добавьте **Redis Subscribe** node
2. Настройте подключение к Redis:
- Host: `crm.clientright.ru` (или IP вашего Redis)
- Port: `6379`
- Password: `CRM_Redis_Pass_2025_Secure!`
3. Channel: `clientright:webform:approve`
4. Output: `JSON`
### Шаг 2: Обработка данных
После получения данных из Redis канала:
1. **Parse JSON** (если нужно)
2. **Обработайте данные формы** (сохранение в CRM, отправка уведомлений и т.д.)
3. **Отметьте форму как подтвержденную** (см. Шаг 3)
### Шаг 3: Отметка формы как подтвержденной
Используйте **PostgreSQL** node с SQL скриптом из `SQL_MARK_FORM_APPROVED.sql`:
```sql
-- Используйте claim_id из данных Redis события
WITH claim_lookup AS (
SELECT
c.id,
c.payload,
c.status_code,
c.is_confirmed
FROM clpr_claims c
WHERE c.id::text = '{{ $json.claim_id }}'::text
OR c.payload->>'claim_id' = '{{ $json.claim_id }}'::text
ORDER BY
CASE WHEN c.id::text = '{{ $json.claim_id }}'::text THEN 1 ELSE 2 END,
c.updated_at DESC
LIMIT 1
)
UPDATE clpr_claims c
SET
status_code = 'approved',
is_confirmed = true,
updated_at = now()
FROM claim_lookup cl
WHERE c.id = cl.id
RETURNING
c.id,
c.payload->>'claim_id' AS claim_id,
c.status_code,
c.is_confirmed,
c.updated_at;
```
**Параметры:**
- `{{ $json.claim_id }}` - claim_id из данных Redis события
**Результат:**
- Форма помечается как `status_code = 'approved'`
- Устанавливается `is_confirmed = true`
- Форма больше не будет показываться в списке черновиков (`/api/v1/claims/drafts/list`)
## Проверка работы
После обработки события в n8n:
1. Проверьте, что запись в `clpr_claims` обновлена:
```sql
SELECT id, status_code, is_confirmed, updated_at
FROM clpr_claims
WHERE payload->>'claim_id' = 'YOUR_CLAIM_ID';
```
2. Проверьте, что форма не показывается в черновиках:
```bash
curl "http://localhost:8200/api/v1/claims/drafts/list?unified_id=YOUR_UNIFIED_ID"
```
## Важные поля из Redis события
- `claim_id` - ID заявки (используется для обновления статуса)
- `sms_code` - SMS код, использованный для верификации (для аудита)
- `form_data` - данные формы подтверждения
- `user`, `project`, `offenders` - структурированные данные формы
- `idempotency_key` - ключ для защиты от дублей (для будущей интеграции с RabbitMQ)