ZAP-API
PreçosCasos de UsoBlogDocsLogin
Começar grátis
  1. Blog
  2. WhatsApp API para Atendimento ao Cliente: Guia Completo 2026
Caso de uso

WhatsApp API para Atendimento ao Cliente: Guia Completo 2026

Como estruturar atendimento ao cliente pelo WhatsApp via API: fila de atendimento, transferência para humano, CSAT automático e métricas de SLA. Com arquitetura e código prontos.

03 de março de 2026·11 min de leitura·Equipe Editorial ZAP API

WhatsApp tem taxa de abertura acima de 90% — contra ~20% do e-mail. Para atendimento ao cliente, isso significa menos tickets ignorados, resolução mais rápida e clientes mais satisfeitos. Neste guia você aprende a montar um sistema de atendimento profissional usando a ZAP API.

Arquitetura de um sistema de atendimento WhatsApp

Um sistema de atendimento eficiente tem três camadas:

  1. Recepção — webhook captura todas as mensagens recebidas
  2. Triagem automática — chatbot responde dúvidas simples via IA
  3. Fila humana — casos complexos são direcionados para atendentes
// Arquitetura simplificada
Cliente → WhatsApp → ZAP API Webhook → [Triagem IA]
                                           ↓           ↓
                                      Resposta    Fila Humana
                                      automática  → Atendente
                                                    → Notifica via Slack/Email

Passo 1: Receber e categorizar mensagens

import express from 'express';
import axios from 'axios';

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

const ZAP_TOKEN = process.env.ZAP_TOKEN;
const ZAP_INSTANCE = process.env.ZAP_INSTANCE;

// Categorias de atendimento
type Category = 'faq' | 'pedido' | 'reclamacao' | 'humano';

function categorize(body: string): Category {
  const text = body.toLowerCase();
  if (/status|rastr|entrega|pedido/.test(text)) return 'pedido';
  if (/reclamar|insatisf|problema|errado/.test(text)) return 'reclamacao';
  if (/falar|atendente|humano|pessoa/.test(text)) return 'humano';
  return 'faq';
}

app.post('/webhook', async (req, res) => {
  res.sendStatus(200);
  const { event, data } = req.body;
  if (event !== 'message.received') return;

  const category = categorize(data.body);
  await routeMessage(data, category);
});

interface ChatMessage {
  phone: string;
  name?: string;
  body?: string;
  messageId?: string;
  sessionId?: string;
  metadata?: Record;
}

async function routeMessage(data: ChatMessage, category: Category) {
  switch (category) {
    case 'faq':
      await handleFaq(data);
      break;
    case 'pedido':
      await handleOrderStatus(data);
      break;
    case 'reclamacao':
      await escalateToHuman(data, '🔴 Reclamação');
      break;
    case 'humano':
      await escalateToHuman(data, '👤 Solicitou atendimento humano');
      break;
  }
}

Passo 2: Resposta automática com IA para FAQ

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

const SYSTEM_PROMPT = `
Você é o assistente de suporte da Minha Empresa.
Responda em português, seja breve (máx 3 frases) e preciso.
Se não souber, diga "Vou verificar com nossa equipe e retorno em breve."

Informações do produto:
- Horário de atendimento: seg-sex 9h-18h
- Prazo de entrega: 3-5 dias úteis
- Política de troca: 30 dias após recebimento
- Suporte: [email protected]
`;

async function handleFaq(data: ChatMessage) {
  const completion = await openai.chat.completions.create({
    model: 'gpt-4o-mini',
    messages: [
      { role: 'system', content: SYSTEM_PROMPT },
      { role: 'user', content: data.body }
    ]
  });

  const reply = completion.choices[0].message.content ?? 'Desculpe, não entendi. Pode reformular?';
  await sendMessage(data.phone, reply);
}

async function sendMessage(phone: string, text: string) {
  await axios.post(
    `https://zap-api.tech/v1/instances/${ZAP_INSTANCE}/send`,
    { phone, type: 'text', body: text },
    { headers: { Authorization: `Bearer ${ZAP_TOKEN}` } }
  );
}

Passo 3: Fila de atendimento humano

// Estrutura da fila em memória (use Redis em produção)
interface Ticket {
  id: string;
  phone: string;
  name: string;
  reason: string;
  createdAt: Date;
  status: 'waiting' | 'in_progress' | 'resolved';
  agentId?: string;
}

const ticketQueue: Ticket[] = [];

async function escalateToHuman(data: ChatMessage, reason: string) {
  const ticket: Ticket = {
    id: `TK-${Date.now()}`,
    phone: data.phone,
    name: data.name,
    reason,
    createdAt: new Date(),
    status: 'waiting'
  };

  ticketQueue.push(ticket);

  // Confirma para o cliente
  await sendMessage(data.phone,
    `✅ Entendido! Você está na fila de atendimento (posição ${ticketQueue.length}).\n` +
    `Um atendente responderá em breve. Horário: seg-sex 9h-18h.`
  );

  // Notifica a equipe (Slack, email, etc.)
  await notifyTeam(ticket);
}

// API para atendentes visualizarem a fila
app.get('/tickets', (req, res) => {
  res.json(ticketQueue.filter(t => t.status === 'waiting'));
});

// Atendente assume um ticket
app.post('/tickets/:id/claim', async (req, res) => {
  const ticket = ticketQueue.find(t => t.id === req.params.id);
  if (!ticket) return res.status(404).json({ error: 'Ticket não encontrado' });

  ticket.status = 'in_progress';
  ticket.agentId = req.body.agentId;

  await sendMessage(ticket.phone,
    `👋 Olá ${ticket.name}! Sou ${req.body.agentName} e vou te ajudar agora.`
  );

  res.json({ ok: true, ticket });
});

Passo 4: CSAT automático após resolução

Avalie a satisfação do cliente automaticamente ao fechar um ticket:

// Fecha ticket e dispara pesquisa de satisfação
app.post('/tickets/:id/resolve', async (req, res) => {
  const ticket = ticketQueue.find(t => t.id === req.params.id);
  if (!ticket) return res.status(404).json({ error: 'Not found' });

  ticket.status = 'resolved';

  // Aguarda 2 min e envia CSAT
  setTimeout(async () => {
    await sendMessage(ticket.phone,
      `Seu atendimento foi resolvido! 🎉\n\n` +
      `Como você avalia nosso suporte de 1 a 5?\n` +
      `1 = Péssimo | 5 = Excelente`
    );
  }, 2 * 60 * 1000);

  res.json({ ok: true });
});

Métricas essenciais para monitorar

MétricaMetaComo calcular
Tempo médio de resposta (TMA)< 5 minΔt entre mensagem e 1ª resposta
Tempo médio de resolução (TMR)< 30 minΔt entre abertura e fechamento
Taxa de resolução automática> 60%Tickets resolvidos pela IA / total
CSAT> 4.2/5Média das avaliações recebidas
Taxa de abandono< 10%Clientes que não responderam na fila

Horário de atendimento e fora de expediente

function isBusinessHours(): boolean {
  const now = new Date();
  const hour = now.getHours();
  const day = now.getDay(); // 0 = domingo, 6 = sábado
  return day >= 1 && day <= 5 && hour >= 9 && hour < 18;
}

app.post('/webhook', async (req, res) => {
  res.sendStatus(200);
  const { event, data } = req.body;
  if (event !== 'message.received') return;

  if (!isBusinessHours()) {
    await sendMessage(data.phone,
      `Olá! 👋 Nosso horário de atendimento é seg-sex das 9h às 18h.\n` +
      `Sua mensagem foi registrada e responderemos no próximo dia útil.`
    );
    return;
  }

  // ... lógica normal de atendimento
});

FAQ

Quantos atendentes podem usar o sistema ao mesmo tempo?

Não há limite por parte da ZAP API. O limite é da sua implementação da fila. Com Redis e workers adequados, você pode escalar para dezenas de atendentes simultâneos.

Como evitar que o cliente receba respostas duplicadas (IA + humano)?

Implemente um estado por sessão: quando um ticket está in_progress, desative as respostas automáticas para aquele número até que seja resolved.

É possível integrar com ferramentas de CRM como HubSpot ou Pipedrive?

Sim. Use as APIs oficiais desses CRMs para criar/atualizar contatos e negócios a partir dos eventos do webhook WhatsApp. A integração é feita no seu backend.

Qual o custo para começar?

A ZAP API oferece 7 dias de trial grátis sem cartão. Após o trial, a partir de R$29/mês por instância WhatsApp — sem cobrança por mensagem.

Experimente a ZAP API gratuitamente

7 dias de trial sem precisar de cartão. A partir de R$29/mês*.

Criar instância grátis
EE
Equipe Editorial ZAP APIRevisão técnica

Desenvolvedores e especialistas em integrações WhatsApp. Todo conteúdo passa por revisão técnica para garantir precisão e aplicabilidade.

Ver perfil completoDocumentaçãoTrial grátis

Leia também

Caso de uso · 20 de fev. de 2026 · 12 min

Como integrar WhatsApp ao seu e-commerce: guia completo

Implemente os 5 fluxos essenciais: notificações de pedido, recuperação de carrinho, chatbot de suporte, pós-venda e campanhas segmentadas. Com exemplos em Node.js prontos para produção.

Tutorial · 06 de jun. de 2026 · 12 min

WhatsApp API para Atendimento Automático: guia completo 2026

Respostas fora do horário, triagem de leads por palavra-chave, fluxos condicionais e transferência para humano: como montar atendimento automático no WhatsApp em menos de 30 minutos.

Caso de uso · 07 de mar. de 2026 · 11 min

WhatsApp API para imobiliárias: qualifique leads e agende visitas

Use WhatsApp API para qualificar leads automaticamente, enviar fotos de imóveis e agendar visitas. Guia completo com bot de qualificação em Node.js.

Caso de uso · 19 de fev. de 2026 · 7 min

Como automatizar notificações de pedido pelo WhatsApp

Aprenda a enviar notificações automáticas de confirmação, envio e entrega de pedidos via WhatsApp para o seu e-commerce. Taxa de abertura acima de 90%.

Tópicos:Chatbots com IAE-commerceAPI WhatsApp

Explore também

Casos de usoWhatsApp API por segmentoComparativoZAP API vs alternativasPreçosPlanos e o que está inclusoGlossárioTermos técnicos de WhatsApp API
ZAP-API

API REST para WhatsApp com webhooks assinados, Meta Pixel/CAPI e compliance LGPD. Sem aprovação da Meta.

Status operacional🇧🇷 Feito no Brasil

Produto

  • Preços
  • Casos de uso
  • Comparativo
  • Trial grátis
  • Dashboard

Recursos

  • Documentação
  • Blog
  • Glossário
  • RSS Feed

Empresa

  • Sobre
  • Imprensa
  • Termos de uso
  • Privacidade
  • Criar conta
  • Login

Contato

  • [email protected]
  • [email protected]
  • Resposta em até 24h úteis
© 2026 ZAP-API — Todos os direitos reservados·CNPJ 42.130.949/0001-56·Termos·Privacidade

Desenvolvido por PreviusIA