{
  "name": "aula-00-mapa-do-n8n",
  "nodes": [
    {
      "parameters": {
        "content": "# \ud83d\uddfa\ufe0f  Aula 00 \u2014 Mapa completo do n8n\n\nCat\u00e1logo visual de todos os n\u00f3s, dicas de uso, sintaxe e refer\u00eancias.\n**Nenhum n\u00f3 precisa de credencial ou conex\u00e3o** \u2014 use como refer\u00eancia durante o workshop.",
        "height": 148,
        "width": 1960,
        "color": 5
      },
      "id": "51499f5c-74e6-487a-9d8d-2f2c8aee9fcf",
      "name": "\ud83d\udccc T\u00edtulo",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -192,
        -256
      ]
    },
    {
      "parameters": {
        "content": "### \ud83e\uddea Modo Teste vs Produ\u00e7\u00e3o\n\n**Teste** (bot\u00e3o 'Test workflow')\n- Executa manualmente, 1 vez s\u00f3\n- Webhook URL: `/webhook-test/{path}`\n- Workers N\u00c3O processam \u2014 roda inline\n- Dados ficam vis\u00edveis no canvas\n\n**Produ\u00e7\u00e3o** (toggle Ativo \ud83d\udfe2)\n- Executa no trigger automaticamente\n- Webhook URL: `/webhook/{path}`\n- Workers processam via Redis (queue)\n- Static Data e banco sincronizados\n\n\u26a0\ufe0f Static Data tem race condition com workers em paralelo. Use banco (Postgres) em produ\u00e7\u00e3o.",
        "height": 444,
        "width": 460,
        "color": 4
      },
      "id": "9ccc8d8a-cd1d-4a20-8643-ffb7b90ff0e9",
      "name": "\ud83d\udccc Dica: Modo Teste",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -192,
        -96
      ]
    },
    {
      "parameters": {
        "content": "### \ud83d\udccc Pin Data\n\nTrava a sa\u00edda de um n\u00f3 com JSON fixo.\n\n**Como usar:**\n1. Execute o n\u00f3 ao menos uma vez\n2. Clique no n\u00f3 \u2192 \u00edcone de pin \ud83d\udccc\n3. Sa\u00edda fica congelada com esses dados\n\n**Quando usar:**\n- Desenvolver downstream sem re-disparar o trigger\n- Simular response de API externa\n- Testar fluxo de erro (cole JSON de erro)\n- Demo sem depender de sistema externo\n\n\u26a0\ufe0f Pin data N\u00c3O vai para produ\u00e7\u00e3o.\nRemova antes de ativar o workflow.",
        "height": 444,
        "width": 460,
        "color": 4
      },
      "id": "3de7c867-a6c9-4b04-9bcc-db366908f87a",
      "name": "\ud83d\udccc Dica: Pin Data",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        304,
        -96
      ]
    },
    {
      "parameters": {
        "content": "### \ud83d\udd23 Express\u00f5es \u2014 {{ }}\n\nDentro de qualquer campo do n8n:\n\n`{{ $json.nome }}`\n`{{ $json.endereco.cidade }}`\n`{{ $json.itens[0].preco }}`\n`{{ $json.preco * 1.1 }}`\n`{{ $json.nome.toUpperCase() }}`\n`{{ $now.toISO() }}`\n`{{ DateTime.now().plus({ days: 7 }).toISO() }}`\n`{{ !!$json.ativo }}`\n`{{ $json.lista?.length ?? 0 }}`\n`{{ JSON.stringify($json) }}`\n\nTudo entre `{{ }}` \u00e9 **JavaScript puro**.\nDatas usam a lib **Luxon** (DateTime).\n\n\ud83d\udca1 Ctrl+Space abre autocomplete de vari\u00e1veis.",
        "height": 444,
        "width": 460,
        "color": 4
      },
      "id": "7e3345ae-6dfc-4570-b904-0935e619f0e1",
      "name": "\ud83d\udccc Dica: Express\u00f5es",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        784,
        -96
      ]
    },
    {
      "parameters": {
        "content": "### \ud83d\udd17 Code Node \u2014 Refer\u00eancias\n\n`$json.campo`  \u2014 item atual\n`$input.first().json.campo`\n`$input.all()`  \u2014 todos os items\n\n**Outro n\u00f3 pelo nome:**\n`$('Nome do N\u00f3').item.json.campo`\n`$('Nome do N\u00f3').first().json`\n`$('Nome do N\u00f3').all()`\n\n**Contexto:**\n`$workflow.name`\n`$workflow.id`\n`$env.MINHA_VAR`\n`$now`  \u2014 DateTime Luxon\n`$execution.id`\n\n**Persist\u00eancia entre execu\u00e7\u00f5es:**\n`const s = $getWorkflowStaticData('global');`\n`s.chave = 'valor';`  \u2014 salva\n`s.chave;`  \u2014 l\u00ea\n\n**Retorno obrigat\u00f3rio:**\n`return [{ json: { campo: valor } }]`",
        "height": 444,
        "width": 460,
        "color": 4
      },
      "id": "3fa19192-a22c-441d-b6bd-7abed0344fc1",
      "name": "\ud83d\udccc Dica: Code Node",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1264,
        -96
      ]
    },
    {
      "parameters": {
        "content": "## \u26a1 Triggers \u2014 Como o workflow come\u00e7a\n\nCada workflow precisa de exatamente **1 trigger ativo**. Sem trigger ativo, nada executa automaticamente.\n\n\u2022 **Manual Trigger** \u2192 Executa pelo bot\u00e3o 'Test workflow'. Para desenvolvimento ou execu\u00e7\u00e3o sob demanda.\n\u2022 **Webhook** \u2192 Recebe requisi\u00e7\u00f5es HTTP (POST/GET/PATCH/etc). Principal porta de entrada de APIs externas, formul\u00e1rios e zapier-style integrations.\n\u2022 **Schedule Trigger** \u2192 Executa por cron ou intervalo fixo. Ex: 'todo dia \u00e0s 06:00', 'a cada 30 minutos'.\n\u2022 **Email Trigger (IMAP)** \u2192 Dispara ao receber email novo. Faz polling no servidor IMAP no intervalo configurado.",
        "height": 180,
        "width": 1960,
        "color": 3
      },
      "id": "b6bbd8e2-2f9d-446b-b271-b74041211130",
      "name": "\ud83d\udccc Se\u00e7\u00e3o: Triggers",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -192,
        400
      ]
    },
    {
      "parameters": {},
      "id": "cbd62ab5-d093-4e12-b26b-6cbf162cd1a5",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        -208,
        656
      ]
    },
    {
      "parameters": {
        "path": "exemplo",
        "responseMode": "lastNode",
        "options": {}
      },
      "id": "38f777f0-168e-4651-a646-e60ac887cb73",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        656
      ]
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours"
            }
          ]
        }
      },
      "id": "4653bbc8-1323-463e-8d3a-3b34288e23d9",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        208,
        656
      ]
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "2288ecaf-4276-4064-89fd-2854915b87f3",
      "name": "Email Trigger (IMAP)",
      "type": "n8n-nodes-base.emailReadImap",
      "typeVersion": 2,
      "position": [
        400,
        656
      ]
    },
    {
      "parameters": {
        "content": "## \ud83d\udd00 Flow Control \u2014 L\u00f3gica e ramifica\u00e7\u00f5es\n\nControla COMO e QUANDO os dados percorrem o fluxo.\n\n\u2022 **IF** \u2192 Divide em TRUE/FALSE baseado em condi\u00e7\u00f5es. Sa\u00edda 1=true, Sa\u00edda 2=false. Suporta AND/OR entre m\u00faltiplas condi\u00e7\u00f5es.\n\u2022 **Switch** \u2192 Roteamento com N sa\u00eddas. Cada sa\u00edda corresponde a um valor ou regra \u2014 como um switch/case.\n\u2022 **Loop Over Items** \u2192 Processa items em lotes (batch size configur\u00e1vel). Controle manual de volume por itera\u00e7\u00e3o.\n\u2022 **Wait** \u2192 Pausa o fluxo por um tempo fixo ou at\u00e9 receber sinal via webhook de retomada.\n\u2022 **Stop and Error** \u2192 Lan\u00e7a um erro customizado e interrompe o fluxo. Para valida\u00e7\u00f5es de neg\u00f3cio e guards.\n\u2022 **No Op** \u2192 N\u00e3o faz nada. Usado para organizar o canvas visualmente, como ponto de merge visual.",
        "height": 200,
        "width": 1960,
        "color": 7
      },
      "id": "57663434-a132-4a1b-a0e2-d4f9b295f334",
      "name": "\ud83d\udccc Se\u00e7\u00e3o: Flow Control",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -240,
        864
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "40033670-6d05-464f-a10b-da3ec90e3c18",
      "name": "IF",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        -224,
        1136
      ]
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 1
                },
                "conditions": [
                  {
                    "leftValue": "",
                    "rightValue": "",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ],
                "combinator": "and"
              }
            }
          ]
        },
        "options": {}
      },
      "id": "3f689bab-143a-4423-a8fd-740ad47125a9",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.2,
      "position": [
        -16,
        1136
      ]
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "5ff88807-9d78-4d7c-b8fc-cfba94c6af5c",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        192,
        1136
      ]
    },
    {
      "parameters": {},
      "id": "b705750c-b737-4e2c-9e86-fffe44429705",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        384,
        1136
      ]
    },
    {
      "parameters": {
        "errorMessage": "Erro customizado aqui"
      },
      "id": "8fa74561-67ea-4b78-9495-d8ff308bc4c2",
      "name": "Stop and Error",
      "type": "n8n-nodes-base.stopAndError",
      "typeVersion": 1,
      "position": [
        592,
        1136
      ]
    },
    {
      "parameters": {},
      "id": "052e6b0c-7f99-470e-aba3-9dfb1b7469b0",
      "name": "No Op",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        784,
        1136
      ]
    },
    {
      "parameters": {
        "content": "## \ud83d\udd27 Data Manipulation \u2014 Transforma os dados\n\nTodos os n\u00f3s trabalham com arrays de items: `[{ json: {...} }, ...]`.\n\n\u2022 **Set / Edit Fields** \u2192 Adiciona, remove ou renomeia campos por GUI. Suporta express\u00f5es. O mais usado do n8n.\n\u2022 **Code** \u2192 JavaScript puro. Poder total: loops, regex, l\u00f3gica complexa, m\u00faltiplos retornos. Use quando Set n\u00e3o basta.\n\u2022 **Merge** \u2192 Combina sa\u00eddas de 2 n\u00f3s (modes: Append, Merge By Index, Merge By Key, Choose Branch, etc).\n\u2022 **Split Out** \u2192 Explode array em items individuais. `[{lista:[1,2,3]}]` vira 3 items separados.\n\u2022 **Aggregate** \u2192 Agrupa m\u00faltiplos items em 1 item com array. Inverso do Split Out.\n\u2022 **Filter** \u2192 Remove items que n\u00e3o passam na condi\u00e7\u00e3o. N\u00e3o cria branch \u2014 s\u00f3 passa adiante quem satisfaz.\n\u2022 **Sort** \u2192 Ordena items por campo(s) (ASC/DESC). Suporta ordena\u00e7\u00e3o m\u00faltipla.\n\u2022 **Remove Duplicates** \u2192 Deduplica items por campo(s) chave. Mant\u00e9m primeiro ou \u00faltimo.",
        "height": 268,
        "width": 1960,
        "color": 4
      },
      "id": "a0aca755-6aea-4db7-9132-73fa133a8e29",
      "name": "\ud83d\udccc Se\u00e7\u00e3o: Data Manipulation",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -224,
        1312
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": []
        },
        "options": {}
      },
      "id": "78271482-ef6e-4551-b596-25ed05feb045",
      "name": "Edit Fields (Set)",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -208,
        1696
      ]
    },
    {
      "parameters": {
        "jsCode": "// Poder total \u2014 JavaScript puro\n// Acesso a todos os items do input:\nconst items = $input.all();\n\nreturn items.map(item => ({\n  json: {\n    ...item.json,\n    processado: true\n  }\n}));"
      },
      "id": "6044e9ff-f907-4ea7-aa4e-4015560a6cea",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        0,
        1696
      ]
    },
    {
      "parameters": {},
      "id": "91e40723-efb3-45f9-a69a-534e155b7376",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3,
      "position": [
        208,
        1696
      ]
    },
    {
      "parameters": {
        "fieldToSplitOut": "array",
        "options": {}
      },
      "id": "fc88cad4-7308-45b7-9c3e-b56cbde81430",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        400,
        1696
      ]
    },
    {
      "parameters": {
        "aggregate": "aggregateAllItemData",
        "options": {}
      },
      "id": "46928b39-f865-4997-a176-a1885663fc1f",
      "name": "Aggregate",
      "type": "n8n-nodes-base.aggregate",
      "typeVersion": 1,
      "position": [
        608,
        1696
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "8b309791-522d-4040-a690-c8a9287f6199",
      "name": "Filter",
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.2,
      "position": [
        800,
        1696
      ]
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "dee83a3d-30e4-4aa2-b14a-c91a40357e5f",
      "name": "Sort",
      "type": "n8n-nodes-base.sort",
      "typeVersion": 1,
      "position": [
        1008,
        1696
      ]
    },
    {
      "parameters": {},
      "id": "f94405e4-1a13-43e5-a7cf-364d23ce3944",
      "name": "Remove Duplicates",
      "type": "n8n-nodes-base.removeDuplicates",
      "typeVersion": 1.1,
      "position": [
        1200,
        1696
      ]
    },
    {
      "parameters": {
        "content": "## \ud83c\udf10 HTTP & Webhooks \u2014 Comunica\u00e7\u00e3o externa\n\n\u2022 **HTTP Request** \u2192 Chama qualquer API REST/HTTP. Suporta todos m\u00e9todos, headers, auth (basic, bearer, OAuth), query params, form-data, JSON body. Use 'Test Step' para inspecionar responses antes de mapear campos.\n\u2022 **Respond to Webhook** \u2192 Envia resposta HTTP para o cliente que chamou o Webhook trigger. Requer Webhook com `responseMode: responseNode`. Roda uma vez com o primeiro item.\n\u2022 **GraphQL** \u2192 Faz queries e mutations GraphQL com vari\u00e1veis. Gera\u00e7\u00e3o autom\u00e1tica de schema dispon\u00edvel. Alternativa struct ao HTTP Request para APIs GraphQL.",
        "height": 180,
        "width": 1960,
        "color": 6
      },
      "id": "1abb8715-f39b-4432-bdf8-bbb7cda7cdc3",
      "name": "\ud83d\udccc Se\u00e7\u00e3o: HTTP & Webhooks",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -224,
        1904
      ]
    },
    {
      "parameters": {
        "url": "https://api.exemplo.com/dados",
        "options": {}
      },
      "id": "a7e1f9e4-d0c0-40d2-ac29-e0864330246e",
      "name": "HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        -208,
        2176
      ]
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json) }}",
        "options": {
          "responseCode": 200
        }
      },
      "id": "37f5a493-bba1-4a0f-a3f0-5abb2bc8f427",
      "name": "Respond to Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.4,
      "position": [
        0,
        2176
      ]
    },
    {
      "parameters": {
        "endpoint": "https://api.exemplo.com/graphql",
        "query": "{ hello }"
      },
      "id": "6ba62452-eb9a-418a-9cda-0e4c7256e81c",
      "name": "GraphQL",
      "type": "n8n-nodes-base.graphql",
      "typeVersion": 1,
      "position": [
        208,
        2176
      ]
    },
    {
      "parameters": {
        "content": "## \ud83d\uddc4\ufe0f Databases \u2014 Persist\u00eancia de dados\n\nConecte com bancos e planilhas. **Crie a credencial uma vez** e reuse em todos os n\u00f3s do mesmo banco. Nunca coloque senha direto nos n\u00f3s.\n\n\u2022 **Postgres** \u2192 SELECT, INSERT, UPDATE, DELETE, Upsert, Execute Query. Principal banco deste workshop. Suporte a par\u00e2metros `$1, $2` para evitar SQL injection.\n\u2022 **MySQL** \u2192 Mesmas opera\u00e7\u00f5es para MySQL/MariaDB. Troca Postgres pela credencial MySQL.\n\u2022 **Redis** \u2192 GET/SET/HSET/LPUSH/EXPIRE/etc. Cache, contadores, pub-sub e filas r\u00e1pidas.\n\u2022 **Google Sheets** \u2192 L\u00ea e escreve planilhas como se fossem tabelas. \u00d3timo como banco simples para MVPs.\n\u2022 **MongoDB** \u2192 Document store. Find, InsertOne, UpdateMany com filtros e projections MongoDB.",
        "height": 216,
        "width": 1960,
        "color": 3
      },
      "id": "b8df2039-81bd-4671-889c-03b5c77a8f5e",
      "name": "\ud83d\udccc Se\u00e7\u00e3o: Databases",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -240,
        2352
      ]
    },
    {
      "parameters": {
        "operation": "select",
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": ""
        }
      },
      "id": "5181cb1a-d9d2-4a8a-8cfa-16f7caae70fe",
      "name": "Postgres",
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.6,
      "position": [
        -208,
        2672
      ]
    },
    {
      "parameters": {
        "operation": "select",
        "table": {
          "__rl": true,
          "mode": "list",
          "value": ""
        }
      },
      "id": "0a8829d4-9852-41da-a8f8-fa408bb765ee",
      "name": "MySQL",
      "type": "n8n-nodes-base.mySql",
      "typeVersion": 2.4,
      "position": [
        0,
        2672
      ]
    },
    {
      "parameters": {
        "operation": "get",
        "options": {}
      },
      "id": "917aa3f3-e569-40f4-bb0f-9b201bfda7f6",
      "name": "Redis",
      "type": "n8n-nodes-base.redis",
      "typeVersion": 1,
      "position": [
        208,
        2672
      ]
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": ""
        }
      },
      "id": "3ac6e061-cd57-4e97-9643-388170a5e946",
      "name": "Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        400,
        2672
      ]
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "0b76d618-20ab-4d3d-88c6-cb7d3582886d",
      "name": "MongoDB",
      "type": "n8n-nodes-base.mongoDb",
      "typeVersion": 1,
      "position": [
        608,
        2672
      ]
    },
    {
      "parameters": {
        "content": "## \ud83d\udce8 Communication \u2014 Notifica\u00e7\u00f5es e mensagens\n\n\u2022 **Telegram** \u2192 Envia/recebe mensagens, fotos, documentos via Bot API. Ideal para alertas de erro em produ\u00e7\u00e3o e notifica\u00e7\u00f5es de neg\u00f3cio.\n\u2022 **Slack** \u2192 Manda mensagens em canais e DMs. Suporte a blocos, attachments, threading e rea\u00e7\u00f5es.\n\u2022 **Send Email** \u2192 Envia email via SMTP ou servi\u00e7o (Gmail, SendGrid, etc). HTML ou texto plano.\n\u2022 **Discord** \u2192 Envia mensagens em canais via webhook ou bot. Usado para notifica\u00e7\u00f5es de dev e comunidades.\n\n\ud83d\udca1 Padr\u00e3o: coloque Telegram/Slack nos error handlers para ser notificado em tempo real de falhas em produ\u00e7\u00e3o.",
        "height": 196,
        "width": 1960
      },
      "id": "8e74f5b7-f8ce-4a61-a061-c3e3182ad1a8",
      "name": "\ud83d\udccc Se\u00e7\u00e3o: Communication",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -224,
        2912
      ]
    },
    {
      "parameters": {
        "chatId": "SEU_CHAT_ID",
        "text": "Mensagem de teste",
        "additionalFields": {}
      },
      "id": "bba7289d-194c-40fc-9f00-7efafe8315a2",
      "name": "Telegram",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        -208,
        3152
      ]
    },
    {
      "parameters": {
        "select": "channel",
        "channelId": {
          "__rl": true,
          "value": "CHANNEL_ID",
          "mode": "id"
        },
        "text": "Mensagem",
        "otherOptions": {}
      },
      "id": "5a21eec1-06df-4b65-82c9-1382d8f5b4c5",
      "name": "Slack",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.3,
      "position": [
        0,
        3152
      ]
    },
    {
      "parameters": {
        "fromEmail": "sender@exemplo.com",
        "toEmail": "destinatario@exemplo.com",
        "subject": "Assunto",
        "emailFormat": "text",
        "text": "Corpo do email",
        "options": {}
      },
      "id": "1c8690c3-c593-4492-b843-3def2d3df76e",
      "name": "Send Email",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 2.1,
      "position": [
        208,
        3152
      ]
    },
    {
      "parameters": {
        "guildId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "options": {}
      },
      "id": "e60decac-9a62-4165-932a-4db71fa69d79",
      "name": "Discord",
      "type": "n8n-nodes-base.discord",
      "typeVersion": 2,
      "position": [
        400,
        3152
      ]
    },
    {
      "parameters": {
        "content": "## \ud83e\udd16 AI & LangChain \u2014 Intelig\u00eancia artificial\n\nn8n tem integra\u00e7\u00e3o nativa com LangChain. Agents, chains, memory e tools s\u00e3o conect\u00e1veis diretamente ao fluxo.\n\n\u2022 **AI Agent** \u2192 Agente aut\u00f4nomo com tools. Recebe um prompt, decide qual ferramenta usar, executa e retorna resultado. Conecte n\u00f3s n8n como tools (ex: HTTP Request, Postgres) para dar capacidades ao agente.\n\u2022 **OpenAI** \u2192 Acesso direto \u00e0 API: chat completions, embeddings, imagens (DALL-E), transcri\u00e7\u00e3o (Whisper). Mais controle que o Agent.\n\u2022 **Chat Trigger** \u2192 Trigger que exp\u00f5e interface de chat no n8n. Ponto de entrada para chatbots e assistentes.\n\u2022 **Embeddings OpenAI** \u2192 Gera vetores num\u00e9ricos (embeddings) para busca sem\u00e2ntica. Usado com Vector Stores e Retrieval.\n\n\ud83d\udca1 Fluxo b\u00e1sico de chatbot: Chat Trigger \u2192 AI Agent (com OpenAI como LLM) \u2192 Respond to Webhook.",
        "height": 216,
        "width": 1960,
        "color": 2
      },
      "id": "f1fdda62-7009-4cca-ba65-4c74439cf128",
      "name": "\ud83d\udccc Se\u00e7\u00e3o: AI & LangChain",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -224,
        3360
      ]
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "5cb15609-fb83-44b9-b58c-ce8865224fd9",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.7,
      "position": [
        -224,
        3632
      ]
    },
    {
      "parameters": {
        "resource": "chat"
      },
      "id": "da7aa227-2eeb-4b5b-98a2-0d6d3f4b880b",
      "name": "OpenAI",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [
        -16,
        3632
      ]
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "309292a9-c7b9-41eb-b9c8-0b630e0fa407",
      "name": "Chat Trigger",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "typeVersion": 1.1,
      "position": [
        192,
        3632
      ]
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "ec6c424e-0f68-4cc9-b817-f49582cefe72",
      "name": "Embeddings OpenAI",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "typeVersion": 1.2,
      "position": [
        384,
        3632
      ]
    }
  ],
  "connections": {},
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate"
  },
  "versionId": "58565109-254f-4add-b409-68ce81cb6f9e",
  "id": "0bIC3itDOIVPHSQR",
  "tags": []
}