From cf3ec2b6018aaa9639c55fd45402e9493716deca Mon Sep 17 00:00:00 2001 From: Davidson Gomes Date: Tue, 2 Apr 2024 16:05:14 -0300 Subject: [PATCH 01/11] ajustes --- src/whatsapp/services/whatsapp.business.service.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/whatsapp/services/whatsapp.business.service.ts b/src/whatsapp/services/whatsapp.business.service.ts index 874e75dc..0625b252 100644 --- a/src/whatsapp/services/whatsapp.business.service.ts +++ b/src/whatsapp/services/whatsapp.business.service.ts @@ -287,8 +287,11 @@ export class BusinessStartupService extends WAStartupService { case 'document': messageType = 'documentMessage'; break; + case 'template': + messageType = 'conversation'; + break; default: - messageType = 'imageMessage'; + messageType = 'conversation'; break; } From 2b8b6b086b56125d2511ee8e743d99293f19bb56 Mon Sep 17 00:00:00 2001 From: Luis-Fernando <136400011+Azzybot@users.noreply.github.com> Date: Tue, 2 Apr 2024 17:59:54 -0300 Subject: [PATCH 02/11] =?UTF-8?q?Removido=20obrigatoriedade=20de=20descri?= =?UTF-8?q?=C3=A7=C3=A3o=20dos=20rows=20do=20sendList?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removida a obrigatoriedade da descrição do rows para ser algo opcional. Isso permite os "circulos" das opções ficarem mais alinhados com os titulos sem a necessidade de adicionar espaço em branco caso não queira adicionar a descrição. { "number": "559999999999 (Recipient number with Country Code)", "options": { "delay": 1200, "presence": "composing" }, "listMessage": { "title": "List Title", "description": "List description", "buttonText": "Click Here", "footerText": "footer list\nhttps://examplelink.com.br", "sections": [ { "title": "Row tilte 01", "rows": [ { "title": "Title row 01", "description": "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,", "rowId": "rowId 001" }, { "title": "Title row 02", "description": "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,", "rowId": "rowId 002" } ] } } Depois: { "number": "559999999999 (Recipient number with Country Code)", "options": { "delay": 1200, "presence": "composing" }, "listMessage": { "title": "List Title", "description": "List description", "buttonText": "Click Here", "footerText": "footer list\nhttps://examplelink.com.br", "sections": [ { "title": "Row tilte 01", "rows": [ { "title": "Title row 01", // "description": "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,", //podendo remover por completo como foi feito no Title row 02 abaixo ou apenas comentar a descrição "rowId": "rowId 001" }, { "title": "Title row 02", "rowId": "rowId 002" } ] } } --- src/validate/validate.schema.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/validate/validate.schema.ts b/src/validate/validate.schema.ts index 82bb8902..b723826a 100644 --- a/src/validate/validate.schema.ts +++ b/src/validate/validate.schema.ts @@ -406,7 +406,7 @@ export const listMessageSchema: JSONSchema7 = { description: { type: 'string' }, rowId: { type: 'string' }, }, - required: ['title', 'description', 'rowId'], + required: ['title', 'rowId'], ...isNotEmpty('title', 'description', 'rowId'), }, }, From ba537baab24d35220dc9c251cb28574ac46a779c Mon Sep 17 00:00:00 2001 From: Luis-Fernando <136400011+Azzybot@users.noreply.github.com> Date: Tue, 2 Apr 2024 18:37:00 -0300 Subject: [PATCH 03/11] Recurso para coletar tipo de mensagem MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Variável {{messageType}} adicionada para ser usada dentro do fluxo e a partir disso usar condições para fluxo seguir de acordo com o tipo de mensagem recebida: Exemplo: if {{messageTyp}} = audioMessage if {{messageTyp}} = videoMessage if {{messageTyp}} = imageMessage if {{messageTyp}} = document if {{messageTyp}} = conversation Entre outras... Exemplo: ![VideoCapture_20240402-144703](https://github.com/EvolutionAPI/evolution-api/assets/136400011/60b74721-9f14-4d60-99f2-369c42cd60de) ![VideoCapture_20240402-144739](https://github.com/EvolutionAPI/evolution-api/assets/136400011/f4febd4b-c42e-4678-bfd4-f1aa076c92f5) ![VideoCapture_20240402-144724](https://github.com/EvolutionAPI/evolution-api/assets/136400011/7eb0ba56-a05a-4015-8863-76e29e0613f6) --- src/whatsapp/dto/typebot.dto.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/whatsapp/dto/typebot.dto.ts b/src/whatsapp/dto/typebot.dto.ts index c6c1fbdd..6adfcf33 100644 --- a/src/whatsapp/dto/typebot.dto.ts +++ b/src/whatsapp/dto/typebot.dto.ts @@ -10,6 +10,7 @@ export class Session { export class PrefilledVariables { remoteJid?: string; pushName?: string; + messageType?: string; additionalData?: { [key: string]: any }; } From 19e6896f0df00e45544bd1784d20d90bdb832bc5 Mon Sep 17 00:00:00 2001 From: Luis-Fernando <136400011+Azzybot@users.noreply.github.com> Date: Tue, 2 Apr 2024 18:59:08 -0300 Subject: [PATCH 04/11] Reconhecer tipos de mensagens MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adicionado metodos para capturar diferentes tipos de mensagens alem do tipo texto. Incluido: AUDIO, VIDEO, IMAGEM, DOCUMENTOS E VISUALIZAÇÃO ÚNICA, Etc... --- src/whatsapp/services/typebot.service.ts | 131 +++++++++++++++++++++-- 1 file changed, 120 insertions(+), 11 deletions(-) diff --git a/src/whatsapp/services/typebot.service.ts b/src/whatsapp/services/typebot.service.ts index 1aa63b99..044d3441 100644 --- a/src/whatsapp/services/typebot.service.ts +++ b/src/whatsapp/services/typebot.service.ts @@ -269,19 +269,29 @@ export class TypebotService { } private getTypeMessage(msg: any) { - this.logger.verbose('get type message'); + this.logger.verbose('get type message'); + const types = { + conversation: msg.conversation, + extendedTextMessage: msg.extendedTextMessage?.text, + audioMessage: msg.audioMessage?.url, + imageMessage: msg.imageMessage?.url, + videoMessage: msg.videoMessage?.url, + documentMessage: msg.documentMessage?.fileName, + contactMessage: msg.contactMessage?.displayName, + locationMessage: msg.locationMessage?.degreesLatitude, + viewOnceMessageV2: msg.viewOnceMessageV2?.message?.imageMessage?.url, + viewOnceMessageV2: msg.viewOnceMessageV2?.message?.videoMessage?.url, + viewOnceMessageV2: msg.viewOnceMessageV2?.message?.audioMessage?.url, + listResponseMessage: msg.listResponseMessage?.singleSelectReply?.selectedRowId, + responseRowId: msg.listResponseMessage?.singleSelectReply?.selectedRowId, + }; - const types = { - conversation: msg.conversation, - extendedTextMessage: msg.extendedTextMessage?.text, - responseRowId: msg.listResponseMessage?.singleSelectReply?.selectedRowId, - }; - - this.logger.verbose('type message: ' + types); - - return types; + const messageType = Object.keys(types).find(key => types[key] !== undefined) || 'unknown'; + + this.logger.verbose('Type message: ' + JSON.stringify(types)); + return { ...types, messageType }; } - + private getMessageContent(types: any) { this.logger.verbose('get message content'); const typeKey = Object.keys(types).find((key) => types[key] !== undefined); @@ -305,6 +315,101 @@ export class TypebotService { return messageContent; } + private getAudioMessageContent(msg: any) { + this.logger.verbose('get audio message content'); + + const types = this.getTypeMessage(msg); + + const audioContent = types.audioMessage; + + this.logger.verbose('audio message URL: ' + audioContent); + + return audioContent; + } + + private getImageMessageContent(msg: any) { + this.logger.verbose('get image message content'); + + const types = this.getTypeMessage(msg); + + const imageContent = types.imageMessage; + + this.logger.verbose('image message URL: ' + imageContent); + + return imageContent; + } + + private getVideoMessageContent(msg: any) { + this.logger.verbose('get video message content'); + + const types = this.getTypeMessage(msg); + + const videoContent = types.videoMessage; + + this.logger.verbose('video message URL: ' + videoContent); + + return videoContent; + } + + private getDocumentMessageContent(msg: any) { + this.logger.verbose('get document message content'); + + const types = this.getTypeMessage(msg); + + const documentContent = types.documentMessage; + + this.logger.verbose('document message fileName: ' + documentContent); + + return documentContent; + } + + private getContactMessageContent(msg: any) { + this.logger.verbose('get contact message content'); + + const types = this.getTypeMessage(msg); + + const contactContent = types.contactMessage; + + this.logger.verbose('contact message displayName: ' + contactContent); + + return contactContent; + } + + private getLocationMessageContent(msg: any) { + this.logger.verbose('get location message content'); + + const types = this.getTypeMessage(msg); + + const locationContent = types.locationMessage; + + this.logger.verbose('location message degreesLatitude: ' + locationContent); + + return locationContent; + } + + private getViewOnceMessageV2Content(msg: any) { + this.logger.verbose('get viewOnceMessageV2 content'); + + const types = this.getTypeMessage(msg); + + const viewOnceContent = types.viewOnceMessageV2; + + this.logger.verbose('viewOnceMessageV2 URL: ' + viewOnceContent); + + return viewOnceContent; + } + + private getListResponseMessageContent(msg: any) { + this.logger.verbose('get listResponseMessage content'); + + const types = this.getTypeMessage(msg); + + const listResponseContent = types.listResponseMessage || types.responseRowId; + + this.logger.verbose('listResponseMessage selectedRowId: ' + listResponseContent); + + return listResponseContent; + } public async createNewSession(instance: InstanceDto, data: any) { if (data.remoteJid === 'status@broadcast') return; const id = Math.floor(Math.random() * 10000000000).toString(); @@ -565,6 +670,7 @@ export class TypebotService { const delay_message = findTypebot.delay_message; const unknown_message = findTypebot.unknown_message; const listening_from_me = findTypebot.listening_from_me; + const messageType = this.getTypeMessage(msg.message).messageType; const session = sessions.find((session) => session.remoteJid === remoteJid); @@ -687,6 +793,9 @@ export class TypebotService { sessions: sessions, remoteJid: remoteJid, pushName: msg.pushName, + prefilledVariables: { + messageType: messageType, + }, }); await this.sendWAMessage(instance, remoteJid, data.messages, data.input, data.clientSideActions); From 677e196c964849104a30cfffe4c91a1ed8630857 Mon Sep 17 00:00:00 2001 From: Luis-Fernando <136400011+Azzybot@users.noreply.github.com> Date: Tue, 2 Apr 2024 20:43:58 -0300 Subject: [PATCH 05/11] Ajuste Metodo getMessage --- src/whatsapp/services/typebot.service.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/whatsapp/services/typebot.service.ts b/src/whatsapp/services/typebot.service.ts index 044d3441..4d79b660 100644 --- a/src/whatsapp/services/typebot.service.ts +++ b/src/whatsapp/services/typebot.service.ts @@ -279,9 +279,7 @@ export class TypebotService { documentMessage: msg.documentMessage?.fileName, contactMessage: msg.contactMessage?.displayName, locationMessage: msg.locationMessage?.degreesLatitude, - viewOnceMessageV2: msg.viewOnceMessageV2?.message?.imageMessage?.url, - viewOnceMessageV2: msg.viewOnceMessageV2?.message?.videoMessage?.url, - viewOnceMessageV2: msg.viewOnceMessageV2?.message?.audioMessage?.url, + viewOnceMessageV2: msg.viewOnceMessageV2?.message?.imageMessage?.url || msg.viewOnceMessageV2?.message?.videoMessage?.url || msg.viewOnceMessageV2?.message?.audioMessage?.url, listResponseMessage: msg.listResponseMessage?.singleSelectReply?.selectedRowId, responseRowId: msg.listResponseMessage?.singleSelectReply?.selectedRowId, }; From 9bf18592fc3f737c1ac3f10730bf4fb0a33792f4 Mon Sep 17 00:00:00 2001 From: Davidson Gomes Date: Wed, 3 Apr 2024 07:01:35 -0300 Subject: [PATCH 06/11] ajustes wa oficial --- src/whatsapp/services/whatsapp.business.service.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/whatsapp/services/whatsapp.business.service.ts b/src/whatsapp/services/whatsapp.business.service.ts index 0625b252..074c2c60 100644 --- a/src/whatsapp/services/whatsapp.business.service.ts +++ b/src/whatsapp/services/whatsapp.business.service.ts @@ -199,10 +199,10 @@ export class BusinessStartupService extends WAStartupService { const message = received.messages[0]; if (message.from === received.metadata.phone_number_id) { content = { extendedTextMessage: { text: message.text.body } }; - message.context ? (content.extendedTextMessage.contextInfo = { stanzaId: message.context.id }) : content; + message.context ? (content.contextInfo = { stanzaId: message.context.id }) : content; } else { content = { conversation: message.text.body }; - message.context ? (content.extendedTextMessage = { contextInfo: { stanzaId: message.context.id } }) : content; + message.context ? (content = { contextInfo: { stanzaId: message.context.id } }) : content; } return content; } @@ -377,6 +377,7 @@ export class BusinessStartupService extends WAStartupService { this.logger.log(messageRaw); this.logger.verbose('Sending data to webhook in event MESSAGES_UPSERT'); + this.sendDataWebhook(Events.MESSAGES_UPSERT, messageRaw); if (this.localChatwoot.enabled) { @@ -613,7 +614,7 @@ export class BusinessStartupService extends WAStartupService { message_id: message['reactionMessage']['key']['id'], emoji: message['reactionMessage']['text'], }, - context: { message_id: quoted.id }, + // context: { message_id: quoted.id }, }; quoted ? (content.context = { message_id: quoted.id }) : content; return await this.post(content, 'messages'); @@ -673,6 +674,7 @@ export class BusinessStartupService extends WAStartupService { [message['mediaType']]: { [message['type']]: message['id'], preview_url: linkPreview, + caption: message['caption'], }, }; quoted ? (content.context = { message_id: quoted.id }) : content; @@ -774,6 +776,11 @@ export class BusinessStartupService extends WAStartupService { } })(); + if (messageSent?.error?.message) { + this.logger.error(messageSent.error.message); + throw messageSent.error.message.toString(); + } + const messageRaw: MessageRaw = { key: { fromMe: true, id: messageSent?.messages[0]?.id, remoteJid: this.createJid(number) }, //pushName: messageSent.pushName, From 73bd55dface50ee94335e19907cda35afba90182 Mon Sep 17 00:00:00 2001 From: Davidson Gomes Date: Wed, 3 Apr 2024 07:06:41 -0300 Subject: [PATCH 07/11] changelog --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fb48755..2ab6d81b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +# 1.7.1 (develop) + +### Fixed + +* Correction when sending files with captions on Whatsapp Business +* Correction in receiving messages with response on WhatsApp Business +* Correction when sending a reaction to a message on WhatsApp Business +* Removed mandatory description of rows from sendList +* Feature to collect message type in typebot + # 1.7.0 (2024-03-11 18:23) ### Feature From 10ce7da18d21906c2c656396bcb43fb5bedcbd43 Mon Sep 17 00:00:00 2001 From: Davidson Gomes Date: Wed, 3 Apr 2024 07:15:23 -0300 Subject: [PATCH 08/11] changelog --- src/whatsapp/services/whatsapp.business.service.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/whatsapp/services/whatsapp.business.service.ts b/src/whatsapp/services/whatsapp.business.service.ts index 074c2c60..1dc08811 100644 --- a/src/whatsapp/services/whatsapp.business.service.ts +++ b/src/whatsapp/services/whatsapp.business.service.ts @@ -198,11 +198,13 @@ export class BusinessStartupService extends WAStartupService { let content: any; const message = received.messages[0]; if (message.from === received.metadata.phone_number_id) { - content = { extendedTextMessage: { text: message.text.body } }; - message.context ? (content.contextInfo = { stanzaId: message.context.id }) : content; + content = { + extendedTextMessage: { text: message.text.body }, + }; + message.context ? (content = { ...content, contextInfo: { stanzaId: message.context.id } }) : content; } else { content = { conversation: message.text.body }; - message.context ? (content = { contextInfo: { stanzaId: message.context.id } }) : content; + message.context ? (content = { ...content, contextInfo: { stanzaId: message.context.id } }) : content; } return content; } @@ -303,6 +305,8 @@ export class BusinessStartupService extends WAStartupService { let messageRaw: MessageRaw; let pushName: any; + console.log('msg_wa', received); + if (received.contacts) pushName = received.contacts[0].profile.name; if (received.messages) { @@ -378,6 +382,7 @@ export class BusinessStartupService extends WAStartupService { this.logger.verbose('Sending data to webhook in event MESSAGES_UPSERT'); + console.log('msg_evo', messageRaw.message); this.sendDataWebhook(Events.MESSAGES_UPSERT, messageRaw); if (this.localChatwoot.enabled) { @@ -614,7 +619,7 @@ export class BusinessStartupService extends WAStartupService { message_id: message['reactionMessage']['key']['id'], emoji: message['reactionMessage']['text'], }, - // context: { message_id: quoted.id }, + context: { message_id: quoted.id }, }; quoted ? (content.context = { message_id: quoted.id }) : content; return await this.post(content, 'messages'); From aa5ed13752b4ddc4527eadf419932d15ab01e6fe Mon Sep 17 00:00:00 2001 From: Davidson Gomes Date: Wed, 3 Apr 2024 07:36:51 -0300 Subject: [PATCH 09/11] ajustes wa business --- .../services/whatsapp.business.service.ts | 60 +++++++++++++++---- 1 file changed, 48 insertions(+), 12 deletions(-) diff --git a/src/whatsapp/services/whatsapp.business.service.ts b/src/whatsapp/services/whatsapp.business.service.ts index 1dc08811..90f2e04c 100644 --- a/src/whatsapp/services/whatsapp.business.service.ts +++ b/src/whatsapp/services/whatsapp.business.service.ts @@ -183,14 +183,14 @@ export class BusinessStartupService extends WAStartupService { const message = received.messages[0]; let content: any = message.type + 'Message'; content = { [content]: message[message.type] }; - message.context ? (content.extendedTextMessage = { contextInfo: { stanzaId: message.context.id } }) : content; + message.context ? (content = { ...content, contextInfo: { stanzaId: message.context.id } }) : content; return content; } private messageInteractiveJson(received: any) { const message = received.messages[0]; - const content: any = { conversation: message.interactive[message.interactive.type].title }; - message.context ? (content.extendedTextMessage = { contextInfo: { stanzaId: message.context.id } }) : content; + let content: any = { conversation: message.interactive[message.interactive.type].title }; + message.context ? (content = { ...content, contextInfo: { stanzaId: message.context.id } }) : content; return content; } @@ -211,7 +211,7 @@ export class BusinessStartupService extends WAStartupService { private messageContactsJson(received: any) { const message = received.messages[0]; - const content: any = {}; + let content: any = {}; const vcard = (contact: any) => { this.logger.verbose('Creating vcard'); @@ -266,7 +266,7 @@ export class BusinessStartupService extends WAStartupService { }), }; } - message.context ? (content.extendedTextMessage = { contextInfo: { stanzaId: message.context.id } }) : content; + message.context ? (content = { ...content, contextInfo: { stanzaId: message.context.id } }) : content; return content; } @@ -305,8 +305,6 @@ export class BusinessStartupService extends WAStartupService { let messageRaw: MessageRaw; let pushName: any; - console.log('msg_wa', received); - if (received.contacts) pushName = received.contacts[0].profile.name; if (received.messages) { @@ -382,7 +380,6 @@ export class BusinessStartupService extends WAStartupService { this.logger.verbose('Sending data to webhook in event MESSAGES_UPSERT'); - console.log('msg_evo', messageRaw.message); this.sendDataWebhook(Events.MESSAGES_UPSERT, messageRaw); if (this.localChatwoot.enabled) { @@ -549,30 +546,68 @@ export class BusinessStartupService extends WAStartupService { } } - private convertMessageToRaw(message: any) { + private convertMessageToRaw(message: any, content: any) { + let convertMessage: any; + if (message?.conversation) { - return message; + if (content?.context?.message_id) { + convertMessage = { + ...message, + contextInfo: { stanzaId: content.context.message_id }, + }; + return convertMessage; + } + convertMessage = message; + return convertMessage; } if (message?.mediaType === 'image') { + if (content?.context?.message_id) { + convertMessage = { + imageMessage: message, + contextInfo: { stanzaId: content.context.message_id }, + }; + return convertMessage; + } return { imageMessage: message, }; } if (message?.mediaType === 'video') { + if (content?.context?.message_id) { + convertMessage = { + videoMessage: message, + contextInfo: { stanzaId: content.context.message_id }, + }; + return convertMessage; + } return { videoMessage: message, }; } if (message?.mediaType === 'audio') { + if (content?.context?.message_id) { + convertMessage = { + audioMessage: message, + contextInfo: { stanzaId: content.context.message_id }, + }; + return convertMessage; + } return { audioMessage: message, }; } if (message?.mediaType === 'document') { + if (content?.context?.message_id) { + convertMessage = { + documentMessage: message, + contextInfo: { stanzaId: content.context.message_id }, + }; + return convertMessage; + } return { documentMessage: message, }; @@ -619,7 +654,6 @@ export class BusinessStartupService extends WAStartupService { message_id: message['reactionMessage']['key']['id'], emoji: message['reactionMessage']['text'], }, - context: { message_id: quoted.id }, }; quoted ? (content.context = { message_id: quoted.id }) : content; return await this.post(content, 'messages'); @@ -786,10 +820,12 @@ export class BusinessStartupService extends WAStartupService { throw messageSent.error.message.toString(); } + console.log(content); + const messageRaw: MessageRaw = { key: { fromMe: true, id: messageSent?.messages[0]?.id, remoteJid: this.createJid(number) }, //pushName: messageSent.pushName, - message: this.convertMessageToRaw(message), + message: this.convertMessageToRaw(message, content), messageType: this.renderMessageType(content.type), messageTimestamp: (messageSent?.messages[0]?.timestamp as number) || Math.round(new Date().getTime() / 1000), owner: this.instance.name, From f11d468e3100b8618be5fb9b2136028d3df063c0 Mon Sep 17 00:00:00 2001 From: Davidson Gomes Date: Wed, 3 Apr 2024 08:14:56 -0300 Subject: [PATCH 10/11] ajustes wa business --- CHANGELOG.md | 1 + .../services/whatsapp.business.service.ts | 33 +++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ab6d81b..e66467c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ * Correction when sending files with captions on Whatsapp Business * Correction in receiving messages with response on WhatsApp Business * Correction when sending a reaction to a message on WhatsApp Business +* Correction of receiving reactions on WhatsApp business * Removed mandatory description of rows from sendList * Feature to collect message type in typebot diff --git a/src/whatsapp/services/whatsapp.business.service.ts b/src/whatsapp/services/whatsapp.business.service.ts index 90f2e04c..2b4a32cf 100644 --- a/src/whatsapp/services/whatsapp.business.service.ts +++ b/src/whatsapp/services/whatsapp.business.service.ts @@ -194,6 +194,20 @@ export class BusinessStartupService extends WAStartupService { return content; } + private messageReactionJson(received: any) { + const message = received.messages[0]; + let content: any = { + reactionMessage: { + key: { + id: message.reaction.message_id, + }, + text: message.reaction.emoji, + }, + }; + message.context ? (content = { ...content, contextInfo: { stanzaId: message.context.id } }) : content; + return content; + } + private messageTextJson(received: any) { let content: any; const message = received.messages[0]; @@ -344,6 +358,18 @@ export class BusinessStartupService extends WAStartupService { owner: this.instance.name, // source: getDevice(received.key.id), }; + } else if (received?.messages[0].reaction) { + messageRaw = { + key, + pushName, + message: { + ...this.messageReactionJson(received), + }, + messageType: 'reactionMessage', + messageTimestamp: received.messages[0].timestamp as number, + owner: this.instance.name, + // source: getDevice(received.key.id), + }; } else if (received?.messages[0].contacts) { messageRaw = { key, @@ -1205,6 +1231,10 @@ export class BusinessStartupService extends WAStartupService { } } + public async deleteMessage() { + throw new BadRequestException('Method not available on WhatsApp Business API'); + } + // methods not available on WhatsApp Business API public async mediaSticker() { throw new BadRequestException('Method not available on WhatsApp Business API'); @@ -1227,9 +1257,6 @@ export class BusinessStartupService extends WAStartupService { public async archiveChat() { throw new BadRequestException('Method not available on WhatsApp Business API'); } - public async deleteMessage() { - throw new BadRequestException('Method not available on WhatsApp Business API'); - } public async fetchProfile() { throw new BadRequestException('Method not available on WhatsApp Business API'); } From 324dc01699643665fa4de8311c14206b90406bea Mon Sep 17 00:00:00 2001 From: Davidson Gomes Date: Wed, 3 Apr 2024 10:19:59 -0300 Subject: [PATCH 11/11] v 1.7.1 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e66467c6..960f2f3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# 1.7.1 (develop) +# 1.7.1 (2024-04-03 10:19) ### Fixed