Agentes IAWhatsAppNestJSNode.js

Agente de IA para WhatsApp com NestJS e Zavu

Implemente um modulo NestJS para receber webhooks do WhatsApp, validar assinaturas e responder com agentes inteligentes da Zavu.

Escrito por: Jennifer VillalobosRevisado por: Victor Villalobos19 de dezembro de 202511 min de leitura

Agente de IA para WhatsApp com NestJS e Zavu

Combine a arquitetura modular do NestJS com o AI Gateway da Zavu para oferecer suporte inteligente em WhatsApp.

Setup

bash
npx nest new whatsapp-agent cd whatsapp-agent npm install @zavudev/sdk @nestjs/config

ConfigModule

src/app.module.ts:
typescript
import { Module } from '@nestjs/common' import { ConfigModule } from '@nestjs/config' import { WebhookModule } from './webhook/webhook.module' @Module({ imports: [ConfigModule.forRoot({ isGlobal: true }), WebhookModule] }) export class AppModule {}

Service

src/webhook/zavu.service.ts:
typescript
import { Injectable } from '@nestjs/common' import Zavudev from '@zavudev/sdk' import { ConfigService } from '@nestjs/config' @Injectable() export class ZavuService { private client: Zavu constructor(private config: ConfigService) { this.client = new Zavu({ apiKey: this.config.get('ZAVUDEV_API_KEY') }) } async reply(messageId: string, contactId: string) { return this.client.senders.agent.reply({ senderId: this.config.get('ZAVU_SENDER_ID'), messageId, contactId }) } }

Controller

src/webhook/webhook.controller.ts:
typescript
import { Controller, Post, Req, Res, Headers, HttpException } from '@nestjs/common' import * as crypto from 'crypto' import { ZavuService } from './zavu.service' @Controller('webhooks') export class WebhookController { constructor(private readonly zavu: ZavuService) {} @Post('whatsapp') async handle(@Req() req, @Res() res, @Headers('x-zavu-signature') signature: string) { const secret = process.env.ZAVU_WEBHOOK_SECRET const digest = crypto.createHmac('sha256', secret).update(req.rawBody).digest('hex') if (!crypto.timingSafeEqual(Buffer.from(digest), Buffer.from(signature || ''))) { throw new HttpException('invalid signature', 401) } const event = req.body if (event.type === 'message.received') { await this.zavu.reply(event.data.message.id, event.data.contact.id) } res.json({ status: 'ok' }) } }

Ative rawBody em main.ts:

typescript
app.use(json({ verify: (req: any, res, buf) => (req.rawBody = buf) }))

Criando o agente

typescript
await zavu.senders.agent.create({ senderId: process.env.ZAVU_SENDER_ID, name: 'Nest Support', provider: 'zavu', model: 'gemini-pro', systemPrompt: 'Responda clientes SaaS em PT-BR', contextWindowMessages: 10, enabled: true })

Knowledge bases e ferramentas

  • client.senders.agent.knowledge_bases.attach para anexar docs
  • client.senders.agent.tools.create para expor APIs internas (ex.: verificar pedido)

Observabilidade

Use interceptors Nest para logar cada execucao do agente e envie metricas ao Prometheus ou OpenTelemetry.

Deploy

  • Dockerize (Node 20) e suba em Kubernetes/ECS
  • Configure secrets via AWS SSM/Azure Key Vault
  • Configure auto scaling baseado em QPS do webhook
Pronto! Agora voce tem um modulo NestJS que responde automaticamente no WhatsApp. Para ver integrações com CRM/ERP funcionando ao vivo, agende uma demo.

Precisa de ajuda? Contate-nos ou junte-se à nossa comunidade Discord para suporte.

Follow us on social media

Veja em ação

Agende uma demonstração personalizada para ver como os Agentes IA da Zavu podem transformar sua comunicação com clientes.

Agente de IA para WhatsApp com NestJS e Zavu | Zavu Blog | Zavu