chore: chatwoot verbose logs

This commit is contained in:
Davidson Gomes 2024-10-03 17:40:21 -03:00
parent 88c1830bf5
commit 14d10c00ec
3 changed files with 56 additions and 19 deletions

View File

@ -18,6 +18,7 @@
* Update baileys version * Update baileys version
* Update in Baileys version that fixes timeout when updating profile picture * Update in Baileys version that fixes timeout when updating profile picture
* Adjusts for fix timeout error on send status message * Adjusts for fix timeout error on send status message
* Chatwoot verbose logs
# 2.1.1 (2024-09-22 10:31) # 2.1.1 (2024-09-22 10:31)

View File

@ -1195,10 +1195,11 @@ export class BaileysStartupService extends ChannelStartupService {
); );
} }
this.prismaRepository.contact.updateMany({ if (this.configService.get<Database>('DATABASE').SAVE_DATA.CONTACTS)
where: { remoteJid: received.key.remoteJid, instanceId: this.instanceId }, await this.prismaRepository.contact.create({
data: contactRaw, data: contactRaw,
}); });
return; return;
} }

View File

@ -538,26 +538,37 @@ export class ChatwootService {
public async createConversation(instance: InstanceDto, body: any) { public async createConversation(instance: InstanceDto, body: any) {
try { try {
this.logger.verbose('--- Start createConversation ---');
this.logger.verbose(`Instance: ${JSON.stringify(instance)}`);
this.logger.verbose(`Body: ${JSON.stringify(body)}`);
const client = await this.clientCw(instance); const client = await this.clientCw(instance);
if (!client) { if (!client) {
this.logger.warn('client not found'); this.logger.warn(`Client not found for instance: ${JSON.stringify(instance)}`);
return null; return null;
} }
const cacheKey = `${instance.instanceName}:createConversation-${body.key.remoteJid}`; const cacheKey = `${instance.instanceName}:createConversation-${body.key.remoteJid}`;
this.logger.verbose(`Cache key: ${cacheKey}`);
if (await this.cache.has(cacheKey)) { if (await this.cache.has(cacheKey)) {
this.logger.verbose(`Cache hit for key: ${cacheKey}`);
const conversationId = (await this.cache.get(cacheKey)) as number; const conversationId = (await this.cache.get(cacheKey)) as number;
this.logger.verbose(`Cached conversation ID: ${conversationId}`);
let conversationExists: conversation | boolean; let conversationExists: conversation | boolean;
try { try {
conversationExists = await client.conversations.get({ conversationExists = await client.conversations.get({
accountId: this.provider.accountId, accountId: this.provider.accountId,
conversationId: conversationId, conversationId: conversationId,
}); });
this.logger.verbose(`Conversation exists: ${JSON.stringify(conversationExists)}`);
} catch (error) { } catch (error) {
this.logger.error(`Error getting conversation: ${error}`);
conversationExists = false; conversationExists = false;
} }
if (!conversationExists) { if (!conversationExists) {
this.logger.verbose('Conversation does not exist, re-calling createConversation');
this.cache.delete(cacheKey); this.cache.delete(cacheKey);
return await this.createConversation(instance, body); return await this.createConversation(instance, body);
} }
@ -566,30 +577,37 @@ export class ChatwootService {
} }
const isGroup = body.key.remoteJid.includes('@g.us'); const isGroup = body.key.remoteJid.includes('@g.us');
this.logger.verbose(`Is group: ${isGroup}`);
const chatId = isGroup ? body.key.remoteJid : body.key.remoteJid.split('@')[0]; const chatId = isGroup ? body.key.remoteJid : body.key.remoteJid.split('@')[0];
this.logger.verbose(`Chat ID: ${chatId}`);
let nameContact: string; let nameContact: string;
nameContact = !body.key.fromMe ? body.pushName : chatId; nameContact = !body.key.fromMe ? body.pushName : chatId;
this.logger.verbose(`Name contact: ${nameContact}`);
const filterInbox = await this.getInbox(instance); const filterInbox = await this.getInbox(instance);
if (!filterInbox) { if (!filterInbox) {
this.logger.warn('inbox not found'); this.logger.warn(`Inbox not found for instance: ${JSON.stringify(instance)}`);
return null; return null;
} }
if (isGroup) { if (isGroup) {
this.logger.verbose('Processing group conversation');
const group = await this.waMonitor.waInstances[instance.instanceName].client.groupMetadata(chatId); const group = await this.waMonitor.waInstances[instance.instanceName].client.groupMetadata(chatId);
this.logger.verbose(`Group metadata: ${JSON.stringify(group)}`);
nameContact = `${group.subject} (GROUP)`; nameContact = `${group.subject} (GROUP)`;
const picture_url = await this.waMonitor.waInstances[instance.instanceName].profilePicture( const picture_url = await this.waMonitor.waInstances[instance.instanceName].profilePicture(
body.key.participant.split('@')[0], body.key.participant.split('@')[0],
); );
this.logger.verbose(`Participant profile picture URL: ${JSON.stringify(picture_url)}`);
const findParticipant = await this.findContact(instance, body.key.participant.split('@')[0]); const findParticipant = await this.findContact(instance, body.key.participant.split('@')[0]);
this.logger.verbose(`Found participant: ${JSON.stringify(findParticipant)}`);
if (findParticipant) { if (findParticipant) {
if (!findParticipant.name || findParticipant.name === chatId) { if (!findParticipant.name || findParticipant.name === chatId) {
@ -612,8 +630,10 @@ export class ChatwootService {
} }
const picture_url = await this.waMonitor.waInstances[instance.instanceName].profilePicture(chatId); const picture_url = await this.waMonitor.waInstances[instance.instanceName].profilePicture(chatId);
this.logger.verbose(`Contact profile picture URL: ${JSON.stringify(picture_url)}`);
let contact = await this.findContact(instance, chatId); let contact = await this.findContact(instance, chatId);
this.logger.verbose(`Found contact: ${JSON.stringify(contact)}`);
if (contact) { if (contact) {
if (!body.key.fromMe) { if (!body.key.fromMe) {
@ -630,8 +650,10 @@ export class ChatwootService {
) )
: false); : false);
const contactNeedsUpdate = pictureNeedsUpdate || nameNeedsUpdate; this.logger.verbose(`Picture needs update: ${pictureNeedsUpdate}`);
if (contactNeedsUpdate) { this.logger.verbose(`Name needs update: ${nameNeedsUpdate}`);
if (pictureNeedsUpdate || nameNeedsUpdate) {
contact = await this.updateContact(instance, contact.id, { contact = await this.updateContact(instance, contact.id, {
...(nameNeedsUpdate && { name: nameContact }), ...(nameNeedsUpdate && { name: nameContact }),
...(waProfilePictureFile === '' && { avatar: null }), ...(waProfilePictureFile === '' && { avatar: null }),
@ -653,38 +675,50 @@ export class ChatwootService {
} }
if (!contact) { if (!contact) {
this.logger.warn('contact not found'); this.logger.warn('Contact not created or found');
return null; return null;
} }
const contactId = contact?.payload?.id || contact?.payload?.contact?.id || contact?.id; const contactId = contact?.payload?.id || contact?.payload?.contact?.id || contact?.id;
this.logger.verbose(`Contact ID: ${contactId}`);
const contactConversations = (await client.contacts.listConversations({ const contactConversations = (await client.contacts.listConversations({
accountId: this.provider.accountId, accountId: this.provider.accountId,
id: contactId, id: contactId,
})) as any; })) as any;
this.logger.verbose(`Contact conversations: ${JSON.stringify(contactConversations)}`);
if (contactConversations?.payload?.length) { if (!contactConversations || !contactConversations.payload) {
this.logger.error('No conversations found or payload is undefined');
return null;
}
if (contactConversations.payload.length) {
let conversation: any; let conversation: any;
if (this.provider.reopenConversation) { if (this.provider.reopenConversation) {
conversation = contactConversations.payload.find((conversation) => conversation.inbox_id == filterInbox.id); conversation = contactConversations.payload.find((conversation) => conversation.inbox_id == filterInbox.id);
this.logger.verbose(`Found conversation in reopenConversation mode: ${JSON.stringify(conversation)}`);
if (this.provider.conversationPending) { if (this.provider.conversationPending) {
await client.conversations.toggleStatus({ if (conversation) {
accountId: this.provider.accountId, await client.conversations.toggleStatus({
conversationId: conversation.id, accountId: this.provider.accountId,
data: { conversationId: conversation.id,
status: 'pending', data: {
}, status: 'pending',
}); },
});
}
} }
} else { } else {
conversation = contactConversations.payload.find( conversation = contactConversations.payload.find(
(conversation) => conversation.status !== 'resolved' && conversation.inbox_id == filterInbox.id, (conversation) => conversation.status !== 'resolved' && conversation.inbox_id == filterInbox.id,
); );
this.logger.verbose(`Found conversation: ${JSON.stringify(conversation)}`);
} }
if (conversation) { if (conversation) {
this.logger.verbose(`Returning existing conversation ID: ${conversation.id}`);
this.cache.set(cacheKey, conversation.id); this.cache.set(cacheKey, conversation.id);
return conversation.id; return conversation.id;
} }
@ -705,14 +739,15 @@ export class ChatwootService {
}); });
if (!conversation) { if (!conversation) {
this.logger.warn('conversation not found'); this.logger.warn('Conversation not created or found');
return null; return null;
} }
this.logger.verbose(`New conversation created with ID: ${conversation.id}`);
this.cache.set(cacheKey, conversation.id); this.cache.set(cacheKey, conversation.id);
return conversation.id; return conversation.id;
} catch (error) { } catch (error) {
this.logger.error(error); this.logger.error(`Error in createConversation: ${error}`);
} }
} }