{
  "name": "Fotos Faciledita — Campanhas Sazonais",
  "nodes": [
    {
      "id": "cron-campanhas",
      "name": "Agenda — a cada 15 minutos",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1,
      "position": [80, 300],
      "parameters": {
        "rule": { "interval": [{ "field": "minutes", "minutesInterval": 15 }] }
      }
    },
    {
      "id": "busca-campanhas-prontas",
      "name": "Busca campanhas scheduled para disparar",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [280, 300],
      "parameters": {
        "method": "GET",
        "url": "={{ $vars.API_URL }}",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [{ "name": "action", "value": "campaigns_due" }]
        }
      }
    },
    {
      "id": "tem-campanhas",
      "name": "Há campanhas para disparar?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [480, 300],
      "parameters": {
        "conditions": {
          "conditions": [
            { "leftValue": "={{ $json.data.length }}", "operator": { "type": "number", "operation": "gt" }, "rightValue": 0 }
          ]
        }
      }
    },
    {
      "id": "split-campanhas",
      "name": "Divide campanhas",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [680, 200],
      "parameters": { "batchSize": 1, "options": {} }
    },
    {
      "id": "marca-sending",
      "name": "Marca campanha como sending",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [880, 200],
      "parameters": {
        "method": "POST",
        "url": "={{ $vars.API_URL }}?action=campaign_set_status",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={ \"id\": {{ $json.id }}, \"status\": \"sending\" }"
      }
    },
    {
      "id": "busca-destinatarios",
      "name": "Busca leads opt-in da campanha",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [1080, 200],
      "parameters": {
        "method": "GET",
        "url": "={{ $vars.API_URL }}",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            { "name": "action",      "value": "campaign_recipients" },
            { "name": "campaign_id", "value": "={{ $json.id }}" }
          ]
        }
      }
    },
    {
      "id": "split-destinatarios",
      "name": "Divide destinatários",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [1280, 200],
      "parameters": { "batchSize": 1, "options": {} }
    },
    {
      "id": "verifica-optout",
      "name": "Lead pediu PARAR?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [1480, 200],
      "parameters": {
        "conditions": {
          "conditions": [
            { "leftValue": "={{ $json.opted_in }}", "operator": { "type": "number", "operation": "equals" }, "rightValue": 1 }
          ]
        }
      }
    },
    {
      "id": "envia-campanha",
      "name": "Envia mensagem da campanha",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [1680, 150],
      "parameters": {
        "method": "POST",
        "url": "={{ $vars.EVOLUTION_URL }}/message/sendText/{{ $vars.EVOLUTION_INSTANCE }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [{ "name": "apikey", "value": "={{ $vars.EVOLUTION_KEY }}" }]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"number\": \"{{ $json.phone }}\",\n  \"options\": { \"delay\": 1200 },\n  \"textMessage\": {\n    \"text\": \"{{ $('split-campanhas').item.json.message }}\\n\\n_(Para não receber mais mensagens, responda PARAR)_\"\n  }\n}"
      }
    },
    {
      "id": "registra-envio",
      "name": "Registra envio no banco",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [1880, 150],
      "parameters": {
        "method": "POST",
        "url": "={{ $vars.API_URL }}?action=campaign_log_send",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={ \"campaign_id\": {{ $('split-campanhas').item.json.id }}, \"lead_id\": {{ $json.id }} }"
      }
    },
    {
      "id": "delay-anti-spam",
      "name": "Delay 2s anti-spam",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1,
      "position": [2080, 150],
      "parameters": { "unit": "seconds", "amount": 2 }
    },
    {
      "id": "marca-done",
      "name": "Marca campanha como done",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [1680, 400],
      "parameters": {
        "method": "POST",
        "url": "={{ $vars.API_URL }}?action=campaign_set_status",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={ \"id\": {{ $('split-campanhas').item.json.id }}, \"status\": \"done\" }"
      }
    }
  ],
  "connections": {
    "Agenda — a cada 15 minutos": { "main": [[{ "node": "Busca campanhas scheduled para disparar", "type": "main", "index": 0 }]] },
    "Busca campanhas scheduled para disparar": { "main": [[{ "node": "Há campanhas para disparar?", "type": "main", "index": 0 }]] },
    "Há campanhas para disparar?": {
      "main": [
        [{ "node": "Divide campanhas", "type": "main", "index": 0 }],
        []
      ]
    },
    "Divide campanhas": { "main": [[{ "node": "Marca campanha como sending", "type": "main", "index": 0 }]] },
    "Marca campanha como sending": { "main": [[{ "node": "Busca leads opt-in da campanha", "type": "main", "index": 0 }]] },
    "Busca leads opt-in da campanha": { "main": [[{ "node": "Divide destinatários", "type": "main", "index": 0 }]] },
    "Divide destinatários": { "main": [[{ "node": "Lead pediu PARAR?", "type": "main", "index": 0 }]] },
    "Lead pediu PARAR?": {
      "main": [
        [{ "node": "Envia mensagem da campanha", "type": "main", "index": 0 }],
        []
      ]
    },
    "Envia mensagem da campanha": { "main": [[{ "node": "Registra envio no banco", "type": "main", "index": 0 }]] },
    "Registra envio no banco": { "main": [[{ "node": "Delay 2s anti-spam", "type": "main", "index": 0 }]] },
    "Delay 2s anti-spam": { "main": [[{ "node": "Divide destinatários", "type": "main", "index": 0 }]] }
  },
  "settings": { "executionOrder": "v1" },
  "staticData": null
}
