{"id":54,"date":"2026-10-20T19:34:41","date_gmt":"2026-10-20T19:34:41","guid":{"rendered":"https:\/\/vectalk.com.br\/blog\/chatbot-ia-whatsapp-api\/"},"modified":"2026-10-25T13:17:00","modified_gmt":"2026-10-25T13:17:00","slug":"chatbot-ia-whatsapp-api","status":"publish","type":"post","link":"https:\/\/vectalk.com.br\/blog\/chatbot-ia-whatsapp-api\/","title":{"rendered":"Chatbot com IA no WhatsApp pela API oficial: arquitetura e c\u00f3digo"},"content":{"rendered":"\n<p><em>Atualizado em 25\/10\/2026<\/em><\/p>\n\n\n\n<p>Para conectar um chatbot ou agente de IA ao WhatsApp pela API oficial, voc\u00ea recebe cada mensagem por webhook, responde 200 na hora, coloca o evento numa fila e deixa um worker montar o contexto, chamar o modelo de linguagem e enviar a resposta pela API. A resposta livre do bot s\u00f3 pode sair dentro da janela de 24 horas aberta pelo cliente, e a pol\u00edtica da Meta exige um caminho claro para atendimento humano. Os termos da Meta tamb\u00e9m pro\u00edbem usar a plataforma para oferecer assistentes de IA de uso geral como produto principal, com exce\u00e7\u00f5es em alguns pa\u00edses, entre eles o Brasil.<\/p>\n\n\n\n<p>Este guia mostra a arquitetura, as regras que afetam o bot e um exemplo funcional em Node.js usando a Vectalk, que repassa os mesmos payloads e webhooks da Meta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Arquitetura: webhook, fila, LLM e resposta<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Cliente no WhatsApp\n      \u2502\n      \u25bc\nMeta \u2500\u2500POST\u2500\u2500\u25b6 Vectalk \u2500\u2500POST\u2500\u2500\u25b6 \/webhook (responde 200 e enfileira)\n                                     \u2502\n                                     \u25bc\n                                   Fila\n                                     \u2502\n                                     \u25bc\n                Worker: deduplica \u25b6 carrega hist\u00f3rico \u25b6 decide (bot ou humano)\n                                     \u2502\n                         \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n                         \u25bc                       \u25bc\n                   LLM gera resposta      Atendente humano\n                         \u2502\n                         \u25bc\n             POST \/api\/messages (Vectalk) \u2500\u2500\u25b6 Meta \u2500\u2500\u25b6 Cliente<\/code><\/pre>\n\n\n\n<p>Cada pe\u00e7a tem uma fun\u00e7\u00e3o clara:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Componente<\/th><th>Responsabilidade<\/th><th>Cuidado principal<\/th><\/tr><\/thead><tbody><tr><td>Webhook<\/td><td>Receber o evento, validar e responder 200<\/td><td>N\u00e3o chamar o LLM dentro da requisi\u00e7\u00e3o<\/td><\/tr><tr><td>Fila<\/td><td>Desacoplar recebimento e processamento<\/td><td>Garantir nova tentativa se o worker cair<\/td><\/tr><tr><td>Deduplica\u00e7\u00e3o<\/td><td>Ignorar eventos repetidos pelo ID <code>wamid<\/code><\/td><td>Guardar IDs processados por alguns dias<\/td><\/tr><tr><td>Hist\u00f3rico<\/td><td>Montar o contexto da conversa por <code>wa_id<\/code><\/td><td>Limitar o tamanho para controlar custo e lat\u00eancia<\/td><\/tr><tr><td>Roteador<\/td><td>Decidir se o bot responde ou se a conversa est\u00e1 com humano<\/td><td>Respeitar o estado de handoff<\/td><\/tr><tr><td>LLM<\/td><td>Gerar a resposta dentro do escopo do neg\u00f3cio<\/td><td>Prompt com limites claros e tempo m\u00e1ximo de resposta<\/td><\/tr><tr><td>Envio<\/td><td>Chamar a API e guardar o ID da mensagem enviada<\/td><td>Tratar erros e checar a janela de 24 horas<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Por que a fila \u00e9 obrigat\u00f3ria<\/h3>\n\n\n\n<p>Um modelo de linguagem pode levar v\u00e1rios segundos para responder. A Vectalk espera HTTP 200 em menos de 20 segundos e reenvia o evento se n\u00e3o receber, segundo a <a href=\"https:\/\/docs.vectalk.com.br\/concepts\/webhooks\">documenta\u00e7\u00e3o de webhooks<\/a>. Se o endpoint esperar o LLM, um pico de mensagens gera reenvios, respostas duplicadas e custo em dobro. Com a fila, o webhook s\u00f3 grava o evento e responde.<\/p>\n\n\n\n<p>O artigo <a href=\"https:\/\/vectalk.com.br\/blog\/webhook-whatsapp-api\/\">webhooks da API do WhatsApp<\/a> cobre o formato dos eventos, a deduplica\u00e7\u00e3o e o tratamento de status.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Marcar como lida e mostrar &#8220;digitando&#8221;<\/h3>\n\n\n\n<p>A Cloud API permite marcar a mensagem recebida como lida e exibir o indicador de digita\u00e7\u00e3o na mesma chamada. Segundo a <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/typing-indicators\">documenta\u00e7\u00e3o de indicadores de digita\u00e7\u00e3o<\/a>, o indicador some quando voc\u00ea responde ou depois de 25 segundos, o que vier primeiro. A Meta recomenda exibi-lo s\u00f3 quando voc\u00ea realmente vai responder.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"status\": \"read\",\n  \"message_id\": \"wamid.HBgLNTUx...\",\n  \"typing_indicator\": { \"type\": \"text\" }\n}<\/code><\/pre>\n\n\n\n<p>Na Vectalk, essa chamada vai para <code>POST \/api\/messages<\/code>, o mesmo endpoint documentado para marcar como lida.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A janela de 24 horas define o que o bot pode enviar<\/h2>\n\n\n\n<p>Quando o cliente manda uma mensagem, abre-se uma janela de atendimento de 24 horas, renovada a cada nova mensagem dele. Dentro dela, o bot pode responder com texto livre, m\u00eddia e mensagens interativas. Fora dela, s\u00f3 templates aprovados, conforme a <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/send-messages\">documenta\u00e7\u00e3o de mensagens de servi\u00e7o e janela de atendimento<\/a>.<\/p>\n\n\n\n<p>Na pr\u00e1tica, isso muda o desenho do agente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>O bot \u00e9 reativo.<\/strong> Ele responde ao que o cliente perguntou. Para retomar contato depois de 24 horas, o sistema precisa de um template, e n\u00e3o de texto gerado pelo LLM.<\/li>\n\n\n<li><strong>Respostas demoradas podem perder a janela.<\/strong> Se o bot depende de um processo lento (an\u00e1lise de documento, consulta a outro sistema), registre o hor\u00e1rio da \u00faltima mensagem do cliente e cheque antes de enviar.<\/li>\n\n\n<li><strong>Bot\u00f5es e listas ajudam o LLM.<\/strong> Em vez de pedir que o cliente digite &#8220;1&#8221; ou &#8220;2&#8221;, o bot pode enviar op\u00e7\u00f5es clic\u00e1veis. Veja <a href=\"https:\/\/vectalk.com.br\/blog\/mensagens-interativas-whatsapp-api\/\">mensagens interativas na API do WhatsApp<\/a>.<\/li>\n\n<\/ul>\n\n\n\n<p>O artigo <a href=\"https:\/\/vectalk.com.br\/blog\/janela-24-horas-whatsapp\/\">janela de 24 horas do WhatsApp<\/a> detalha as regras de abertura e renova\u00e7\u00e3o.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Quanto custa cada resposta do bot<\/h3>\n\n\n\n<p>As respostas livres dentro da janela s\u00e3o mensagens de servi\u00e7o. Desde 1\u00ba de outubro de 2026, cada n\u00famero comercial tem 1.000 mensagens de servi\u00e7o gratuitas por m\u00eas, e a Meta cobra a partir da 1.001\u00aa, segundo a <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/pricing\">p\u00e1gina de pre\u00e7os<\/a>. Para destinat\u00e1rios no Brasil, a tarifa de servi\u00e7o \u00e9 de R$ 0,0350 por mensagem entregue. Um bot que responde em tr\u00eas mensagens curtas custa tr\u00eas vezes mais do que um que responde em uma s\u00f3, ent\u00e3o vale juntar a resposta.<\/p>\n\n\n\n<p>A esse valor soma-se o custo do pr\u00f3prio modelo de linguagem, que depende do provedor e do tamanho do contexto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Handoff para humano<\/h2>\n\n\n\n<p>A <a href=\"https:\/\/whatsappbusiness.com\/pt-br\/policy\/\">Pol\u00edtica de Mensagens do WhatsApp Business<\/a> permite automa\u00e7\u00e3o dentro da janela de 24 horas, mas exige caminhos de escalonamento r\u00e1pidos, claros e diretos. As op\u00e7\u00f5es listadas incluem transfer\u00eancia para um atendente humano na conversa, n\u00famero de telefone, e-mail, suporte no site, visita a uma loja ou formul\u00e1rio de suporte.<\/p>\n\n\n\n<p>Um bot de atendimento precisa, no m\u00ednimo, de tr\u00eas gatilhos de handoff:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li><strong>Pedido expl\u00edcito.<\/strong> O cliente escreve &#8220;atendente&#8221;, &#8220;falar com uma pessoa&#8221; ou clica num bot\u00e3o de ajuda humana.<\/li>\n\n\n<li><strong>Baixa confian\u00e7a.<\/strong> O LLM indica que n\u00e3o sabe responder ou o assunto est\u00e1 fora do escopo definido.<\/li>\n\n\n<li><strong>Assunto sens\u00edvel.<\/strong> Reclama\u00e7\u00e3o, cancelamento, cobran\u00e7a contestada ou qualquer tema que a empresa decida tratar s\u00f3 com pessoas.<\/li>\n\n<\/ol>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Estado da conversa<\/th><th>Quem responde<\/th><th>Como sai do estado<\/th><\/tr><\/thead><tbody><tr><td><code>bot<\/code><\/td><td>Agente de IA<\/td><td>Gatilho de handoff<\/td><\/tr><tr><td><code>aguardando_humano<\/code><\/td><td>Ningu\u00e9m responde automaticamente; o bot avisa o tempo de espera uma \u00fanica vez<\/td><td>Atendente assume<\/td><\/tr><tr><td><code>humano<\/code><\/td><td>Atendente, pela ferramenta de atendimento<\/td><td>Atendente encerra ou a conversa fica inativa<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Se o n\u00famero usa <a href=\"https:\/\/vectalk.com.br\/blog\/coexistencia-whatsapp-api\/\">coexist\u00eancia<\/a>, o atendente pode responder pelo app WhatsApp Business no celular. As mensagens enviadas pelo app chegam ao seu sistema como eventos de eco, e o roteador pode us\u00e1-las para colocar a conversa em <code>humano<\/code> automaticamente, sem que o bot responda por cima.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O que a Meta permite para chatbots de IA<\/h2>\n\n\n\n<p>Os <a href=\"https:\/\/www.facebook.com\/legal\/Meta-Terms-for-WhatsApp-Business-Platform\">Termos da Meta para a Plataforma do WhatsApp Business<\/a>, na cl\u00e1usula 4.7, tratam de &#8220;Provedores de IA&#8221;: fornecedores e desenvolvedores de tecnologias de intelig\u00eancia artificial ou aprendizado de m\u00e1quina, como grandes modelos de linguagem, plataformas de IA generativa e assistentes de IA de uso geral, conforme a Meta determinar. Eles s\u00e3o proibidos de usar a plataforma para oferecer essas tecnologias quando elas s\u00e3o a funcionalidade principal, e n\u00e3o incidental ou auxiliar.<\/p>\n\n\n\n<p>O que isso significa para quem constr\u00f3i bots:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>Bot de atendimento da pr\u00f3pria empresa.<\/strong> Um agente que tira d\u00favidas sobre pedidos, agenda hor\u00e1rios ou explica produtos da empresa usa a IA como ferramenta do atendimento. A Meta decide os casos, mas esse \u00e9 o uso que os termos n\u00e3o miram.<\/li>\n\n\n<li><strong>Assistente de uso geral como produto.<\/strong> Oferecer um &#8220;ChatGPT no WhatsApp&#8221; para o p\u00fablico, em que a conversa com a IA \u00e9 o pr\u00f3prio servi\u00e7o, \u00e9 o caso proibido, salvo nos pa\u00edses em que a Meta \u00e9 legalmente obrigada a permitir.<\/li>\n\n\n<li><strong>Brasil.<\/strong> A <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/pricing\/ai-providers\">p\u00e1gina de pre\u00e7os para Provedores de IA<\/a> lista o Brasil (+55) entre os mercados onde Provedores de IA podem enviar mensagens de servi\u00e7o desde 11 de mar\u00e7o de 2026, com tarifa pr\u00f3pria. Nesses envios, o webhook de status traz a categoria <code>general_purpose_ai<\/code>. Essa regra vale s\u00f3 para Provedores de IA; o pre\u00e7o das demais empresas n\u00e3o muda.<\/li>\n\n\n<li><strong>Dados para treino.<\/strong> Os termos pro\u00edbem usar dados da plataforma para criar, treinar ou melhorar modelos de IA. Eles permitem usar esses dados para ajustar um modelo de uso exclusivo da empresa, desde que n\u00e3o sirvam para outros modelos. Revise os termos do seu provedor de LLM sobre reten\u00e7\u00e3o e treino.<\/li>\n\n<\/ul>\n\n\n\n<p>Os termos foram atualizados em 23 de setembro de 2026. Releia a cl\u00e1usula antes de lan\u00e7ar um produto em que a IA seja o centro da oferta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo em Node.js<\/h2>\n\n\n\n<p>O exemplo abaixo usa Express, uma fila em mem\u00f3ria e a API da Vectalk. Em produ\u00e7\u00e3o, troque a fila por um servi\u00e7o persistente (Redis, SQS, RabbitMQ) e o <code>Map<\/code> por um banco. A fun\u00e7\u00e3o <code>gerarResposta<\/code> \u00e9 o ponto onde entra o SDK do seu provedor de LLM.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-javascript\">import express from 'express';\n\nconst VECTALK = 'https:\/\/apis.vectalk.com.br\/api\/messages';\nconst TOKEN = process.env.VECTALK_TOKEN; \/\/ token de inst\u00e2ncia\nconst JANELA_MS = 24 * 60 * 60 * 1000;\nconst GATILHOS_HUMANO = \/\\b(atendente|humano|pessoa|reclama|cancelar)\\b\/i;\n\nconst app = express();\napp.use(express.json());\n\nconst fila = [];\nconst processados = new Set();      \/\/ IDs wamid j\u00e1 tratados\nconst conversas = new Map();        \/\/ wa_id -&gt; { estado, historico, ultimaEntrada }\n\n\/\/ 1. Webhook: s\u00f3 valida, enfileira e responde 200\napp.post('\/webhook', (req, res) =&gt; {\n  for (const entry of req.body.entry ?? []) {\n    for (const change of entry.changes ?? []) {\n      for (const msg of change.value?.messages ?? []) fila.push(msg);\n    }\n  }\n  res.sendStatus(200);\n});\n\n\/\/ 2. Envio pela Vectalk (mesmo payload da Meta)\nasync function enviar(payload) {\n  const r = await fetch(VECTALK, {\n    method: 'POST',\n    headers: { Authorization: `Bearer ${TOKEN}`, 'Content-Type': 'application\/json' },\n    body: JSON.stringify({ messaging_product: 'whatsapp', ...payload }),\n  });\n  if (!r.ok) throw new Error(`Falha no envio: ${r.status} ${await r.text()}`);\n  return r.json();\n}\n\n\/\/ 3. Ponto de integra\u00e7\u00e3o com o LLM\nasync function gerarResposta(historico) {\n  \/\/ Chame aqui o SDK do seu provedor, com um prompt de sistema que limite\n  \/\/ o escopo ao seu neg\u00f3cio e pe\u00e7a para responder \"HANDOFF\" quando n\u00e3o souber.\n  throw new Error('Implemente a chamada ao LLM');\n}\n\n\/\/ 4. Worker\nasync function processar(msg) {\n  if (processados.has(msg.id)) return;\n  processados.add(msg.id);\n\n  const c = conversas.get(msg.from) ?? { estado: 'bot', historico: [], ultimaEntrada: 0 };\n  c.ultimaEntrada = Number(msg.timestamp) * 1000;\n  conversas.set(msg.from, c);\n\n  if (c.estado !== 'bot') return; \/\/ conversa com humano: o bot fica em sil\u00eancio\n\n  if (msg.type !== 'text') {\n    await enviar({ to: msg.from, type: 'text', text: { body: 'Por enquanto entendo s\u00f3 texto. Pode escrever sua d\u00favida?' } });\n    return;\n  }\n\n  const texto = msg.text.body;\n  c.historico.push({ role: 'user', content: texto });\n  c.historico = c.historico.slice(-20); \/\/ limita o contexto\n\n  if (GATILHOS_HUMANO.test(texto)) return transferir(msg.from, c);\n\n  await enviar({ status: 'read', message_id: msg.id, typing_indicator: { type: 'text' } });\n\n  const resposta = await gerarResposta(c.historico);\n  if (resposta.trim() === 'HANDOFF') return transferir(msg.from, c);\n\n  if (Date.now() - c.ultimaEntrada &gt; JANELA_MS) return; \/\/ janela fechou: precisa de template\n\n  await enviar({ to: msg.from, type: 'text', text: { body: resposta } });\n  c.historico.push({ role: 'assistant', content: resposta });\n}\n\nasync function transferir(waId, c) {\n  c.estado = 'aguardando_humano';\n  await enviar({ to: waId, type: 'text', text: { body: 'Vou chamar uma pessoa do time. Em instantes algu\u00e9m continua por aqui.' } });\n  \/\/ Notifique a ferramenta de atendimento (fila de tickets, Slack, CRM).\n}\n\nsetInterval(async () =&gt; {\n  const msg = fila.shift();\n  if (!msg) return;\n  try { await processar(msg); } catch (e) { console.error(e); }\n}, 50);\n\napp.listen(3000);<\/code><\/pre>\n\n\n\n<p>O que o exemplo j\u00e1 resolve e o que falta para produ\u00e7\u00e3o:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>Resolve:<\/strong> resposta imediata ao webhook, deduplica\u00e7\u00e3o por <code>wamid<\/code>, estado de handoff, limite de contexto, checagem da janela e indicador de digita\u00e7\u00e3o.<\/li>\n\n\n<li><strong>Falta:<\/strong> fila persistente com novas tentativas, banco para hist\u00f3rico e estado, tempo m\u00e1ximo na chamada ao LLM, registro de custos a partir do webhook de status e um painel para o atendente assumir e devolver a conversa ao bot.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Boas pr\u00e1ticas para o agente<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>Escopo fechado.<\/strong> O prompt de sistema deve dizer o que o bot faz e o que n\u00e3o faz. Pre\u00e7os, prazos e pol\u00edticas devem vir de dados do seu sistema, e n\u00e3o da mem\u00f3ria do modelo.<\/li>\n\n\n<li><strong>Respostas curtas.<\/strong> No WhatsApp, uma mensagem de tr\u00eas linhas funciona melhor do que um texto longo. Isso tamb\u00e9m reduz o n\u00famero de mensagens cobradas.<\/li>\n\n\n<li><strong>Identifique o bot.<\/strong> Deixe claro que o cliente est\u00e1 falando com um assistente virtual e como chegar a uma pessoa.<\/li>\n\n\n<li><strong>Registre tudo.<\/strong> Guarde a pergunta, a resposta, o modelo usado e o tempo de resposta. Sem isso, n\u00e3o d\u00e1 para auditar uma resposta errada.<\/li>\n\n\n<li><strong>Teste com mensagens reais.<\/strong> \u00c1udio, foto de comprovante e figurinha chegam todo dia. Decida o que o bot faz com cada tipo antes de ir para produ\u00e7\u00e3o.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Perguntas frequentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Posso usar qualquer LLM com a API oficial?<\/h3>\n\n\n\n<p>A API do WhatsApp n\u00e3o restringe o modelo que voc\u00ea usa no seu servidor. O que os termos da Meta regulam \u00e9 o uso: a IA como apoio ao atendimento da empresa \u00e9 diferente de oferecer um assistente de uso geral como produto principal.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">O bot pode mandar a primeira mensagem para o cliente?<\/h3>\n\n\n\n<p>N\u00e3o com texto livre. Para iniciar contato ou retomar depois de 24 horas, \u00e9 preciso um template aprovado. Veja <a href=\"https:\/\/vectalk.com.br\/blog\/templates-whatsapp-api\/\">templates da API do WhatsApp<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Como evito que o bot responda duas vezes \u00e0 mesma mensagem?<\/h3>\n\n\n\n<p>Guarde o ID <code>wamid<\/code> de cada mensagem processada e ignore repeti\u00e7\u00f5es. Reenvios de webhook acontecem sempre que o endpoint demora ou falha.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">O bot pode responder \u00e1udios?<\/h3>\n\n\n\n<p>O webhook entrega o ID da m\u00eddia, que voc\u00ea baixa pela API de m\u00eddia e transcreve com o servi\u00e7o que preferir. A transcri\u00e7\u00e3o e o custo dela ficam por sua conta.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Preciso de algum cadastro especial na Meta para usar IA?<\/h3>\n\n\n\n<p>Para um bot de atendimento da pr\u00f3pria empresa, a documenta\u00e7\u00e3o consultada n\u00e3o descreve cadastro adicional. Se o seu produto \u00e9 um assistente de IA de uso geral, leia a cl\u00e1usula 4.7 dos termos e a p\u00e1gina de Provedores de IA antes de come\u00e7ar.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Comece na Vectalk<\/h2>\n\n\n\n<p>Na Vectalk, seu bot recebe os mesmos webhooks da Meta e envia com os mesmos payloads, usando um token para todas as contas. A cobran\u00e7a das mensagens vem na fatura da Vectalk, sem cart\u00e3o cadastrado na Meta, e a coexist\u00eancia permite que o time humano continue no app. Crie sua conta em <a href=\"https:\/\/apps.vectalk.com.br\/register\">apps.vectalk.com.br\/register<\/a> e consulte a <a href=\"https:\/\/docs.vectalk.com.br\/\">documenta\u00e7\u00e3o<\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Fontes oficiais consultadas em 25\/10\/2026:<\/strong> <a href=\"https:\/\/www.facebook.com\/legal\/Meta-Terms-for-WhatsApp-Business-Platform\">Termos da Meta para a Plataforma do WhatsApp Business<\/a> (atualizados em 23\/09\/2026), <a href=\"https:\/\/whatsappbusiness.com\/pt-br\/policy\/\">Pol\u00edtica de Mensagens do WhatsApp Business<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/pricing\/ai-providers\">Pre\u00e7os para Provedores de IA<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/pricing\">Pre\u00e7os na plataforma do WhatsApp Business<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/send-messages\">Mensagens de servi\u00e7o e janela de atendimento<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/typing-indicators\">Indicadores de digita\u00e7\u00e3o<\/a>, <a href=\"https:\/\/docs.vectalk.com.br\/concepts\/webhooks\">Webhooks na documenta\u00e7\u00e3o da Vectalk<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Chatbot no WhatsApp API com IA: arquitetura com webhook, fila e LLM, janela de 24 horas, handoff para humano, regras da Meta para IA e exemplo em Node.js.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[8],"tags":[],"class_list":["post-54","post","type-post","status-publish","format-standard","hentry","category-uncategorized-pt"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Chatbot com IA no WhatsApp pela API oficial: arquitetura e c\u00f3digo - Blog Vectalk<\/title>\n<meta name=\"description\" content=\"Chatbot no WhatsApp API com IA: arquitetura com webhook, fila e LLM, janela de 24 horas, handoff para humano, regras da Meta para IA e exemplo em Node.js.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vectalk.com.br\/blog\/chatbot-ia-whatsapp-api\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Chatbot com IA no WhatsApp pela API oficial: arquitetura e c\u00f3digo - Blog Vectalk\" \/>\n<meta property=\"og:description\" content=\"Chatbot no WhatsApp API com IA: arquitetura com webhook, fila e LLM, janela de 24 horas, handoff para humano, regras da Meta para IA e exemplo em Node.js.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vectalk.com.br\/blog\/chatbot-ia-whatsapp-api\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Vectalk\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-20T19:34:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-25T13:17:00+00:00\" \/>\n<meta name=\"author\" content=\"wanderleyfcunha\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"wanderleyfcunha\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/chatbot-ia-whatsapp-api\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/chatbot-ia-whatsapp-api\\\/\"},\"author\":{\"name\":\"wanderleyfcunha\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"headline\":\"Chatbot com IA no WhatsApp pela API oficial: arquitetura e c\u00f3digo\",\"datePublished\":\"2026-10-20T19:34:41+00:00\",\"dateModified\":\"2026-10-25T13:17:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/chatbot-ia-whatsapp-api\\\/\"},\"wordCount\":1899,\"commentCount\":0,\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/chatbot-ia-whatsapp-api\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/chatbot-ia-whatsapp-api\\\/\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/chatbot-ia-whatsapp-api\\\/\",\"name\":\"Chatbot com IA no WhatsApp pela API oficial: arquitetura e c\u00f3digo - Blog Vectalk\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\"},\"datePublished\":\"2026-10-20T19:34:41+00:00\",\"dateModified\":\"2026-10-25T13:17:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"description\":\"Chatbot no WhatsApp API com IA: arquitetura com webhook, fila e LLM, janela de 24 horas, handoff para humano, regras da Meta para IA e exemplo em Node.js.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/chatbot-ia-whatsapp-api\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/chatbot-ia-whatsapp-api\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/chatbot-ia-whatsapp-api\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Chatbot com IA no WhatsApp pela API oficial: arquitetura e c\u00f3digo\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\",\"name\":\"Blog Vectalk\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\",\"name\":\"wanderleyfcunha\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g\",\"caption\":\"wanderleyfcunha\"},\"sameAs\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Chatbot com IA no WhatsApp pela API oficial: arquitetura e c\u00f3digo - Blog Vectalk","description":"Chatbot no WhatsApp API com IA: arquitetura com webhook, fila e LLM, janela de 24 horas, handoff para humano, regras da Meta para IA e exemplo em Node.js.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vectalk.com.br\/blog\/chatbot-ia-whatsapp-api\/","og_locale":"en_US","og_type":"article","og_title":"Chatbot com IA no WhatsApp pela API oficial: arquitetura e c\u00f3digo - Blog Vectalk","og_description":"Chatbot no WhatsApp API com IA: arquitetura com webhook, fila e LLM, janela de 24 horas, handoff para humano, regras da Meta para IA e exemplo em Node.js.","og_url":"https:\/\/vectalk.com.br\/blog\/chatbot-ia-whatsapp-api\/","og_site_name":"Blog Vectalk","article_published_time":"2026-10-20T19:34:41+00:00","article_modified_time":"2026-10-25T13:17:00+00:00","author":"wanderleyfcunha","twitter_card":"summary_large_image","twitter_misc":{"Written by":"wanderleyfcunha","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vectalk.com.br\/blog\/chatbot-ia-whatsapp-api\/#article","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/chatbot-ia-whatsapp-api\/"},"author":{"name":"wanderleyfcunha","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"headline":"Chatbot com IA no WhatsApp pela API oficial: arquitetura e c\u00f3digo","datePublished":"2026-10-20T19:34:41+00:00","dateModified":"2026-10-25T13:17:00+00:00","mainEntityOfPage":{"@id":"https:\/\/vectalk.com.br\/blog\/chatbot-ia-whatsapp-api\/"},"wordCount":1899,"commentCount":0,"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/vectalk.com.br\/blog\/chatbot-ia-whatsapp-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/vectalk.com.br\/blog\/chatbot-ia-whatsapp-api\/","url":"https:\/\/vectalk.com.br\/blog\/chatbot-ia-whatsapp-api\/","name":"Chatbot com IA no WhatsApp pela API oficial: arquitetura e c\u00f3digo - Blog Vectalk","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/#website"},"datePublished":"2026-10-20T19:34:41+00:00","dateModified":"2026-10-25T13:17:00+00:00","author":{"@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"description":"Chatbot no WhatsApp API com IA: arquitetura com webhook, fila e LLM, janela de 24 horas, handoff para humano, regras da Meta para IA e exemplo em Node.js.","breadcrumb":{"@id":"https:\/\/vectalk.com.br\/blog\/chatbot-ia-whatsapp-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vectalk.com.br\/blog\/chatbot-ia-whatsapp-api\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vectalk.com.br\/blog\/chatbot-ia-whatsapp-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vectalk.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Chatbot com IA no WhatsApp pela API oficial: arquitetura e c\u00f3digo"}]},{"@type":"WebSite","@id":"https:\/\/vectalk.com.br\/blog\/#website","url":"https:\/\/vectalk.com.br\/blog\/","name":"Blog Vectalk","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vectalk.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b","name":"wanderleyfcunha","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g","caption":"wanderleyfcunha"},"sameAs":["https:\/\/vectalk.com.br\/blog"]}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/54","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/comments?post=54"}],"version-history":[{"count":1,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/54\/revisions"}],"predecessor-version":[{"id":447,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/54\/revisions\/447"}],"wp:attachment":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/media?parent=54"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/categories?post=54"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/tags?post=54"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}