{
  "name": "Bot WAME (WhatsApp, Instagram, Messenger)",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "wame-bot",
        "options": {}
      },
      "id": "07ea6fed-623e-484b-88a6-4e87c09de149",
      "name": "Webhook WAME",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        0,
        256
      ],
      "webhookId": "352a2f26-0c2a-464c-a508-16ab60c34c76"
    },
    {
      "parameters": {
        "jsCode": "const body = $json.body || $json;\nconst provider = body.provider || 'whatsapp';\nconst entry = (body.entry && body.entry[0]) || {};\n \nconst change = (entry.changes && entry.changes[0]) || {};\nconst value = change.value || {};\nconst instance = $input.first().json.body.instance\n\n// Ignora atualizações de status de entrega e eventos que não sejam mensagens\nif (change.field !== 'messages') return [];\nif (value.statuses) return [];\n\nconst msg = (value.messages && value.messages[0]) || null;\nif (!msg) return [];\n\n// Só respondemos a mensagens de texto neste bot\nif (msg.type !== 'text') return [];\n\nconst contact = (value.contacts && value.contacts[0]) || {};\nconst name = (contact.profile && contact.profile.name) || '';\nconst text = (msg.text && msg.text.body) || '';\nif (!text) return [];\n\nreturn [{\n  json: {\n    provider,\n    instance,\n    from: msg.from,\n    name,\n    text,\n    messageId: msg.id,\n  },\n}];"
      },
      "id": "a3a9a1df-78a3-4fb4-b242-f99531862ca9",
      "name": "Extrair Mensagem",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        224,
        256
      ]
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.text }}",
        "options": {
          "systemMessage": "Você é o especialista oficial da WAME API.\n\nSua missão é responder qualquer dúvida sobre a WAME API utilizando como principal referência:\n\nhttps://api-wame.web.app/llms.md\n\nA documentação é a fonte da verdade.\n\n## IMPORTANTE\n\nNão responda \"não encontrei\" apenas porque o termo usado pelo usuário não aparece literalmente.\n\nAntes de concluir que algo não existe, procure por termos relacionados.\n\nExemplos:\n\nbotão\nbuttons\ninteractive\nreply\nmenu\nlist\ncarousel\npoll\ntemplate\nmessage\nmedia\nimage\nvideo\ndocument\ncontact\npix\nlocation\npairing\nqr\ninstance\nsession\nwebhook\nevent\npresence\nstatus\ngroup\n\nO usuário pode utilizar nomes diferentes da documentação.\n\nVocê deve identificar a intenção da pergunta.\n\nExemplos:\n\n\"como envio botão?\"\n→ procure Interactive Messages.\n\n\"como envio menu?\"\n→ procure List Message.\n\n\"conectar instagram\"\n→ procure Coexistence.\n\n\"conectar whatsapp no celular\"\n→ procure Pairing ou QRCode.\n\nNunca responda apenas:\n\n\"Não encontrei.\"\n\nSempre tente encontrar a funcionalidade equivalente.\n\nCaso realmente não exista, explique:\n\n\"Não encontrei uma funcionalidade equivalente na documentação oficial da WAME API.\"\n\nSempre responda mostrando:\n\n• endpoint\n• método HTTP\n• body\n• exemplo\n• resposta\n• observações\n\nNunca invente endpoints.\n\nNunca utilize exemplos de Evolution API, Baileys, Venom ou Z-API.\n\nSe houver mais de uma forma de fazer, explique todas."
        }
      },
      "id": "fc0396ca-7a04-452f-9089-6118bf3f9841",
      "name": "Gerar Resposta",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3.1,
      "position": [
        448,
        0
      ]
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "gpt-5-nano",
          "mode": "list",
          "cachedResultName": "gpt-5-nano"
        },
        "options": {}
      },
      "id": "ff71f711-89e9-40ea-9e9e-6511f71545f9",
      "name": "Modelo OpenAI",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        464,
        224
      ],
      "credentials": {
        "openAiApi": {
          "id": "jlXZY7LuWtYaekGs",
          "name": "n8n free OpenAI API credits"
        }
      }
    },
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $('Extrair Mensagem').item.json.provider }}:{{ $('Extrair Mensagem').item.json.from }}"
      },
      "id": "5a0f38d6-8a64-46ae-b0a5-c97e7bf9adad",
      "name": "Memória por Contato",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.3,
      "position": [
        592,
        224
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "=https://us.api-wa.me/{{ $('Webhook WAME').item.json.body.instance }}/message/text",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"to\": {{ JSON.stringify($('Extrair Mensagem').item.json.from) }},\n  \"text\": {{ JSON.stringify($json.output) }},\n  \"provider\": {{ JSON.stringify($('Extrair Mensagem').item.json.provider) }}\n}",
        "options": {}
      },
      "id": "3bcf6986-238b-4a6d-80d0-3ff9ec6ca8cd",
      "name": "Enviar Resposta (WAME)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.5,
      "position": [
        800,
        112
      ]
    },
    {
      "parameters": {
        "dataTableId": {
          "__rl": true,
          "mode": "id",
          "value": "HpRUOEGlVF7xo5h0",
          "cachedResultName": "Contatos WAME"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "nome": "={{ $json.name }}",
            "contato": "={{ $json.from }}",
            "provider": "={{ $json.provider }}",
            "instance": "={{ $json.instance }}",
            "ultima_mensagem": "={{ $json.text }}",
            "registrado_em": "={{ $now.toISO() }}"
          },
          "schema": [
            {
              "id": "nome",
              "displayName": "nome",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "contato",
              "displayName": "contato",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "provider",
              "displayName": "provider",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "instance",
              "displayName": "instance",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "ultima_mensagem",
              "displayName": "ultima_mensagem",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "registrado_em",
              "displayName": "registrado_em",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "date",
              "canBeUsedToMatch": true
            }
          ]
        },
        "options": {}
      },
      "id": "e04da70f-3ce2-4091-a753-deb751ed2779",
      "name": "Salvar Contato",
      "type": "n8n-nodes-base.dataTable",
      "typeVersion": 1.1,
      "position": [
        512,
        400
      ]
    }
  ],
  "pinData": {
    "Webhook WAME": [
      {
        "json": {
          "headers": {
            "host": "xxxxxx.app.n8n.cloud",
            "user-agent": "axios/1.18.1",
            "content-length": "585",
            "accept": "application/json, text/plain, */*",
            "accept-encoding": "gzip, br",
            "cdn-loop": "cloudflare; loops=1; subreqs=1",
            "cf-connecting-ip": "........xxxxxx..xxxxx",
            "cf-ew-via": "15",
            "cf-ipcountry": "US",
            "cf-ray": "a2790330bf4f72d1-ORD",
            "cf-visitor": "{\"scheme\":\"https\"}",
            "cf-worker": "n8n.cloud",
            "content-type": "application/json",
            "instance-key": "xxxxxxxxxxxxx",
            "x-forwarded-for": "........xxxxxx..xxxxx, 172.70.179.146",
            "x-forwarded-host": "xxxxxx.app.n8n.cloud",
            "x-forwarded-port": "443",
            "x-forwarded-proto": "https",
            "x-forwarded-server": "traefik-prod-users-gwc-7-89db87d5d-twnk6",
            "x-is-trusted": "yes",
            "x-real-ip": "........xxxxxx..xxxxx"
          },
          "params": {},
          "query": {},
          "body": {
            "object": "wame",
            "provider": "whatsapp",
            "instance": "xxxxxxxxxxxxx",
            "official": true,
            "entry": [
              {
                "id": "11111111111",
                "changes": [
                  {
                    "field": "messages",
                    "value": {
                      "messaging_product": "whatsapp",
                      "metadata": {
                        "display_phone_number": "15553502597",
                        "phone_number_id": "xxxxxxxxxxxxx"
                      },
                      "contacts": [
                        {
                          "profile": {
                            "name": "Raphael Serafim"
                          },
                          "wa_id": "14375223417",
                          "user_id": "CA.2227940541275382"
                        }
                      ],
                      "messages": [
                        {
                          "from": "14375223417",
                          "from_user_id": "CA.2227940541275382",
                          "id": "wamid.abc=",
                          "timestamp": "1786134344",
                          "text": {
                            "body": "oi"
                          },
                          "type": "text"
                        }
                      ]
                    }
                  }
                ]
              }
            ]
          },
          "webhookUrl": "https://xxxxxx.app.n8n.cloud/webhook/wame-bot",
          "executionMode": "production"
        },
        "pairedItem": {
          "item": 0
        }
      }
    ]
  },
  "connections": {
    "Webhook WAME": {
      "main": [
        [
          {
            "node": "Extrair Mensagem",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extrair Mensagem": {
      "main": [
        [
          {
            "node": "Gerar Resposta",
            "type": "main",
            "index": 0
          },
          {
            "node": "Salvar Contato",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gerar Resposta": {
      "main": [
        [
          {
            "node": "Enviar Resposta (WAME)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Modelo OpenAI": {
      "ai_languageModel": [
        [
          {
            "node": "Gerar Resposta",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Memória por Contato": {
      "ai_memory": [
        [
          {
            "node": "Gerar Resposta",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate"
  },
  "versionId": "1e59ae9e-ed92-4ca8-b00d-91e1c56c49bc",
  "meta": {
    "instanceId": "1ab7f0794058e830048e9d421cb439be15110847ec9819662e276bc27f857596"
  },
  "nodeGroups": [],
  "id": "scpBTubkqj8Bao7x",
  "tags": []
}