- Перенесена проверка SMS кода в n8n webhook (N8N_SMS_VERIFY_WEBHOOK) - Упрощен формат ответа: убран токен, только success/message - sms-verify.php теперь проксирует запросы на n8n - Обновлен JS код: убрано использование токена - Обновлена документация с упрощенным форматом ответа - Протестировано: верный и неверный коды работают корректно
5.9 KiB
5.9 KiB
Формат ответа N8N Webhook для проверки SMS кода
URL Webhook
https://n8n.clientright.pro/webhook/erv_sms_verify
Входящие данные (POST)
{
"phonenumber": "+79262306381",
"code": "106574"
}
Формат ответа
✅ Успешная проверка (HTTP 200)
{
"success": true,
"message": "Код подтвержден"
}
Поля:
success(boolean, обязательное) -trueпри успехеmessage(string, обязательное) - сообщение для пользователя
❌ Ошибки (HTTP 400)
1. Неверный код
{
"success": false,
"error": "invalid_code",
"message": "Неверный код"
}
Поля:
success(boolean) -falseerror(string) - код ошибки:"invalid_code"message(string) - сообщение для пользователя
2. Код не найден или истек
{
"success": false,
"error": "code_not_found",
"message": "Код не найден или истек. Запросите новый код."
}
Поля:
success(boolean) -falseerror(string) - код ошибки:"code_not_found"message(string) - сообщение для пользователя
3. Превышен лимит попыток
{
"success": false,
"error": "rate_limit_exceeded",
"message": "Превышено количество попыток. Попробуйте позже."
}
Поля:
success(boolean) -falseerror(string) - код ошибки:"rate_limit_exceeded"message(string) - сообщение для пользователя
4. Номер телефона или код не указаны
{
"success": false,
"error": "missing_data",
"message": "Номер телефона или код не указаны"
}
Поля:
success(boolean) -falseerror(string) - код ошибки:"missing_data"message(string) - сообщение для пользователя
5. Внутренняя ошибка сервера (HTTP 500)
{
"success": false,
"error": "internal_error",
"message": "Сервис временно недоступен. Попробуйте позже."
}
Поля:
success(boolean) -falseerror(string) - код ошибки:"internal_error"message(string) - сообщение для пользователя
Коды ошибок
| Код ошибки | HTTP Status | Описание |
|---|---|---|
invalid_code |
400 | Введенный код не совпадает с сохраненным |
code_not_found |
400 | Код не найден в Redis или истек (TTL) |
rate_limit_exceeded |
400 | Превышен лимит попыток проверки (10 за 15 минут) |
missing_data |
400 | Не указан номер телефона или код |
internal_error |
500 | Внутренняя ошибка (Redis недоступен и т.д.) |
Примеры использования в n8n
Успешная проверка
Workflow шаги:
- Webhook Trigger → получает
phonenumberиcode - Function Node → нормализация номера
- Redis Node (GET) → чтение кода:
sms:code:9262306381 - Function Node → сравнение кодов
- Redis Node (DEL) → удаление кода и счетчика попыток
- Respond to Webhook → возвращает успешный ответ
Код для Respond to Webhook:
{
"success": true,
"message": "Код подтвержден"
}
Ошибка: Неверный код
Workflow шаги:
- ... (аналогично успешной проверке)
- Function Node → сравнение кодов
- IF Node → если коды не совпадают
- Respond to Webhook → возвращает ошибку
Код для Respond to Webhook:
{
"success": false,
"error": "invalid_code",
"message": "Неверный код"
}
Ошибка: Код не найден
Workflow шаги:
- ... (аналогично)
- Redis Node (GET) → чтение кода
- IF Node → если код = null
- Respond to Webhook → возвращает ошибку
Код для Respond to Webhook:
{
"success": false,
"error": "code_not_found",
"message": "Код не найден или истек. Запросите новый код."
}
Совместимость с текущим кодом
Текущий JS код (common.js) ожидает:
success: function(data) {
if (data.success) {
// Успех - сохраняем токен
sms_verify_token = data.token;
// ... показываем форму
} else {
// Ошибка - показываем сообщение
$('.modal .form-item__warning').text(data.message || "Неверный код");
}
}
Предложенный формат полностью совместим! ✅
Дополнительные рекомендации
-
HTTP Status Codes:
- Успех:
200 OK - Ошибки клиента:
400 Bad Request - Ошибки сервера:
500 Internal Server Error
- Успех:
-
Content-Type:
- Всегда:
application/json; charset=utf-8
- Всегда:
-
Логирование:
- Логировать все попытки проверки (успешные и неуспешные)
- Логировать ошибки с деталями
-
Безопасность:
- Не возвращать детали внутренних ошибок в production
- Не возвращать реальные коды в ответах