Chatbot de WhatsApp com IA: RAG, handoff para humano e custo
Um chatbot de WhatsApp com IA recebe a mensagem por webhook, busca no seu material os trechos relevantes (RAG), pede ao modelo de IA uma resposta baseada neles e envia o texto de volta pela API; quando a conversa foge do que o bot sabe, passa para uma pessoa (handoff). Este guia mostra a arquitetura, o código mínimo, as regras de handoff e como estimar custo sem chutar número.
Publicado em · 8 min de leitura
Como funciona um chatbot de WhatsApp com IA
O ciclo tem cinco etapas: a mensagem chega ao seu webhook; o sistema filtra o que não deve responder (mensagens suas, grupos, spam); recupera o contexto (histórico da conversa e trechos da base de conhecimento); chama o modelo de IA com um prompt de sistema e esse contexto; e envia a resposta por send/text. Tudo isso precisa acontecer em segundos, e o webhook deve responder 2xx antes de a IA terminar.
O que separa um chatbot útil de um que atrapalha é o que ele não faz: não inventa preço, prazo ou política; não insiste quando o cliente pede uma pessoa; não responde fora do assunto. Isso se resolve com três decisões de projeto, tratadas abaixo: de onde vem o conhecimento (RAG), quando a conversa vai para um humano (handoff) e quanto cada resposta custa.
Duas formas de montar: IA na instância ou IA no seu código
| Critério | IA configurada na instância | IA no seu código |
|---|---|---|
| Onde roda | Na plataforma, por agente e gatilho | No seu servidor, chamando o provedor de IA que você escolher |
| Esforço | Baixo: configurar agente, base de conhecimento e gatilho | Maior: webhook, busca, prompt, envio e fila |
| Controle | O que a plataforma oferece | Total sobre prompt, busca, memória e regras |
| Indicado para | Atendimento padrão e primeira resposta | Fluxos específicos, integrações e regras de negócio próprias |
A API tem endpoints para o primeiro caminho: POST /agent/edit cria ou edita um agente (nome, provedor, modelo, prompt-base, limites), POST /knowledge/edit cadastra a base de conhecimento (tipos de arquivo pdf, txt, html e csv; exige a chave do provedor de IA configurada na instância) e POST /trigger/edit liga o agente a um gatilho (palavras que iniciam, ignorar grupos, atraso de resposta). A página do chatbot de WhatsApp com IA mostra o recurso no painel.
cURL (criar agente na instância)
curl -X POST https://api.zapzapapi.com/api/v1/SEU_INSTANCE_ID/agent/edit \
-H "Content-Type: application/json" \
-H "x-api-key: SUA_API_KEY" \
-H "x-api-secret: SEU_API_SECRET" \
-d '{"agent":{"name":"Atendimento","provider":"SEU_PROVEDOR","model":"SEU_MODELO","apikey":"CHAVE_DO_PROVEDOR","basePrompt":"Você atende clientes da clínica X. Responda só com base no material. Se não souber, diga que vai chamar uma pessoa.","maxTokens":500,"temperature":50}}'O que é RAG e como dar à IA o conteúdo do seu negócio
RAG (geração aumentada por recuperação) é o padrão de buscar trechos relevantes no seu material e entregá-los ao modelo junto com a pergunta, em vez de esperar que o modelo saiba a resposta. É o que impede o bot de inventar o horário de funcionamento ou a política de troca: a resposta sai do texto que você forneceu.
O pipeline: reúna o material (FAQ, tabela de serviços, políticas, scripts de venda); quebre em trechos de tamanho moderado, cada um com um assunto; gere embeddings de cada trecho e guarde em um banco vetorial (ou no próprio Postgres com extensão vetorial); na hora da pergunta, busque os trechos mais próximos e coloque no prompt com a instrução de responder apenas com base neles. Se nada relevante for encontrado, o bot deve dizer que vai chamar uma pessoa, não improvisar.
Dois cuidados que fazem diferença: mantenha o material atualizado (preço velho no banco vetorial vira resposta errada com cara de certa) e guarde a origem de cada trecho, para auditar de onde saiu uma resposta.
Código mínimo: webhook, busca, resposta e envio
O exemplo abaixo é um esqueleto em Node.js. As funções buscarTrechos e chamarModelo são pontos de troca: ligue-as ao seu banco vetorial e ao provedor de IA que você usar. O que importa aqui é a ordem: responder 2xx, filtrar, checar se há humano na conversa, recuperar contexto, gerar a resposta e enviar.
A estrutura do evento deve ser conferida em um log real; o código usa leitura defensiva. Para o desenho do webhook, veja o guia de webhook em produção.
Node.js
import express from "express";
const app = express();
app.use(express.json());
const BASE = "https://api.zapzapapi.com/api/v1/" + process.env.ZAPZAP_INSTANCE_ID;
const headers = {
"Content-Type": "application/json",
"x-api-key": process.env.ZAPZAP_API_KEY,
"x-api-secret": process.env.ZAPZAP_API_SECRET,
};
const comHumano = new Map(); // number -> expiry (ms)
const vistos = new Set(); // handled message ids
async function buscarTrechos(pergunta) { /* query your vector store */ return []; }
async function chamarModelo({ sistema, historico, pergunta, trechos }) { /* call your AI provider */ return "..."; }
async function enviar(number, text) {
const r = await fetch(BASE + "/send/text", { method: "POST", headers, body: JSON.stringify({ number, text }) });
if (!r.ok) throw new Error("send failed " + r.status + ": " + (await r.text()));
}
app.post("/webhook/whatsapp", (req, res) => {
res.sendStatus(200);
responder(req.body).catch((e) => console.error(e));
});
async function responder(evento) {
const msg = evento?.message ?? evento?.data ?? evento;
if (msg?.fromMe) return;
const id = msg?.messageid ?? msg?.id;
if (id && vistos.has(id)) return;
if (id) vistos.add(id);
const numero = msg?.sender ?? msg?.from;
const texto = msg?.text ?? msg?.body ?? "";
if (!numero || !texto) return;
if ((comHumano.get(numero) ?? 0) > Date.now()) return;
if (/atendente|humano|pessoa|reclama/i.test(texto)) {
comHumano.set(numero, Date.now() + 4 * 60 * 60 * 1000);
await enviar(numero, "Certo, vou chamar uma pessoa da equipe para continuar com você.");
return;
}
const trechos = await buscarTrechos(texto);
if (trechos.length === 0) {
comHumano.set(numero, Date.now() + 4 * 60 * 60 * 1000);
await enviar(numero, "Essa eu prefiro confirmar com a equipe. Já te respondo por aqui.");
return;
}
const resposta = await chamarModelo({
sistema: "Responda apenas com base nos trechos. Se faltar informação, diga que vai chamar uma pessoa.",
historico: [],
pergunta: texto,
trechos,
});
await enviar(numero, resposta);
}
app.listen(3000);Quando passar para uma pessoa: regras de handoff
Handoff é a passagem da conversa do bot para um humano. Defina regras explícitas, em código ou no prompt, e teste cada uma. Os gatilhos mais úteis: o cliente pede uma pessoa; o bot não encontrou trecho relevante; o assunto é sensível (reclamação, cobrança disputada, saúde, jurídico); o cliente repete a mesma pergunta duas vezes; a conversa passou de um número de trocas sem resolver; o sentimento é negativo.
Duas regras de convivência evitam constrangimento. Primeira: quando o humano assume, o bot se cala naquela conversa por um período (o exemplo usa quatro horas, valor seu) e volta só se alguém liberar. Segunda: avise o cliente na transição, com uma frase simples, e entregue ao atendente o resumo do que já foi dito, para ninguém pedir de novo a mesma informação.
Quanto custa um chatbot de WhatsApp com IA
O custo tem quatro partes: a conexão com o WhatsApp, o provedor de IA, a infraestrutura de busca e o tempo de manutenção. No ZapZap, a conexão custa R$15 por número ativo por mês, pré-pago, sem cobrança por mensagem (valores vigentes em preços). O provedor de IA cobra por volume de texto processado; o preço muda e varia por modelo, então consulte a tabela atual do provedor que você escolher em vez de usar um número de terceiros.
Para estimar sem chutar, meça. Rode uma semana com tráfego real em volume pequeno, registre quantos caracteres entram e saem por conversa e multiplique pelo preço da tabela do provedor. Os fatores que mais pesam: tamanho do prompt de sistema (repetido a cada resposta), quantidade de trechos de RAG injetados, tamanho do histórico enviado e comprimento das respostas. Reduzir qualquer um deles baixa o custo sem mexer no restante.
| Alavanca | Efeito no custo | Efeito na qualidade |
|---|---|---|
| Prompt de sistema enxuto | Reduz | Neutro se o essencial ficar |
| Menos trechos de RAG, mais precisos | Reduz | Melhora se a busca for boa |
| Histórico limitado às últimas trocas | Reduz | Pode perder contexto antigo |
| Resposta curta por instrução | Reduz | Melhora no WhatsApp, onde textos longos cansam |
| Modelo menor para perguntas simples | Reduz | Pode piorar em casos difíceis |
Riscos e limites que você precisa conhecer
Alucinação: mesmo com RAG, o modelo pode errar. Mitigue com instrução de responder só com base no material, com temperatura baixa e revisando amostras de conversa toda semana. Dados pessoais: mensagens de clientes são dados pessoais; defina retenção, informe o uso de IA no atendimento e evite enviar dados sensíveis ao provedor sem base legal. A LGPD vale para o bot como para uma pessoa.
Risco do canal: respostas a quem escreveu primeiro são o uso mais seguro de um bot, mas nenhuma API não oficial elimina a possibilidade de restrição do número. Evite iniciar conversa fria com IA em volume. Veja o guia de anti-bloqueio e, para um passo a passo sem código, o artigo sobre resposta automática com IA.
Checklist antes de colocar o bot no ar
- Webhook responde 2xx rápido e deduplica por id da mensagem
- Mensagens enviadas por você (fromMe) e grupos são ignoradas
- Há regra de handoff testada e o bot se cala quando o humano assume
- Sem trecho relevante, o bot diz que vai chamar uma pessoa
- O prompt manda responder só com base no material
- Material de RAG atualizado e com origem registrada
- Limite de tamanho de resposta e de histórico definido
- Amostra semanal de conversas revisada por uma pessoa
- Aviso ao cliente de que parte do atendimento é automatizado
Comece pequeno: um número, um tema (por exemplo, dúvidas de agendamento) e revisão diária na primeira semana. Aumente o escopo só quando as respostas estiverem estáveis. Para o primeiro envio e o webhook, o início rápido leva poucos minutos.
Resumo rápido
- O ciclo é: webhook, filtro, contexto (histórico e RAG), modelo de IA, envio por /send/text.
- RAG busca trechos do seu material e os entrega ao modelo, o que reduz resposta inventada.
- Defina regras de handoff por escrito: pedido do cliente, sem trecho relevante, assunto sensível, repetição.
- O custo se estima medindo tráfego real e multiplicando pela tabela atual do provedor; prompt, trechos e histórico são as alavancas.
- Nenhum bot elimina o risco de restrição do número: responda a quem escreveu primeiro e revise amostras toda semana.
Continue lendo
Perguntas frequentes
O que é RAG em um chatbot de WhatsApp?
É buscar trechos relevantes no seu material (FAQ, serviços, políticas) e entregá-los ao modelo de IA junto com a pergunta, para a resposta sair do seu conteúdo em vez de da memória do modelo. Reduz resposta inventada, mas não elimina: revise amostras.
Como fazer o bot passar a conversa para um atendente?
Defina gatilhos explícitos (pedido do cliente, nenhum trecho relevante, assunto sensível, repetição) e, ao disparar, avise o cliente, marque a conversa como com humano e faça o bot se calar naquele chat por um período. Entregue ao atendente o resumo do que já foi dito.
Quanto custa manter um chatbot de WhatsApp com IA?
Soma conexão, provedor de IA, busca e manutenção. No ZapZap a conexão é R$15 por número ativo por mês, sem cobrança por mensagem. O provedor de IA cobra por volume de texto e o preço muda; meça uma semana de tráfego real e use a tabela atual do provedor.
Posso configurar a IA direto na instância, sem código?
Sim. A API tem endpoints para criar o agente (agent/edit), cadastrar a base de conhecimento (knowledge/edit, que exige a chave do provedor de IA na instância) e ligar o gatilho (trigger/edit). Para regras de negócio próprias, o caminho é o seu código.
O bot pode iniciar conversas com IA?
Tecnicamente pode, mas é o uso de maior risco para o número e para a reputação. O uso mais seguro é responder a quem escreveu primeiro. Os Termos do WhatsApp não preveem automação não autorizada, e nenhuma API não oficial elimina o risco de restrição.
Monte o seu chatbot de WhatsApp com IA
Crie a conta, verifique o telefone e receba o crédito de boas-vindas, sem depositar (um por telefone, sujeito à campanha vigente). Conecte um número por QR code e teste o fluxo com sua base.
