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

231 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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