From 0ee243f2843304a36822bd81a843bd1c43904786 Mon Sep 17 00:00:00 2001 From: jaison-x Date: Mon, 22 Apr 2024 13:37:52 -0300 Subject: [PATCH 1/4] fix(chatwoot): fix bug when chatwoot params reopen_conversation and conversation_pending are enabled --- src/api/integrations/chatwoot/services/chatwoot.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/integrations/chatwoot/services/chatwoot.service.ts b/src/api/integrations/chatwoot/services/chatwoot.service.ts index e484ec66..a4f9e228 100644 --- a/src/api/integrations/chatwoot/services/chatwoot.service.ts +++ b/src/api/integrations/chatwoot/services/chatwoot.service.ts @@ -628,7 +628,7 @@ export class ChatwootService { id: contactId, })) as any; - if (contactConversations) { + if (contactConversations?.payload?.length) { let conversation: any; if (this.provider.reopen_conversation) { conversation = contactConversations.payload.find((conversation) => conversation.inbox_id == filterInbox.id); From 84ad8e0d6eab72b99ff976fda6b1f66b0c73bf5a Mon Sep 17 00:00:00 2001 From: jaison-x Date: Tue, 23 Apr 2024 15:06:06 -0300 Subject: [PATCH 2/4] feat(chatwoot): send private message on error message sent from chatwoot --- .../chatwoot/services/chatwoot.service.ts | 62 ++++++++++++++----- src/utils/translations/en.json | 1 + src/utils/translations/es.json | 1 + src/utils/translations/pt-BR.json | 1 + 4 files changed, 50 insertions(+), 15 deletions(-) diff --git a/src/api/integrations/chatwoot/services/chatwoot.service.ts b/src/api/integrations/chatwoot/services/chatwoot.service.ts index e484ec66..31967793 100644 --- a/src/api/integrations/chatwoot/services/chatwoot.service.ts +++ b/src/api/integrations/chatwoot/services/chatwoot.service.ts @@ -8,6 +8,7 @@ import ChatwootClient, { inbox, } from '@figuro/chatwoot-sdk'; import { request as chatwootRequest } from '@figuro/chatwoot-sdk/dist/core/request'; +import { proto } from '@whiskeysockets/baileys'; import axios from 'axios'; import FormData from 'form-data'; import { createReadStream, unlinkSync, writeFileSync } from 'fs'; @@ -1106,6 +1107,26 @@ export class ChatwootService { } } + public async onSendMessageError(instance: InstanceDto, conversation: number, error?: string) { + const client = await this.clientCw(instance); + + if (!client) { + return; + } + + client.messages.create({ + accountId: this.provider.account_id, + conversationId: conversation, + data: { + content: i18next.t('cw.message.notsent', { + error: error.length > 0 ? `_${error}_` : '', + }), + message_type: 'outgoing', + private: true, + }, + }); + } + public async receiveWebhook(instance: InstanceDto, body: any) { try { await new Promise((resolve) => setTimeout(resolve, 500)); @@ -1310,6 +1331,9 @@ export class ChatwootService { formatText, options, ); + if (!messageSent && body.conversation?.id) { + this.onSendMessageError(instance, body.conversation?.id); + } this.updateChatwootMessageId( { @@ -1343,23 +1367,31 @@ export class ChatwootService { }, }; - const messageSent = await waInstance?.textMessage(data, true); + let messageSent: MessageRaw | proto.WebMessageInfo; + try { + messageSent = await waInstance?.textMessage(data, true); - this.updateChatwootMessageId( - { - ...messageSent, - owner: instance.instanceName, - }, - { - messageId: body.id, - inboxId: body.inbox?.id, - conversationId: body.conversation?.id, - contactInbox: { - sourceId: body.conversation?.contact_inbox?.source_id, + this.updateChatwootMessageId( + { + ...messageSent, + owner: instance.instanceName, }, - }, - instance, - ); + { + messageId: body.id, + inboxId: body.inbox?.id, + conversationId: body.conversation?.id, + contactInbox: { + sourceId: body.conversation?.contact_inbox?.source_id, + }, + }, + instance, + ); + } catch (error) { + if (!messageSent && body.conversation?.id) { + this.onSendMessageError(instance, body.conversation?.id, error.toString()); + } + throw error; + } } } diff --git a/src/utils/translations/en.json b/src/utils/translations/en.json index f0a64def..1b10e7b8 100644 --- a/src/utils/translations/en.json +++ b/src/utils/translations/en.json @@ -22,5 +22,6 @@ "cw.contactMessage.contact": "Contact", "cw.contactMessage.name": "Name", "cw.contactMessage.number": "Number", + "cw.message.notsent": "🚨 The message could not be sent. Please check your connection. {{error}}", "cw.message.edited": "Edited Message" } \ No newline at end of file diff --git a/src/utils/translations/es.json b/src/utils/translations/es.json index 28784063..13f0d4b7 100644 --- a/src/utils/translations/es.json +++ b/src/utils/translations/es.json @@ -22,5 +22,6 @@ "cw.contactMessage.contact": "Contacto", "cw.contactMessage.name": "Nombre", "cw.contactMessage.number": "Numero", + "cw.message.notsent": "🚨 El mensaje no se pudo enviar. Comprueba tu conexión. {{error}}", "cw.message.edited": "Mensaje editado" } \ No newline at end of file diff --git a/src/utils/translations/pt-BR.json b/src/utils/translations/pt-BR.json index a8d62417..85ed293b 100644 --- a/src/utils/translations/pt-BR.json +++ b/src/utils/translations/pt-BR.json @@ -22,5 +22,6 @@ "cw.contactMessage.contact": "Contato", "cw.contactMessage.name": "Nome", "cw.contactMessage.number": "Número", + "cw.message.notsent": "🚨 Não foi possível enviar a mensagem. Verifique sua conexão. {{error}}", "cw.message.edited": "Mensagem editada" } \ No newline at end of file From 96fdb210be74c5f0e88501cc298bcbae99a02e20 Mon Sep 17 00:00:00 2001 From: jaison-x Date: Tue, 23 Apr 2024 17:14:41 -0300 Subject: [PATCH 3/4] feat(chatwoot): send private message on error message sent from chatwoot --- .../integrations/chatwoot/services/chatwoot.service.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/api/integrations/chatwoot/services/chatwoot.service.ts b/src/api/integrations/chatwoot/services/chatwoot.service.ts index 31967793..01afda54 100644 --- a/src/api/integrations/chatwoot/services/chatwoot.service.ts +++ b/src/api/integrations/chatwoot/services/chatwoot.service.ts @@ -1119,7 +1119,7 @@ export class ChatwootService { conversationId: conversation, data: { content: i18next.t('cw.message.notsent', { - error: error.length > 0 ? `_${error}_` : '', + error: error?.length > 0 ? `_${error}_` : '', }), message_type: 'outgoing', private: true, @@ -1295,6 +1295,11 @@ export class ChatwootService { return { message: 'bot' }; } + if (!waInstance && body.conversation?.id) { + this.onSendMessageError(instance, body.conversation?.id, 'Instance not found'); + return { message: 'bot' }; + } + this.logger.verbose('Format message to send'); let formatText: string; if (senderName === null || senderName === undefined) { @@ -1370,6 +1375,9 @@ export class ChatwootService { let messageSent: MessageRaw | proto.WebMessageInfo; try { messageSent = await waInstance?.textMessage(data, true); + if (!messageSent) { + throw new Error('Message not sent'); + } this.updateChatwootMessageId( { From 6c8ffd8ec6a021193513ab054709af6a0cd96152 Mon Sep 17 00:00:00 2001 From: jaison-x Date: Tue, 23 Apr 2024 17:26:22 -0300 Subject: [PATCH 4/4] feat(chatwoot): send private message on error message sent from chatwoot