Files
erv-clientright/n8n_webhook_response_examples.md
2026-03-13 10:42:01 +03:00

150 lines
4.4 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
## Рекомендуемый формат (для совместимости с PHP и n8n)
### Успешный ответ (полис найден и валиден):
```json
{
"success": true,
"found": 1,
"message": "Полис найден",
"result": {
"id": "35927",
"voucher": "E50208-306083026",
"insured_name": "SHAROV IURII",
"tariff_code_basic": "STB2003",
"tariff_code_other": "SPV2002",
"insured_birth": "10.05.1974",
"insured_from": "19.11.2025",
"insured_to": "24.11.2025"
}
}
```
### Полис не найден:
```json
{
"success": false,
"found": 0,
"message": "Полис не найден в базе данных",
"result": null
}
```
### Полис найден, но тариф не подходит:
```json
{
"success": false,
"found": 0,
"message": "Ваш полис не включает покрытие задержки рейса",
"result": null
}
```
## Использование в n8n
### Вариант 1: Использовать поле `found` для IF Node
**IF Node условие:**
```
{{ $json.found }} === 1
```
Или:
```
{{ $json.found }} == 1
```
### Вариант 2: Использовать поле `success` для IF Node
**IF Node условие:**
```
{{ $json.success }} === true
```
## Использование в PHP
### Текущий код (database.php) ожидает:
```php
$response = json_decode($curl_response, true);
if ($response['success'] === 'true' || $response['success'] === true) {
// Полис валиден
}
```
### С новым форматом можно использовать:
```php
$response = json_decode($curl_response, true);
if (isset($response['found']) && $response['found'] == 1) {
// Полис найден и валиден
} else {
// Полис не найден или не валиден
$message = $response['message'] ?? 'Ошибка проверки полиса';
}
```
## Структура полей
| Поле | Тип | Описание |
|------|-----|----------|
| `success` | boolean | `true` если полис найден и валиден, `false` если нет |
| `found` | integer | `1` если полис найден и валиден, `0` если нет (удобно для IF Node) |
| `message` | string | Текстовое сообщение для пользователя |
| `result` | object/null | Данные полиса из БД или `null` |
## Преимущества этого формата
1. **Совместимость с PHP**: поле `success` как в текущем коде
2. **Удобство для n8n**: поле `found` (1/0) для IF Node
3. **Информативность**: поле `message` для пользователя
4. **Данные**: поле `result` с полной информацией о полисе
## Пример workflow в n8n
```
Webhook (входящий запрос)
→ [Нормализация номера полиса] (Code Node)
→ [Проверка полиса в БД] (MySQL Node)
→ [Формирование ответа] (Code Node)
├─ IF: policy_found_and_valid === 1
│ ├─ Да → Формируем success: true, found: 1
│ └─ Нет → Формируем success: false, found: 0
→ [Ответ вебхука] (Respond to Webhook Node)
```
## Код для Code Node (формирование ответа)
```javascript
// Получаем результат из MySQL Node
const policyCheck = $input.item.json.policy_found_and_valid || 0;
const policyData = $input.item.json; // данные из MySQL (если использовали with_data вариант)
if (policyCheck === 1) {
return {
json: {
success: true,
found: 1,
message: "Полис найден",
result: policyData // данные полиса
}
};
} else {
// Проверяем, был ли полис вообще найден
const wasFound = policyData && policyData.id ? true : false;
return {
json: {
success: false,
found: 0,
message: wasFound
? "Ваш полис не включает покрытие задержки рейса"
: "Полис не найден в базе данных",
result: null
}
};
}
```