Files
erv-ticket-dev/docs/n8n_redis_example.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

Пример использования Redis в n8n через Webhook

Как это работает

Webhook (точка входа) → Redis Node (чтение/запись) → Ответ

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

Структура:

1. Webhook Trigger
   ↓
2. Function Node (нормализация номера)
   ↓
3. Redis Node (GET) - читаем код из Redis
   ↓
4. Function Node (сравнение кодов)
   ↓
5. Redis Node (DEL) - удаляем код после проверки
   ↓
6. Respond to Webhook

Детализация:

Шаг 1: Webhook Trigger

  • URL: /webhook/sms-verify
  • Method: POST
  • Body:
    {
      "phonenumber": "+79262306381",
      "code": "106574"
    }
    

Шаг 2: Function Node - Нормализация

// Код для Function Node
const phone = $input.item.json.phonenumber || '';
const cleaned = phone
  .replace(/[() -]/g, '')
  .replace(/^(\+?7|8)/, '');

return {
  json: {
    phone_cleaned: cleaned,
    code: $input.item.json.code
  }
};

Шаг 3: Redis Node - Чтение кода

  • Operation: Get
  • Key: sms:code:{{ $json.phone_cleaned }}
  • Результат:
    {
      "phone_cleaned": "9262306381",
      "code": "106574",
      "stored_code": "106574"  // из Redis
    }
    

Шаг 4: Function Node - Сравнение

// Код для Function Node
const inputCode = $input.item.json.code;
const storedCode = $input.item.json.stored_code;

if (!storedCode) {
  return {
    json: {
      success: false,
      message: "Код не найден или истек"
    }
  };
}

if (inputCode !== storedCode) {
  return {
    json: {
      success: false,
      message: "Неверный код"
    }
  };
}

// Код верный - продолжаем
return {
  json: {
    success: true,
    phone_cleaned: $input.item.json.phone_cleaned
  }
};

Шаг 5: Redis Node - Удаление кода

  • Operation: Delete
  • Key: sms:code:{{ $json.phone_cleaned }}

Шаг 6: Redis Node - Создание токена

  • Operation: Set
  • Key: sms:verified:{{ $json.phone_cleaned }}
  • Value: {{ $json.token }} (генерируется в Function Node)
  • TTL: 3600 секунд

Шаг 7: Respond to Webhook

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

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

Структура:

1. Webhook Trigger
   ↓
2. Function Node (нормализация)
   ↓
3. Redis Node (GET) - проверка rate limit
   ↓
4. Function Node (генерация кода)
   ↓
5. Redis Node (SETEX) - сохранение кода
   ↓
6. HTTP Request - отправка SMS
   ↓
7. Respond to Webhook

Детализация:

Шаг 3: Redis Node - Проверка rate limit

  • Operation: Get
  • Key: sms:ratelimit:send:{{ $json.phone_cleaned }}
  • Если значение >= 5 → ошибка через IF Node

Шаг 5: Redis Node - Сохранение кода

  • Operation: Set with Expiration
  • Key: sms:code:{{ $json.phone_cleaned }}
  • Value: {{ $json.code }}
  • TTL: 600 секунд (10 минут)

Шаг 6: HTTP Request - Отправка SMS

  • Method: POST
  • URL: (SMS API провайдера)
  • Body:
    {
      "phone": "{{ $json.phone_cleaned }}",
      "text": "Код подтверждения: {{ $json.code }}"
    }
    

Настройка Redis в n8n

Credentials:

  1. Зайти в n8n → Credentials → New
  2. Выбрать "Redis"
  3. Заполнить:
    • Host: crm.clientright.ru
    • Port: 6379
    • Password: (из .env или пусто)
    • Database: 0 (по умолчанию)

Использование в Node:

  1. Добавить Redis Node в workflow
  2. Выбрать созданные credentials
  3. Выбрать операцию (Get, Set, Set with Expiration, Delete, etc.)
  4. Указать ключ (можно использовать переменные: sms:code:{{ $json.phone_cleaned }})

Преимущества

Всё в одном месте - webhook принимает запрос, Redis Node читает/пишет Визуализация - видно весь процесс на графике Логирование - n8n автоматически логирует все операции Обработка ошибок - можно добавить IF Nodes для проверок Тестирование - можно тестировать каждый шаг отдельно


Пример полного workflow (JSON для импорта в n8n)

Можно создать workflow вручную или импортировать готовый JSON (если нужно, могу создать).