{
  "name": "Autentify Verify: verificar e-mails de uma planilha do Google",
  "nodes": [
    {
      "parameters": {
        "content": "## Verificar e-mails de uma planilha com o Autentify Verify\n\n**Antes de usar**\n1. A planilha precisa das colunas `email`, `resultado`, `acao`, `motivo` e `verificado_em` (só `email` preenchida).\n2. Crie a chave de API no portal da Autentify (portal.autentify.com.br, menu API).\n3. No nó **Autentify Verify**, crie uma credencial **Bearer Auth** e cole a chave.\n4. Nos nós **Ler planilha** e **Gravar resultado**, escolha a sua conta do Google, a planilha e a aba. Em **Gravar resultado**, depois de escolher a planilha, confira **Mapping Column Mode** = **Map Automatically** e **Column to Match On** = `email` (o n8n limpa os dois quando a planilha muda).\n\n**Como funciona**\nLê as linhas sem resultado (ou com resultado inconclusivo ou erro), verifica cada e-mail e grava o resultado na mesma linha. Pode rodar de novo no mesmo dia: o que já foi verificado não é cobrado outra vez.\n\n**Créditos e limites**\n1 crédito por resultado conclusivo; inconclusivo e erro não são cobrados. Uma verificação a cada 3 segundos (o limite da API é 20 por minuto). Para listas grandes, envie o CSV pelo portal: é mais rápido.\n\nGuia: www.autentify.com.br/integracoes/n8n/",
        "height": 560,
        "width": 440,
        "color": 4
      },
      "name": "Como usar",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -280,
        120
      ]
    },
    {
      "parameters": {},
      "name": "Ao clicar em Executar",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        220,
        300
      ]
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "value": "",
          "mode": "url"
        },
        "sheetName": {
          "__rl": true,
          "value": "",
          "mode": "list"
        },
        "options": {}
      },
      "name": "Ler planilha",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        440,
        300
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "conditions": [
            {
              "id": "tem-email",
              "leftValue": "={{ String($json.email ?? '').trim() }}",
              "rightValue": "",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              }
            },
            {
              "id": "pendente",
              "leftValue": "={{ ['', 'inconclusivo'].includes(String($json.resultado ?? '').trim()) || String($json.resultado ?? '').startsWith('erro') }}",
              "rightValue": "",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "name": "Só linhas a verificar",
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.2,
      "position": [
        660,
        300
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://gateway.autentify.com.br/v1/verify",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Idempotency-Key",
              "value": "={{ ('n8n:' + String($json.email).trim() + ':' + $now.toFormat('yyyy-MM-dd')).hash('sha256') }}"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify({ email: String($json.email).trim() }) }}",
        "options": {
          "batching": {
            "batch": {
              "batchSize": 1,
              "batchInterval": 3100
            }
          },
          "response": {
            "response": {
              "fullResponse": true,
              "neverError": true,
              "responseFormat": "json"
            }
          },
          "timeout": 30000
        }
      },
      "name": "Autentify Verify",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        880,
        300
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "email",
              "name": "email",
              "value": "={{ $('Só linhas a verificar').item.json.email }}",
              "type": "string"
            },
            {
              "id": "resultado",
              "name": "resultado",
              "value": "={{ $json.statusCode === 200 ? ({ deliverable: 'entregável', undeliverable: 'não entregável', risky: 'arriscado', unknown: 'inconclusivo' })[$json.body.state] ?? $json.body.state : $json.statusCode === 422 ? 'inválido' : 'erro: ' + ($json.body?.error?.code ?? $json.statusCode) }}",
              "type": "string"
            },
            {
              "id": "acao",
              "name": "acao",
              "value": "={{ $json.statusCode === 200 ? ({ deliverable: 'pode enviar', undeliverable: 'remover', risky: 'enviar com cautela', unknown: 'tentar de novo depois' })[$json.body.state] ?? '' : ({ 422: 'corrigir ou remover', 402: 'comprar créditos' })[$json.statusCode] ?? 'tentar de novo depois' }}",
              "type": "string"
            },
            {
              "id": "motivo",
              "name": "motivo",
              "value": "={{ $json.statusCode === 200 ? ($json.body.reason ?? '') : ($json.body?.error?.message ?? '') }}",
              "type": "string"
            },
            {
              "id": "verificado_em",
              "name": "verificado_em",
              "value": "={{ $json.statusCode === 200 ? $json.body.verified_at : '' }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "name": "Montar resultado",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1100,
        300
      ]
    },
    {
      "parameters": {
        "operation": "update",
        "columns": {
          "mappingMode": "autoMapInputData",
          "value": {},
          "matchingColumns": [
            "email"
          ],
          "schema": []
        },
        "documentId": {
          "__rl": true,
          "value": "",
          "mode": "url"
        },
        "sheetName": {
          "__rl": true,
          "value": "",
          "mode": "list"
        },
        "options": {}
      },
      "name": "Gravar resultado",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        1320,
        300
      ]
    }
  ],
  "connections": {
    "Ao clicar em Executar": {
      "main": [
        [
          {
            "node": "Ler planilha",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Ler planilha": {
      "main": [
        [
          {
            "node": "Só linhas a verificar",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Só linhas a verificar": {
      "main": [
        [
          {
            "node": "Autentify Verify",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Autentify Verify": {
      "main": [
        [
          {
            "node": "Montar resultado",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Montar resultado": {
      "main": [
        [
          {
            "node": "Gravar resultado",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "meta": {
    "templateCredsSetupCompleted": false
  }
}
