Agente de IA para WhatsApp com Express.js e Zavu
Express continua sendo uma escolha rapida para criar webhooks. Use-o com o AI Gateway da Zavu para liberar agentes inteligentes no WhatsApp sem lidar com SDKs de IA separados.
Setup
bashmkdir whatsapp-agent && cd whatsapp-agent npm init -y bun install @zavudev/sdk express dotenv
Estrutura:
textsrc/ ├── app.js ├── webhook.js └── zavu.js .env
Cliente Zavu (src/zavu.js)
javascriptimport Zavudev from '@zavudev/sdk' export const zavu = new Zavu({ apiKey: process.env.ZAVUDEV_API_KEY })
Webhook (src/webhook.js)
javascriptimport crypto from 'crypto' import { zavu } from './zavu.js' export function verifySignature(payload, signature) { const digest = crypto .createHmac('sha256', process.env.ZAVU_WEBHOOK_SECRET) .update(payload) .digest('hex') return crypto.timingSafeEqual(Buffer.from(digest), Buffer.from(signature)) }
src/app.js:javascriptimport express from 'express' import bodyParser from 'body-parser' import { verifySignature } from './webhook.js' import { zavu } from './zavu.js' const app = express() app.use(bodyParser.json({ verify: (req, res, buf) => (req.rawBody = buf) })) app.post('/webhooks/whatsapp', async (req, res) => { const signature = req.headers['x-zavu-signature'] if (!verifySignature(req.rawBody, signature)) { return res.status(401).send('invalid signature') } const event = req.body if (event.type === 'message.received') { await zavu.senders.agent.reply({ senderId: process.env.ZAVU_SENDER_ID, contactId: event.data.contact.id, messageId: event.data.message.id }) } res.json({ status: 'ok' }) }) app.listen(process.env.PORT || 3000)
Criando o agente
Via dashboard (Senders → AI Agent) ou codigo:
javascriptawait zavu.senders.agent.create({ senderId: process.env.ZAVU_SENDER_ID, name: 'Atendente Express', provider: 'zavu', model: 'gpt-4o-mini', systemPrompt:Voce e um atendente Zavu. Seja direto e gentil., includeContactMetadata: true, contextWindowMessages: 10, enabled: true })
Modelos suportados
| Provider | Modelos |
|---|
| OpenAI | gpt-4o, gpt-4o-mini |
|---|---|
| Anthropic | claude-3-5-sonnet, claude-3-opus |
| gemini-pro | |
| Mistral | mistral-large |
Recursos extras
- Knowledge Bases: anexar docs (onboarding, politicas) ao agente.
- Ferramentas HTTP: agentes podem chamar endpoints seguros que voce expor.
- Analytics: painel mostra tempo medio de resposta, sentimentos, execucoes.
- Fallback: defina SMS/email como backup quando o cliente estiver fora da janela de 24h.
Deploy
- Use Railway, Render ou Fly.io
- Configure variaveis (
ZAVUDEV_API_KEY,ZAVU_WEBHOOK_SECRET,ZAVU_SENDER_ID) - Habilite HTTPS (Proxy/CDN) e rotacione o segredo periodicamente