150 lines
4.4 KiB
Markdown
150 lines
4.4 KiB
Markdown
# Формат ответа вебхука проверки полиса в 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
|
||
}
|
||
};
|
||
}
|
||
```
|