Files
erv-ticket-dev/docs/n8n_sms_workflow.md
Fedor ed4270312e feat: SMS verification через n8n webhook
- Перенесена проверка SMS кода в n8n webhook (N8N_SMS_VERIFY_WEBHOOK)
- Упрощен формат ответа: убран токен, только success/message
- sms-verify.php теперь проксирует запросы на n8n
- Обновлен JS код: убрано использование токена
- Обновлена документация с упрощенным форматом ответа
- Протестировано: верный и неверный коды работают корректно
2026-01-15 18:11:18 +03:00

4.9 KiB
Raw Blame History

N8N Workflow для SMS верификации

Текущая архитектура

Frontend (JS) → PHP (sms-verify.php) → Redis + n8n (только отправка SMS)

Предлагаемая архитектура

Frontend (JS) → n8n Webhook → Redis + SMS отправка (всё в n8n)

Workflow 1: Отправка SMS кода

Webhook URL: https://n8n.clientright.pro/webhook/sms-send

Шаги:

  1. Webhook Trigger (POST)

    • Принимает: { "phonenumber": "+79262306381" }
  2. Нормализация номера телефона

    • Убрать пробелы, скобки, дефисы
    • Убрать +7 или 8 в начале
    • Результат: 9262306381
  3. Проверка Rate Limit (Redis)

    • Ключ: sms:ratelimit:send:9262306381
    • Если значение >= 5 → ошибка "Превышен лимит"
    • Иначе → увеличить счетчик (TTL: 1 час)
  4. Генерация кода

    • 6-значный случайный код: 106574
  5. Сохранение кода в Redis

    • Ключ: sms:code:9262306381
    • Значение: 106574
    • TTL: 600 секунд (10 минут)
  6. Отправка SMS (HTTP Request)

    • URL: API SMS провайдера (SigmaSMS или другой)
    • Метод: POST
    • Body: { "phone": "9262306381", "text": "Код подтверждения: 106574" }
  7. Обработка ошибок

    • Если SMS не отправилось → удалить код из Redis
    • Вернуть ошибку
  8. Ответ

    {
      "success": true,
      "message": "Код отправлен на ваш номер телефона"
    }
    

Workflow 2: Проверка SMS кода

Webhook URL: https://n8n.clientright.pro/webhook/sms-verify

Шаги:

  1. Webhook Trigger (POST)

    • Принимает: { "phonenumber": "+79262306381", "code": "106574" }
  2. Нормализация номера телефона

    • Аналогично workflow 1
  3. Проверка Rate Limit для попыток (Redis)

    • Ключ: sms:ratelimit:attempts:9262306381
    • Если значение >= 10 → ошибка "Превышено количество попыток"
    • Иначе → увеличить счетчик (TTL: 15 минут)
  4. Чтение кода из Redis

    • Ключ: sms:code:9262306381
    • Если не найден → ошибка "Код не найден или истек"
  5. Сравнение кодов

    • Если введенный код !== сохраненный код → ошибка "Неверный код"
  6. Успешная верификация

    • Удалить код из Redis: sms:code:9262306381
    • Удалить счетчик попыток: sms:ratelimit:attempts:9262306381
    • Создать токен верификации: sms:verified:9262306381 = random_token (TTL: 1 час)
  7. Ответ

    {
      "success": true,
      "message": "Код подтвержден",
      "token": "abc123def456..."
    }
    

Workflow 3: Проверка статуса верификации

Webhook URL: https://n8n.clientright.pro/webhook/sms-check-verified

Шаги:

  1. Webhook Trigger (POST)

    • Принимает: { "phonenumber": "+79262306381", "token": "abc123..." }
  2. Нормализация номера

  3. Проверка токена в Redis

    • Ключ: sms:verified:9262306381
    • Если токен совпадает → verified: true
    • Иначе → verified: false
  4. Ответ

    {
      "success": true,
      "verified": true
    }
    

Преимущества переноса в n8n

  1. Визуализация - видно весь процесс на графике
  2. Логирование - все шаги логируются автоматически
  3. Мониторинг - видно ошибки и задержки
  4. Гибкость - легко добавить новые шаги (например, уведомления в Telegram)
  5. Тестирование - можно тестировать каждый шаг отдельно
  6. Масштабируемость - легко добавить несколько SMS провайдеров с fallback

Изменения в PHP коде

После переноса в n8n, sms-verify.php станет простым прокси:

// sms-verify.php?action=send
// Просто перенаправляет на n8n webhook

// sms-verify.php?action=verify  
// Просто перенаправляет на n8n webhook

Или можно вообще убрать PHP и вызывать n8n напрямую из JS.