# Пример использования 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:** ```json { "phonenumber": "+79262306381", "code": "106574" } ``` #### Шаг 2: Function Node - Нормализация ```javascript // Код для 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 }}` - **Результат:** ```json { "phone_cleaned": "9262306381", "code": "106574", "stored_code": "106574" // из Redis } ``` #### Шаг 4: Function Node - Сравнение ```javascript // Код для 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 ```json { "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:** ```json { "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 (если нужно, могу создать).