Merge pull request #558 from jaison-x/pr2

feat(chatwoot): send private message on error message sent from chatwoot
This commit is contained in:
Davidson Gomes
2024-04-23 19:11:10 -03:00
committed by GitHub
4 changed files with 58 additions and 15 deletions

View File

@@ -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));
@@ -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;
}
}
}