- Перенесена проверка SMS кода в n8n webhook (N8N_SMS_VERIFY_WEBHOOK) - Упрощен формат ответа: убран токен, только success/message - sms-verify.php теперь проксирует запросы на n8n - Обновлен JS код: убрано использование токена - Обновлена документация с упрощенным форматом ответа - Протестировано: верный и неверный коды работают корректно
4.9 KiB
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:
- Зайти в n8n → Credentials → New
- Выбрать "Redis"
- Заполнить:
- Host:
crm.clientright.ru - Port:
6379 - Password: (из .env или пусто)
- Database:
0(по умолчанию)
- Host:
Использование в Node:
- Добавить Redis Node в workflow
- Выбрать созданные credentials
- Выбрать операцию (Get, Set, Set with Expiration, Delete, etc.)
- Указать ключ (можно использовать переменные:
sms:code:{{ $json.phone_cleaned }})
Преимущества
✅ Всё в одном месте - webhook принимает запрос, Redis Node читает/пишет ✅ Визуализация - видно весь процесс на графике ✅ Логирование - n8n автоматически логирует все операции ✅ Обработка ошибок - можно добавить IF Nodes для проверок ✅ Тестирование - можно тестировать каждый шаг отдельно
Пример полного workflow (JSON для импорта в n8n)
Можно создать workflow вручную или импортировать готовый JSON (если нужно, могу создать).