diff --git a/src/modules/whatsapp/whatsapp.service.ts b/src/modules/whatsapp/whatsapp.service.ts index c0f59aa..8a08d84 100644 --- a/src/modules/whatsapp/whatsapp.service.ts +++ b/src/modules/whatsapp/whatsapp.service.ts @@ -84,8 +84,45 @@ export class WhatsappService { }; } - async sendMessage(to: string, message: string, _media?: { data: string; mimetype: string; filename?: string }, _senderName?: string) { - throw new NotImplementedException(`Envio via Meta API não implementado ainda. Destinatário: ${to}, mensagem: "${message}"`); + async sendMessage(to: string, message: string, _media?: { data: string; mimetype: string; filename?: string }, senderName?: string) { + const token = process.env.META_ACCESS_TOKEN; + const phoneNumberId = process.env.META_PHONE_NUMBER_ID; + const apiVersion = process.env.META_API_VERSION || 'v25.0'; + + if (!token || !phoneNumberId) { + throw new Error('META_ACCESS_TOKEN e META_PHONE_NUMBER_ID são obrigatórios.'); + } + + const body = senderName ? `*Atendente: ${senderName}*\n\n${message}` : message; + + const response = await fetch( + `https://graph.facebook.com/${apiVersion}/${phoneNumberId}/messages`, + { + method: 'POST', + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + messaging_product: 'whatsapp', + recipient_type: 'individual', + to, + type: 'text', + text: { preview_url: false, body }, + }), + }, + ); + + if (!response.ok) { + const error = await response.json().catch(() => ({})); + this.logger.error(`[Meta] Falha ao enviar mensagem para ${to}:`, error); + throw new Error(`Meta API erro ${response.status}: ${JSON.stringify(error)}`); + } + + const result = await response.json(); + this.logger.log(`[Meta] Mensagem enviada para ${to}: ${(result as any)?.messages?.[0]?.id}`); + await this.assignmentService.clearTransferNote(to); + return result; } async startAttendance( @@ -189,8 +226,7 @@ export class WhatsappService { const fakeMsg = { reply: async (text: string) => { - // TODO Fase 2: enviar via Meta Graph API - this.logger.warn(`[Meta] Bot reply pendente de implementação. Mensagem para ${from}: "${text}"`); + await this.sendMessage(from, text); }, _data: { notifyName: contactName }, };