From a9c087c45fda91ba9093fb60117a45ac231fd791 Mon Sep 17 00:00:00 2001 From: Davidson Gomes Date: Mon, 2 Oct 2023 16:10:04 -0300 Subject: [PATCH] correction of messages sent by the api and typebot not appearing in chatwoot --- CHANGELOG.md | 1 + src/whatsapp/services/chatwoot.service.ts | 2 +- src/whatsapp/services/typebot.service.ts | 67 ++++++++++++++++------- src/whatsapp/services/whatsapp.service.ts | 9 ++- 4 files changed, 55 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52203203..5632c99e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ * Remove rabbitmq queues when delete instances * Improvement in restart instance to completely redo the connection * Update node version: v20 +* Correction of messages sent by the api and typebot not appearing in chatwoot # 1.5.2 (2023-09-28 17:56) diff --git a/src/whatsapp/services/chatwoot.service.ts b/src/whatsapp/services/chatwoot.service.ts index 83e817a4..cb26eed8 100644 --- a/src/whatsapp/services/chatwoot.service.ts +++ b/src/whatsapp/services/chatwoot.service.ts @@ -1279,7 +1279,7 @@ export class ChatwootService { return null; } - if (event === 'messages.upsert') { + if (event === 'messages.upsert' || event === 'send.messages') { this.logger.verbose('event messages.upsert'); if (body.key.remoteJid === 'status@broadcast') { diff --git a/src/whatsapp/services/typebot.service.ts b/src/whatsapp/services/typebot.service.ts index 88dde9c3..5c48c45b 100644 --- a/src/whatsapp/services/typebot.service.ts +++ b/src/whatsapp/services/typebot.service.ts @@ -99,6 +99,7 @@ export class TypebotService { const remoteJid = data.remoteJid; const url = data.url; const typebot = data.typebot; + const startSession = data.startSession; const variables = data.variables; const findTypebot = await this.find(instance); const sessions = (findTypebot.sessions as Session[]) ?? []; @@ -116,37 +117,61 @@ export class TypebotService { prefilledVariables[variable.name] = variable.value; }); - const response = await this.createNewSession(instance, { - url: url, - typebot: typebot, - remoteJid: remoteJid, - expire: expire, - keyword_finish: keyword_finish, - delay_message: delay_message, - unknown_message: unknown_message, - listening_from_me: listening_from_me, - sessions: sessions, - prefilledVariables: prefilledVariables, - }); + if (startSession) { + const response = await this.createNewSession(instance, { + url: url, + typebot: typebot, + remoteJid: remoteJid, + expire: expire, + keyword_finish: keyword_finish, + delay_message: delay_message, + unknown_message: unknown_message, + listening_from_me: listening_from_me, + sessions: sessions, + prefilledVariables: prefilledVariables, + }); + + if (response.sessionId) { + await this.sendWAMessage(instance, remoteJid, response.messages, response.input, response.clientSideActions); + + this.waMonitor.waInstances[instance.instanceName].sendDataWebhook(Events.TYPEBOT_START, { + remoteJid: remoteJid, + url: url, + typebot: typebot, + prefilledVariables: prefilledVariables, + sessionId: `${response.sessionId}`, + }); + } else { + throw new Error('Session ID not found in response'); + } + } else { + const id = Math.floor(Math.random() * 10000000000).toString(); + + const reqData = { + sessionId: id, + startParams: { + typebot: data.typebot, + prefilledVariables: prefilledVariables, + }, + }; + + const request = await axios.post(data.url + '/api/v1/sendMessage', reqData); - if (response.sessionId) { await this.sendWAMessage( instance, remoteJid, - response.messages, - response.input, - response.clientSideActions, + request.data.messages, + request.data.input, + request.data.clientSideActions, ); this.waMonitor.waInstances[instance.instanceName].sendDataWebhook(Events.TYPEBOT_START, { remoteJid: remoteJid, url: url, typebot: typebot, - prefilledVariables: prefilledVariables, - sessionId: `${response.sessionId}`, + variables: variables, + sessionId: id, }); - } else { - throw new Error("Session ID not found in response"); } return { @@ -227,7 +252,7 @@ export class TypebotService { remoteJid: data.remoteJid, pushName: data.pushName || 'Default Name', instanceName: instance.instanceName, - } + }, }); const typebotData = { diff --git a/src/whatsapp/services/whatsapp.service.ts b/src/whatsapp/services/whatsapp.service.ts index fa516a0a..567a587e 100644 --- a/src/whatsapp/services/whatsapp.service.ts +++ b/src/whatsapp/services/whatsapp.service.ts @@ -40,6 +40,7 @@ import EventEmitter2 from 'eventemitter2'; import fs, { existsSync, readFileSync } from 'fs'; import Long from 'long'; import NodeCache from 'node-cache'; +import { getMIMEType } from 'node-mime-types'; import { release } from 'os'; import { join } from 'path'; import P from 'pino'; @@ -2387,12 +2388,16 @@ export class WAStartupService { if (mediaMessage.mediatype === 'image' && !mediaMessage.fileName) { mediaMessage.fileName = 'image.png'; - mimetype = 'image/png'; } if (mediaMessage.mediatype === 'video' && !mediaMessage.fileName) { mediaMessage.fileName = 'video.mp4'; - mimetype = 'video/mp4'; + } + + if (isURL(mediaMessage.media)) { + mimetype = getMIMEType(mediaMessage.media); + } else { + mimetype = getMIMEType(mediaMessage.fileName); } this.logger.verbose('Mimetype: ' + mimetype);