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

4.3 KiB
Raw Blame History

Настройка n8n Workflow для обработки подтвержденных форм

Описание

После того, как пользователь подтвердил форму и прошел SMS-верификацию, данные публикуются в Redis канал clientright:webform:approve. n8n workflow должен:

  1. Подписаться на Redis канал clientright:webform:approve
  2. Обработать данные формы
  3. Отметить форму как подтвержденную в PostgreSQL (чтобы она больше не показывалась в черновиках)

Структура данных в Redis канале

{
  "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:

-- Используйте 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 обновлена:

    SELECT id, status_code, is_confirmed, updated_at 
    FROM clpr_claims 
    WHERE payload->>'claim_id' = 'YOUR_CLAIM_ID';
    
  2. Проверьте, что форма не показывается в черновиках:

    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)