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

4.4 KiB
Raw Permalink Blame History

Формат ответа вебхука проверки полиса в n8n

Рекомендуемый формат (для совместимости с PHP и n8n)

Успешный ответ (полис найден и валиден):

{
  "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"
  }
}

Полис не найден:

{
  "success": false,
  "found": 0,
  "message": "Полис не найден в базе данных",
  "result": null
}

Полис найден, но тариф не подходит:

{
  "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) ожидает:

$response = json_decode($curl_response, true);
if ($response['success'] === 'true' || $response['success'] === true) {
    // Полис валиден
}

С новым форматом можно использовать:

$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 (формирование ответа)

// Получаем результат из 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
    }
  };
}