---
title: "Chatbot de IA no WhatsApp com a API da OpenAI (código pronto)"
description: "Um webhook, uma chamada à API da OpenAI e uma resposta pela WAME API: o código completo de um chatbot de IA que atende no WhatsApp, Instagram e Messenger. Com memória por contato, controle de custo e o que fazer quando a IA não deve responder."
url: "https://api-wa.me/blog/chatbot-ia-openai-whatsapp"
language: "pt-BR"
og:type: "article"
og:site_name: "WAME API"
---

[Início](https://api-wa.me/)/[Blog da API do WhatsApp](https://api-wa.me/blog)/Como criar um chatbot de IA com a API da OpenAI para responder no WhatsApp

Raphael Serafim· Publicado em 10 de setembro de 2026· 10 min de leitura

Compartilhar

# Como criar um chatbot de IA com a API da OpenAI para responder no WhatsApp

Um webhook, uma chamada à API da OpenAI e uma resposta pela WAME API: o código completo de um chatbot de IA que atende no WhatsApp, Instagram e Messenger. Com memória por contato, controle de custo e o que fazer quando a IA não deve responder.

Copiar para LLM[Ver como Markdown](https://api-wa.me/blog/chatbot-ia-openai-whatsapp.md)

**Um chatbot de IA no WhatsApp são três peças: receber a mensagem, perguntar ao modelo, devolver a resposta.** Nenhuma delas é difícil — o que costuma dar trabalho é o meio de campo: o formato do webhook, a memória da conversa e saber quando a IA _não_ deve responder.

Este artigo mostra o código completo, em Node.js, e trata das três coisas.

## O que você precisa

1. Uma instância na [WAME API](https://portal.api-wa.me/) — a não oficial conecta por QR Code em segundos e serve para testar.
2. Uma chave da [API da OpenAI](https://openai.com/pt-BR/index/openai-api).
3. Uma URL pública para o webhook. Em desenvolvimento, `ngrok` ou similar.

## Peça 1: receber a mensagem

Aponte o webhook da sua instância (formato `meta`) para a sua URL. Todo evento chega no envelope padrão da Meta Cloud API, e o campo `provider` diz o canal:

```json
{
  "object": "wame",
  "provider": "whatsapp",
  "entry": [{
    "id": "<instance-id>",
    "changes": [{
      "field": "messages",
      "value": {
        "messages": [{
          "from": "5566996852025",
          "id": "wamid.XXXX",
          "type": "text",
          "text": { "body": "vocês entregam em Cuiabá?" }
        }]
      }
    }]
  }]
}
```

Isso importa mais do que parece: como os três canais chegam no mesmo envelope, o bot que você escrever para o WhatsApp já atende Instagram e Messenger. É o [padrão único de webhook](https://api-wa.me/blog/webhook-whatsapp-instagram-messenger-padrao-meta) da plataforma.

O extrator, com as guardas que evitam 90% dos bugs:

```js
function extrair(body) {
  const msg = body?.entry?.[0]?.changes?.[0]?.value?.messages?.[0];

  // Status de entrega ("delivered", "read") também chega aqui.
  // Sem esta guarda, o bot responde a si mesmo em loop.
  if (!msg || msg.type !== 'text') return null;

  return {
    de: msg.from,
    texto: msg.text.body,
    canal: body.provider,
    messageId: msg.id,
  };
}
```

## Peça 2: perguntar ao modelo

A API da OpenAI **não guarda estado**. Cada chamada é independente, então a memória é sua:

```js
import OpenAI from 'openai';

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

// Em produção use Redis ou banco. Em memória, some no restart.
const historico = new Map();

const SYSTEM = `Você é o atendente da Loja Exemplo, no WhatsApp.

Regras:
- Responda em português, em no máximo 3 frases curtas.
- Nunca invente prazo, preço ou disponibilidade.
- Se a pergunta exigir dado que você não tem, responda exatamente
  com o texto [HUMANO] e nada mais.`;

async function responder(de, texto) {
  const anterior = historico.get(de) ?? [];

  // Últimas 10 mensagens: o suficiente para o contexto e
  // o bastante para o custo não crescer sem limite.
  const mensagens = [
    { role: 'system', content: SYSTEM },
    ...anterior.slice(-10),
    { role: 'user', content: texto },
  ];

  const r = await openai.chat.completions.create({
    model: 'gpt-4o-mini',
    messages: mensagens,
    max_tokens: 300,
    temperature: 0.3,
  });

  const resposta = r.choices[0].message.content.trim();

  historico.set(de, [
    ...anterior.slice(-10),
    { role: 'user', content: texto },
    { role: 'assistant', content: resposta },
  ]);

  return resposta;
}
```

Três decisões nesse código valem explicação:

**`temperature: 0.3`** — atendimento não quer criatividade. Temperatura baixa deixa a resposta mais previsível e reduz invenção.

**`max_tokens: 300`** — WhatsApp não é lugar de parágrafo longo. Além de melhorar a leitura, limita o custo por resposta.

**`slice(-10)`** — o custo da OpenAI é por token, e o histórico inteiro vai em **toda** chamada. Sem corte, uma conversa longa fica progressivamente mais cara. Dez mensagens costumam bastar.

## Peça 3: devolver pelo WhatsApp

```js
async function enviar(para, texto, canal) {
  await fetch(`https://us.api-wa.me/${process.env.WAME_KEY}/message/text`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ to: para, text: texto, channel: canal }),
  });
}
```

## Juntando tudo

```js
import express from 'express';

const app = express();
app.use(express.json());

app.post('/webhook/wame', async (req, res) => {
  // Responda 200 IMEDIATAMENTE. A OpenAI leva segundos, e um
  // webhook que demora a responder é reenviado — o cliente
  // receberia a mesma resposta duas ou três vezes.
  res.sendStatus(200);

  const msg = extrair(req.body);
  if (!msg) return;

  try {
    const resposta = await responder(msg.de, msg.texto);

    if (resposta.includes('[HUMANO]')) {
      await enviar(msg.de, 'Só um instante, vou chamar alguém do time.', msg.canal);
      await avisarAtendente(msg);   // sua fila, seu CRM, seu Chatwoot
      return;
    }

    await enviar(msg.de, resposta, msg.canal);
  } catch (e) {
    console.error('falha ao responder', msg.de, e);
    await enviar(msg.de, 'Tive um problema aqui. Já chamo um atendente.', msg.canal);
    await avisarAtendente(msg);
  }
});

app.listen(3000);
```

Pronto — cerca de 60 linhas para um bot de IA que atende nos três canais.

## O detalhe que separa demo de produção

**Responder 200 antes de processar.** É a linha mais importante do arquivo. A chamada à OpenAI leva de 1 a 5 segundos; se o seu handler esperar por ela para responder ao webhook, a entrega é considerada falha e reenviada. O resultado é o cliente recebendo a mesma resposta três vezes — e você pagando três vezes por ela.

**Ter uma saída para o humano.** O `[HUMANO]` do system prompt existe para isso. Um bot que responde "não sei" é ruim; um bot que inventa o prazo de entrega é pior, porque vira reclamação. Modelo instruído a admitir o limite e código que trata esse caso resolvem os dois. Como o `avisarAtendente` funciona do outro lado — fila, atribuição e o bot saindo de cena — está em [vários atendentes no mesmo número](https://api-wa.me/blog/multiatendimento-mesmo-numero-whatsapp).

**Tratar o erro como caminho normal.** A OpenAI vai falhar em algum momento — timeout, limite, indisponibilidade. O `catch` acima não deixa o cliente no vácuo. Do lado do WhatsApp, [cada erro pede um tratamento diferente](https://api-wa.me/blog/erros-api-whatsapp-como-tratar): alguns valem nova tentativa, outros não.

**Não responder a si mesmo.** A guarda em `extrair` cuida disso: status de entrega e leitura também chegam no webhook, e sem o filtro o bot entra em loop.

## E se o webhook não chegar?

Acontece, e quase sempre é uma das mesmas causas. Antes de mexer no código, aponte o webhook da instância para uma URL do [webhook.site](https://webhook.site/) e mande uma mensagem: se o evento aparecer lá, o problema é o seu servidor; se não aparecer, é a configuração da instância. Esse teste de 30 segundos separa os dois mundos e evita horas de depuração no lado errado. Há um guia completo em [webhook não chega: as 7 causas](https://api-wa.me/blog/webhook-whatsapp-nao-chega-como-testar).

## Quando usar n8n em vez de código

Se você quer o fluxo montado visualmente, ou já opera n8n, existe um [template pronto de bot de IA com memória por contato](https://api-wa.me/blog/bot-ia-n8n-whatsapp-instagram-messenger) — cinco nós, sem escrever nada.

O código faz sentido quando você precisa de controle: regra de negócio no meio da conversa, consulta ao seu banco antes de responder, custo medido por cliente, ou o bot rodando dentro de um sistema que você já mantém. Se você [entrega software para clientes](https://api-wa.me/api-whatsapp-para-software-house), normalmente é esse o caso.

E se o que você quer não é um bot atendendo cliente, mas um agente de IA operando o WhatsApp _para você_ — ler a caixa de entrada, achar quem ficou sem resposta, mandar um documento —, o caminho é outro: [o servidor MCP da WAME](https://api-wa.me/blog/mcp-agente-ia-whatsapp), que dispensa escrever integração.

## Conclusão

O chatbot em si é a parte fácil. O que decide se ele fica no ar é o entorno: responder o webhook na hora, cortar o histórico, ter saída para o humano e tratar erro como caminho esperado.

Comece com uma instância não oficial e um número de teste. Quando o comportamento estiver bom, [migre para a API oficial](https://api-wa.me/blog/migrar-whatsapp-api-oficial-sem-perder-numero) — o webhook e o SDK são os mesmos, então o código do bot não muda.

### Pronto para automatizar seu WhatsApp?

Crie sua conta gratuita e comece a enviar mensagens pela API em minutos.

[Começar grátis](https://portal.api-wa.me/sign-up)

## Perguntas frequentes

Como conectar a API da OpenAI ao WhatsApp?+

São três peças: um webhook que recebe a mensagem do WhatsApp pela WAME API, uma chamada à API da OpenAI com o histórico da conversa, e um POST para /{key}/message/text devolvendo a resposta. O webhook recebe todos os canais no mesmo formato, então o mesmo código atende WhatsApp, Instagram e Messenger.

Preciso de n8n para fazer um bot de IA no WhatsApp?+

Não. O n8n é conveniente quando você quer montar o fluxo visualmente ou já usa a ferramenta, e existe um template pronto da WAME para isso. Mas em código são cerca de 60 linhas, e você ganha controle total sobre memória, custo e regras de quando não responder.

Quanto custa rodar um chatbot de IA no WhatsApp?+

Dois custos separados: o da OpenAI, cobrado por token consumido, e o da mensagem. Na API não oficial da WAME a mensagem tem preço fixo por instância; na oficial, a Meta cobra por conversa. O custo da IA é o que mais varia, e ele depende do tamanho do histórico que você envia a cada chamada — por isso limitar a memória importa.

Como fazer o bot lembrar da conversa anterior?+

A API da OpenAI não guarda estado: cada chamada é independente. Você mantém as últimas mensagens por contato num armazenamento seu (Redis, banco ou memória) e as envia como histórico a cada requisição. Guardar as últimas 10 costuma bastar e mantém o custo previsível.

O que fazer quando a IA não souber responder?+

Instrua o modelo no system prompt a devolver um marcador combinado quando não tiver certeza, e trate esse marcador no seu código transferindo para um atendente humano. Bot de IA que inventa resposta em atendimento custa mais caro que bot que passa a bola.

## Continue lendo

[### Bot de IA no WhatsApp, Instagram e Messenger com n8n (template pronto)

Monte um bot de IA (GPT/OpenAI) que responde no WhatsApp, Instagram e Messenger num único fluxo do n8n. Template pronto WAME, com memória por contato.](https://api-wa.me/blog/bot-ia-n8n-whatsapp-instagram-messenger)[### Cobrança por Pix dentro do WhatsApp pela API: como enviar e o que muda na conversão

Mandar o código Pix no WhatsApp resolve o pior ponto da cobrança digital: o cliente não precisa sair do app. Como enviar a cobrança pela API, tratar a confirmação e evitar os erros que transformam a facilidade em suporte.](https://api-wa.me/blog/cobrar-pix-whatsapp-api)[### Erros da API do WhatsApp: o que cada um significa e como tratar

A mensagem não saiu e o log diz apenas 'erro ao enviar'. Os erros que você vai encontrar de verdade — janela fechada, número inválido, template não aprovado, limite atingido, instância caída — e o tratamento certo para cada um.](https://api-wa.me/blog/erros-api-whatsapp-como-tratar)

[Voltar ao blog](https://api-wa.me/blog)

## Structured data

```json
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "WAME API",
  "alternateName": "API Oficial e Não Oficial de WhatsApp, Instagram e Messenger",
  "url": "https://api-wa.me",
  "inLanguage": "pt-BR",
  "publisher": {
    "@id": "https://api-wa.me/#organization",
    "@type": "Organization",
    "name": "WAME API",
    "url": "https://api-wa.me"
  }
}
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://api-wa.me/#organization",
  "name": "WAME API",
  "alternateName": [
    "WAME",
    "Wame API",
    "wame.api.br",
    "api-wa.me"
  ],
  "url": "https://api-wa.me",
  "logo": {
    "@type": "ImageObject",
    "url": "https://api-wa.me/images/web-app-manifest-512x512.png",
    "width": 512,
    "height": 512
  },
  "disambiguatingDescription": "WAME API é uma empresa brasileira de software, fundada em 2017 e parceira oficial da Meta (Meta Business Partner), que fornece APIs de WhatsApp, Instagram Direct e Messenger. Não tem relação com o wa.me, que é o encurtador de links operado pela WhatsApp LLC.",
  "identifier": {
    "@type": "PropertyValue",
    "propertyID": "INPI-BR",
    "name": "Pedido de registro de marca (INPI, classe NCL 42)",
    "value": "944724159"
  },
  "foundingDate": "2017",
  "slogan": "Parceira Oficial da Meta — WhatsApp, Instagram e Messenger numa instância só. Desde 2017.",
  "description": "Plataforma brasileira e Parceira Oficial da Meta (Meta Business Partner) para as APIs oficiais de WhatsApp (Cloud API), Instagram Direct e Messenger — os três numa única instância, com os mesmos endpoints e um único formato de webhook. Também oferece a API não oficial via QR Code, na mesma plataforma. No mercado desde 2017, com mais de 50 mil instâncias criadas, 99,9% de uptime e suporte humano 24/7 em português. SDKs oficiais para Node.js/TypeScript e PHP.",
  "knowsAbout": [
    "WhatsApp Cloud API oficial (Meta)",
    "API oficial de Instagram (Direct)",
    "API oficial de Messenger",
    "API multicanal Meta",
    "Meta Business Partner",
    "WhatsApp API",
    "API não oficial de WhatsApp",
    "automação de WhatsApp",
    "números virtuais",
    "webhooks"
  ],
  "sameAs": [
    "https://github.com/wame-api",
    "https://www.linkedin.com/company/wameapi",
    "https://www.instagram.com/wame.api/",
    "https://www.youtube.com/@wameapi"
  ],
  "contactPoint": {
    "@type": "ContactPoint",
    "contactType": "customer support",
    "url": "https://api-wa.me/contact",
    "availableLanguage": [
      "Portuguese"
    ]
  }
}
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "Como criar um chatbot de IA com a API da OpenAI para responder no WhatsApp",
  "description": "Um webhook, uma chamada à API da OpenAI e uma resposta pela WAME API: o código completo de um chatbot de IA que atende no WhatsApp, Instagram e Messenger. Com memória por contato, controle de custo e o que fazer quando a IA não deve responder.",
  "image": "https://api-wa.me/blog/chatbot-ia-openai-whatsapp/opengraph-image",
  "datePublished": "2026-09-10",
  "dateModified": "2026-09-10",
  "author": {
    "@type": "Person",
    "name": "Raphael Serafim",
    "url": "https://github.com/raphaelvserafim",
    "sameAs": [
      "https://github.com/raphaelvserafim"
    ]
  },
  "publisher": {
    "@type": "Organization",
    "name": "api-wa.me",
    "logo": {
      "@type": "ImageObject",
      "url": "https://api-wa.me/images/screenshot.png"
    }
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://api-wa.me/blog/chatbot-ia-openai-whatsapp"
  },
  "keywords": "chatbot ia whatsapp, openai api whatsapp, gpt no whatsapp, chatgpt whatsapp api, bot de ia whatsapp, integrar openai com whatsapp, assistente virtual whatsapp",
  "inLanguage": "pt-BR"
}
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://api-wa.me"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Blog da API do WhatsApp",
      "item": "https://api-wa.me/blog"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Como criar um chatbot de IA com a API da OpenAI para responder no WhatsApp",
      "item": "https://api-wa.me/blog/chatbot-ia-openai-whatsapp"
    }
  ]
}
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Como conectar a API da OpenAI ao WhatsApp?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "São três peças: um webhook que recebe a mensagem do WhatsApp pela WAME API, uma chamada à API da OpenAI com o histórico da conversa, e um POST para /{key}/message/text devolvendo a resposta. O webhook recebe todos os canais no mesmo formato, então o mesmo código atende WhatsApp, Instagram e Messenger."
      }
    },
    {
      "@type": "Question",
      "name": "Preciso de n8n para fazer um bot de IA no WhatsApp?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Não. O n8n é conveniente quando você quer montar o fluxo visualmente ou já usa a ferramenta, e existe um template pronto da WAME para isso. Mas em código são cerca de 60 linhas, e você ganha controle total sobre memória, custo e regras de quando não responder."
      }
    },
    {
      "@type": "Question",
      "name": "Quanto custa rodar um chatbot de IA no WhatsApp?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Dois custos separados: o da OpenAI, cobrado por token consumido, e o da mensagem. Na API não oficial da WAME a mensagem tem preço fixo por instância; na oficial, a Meta cobra por conversa. O custo da IA é o que mais varia, e ele depende do tamanho do histórico que você envia a cada chamada — por isso limitar a memória importa."
      }
    },
    {
      "@type": "Question",
      "name": "Como fazer o bot lembrar da conversa anterior?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "A API da OpenAI não guarda estado: cada chamada é independente. Você mantém as últimas mensagens por contato num armazenamento seu (Redis, banco ou memória) e as envia como histórico a cada requisição. Guardar as últimas 10 costuma bastar e mantém o custo previsível."
      }
    },
    {
      "@type": "Question",
      "name": "O que fazer quando a IA não souber responder?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Instrua o modelo no system prompt a devolver um marcador combinado quando não tiver certeza, e trate esse marcador no seu código transferindo para um atendente humano. Bot de IA que inventa resposta em atendimento custa mais caro que bot que passa a bola."
      }
    }
  ]
}
```
