Agente de IA para WhatsApp com Fastify e Zavu
Fastify oferece alta performance e tipagem nativa. Veja como criar webhooks de WhatsApp e integrar agentes da Zavu em minutos.
Setup
bashnpm init -y pnpm add fastify fastify-plugin @fastify/formbody @zavudev/sdk dotenv
src/env.ts carrega as variaveis ZAVUDEV_API_KEY, ZAVU_WEBHOOK_SECRET, ZAVU_SENDER_ID.Servidor Fastify
typescriptimport Fastify from 'fastify' import crypto from 'crypto' import Zavudev from '@zavudev/sdk' import { config } from './env' const app = Fastify({ logger: true }) const zavu = new Zavu({ apiKey: config.ZAVUDEV_API_KEY }) function verifySignature(payload: Buffer, signature?: string) { if (!signature) return false const digest = crypto .createHmac('sha256', config.ZAVU_WEBHOOK_SECRET) .update(payload) .digest('hex') return crypto.timingSafeEqual(Buffer.from(digest), Buffer.from(signature)) } app.addHook('preValidation', (req, reply, done) => { req.rawBody = Buffer.from('') req.raw.on('data', (chunk) => (req.rawBody = Buffer.concat([req.rawBody, chunk]))) req.raw.on('end', () => done()) }) app.post('/webhooks/whatsapp', async (request, reply) => { if (!verifySignature(request.rawBody, request.headers['x-zavu-signature'])) { return reply.code(401).send({ error: 'invalid signature' }) } const event = request.body as any if (event.type === 'message.received') { await zavu.senders.agent.reply({ senderId: config.ZAVU_SENDER_ID, contactId: event.data.contact.id, messageId: event.data.message.id }) } return reply.send({ status: 'ok' }) }) app.listen({ port: 3000 })
Criando o agente
typescriptawait zavu.senders.agent.create({ senderId: config.ZAVU_SENDER_ID, name: 'Fastify Support', provider: 'zavu', model: 'mistral-large', systemPrompt: 'Atenda clientes B2B de forma concisa e tecnica.', contextWindowMessages: 12, includeContactMetadata: true, enabled: true })
Extensoes recomendadas
- fastify-rate-limit para proteger o webhook
- fastify-helmet para cabecalhos de seguranca
- pino (ja incluso) para logs estruturados
Recursos do AI Gateway
- Conhecimento (PDFs, URLs)
- Ferramentas HTTP/GraphQL
- Fallback multicanal
- Analytics com latencia e CSAT
Deploy e observabilidade
bunx convex dev --once se tiver workflows relacionados conforme doc interna