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
| Variavel | Descricao |
|---|---|
WHATSAPP_TOKEN | Token de acesso da API (permanente ou temporario) |
WHATSAPP_PHONE_NUMBER_ID | ID do numero de telefone no Meta Business |
WHATSAPP_VERIFY_TOKEN | Token customizado para verificar o webhook |
WHATSAPP_BUSINESS_ACCOUNT_ID | ID da conta Business (para gerenciamento) |