Integracao WhatsApp

Envio de mensagens via Meta WhatsApp Business API.

A integracao WhatsApp usa a Meta WhatsApp Business API (Cloud API) para enviar mensagens de texto, templates e midias. Ideal para notificacoes transacionais, confirmacoes e atendimento.

Voce precisa de uma conta Meta Business e um app configurado no Meta for Developers para usar esta integracao.

WhatsApp Service

// apps/api/src/integrations/whatsapp/whatsapp.service.ts
export class WhatsAppService {
  private apiUrl: string;
  private token: string;
  private phoneNumberId: string;

  constructor() {
    this.apiUrl = 'https://graph.facebook.com/v18.0';
    this.token = process.env.WHATSAPP_TOKEN!;
    this.phoneNumberId = process.env.WHATSAPP_PHONE_NUMBER_ID!;
  }

  async sendText(to: string, message: string): Promise<void> {
    await fetch(
      `${this.apiUrl}/${this.phoneNumberId}/messages`,
      {
        method: 'POST',
        headers: {
          Authorization: `Bearer ${this.token}`,
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          messaging_product: 'whatsapp',
          to: to.replace(/\D/g, ''),
          type: 'text',
          text: { body: message },
        }),
      }
    );
  }

  async sendTemplate(
    to: string,
    templateName: string,
    language: string = 'pt_BR',
    components?: any[]
  ): Promise<void> {
    await fetch(
      `${this.apiUrl}/${this.phoneNumberId}/messages`,
      {
        method: 'POST',
        headers: {
          Authorization: `Bearer ${this.token}`,
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          messaging_product: 'whatsapp',
          to: to.replace(/\D/g, ''),
          type: 'template',
          template: {
            name: templateName,
            language: { code: language },
            components,
          },
        }),
      }
    );
  }
}

Webhook para receber mensagens

// apps/api/src/integrations/whatsapp/whatsapp.webhook.ts

// Verificacao do webhook (GET)
app.get('/api/webhooks/whatsapp', (req, res) => {
  const mode = req.query['hub.mode'];
  const token = req.query['hub.verify_token'];
  const challenge = req.query['hub.challenge'];

  if (mode === 'subscribe' && token === process.env.WHATSAPP_VERIFY_TOKEN) {
    return res.status(200).send(challenge);
  }
  res.sendStatus(403);
});

// Receber mensagens (POST)
app.post('/api/webhooks/whatsapp', (req, res) => {
  const { entry } = req.body;

  for (const e of entry) {
    for (const change of e.changes) {
      if (change.value.messages) {
        for (const message of change.value.messages) {
          console.log('Mensagem recebida:', {
            from: message.from,
            type: message.type,
            text: message.text?.body,
            timestamp: message.timestamp,
          });
          // Processar a mensagem aqui
        }
      }
    }
  }

  res.sendStatus(200);
});

Variaveis de ambiente

VariavelDescricao
WHATSAPP_TOKENToken de acesso da API (permanente ou temporario)
WHATSAPP_PHONE_NUMBER_IDID do numero de telefone no Meta Business
WHATSAPP_VERIFY_TOKENToken customizado para verificar o webhook
WHATSAPP_BUSINESS_ACCOUNT_IDID da conta Business (para gerenciamento)