Skip to content

Commit c07e23b

Browse files
Merge pull request #290 from gabrielpastori1/chatwoot-format
Chatwoot format
2 parents 42ae7d1 + 5aa89d8 commit c07e23b

File tree

6 files changed

+30
-4
lines changed

6 files changed

+30
-4
lines changed

src/validate/validate.schema.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -889,6 +889,7 @@ export const chatwootSchema: JSONSchema7 = {
889889
token: { type: 'string' },
890890
url: { type: 'string' },
891891
sign_msg: { type: 'boolean', enum: [true, false] },
892+
sign_delimiter: { type: ['string', 'null'] },
892893
reopen_conversation: { type: 'boolean', enum: [true, false] },
893894
conversation_pending: { type: 'boolean', enum: [true, false] },
894895
auto_create: { type: 'boolean', enum: [true, false] },

src/whatsapp/controllers/chatwoot.controller.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ export class ChatwootController {
3737
if (data.sign_msg !== true && data.sign_msg !== false) {
3838
throw new BadRequestException('sign_msg is required');
3939
}
40+
if (data.sign_msg === false) data.sign_delimiter = null;
4041
}
4142

4243
if (!data.enabled) {
@@ -45,6 +46,7 @@ export class ChatwootController {
4546
data.token = '';
4647
data.url = '';
4748
data.sign_msg = false;
49+
data.sign_delimiter = null;
4850
data.reopen_conversation = false;
4951
data.conversation_pending = false;
5052
data.auto_create = false;

src/whatsapp/dto/chatwoot.dto.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export class ChatwootDto {
55
url?: string;
66
name_inbox?: string;
77
sign_msg?: boolean;
8+
sign_delimiter?: string;
89
number?: string;
910
reopen_conversation?: boolean;
1011
conversation_pending?: boolean;

src/whatsapp/models/chatwoot.model.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export class ChatwootRaw {
1010
url?: string;
1111
name_inbox?: string;
1212
sign_msg?: boolean;
13+
sign_delimiter?: string;
1314
number?: string;
1415
reopen_conversation?: boolean;
1516
conversation_pending?: boolean;
@@ -23,6 +24,7 @@ const chatwootSchema = new Schema<ChatwootRaw>({
2324
url: { type: String, required: true },
2425
name_inbox: { type: String, required: true },
2526
sign_msg: { type: Boolean, required: true },
27+
sign_delimiter: { type: String, required: false },
2628
number: { type: String, required: true },
2729
reopen_conversation: { type: Boolean, required: true },
2830
conversation_pending: { type: Boolean, required: true },

src/whatsapp/services/chatwoot.service.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1019,7 +1019,11 @@ export class ChatwootService {
10191019
this.logger.verbose('check if is group');
10201020
const chatId =
10211021
body.conversation.meta.sender?.phone_number?.replace('+', '') || body.conversation.meta.sender?.identifier;
1022-
const messageReceived = body.content;
1022+
const messageReceived = body.content
1023+
.replaceAll(/\*((?!\s)([^\n*]+?)(?<!\s))\*/g, '_$1_') // Substitui * por _
1024+
.replaceAll(/\*{2}((?!\s)([^\n*]+?)(?<!\s))\*{2}/g, '*$1*') // Substitui ** por *
1025+
.replace(/~{2}((?!\s)([^\n*]+?)(?<!\s))~{2}/g, '~$1~'); // Substitui ~~ por ~
1026+
10231027
const senderName = body?.sender?.name;
10241028
const waInstance = this.waMonitor.waInstances[instance.instanceName];
10251029

@@ -1115,7 +1119,13 @@ export class ChatwootService {
11151119
if (senderName === null || senderName === undefined) {
11161120
formatText = messageReceived;
11171121
} else {
1118-
formatText = this.provider.sign_msg ? `*${senderName}:*\n${messageReceived}` : messageReceived;
1122+
const formattedDelimiter = this.provider.sign_delimiter
1123+
? this.provider.sign_delimiter.replaceAll('\\n', '\n')
1124+
: '\n';
1125+
const textToConcat = this.provider.sign_msg ? [`*${senderName}:*`] : [];
1126+
textToConcat.push(messageReceived);
1127+
1128+
formatText = textToConcat.join(formattedDelimiter);
11191129
}
11201130

11211131
for (const message of body.conversation.messages) {
@@ -1470,7 +1480,13 @@ export class ChatwootService {
14701480
}
14711481

14721482
this.logger.verbose('get conversation message');
1473-
const bodyMessage = await this.getConversationMessage(body.message);
1483+
1484+
const bodyMessage = await this.getConversationMessage(body.message)
1485+
.replaceAll(/\*((?!\s)([^\n*]+?)(?<!\s))\*/g, '**$1**')
1486+
.replaceAll(/_((?!\s)([^\n_]+?)(?<!\s))_/g, '*$1*')
1487+
.replaceAll(/~((?!\s)([^\n~]+?)(?<!\s))~/g, '~~$1~~');
1488+
1489+
this.logger.verbose('body message: ' + bodyMessage);
14741490

14751491
if (bodyMessage && bodyMessage.includes('Por favor, classifique esta conversa, http')) {
14761492
this.logger.verbose('conversation is closed');

src/whatsapp/services/whatsapp.service.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,10 +357,12 @@ export class WAStartupService {
357357
this.logger.verbose(`Chatwoot url: ${data.url}`);
358358
this.logger.verbose(`Chatwoot inbox name: ${data.name_inbox}`);
359359
this.logger.verbose(`Chatwoot sign msg: ${data.sign_msg}`);
360+
this.logger.verbose(`Chatwoot sign delimiter: ${data.sign_delimiter}`);
360361
this.logger.verbose(`Chatwoot reopen conversation: ${data.reopen_conversation}`);
361362
this.logger.verbose(`Chatwoot conversation pending: ${data.conversation_pending}`);
362363

363-
Object.assign(this.localChatwoot, data);
364+
Object.assign(this.localChatwoot, { ...data, sign_delimiter: data.sign_msg ? data.sign_delimiter : null });
365+
364366
this.logger.verbose('Chatwoot set');
365367
}
366368

@@ -378,6 +380,7 @@ export class WAStartupService {
378380
this.logger.verbose(`Chatwoot url: ${data.url}`);
379381
this.logger.verbose(`Chatwoot inbox name: ${data.name_inbox}`);
380382
this.logger.verbose(`Chatwoot sign msg: ${data.sign_msg}`);
383+
this.logger.verbose(`Chatwoot sign delimiter: ${data.sign_delimiter}`);
381384
this.logger.verbose(`Chatwoot reopen conversation: ${data.reopen_conversation}`);
382385
this.logger.verbose(`Chatwoot conversation pending: ${data.conversation_pending}`);
383386

@@ -388,6 +391,7 @@ export class WAStartupService {
388391
url: data.url,
389392
name_inbox: data.name_inbox,
390393
sign_msg: data.sign_msg,
394+
sign_delimiter: data.sign_delimiter || null,
391395
reopen_conversation: data.reopen_conversation,
392396
conversation_pending: data.conversation_pending,
393397
};

0 commit comments

Comments
 (0)