diff --git a/package.json b/package.json index 20ff59d90..4fbf620bb 100644 --- a/package.json +++ b/package.json @@ -46,11 +46,11 @@ "@figuro/chatwoot-sdk": "^1.1.16", "@hapi/boom": "^10.0.1", "@sentry/node": "^7.59.2", - "@whiskeysockets/baileys": "6.5.0", + "@whiskeysockets/baileys": "6.6.0", "amqplib": "^0.10.3", "aws-sdk": "^2.1499.0", - "axios": "^1.3.5", - "class-validator": "^0.13.2", + "axios": "^1.6.5", + "class-validator": "^0.14.1", "compression": "^1.7.4", "cors": "^2.8.5", "cross-env": "^7.0.3", @@ -66,22 +66,24 @@ "join": "^3.0.0", "js-yaml": "^4.1.0", "jsonschema": "^1.4.1", - "jsonwebtoken": "^8.5.1", + "jsonwebtoken": "^9.0.2", "libphonenumber-js": "^1.10.39", "link-preview-js": "^3.0.4", "mongoose": "^6.10.5", "node-cache": "^5.1.2", "node-mime-types": "^1.1.0", "node-windows": "^1.0.0-beta.8", + "parse-bmfont-xml": "^1.1.4", "pino": "^8.11.0", "qrcode": "^1.5.1", "qrcode-terminal": "^0.12.0", "redis": "^4.6.5", - "sharp": "^0.30.7", + "sharp": "^0.32.2", "socket.io": "^4.7.1", "socks-proxy-agent": "^8.0.1", "swagger-ui-express": "^5.0.0", "uuid": "^9.0.0", + "xml2js": "^0.6.2", "yamljs": "^0.3.0" }, "devDependencies": { diff --git a/src/config/env.config.ts b/src/config/env.config.ts index fde4a0734..25dd72a33 100644 --- a/src/config/env.config.ts +++ b/src/config/env.config.ts @@ -147,6 +147,7 @@ export type Webhook = { GLOBAL?: GlobalWebhook; EVENTS: EventsWebhook }; export type ConfigSessionPhone = { CLIENT: string; NAME: string }; export type QrCode = { LIMIT: number; COLOR: string }; export type Typebot = { API_VERSION: string; KEEP_OPEN: boolean }; +export type ChatWoot = { MESSAGE_DELETE: boolean }; export type CacheConf = { REDIS: CacheConfRedis; LOCAL: CacheConfLocal }; export type Production = boolean; @@ -167,6 +168,7 @@ export interface Env { CONFIG_SESSION_PHONE: ConfigSessionPhone; QRCODE: QrCode; TYPEBOT: Typebot; + CHATWOOT: ChatWoot; CACHE: CacheConf; AUTHENTICATION: Auth; PRODUCTION?: Production; @@ -330,6 +332,9 @@ export class ConfigService { API_VERSION: process.env?.TYPEBOT_API_VERSION || 'old', KEEP_OPEN: process.env.TYPEBOT_KEEP_OPEN === 'true', }, + CHATWOOT: { + MESSAGE_DELETE: process.env.CHATWOOT_MESSAGE_DELETE === 'false', + }, CACHE: { REDIS: { ENABLED: process.env?.CACHE_REDIS_ENABLED === 'true', diff --git a/src/dev-env.yml b/src/dev-env.yml index 42438aff4..c4a9d9092 100644 --- a/src/dev-env.yml +++ b/src/dev-env.yml @@ -153,6 +153,10 @@ TYPEBOT: API_VERSION: 'old' # old | latest KEEP_OPEN: false +# If you leave this option as false, when deleting the message for everyone on WhatsApp, it will not be deleted on Chatwoot. +CHATWOOT: + MESSAGE_DELETE: true # false | true + # Cache to optimize application performance CACHE: REDIS: diff --git a/src/whatsapp/models/message.model.ts b/src/whatsapp/models/message.model.ts index 9c7ac9dcc..8388799ce 100644 --- a/src/whatsapp/models/message.model.ts +++ b/src/whatsapp/models/message.model.ts @@ -26,7 +26,7 @@ export class MessageRaw { messageType?: string; messageTimestamp?: number | Long.Long; owner: string; - source?: 'android' | 'web' | 'ios'; + source?: 'android' | 'web' | 'ios' | 'unknown' | 'desktop'; source_id?: string; source_reply_id?: string; chatwoot?: ChatwootMessage; @@ -45,7 +45,7 @@ const messageSchema = new Schema({ participant: { type: String }, messageType: { type: String }, message: { type: Object }, - source: { type: String, minlength: 3, enum: ['android', 'web', 'ios'] }, + source: { type: String, minlength: 3, enum: ['android', 'web', 'ios','unknown','desktop' ] }, messageTimestamp: { type: Number, required: true }, owner: { type: String, required: true, minlength: 1 }, chatwoot: { diff --git a/src/whatsapp/services/chatwoot.service.ts b/src/whatsapp/services/chatwoot.service.ts index ef70cf63d..3c4c011c5 100644 --- a/src/whatsapp/services/chatwoot.service.ts +++ b/src/whatsapp/services/chatwoot.service.ts @@ -7,7 +7,7 @@ import Jimp from 'jimp'; import mimeTypes from 'mime-types'; import path from 'path'; -import { ConfigService, HttpServer } from '../../config/env.config'; +import { ConfigService, HttpServer, ChatWoot} from '../../config/env.config'; import { Logger } from '../../config/logger.config'; import { ICache } from '../abstract/abstract.cache'; import { ChatwootDto } from '../dto/chatwoot.dto'; @@ -1894,33 +1894,37 @@ export class ChatwootService { } if (event === Events.MESSAGES_DELETE) { - this.logger.verbose('deleting message from instance: ' + instance.instanceName); - - if (!body?.key?.id) { - this.logger.warn('message id not found'); - return; - } - - const message = await this.getMessageByKeyId(instance, body.key.id); - if (message?.chatwoot?.messageId && message?.chatwoot?.conversationId) { - this.logger.verbose('deleting message in repository. Message id: ' + body.key.id); - this.repository.message.delete({ - where: { - key: { - id: body.key.id, - }, - owner: instance.instanceName, - }, - }); - - this.logger.verbose('deleting message in chatwoot. Message id: ' + body.key.id); - return await client.messages.delete({ - accountId: this.provider.account_id, - conversationId: message.chatwoot.conversationId, - messageId: message.chatwoot.messageId, - }); - } - } + + const chatwootDelete = this.configService.get('CHATWOOT').MESSAGE_DELETE + if (chatwootDelete === true) { + this.logger.verbose('deleting message from instance: ' + instance.instanceName); + + if (!body?.key?.id) { + this.logger.warn('message id not found'); + return; + } + + const message = await this.getMessageByKeyId(instance, body.key.id); + if (message?.chatwoot?.messageId && message?.chatwoot?.conversationId) { + this.logger.verbose('deleting message in repository. Message id: ' + body.key.id); + this.repository.message.delete({ + where: { + key: { + id: body.key.id, + }, + owner: instance.instanceName, + }, + }); + + this.logger.verbose('deleting message in chatwoot. Message id: ' + body.key.id); + return await client.messages.delete({ + accountId: this.provider.account_id, + conversationId: message.chatwoot.conversationId, + messageId: message.chatwoot.messageId, + }); + } + } + } if (event === 'messages.read') { this.logger.verbose('read message from instance: ' + instance.instanceName); diff --git a/start.sh b/start.sh old mode 100755 new mode 100644