WhatsApp é o canal de comunicação preferido dos brasileiros — com 147 milhões de usuários ativos. Integrar ao seu e-commerce vai além de notificações: significa ter um canal completo de vendas, suporte e fidelização no app que seu cliente já usa todos os dias.
Por que WhatsApp no e-commerce?
- 90%+ de taxa de abertura — contra 20-25% do e-mail marketing
- Redução de abandono de carrinho — lembrete no WhatsApp converte 3x mais que e-mail
- Suporte resolvido mais rápido — clientes preferem WhatsApp a ligações ou e-mail
- NPS mais alto — empresas com suporte por WhatsApp recebem melhores avaliações
- Recompra aumentada — follow-up pós-venda gera mais pedidos recorrentes
Os 5 fluxos essenciais
- Notificações de pedido: confirmação, envio, entrega
- Recuperação de carrinho: lembrete 1h após abandono
- Suporte automatizado: chatbot para perguntas frequentes
- Pós-venda: avaliação, cross-sell, fidelização
- Promoções segmentadas: campanhas para clientes por categoria de compra
Arquitetura do sistema
[E-commerce] [Seu servidor] [ZAP API]
Pedido criado → Webhook recebido → WhatsApp enviado
Carrinho aband. → Timer 1h → Lembrete enviado
Cliente responde ← Webhook recebido ← ZAP API notifica
Chatbot responde → IA processa → Resposta enviada
Setup inicial
npm install express axios dotenv
// zap.js — cliente reutilizável
const axios = require('axios');
require('dotenv').config();
const api = axios.create({
baseURL: 'https://zap-api.tech/v1',
headers: { Authorization: 'Bearer ' + process.env.ZAP_TOKEN }
});
const INSTANCE = process.env.ZAP_INSTANCE;
async function enviar(phone, mensagem) {
return api.post('/instances/' + INSTANCE + '/send', {
phone, type: 'text', body: mensagem
});
}
module.exports = { api, enviar, INSTANCE };
Fluxo 1: Notificações automáticas de pedido
// notificacoes.js
const { enviar } = require('./zap');
async function pedidoConfirmado(pedido, cliente) {
const msg =
'Seu pedido foi confirmado, ' + cliente.nome + '!
' +
'Pedido: #' + pedido.numero + '
' +
'Total: R$' + pedido.total.toFixed(2) + '
' +
'Você receberá o código de rastreio assim que sair para entrega.';
return enviar(cliente.phone, msg);
}
async function pedidoEnviado(pedido, cliente, rastreio, transportadora) {
const msg =
'Seu pedido saiu para entrega!
' +
'Pedido: #' + pedido.numero + '
' +
'Transportadora: ' + transportadora + '
' +
'Rastreio: ' + rastreio + '
' +
'Acompanhe em: https://rastreio.net/' + rastreio;
return enviar(cliente.phone, msg);
}
async function pedidoEntregue(pedido, cliente) {
const msg =
'Seu pedido chegou, ' + cliente.nome + '!
' +
'Pedido #' + pedido.numero + ' entregue.
' +
'Em 2 dias te pediremos uma avaliacao rapida — conta muito pra nos!';
return enviar(cliente.phone, msg);
}
module.exports = { pedidoConfirmado, pedidoEnviado, pedidoEntregue };
Fluxo 2: Recuperação de carrinho abandonado
// carrinho.js
const { enviar } = require('./zap');
// Carrinhos pendentes (em produção: banco de dados)
const carrinhosPendentes = new Map();
async function registrarAbandonoCarrinho(cliente, itens, urlCarrinho) {
// Aguardar 1 hora antes de enviar lembrete
const timer = setTimeout(async () => {
const primeiroItem = itens[0].nome;
const totalItens = itens.length;
const msg =
'Oi, ' + cliente.nome + '! Você esqueceu algo na sacola?
' +
primeiroItem +
(totalItens > 1 ? ' e mais ' + (totalItens - 1) + ' item(s)
' : '
') +
'Finalize antes que os itens acabem:
' +
urlCarrinho + '
' +
'Precisa de ajuda? Só responder aqui!';
await enviar(cliente.phone, msg);
carrinhosPendentes.delete(cliente.phone);
}, 60 * 60 * 1000); // 1 hora
carrinhosPendentes.set(cliente.phone, timer);
}
// Cancelar lembrete se o cliente finalizar a compra
function cancelarLembrete(phone) {
const timer = carrinhosPendentes.get(phone);
if (timer) {
clearTimeout(timer);
carrinhosPendentes.delete(phone);
}
}
module.exports = { registrarAbandonoCarrinho, cancelarLembrete };
Fluxo 3: Chatbot de suporte com IA
// suporte.js
const OpenAI = require('openai');
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const historicos = new Map();
const PROMPT_SUPORTE =
'Você é o assistente de suporte da [Sua Loja]. ' +
'Responda sobre pedidos, prazos, trocas e pagamentos. ' +
'Prazo de entrega padrão: 3 a 7 dias úteis. ' +
'Política de troca: 30 dias após recebimento. ' +
'Se precisar consultar pedido específico, peça o número. ' +
'Para falar com humano: https://wa.me/5511999998888';
async function responderSuporte(phone, pergunta) {
if (!historicos.has(phone)) {
historicos.set(phone, [{ role: 'system', content: PROMPT_SUPORTE }]);
}
const historico = historicos.get(phone);
historico.push({ role: 'user', content: pergunta });
const resp = await openai.chat.completions.create({
model: 'gpt-4o-mini',
messages: historico,
max_tokens: 400
});
const resposta = resp.choices[0].message.content;
historico.push({ role: 'assistant', content: resposta });
return resposta;
}
module.exports = { responderSuporte };
Servidor principal
// server.js
require('dotenv').config();
const express = require('express');
const { api, enviar, INSTANCE } = require('./zap');
const { pedidoConfirmado, pedidoEnviado, pedidoEntregue } = require('./notificacoes');
const { registrarAbandonoCarrinho, cancelarLembrete } = require('./carrinho');
const { responderSuporte } = require('./suporte');
const app = express();
app.use(express.json());
// Webhook do e-commerce (Shopify, WooCommerce, ou próprio)
app.post('/webhooks/loja', async (req, res) => {
res.json({ ok: true });
const { evento, pedido, cliente } = req.body;
switch (evento) {
case 'pagamento_aprovado':
cancelarLembrete(cliente.phone); // Cancelar lembrete de carrinho
await pedidoConfirmado(pedido, cliente);
break;
case 'pedido_enviado':
await pedidoEnviado(pedido, cliente, pedido.rastreio, pedido.transportadora);
break;
case 'pedido_entregue':
await pedidoEntregue(pedido, cliente);
// Agendar pedido de avaliação para 48h depois
setTimeout(() => {
const msg =
'Oi, ' + cliente.nome + '! Como foi a experiencia?
' +
'Avalie seu pedido #' + pedido.numero + ':
' +
'https://sua-loja.com/avaliar/' + pedido.id;
enviar(cliente.phone, msg);
}, 48 * 60 * 60 * 1000);
break;
case 'carrinho_abandonado':
registrarAbandonoCarrinho(cliente, pedido.itens, pedido.urlCarrinho);
break;
}
});
// Webhook de mensagens recebidas (ZAP API)
app.post('/webhooks/whatsapp', async (req, res) => {
res.json({ ok: true });
const { event, data } = req.body;
if (event !== 'message.received' || data.fromMe) return;
try {
const resposta = await responderSuporte(data.phone, data.body);
await api.post('/instances/' + INSTANCE + '/send', {
phone: data.phone, type: 'text', body: resposta
});
} catch (err) {
console.error('Erro chatbot:', err.message);
}
});
app.listen(3000, () => console.log('Servidor rodando!'));
ROI esperado (500 pedidos/mês)
- Recuperação de carrinho: ~15% dos abandonos → 50-75 pedidos extras/mês
- Redução de suporte: -40% de tickets com chatbot
- Taxa de avaliação: de 5% para 30% (WhatsApp vs e-mail)
- Custo total: a partir de R$29/mês (ZAP API)* + ~R$20/mês (OpenAI)
Conclusão
Integrar WhatsApp ao e-commerce é investimento com retorno imediato. Com a ZAP API, você tem o canal direto com seus clientes a partir de R$29/mês* — sem aprovação da Meta e pronto para produção em menos de 1 dia.