{
  "name": "Fleetix: nový dopyt → CRM (HubSpot)",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "fleetix-dopyty",
        "responseMode": "onReceived",
        "options": {
          "rawBody": true
        }
      },
      "id": "00000000-0000-0000-0000-000000000015",
      "name": "Webhook z Fleetixu",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        0
      ],
      "webhookId": "00000000-0000-0000-0000-0000000003fd"
    },
    {
      "parameters": {
        "jsCode": "// Overenie podpisu Fleetixu: X-Fleetix-Signature = sha256=<hex HMAC-SHA256(tajomstvo, surové telo)>.\n// Tajomstvo webhooku (whsec_...) vložte nižšie alebo do premennej prostredia FLEETIX_WEBHOOK_SECRET.\n// n8n na vlastnom serveri: povoľte modul crypto (NODE_FUNCTION_ALLOW_BUILTIN=crypto).\nconst crypto = require('crypto');\nconst SECRET = $env.FLEETIX_WEBHOOK_SECRET || 'whsec_VLOZTE_TAJOMSTVO';\nconst item = $input.first();\nconst raw = Buffer.from(item.binary.data.data, 'base64').toString('utf8');\nconst header = String(item.json.headers['x-fleetix-signature'] || '');\nconst expected = 'sha256=' + crypto.createHmac('sha256', SECRET).update(raw).digest('hex');\nconst a = Buffer.from(header), b = Buffer.from(expected);\nif (a.length !== b.length || !crypto.timingSafeEqual(a, b)) {\n  throw new Error('Neplatný podpis Fleetixu, udalosť sa nespracuje.');\n}\nconst event = JSON.parse(raw);\nreturn [{ json: event }];"
      },
      "id": "00000000-0000-0000-0000-000000000016",
      "name": "Overiť podpis",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        220,
        0
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "00000000-0000-0000-0000-000000001b59",
              "leftValue": "={{ $json.type }}",
              "rightValue": "reservation.created",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            },
            {
              "id": "00000000-0000-0000-0000-000000001b5a",
              "leftValue": "={{ $json.data.reservation.status }}",
              "rightValue": "inquiry",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "00000000-0000-0000-0000-000000000017",
      "name": "Len dopyty",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        440,
        0
      ]
    },
    {
      "parameters": {
        "url": "=https://api.fleetix.eu/v1/vehicles/{{ $json.data.reservation.vehicleId }}",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {}
      },
      "id": "00000000-0000-0000-0000-000000000018",
      "name": "Načítať auto z API",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        660,
        0
      ],
      "notes": "Credential Header Auth: meno Authorization, hodnota Bearer fx_live_... (kľúč s rozsahom vehicles:read)."
    },
    {
      "parameters": {
        "resource": "deal",
        "operation": "create",
        "stage": "appointmentscheduled",
        "additionalFields": {
          "dealName": "=Prenájom {{ $('Overiť podpis').item.json.data.reservation.number }}: {{ $json.name }}",
          "amount": "={{ $('Overiť podpis').item.json.data.reservation.price.total }}",
          "closeDate": "={{ $('Overiť podpis').item.json.data.reservation.pickupAt }}",
          "description": "=Termín {{ $('Overiť podpis').item.json.data.reservation.pickupAt }} až {{ $('Overiť podpis').item.json.data.reservation.returnAt }}. Zdroj: {{ $('Overiť podpis').item.json.data.reservation.source }}. Portál zákazníka: {{ $('Overiť podpis').item.json.data.reservation.portalUrl }}. Zákazník: {{ $('Overiť podpis').item.json.data.customer ? $('Overiť podpis').item.json.data.customer.firstName + ' ' + $('Overiť podpis').item.json.data.customer.lastName + ', ' + $('Overiť podpis').item.json.data.customer.email + ', ' + ($('Overiť podpis').item.json.data.customer.phone || 'bez telefónu') : 'kontakt vo Fleetixe' }}"
        }
      },
      "id": "00000000-0000-0000-0000-000000000019",
      "name": "Obchod v HubSpote",
      "type": "n8n-nodes-base.hubspot",
      "typeVersion": 2.1,
      "position": [
        880,
        0
      ],
      "notes": "Fáza obchodu: zmeňte na ID fázy vo vašom pipeline. Kontakt zákazníka (data.customer: meno, e-mail, telefón) príde, ak webhook vytvoríte kľúčom s rozsahom reservations:read alebo pri webhooku vo Fleetixe zapnete Posielať kontakt zákazníka. Bez neho ostane v popise odkaz na Fleetix."
    }
  ],
  "connections": {
    "Webhook z Fleetixu": {
      "main": [
        [
          {
            "node": "Overiť podpis",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Overiť podpis": {
      "main": [
        [
          {
            "node": "Len dopyty",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Len dopyty": {
      "main": [
        [
          {
            "node": "Načítať auto z API",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Načítať auto z API": {
      "main": [
        [
          {
            "node": "Obchod v HubSpote",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "meta": {
    "templateCredsSetupCompleted": false,
    "source": "https://js.fleetix.eu/sablony/"
  },
  "tags": []
}
