diff --git a/src/api/integrations/chatwoot/services/chatwoot.service.ts b/src/api/integrations/chatwoot/services/chatwoot.service.ts index e484ec66..a7a0e2f7 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'; @@ -628,7 +629,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); @@ -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)); @@ -1274,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) { @@ -1310,6 +1336,9 @@ export class ChatwootService { formatText, options, ); + if (!messageSent && body.conversation?.id) { + this.onSendMessageError(instance, body.conversation?.id); + } this.updateChatwootMessageId( { @@ -1343,23 +1372,34 @@ export class ChatwootService { }, }; - const messageSent = await waInstance?.textMessage(data, true); + let messageSent: MessageRaw | proto.WebMessageInfo; + try { + messageSent = await waInstance?.textMessage(data, true); + if (!messageSent) { + throw new Error('Message not sent'); + } - 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