Skip to content

Commit aef9224

Browse files
committed
fix: Option conversation_pending in chatwoot endpoint
1 parent f0d8c2d commit aef9224

File tree

10 files changed

+107
-15
lines changed

10 files changed

+107
-15
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
* Fixed chatwoot line wrap issue
66
* Solved receive location in chatwoot
77
* When requesting the pairing code, it also brings the qr code
8+
* Option reopen_conversation in chatwoot endpoint
9+
* Option conversation_pending in chatwoot endpoint
810

911
# 1.4.3 (2023-07-25 10:51)
1012

src/validate/validate.schema.ts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -874,9 +874,26 @@ export const chatwootSchema: JSONSchema7 = {
874874
token: { type: 'string' },
875875
url: { type: 'string' },
876876
sign_msg: { type: 'boolean', enum: [true, false] },
877+
reopen_conversation: { type: 'boolean', enum: [true, false] },
878+
conversation_pending: { type: 'boolean', enum: [true, false] },
877879
},
878-
required: ['enabled', 'account_id', 'token', 'url', 'sign_msg'],
879-
...isNotEmpty('account_id', 'token', 'url', 'sign_msg'),
880+
required: [
881+
'enabled',
882+
'account_id',
883+
'token',
884+
'url',
885+
'sign_msg',
886+
'reopen_conversation',
887+
'conversation_pending',
888+
],
889+
...isNotEmpty(
890+
'account_id',
891+
'token',
892+
'url',
893+
'sign_msg',
894+
'reopen_conversation',
895+
'conversation_pending',
896+
),
880897
};
881898

882899
export const settingsSchema: JSONSchema7 = {

src/whatsapp/controllers/chatwoot.controller.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ export class ChatwootController {
4444
data.token = '';
4545
data.url = '';
4646
data.sign_msg = false;
47+
data.reopen_conversation = false;
48+
data.conversation_pending = false;
4749
}
4850

4951
data.name_inbox = instance.instanceName;

src/whatsapp/controllers/instance.controller.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ export class InstanceController {
4242
chatwoot_token,
4343
chatwoot_url,
4444
chatwoot_sign_msg,
45+
chatwoot_reopen_conversation,
46+
chatwoot_conversation_pending,
4547
reject_call,
4648
msg_call,
4749
groups_ignore,
@@ -169,6 +171,24 @@ export class InstanceController {
169171
throw new BadRequestException('Invalid "url" property in chatwoot');
170172
}
171173

174+
if (chatwoot_sign_msg !== true && chatwoot_sign_msg !== false) {
175+
throw new BadRequestException('sign_msg is required');
176+
}
177+
178+
if (
179+
chatwoot_reopen_conversation !== true &&
180+
chatwoot_reopen_conversation !== false
181+
) {
182+
throw new BadRequestException('reopen_conversation is required');
183+
}
184+
185+
if (
186+
chatwoot_conversation_pending !== true &&
187+
chatwoot_conversation_pending !== false
188+
) {
189+
throw new BadRequestException('conversation_pending is required');
190+
}
191+
172192
const urlServer = this.configService.get<HttpServer>('SERVER').URL;
173193

174194
try {
@@ -180,6 +200,8 @@ export class InstanceController {
180200
sign_msg: chatwoot_sign_msg || false,
181201
name_inbox: instance.instanceName,
182202
number,
203+
reopen_conversation: chatwoot_reopen_conversation || false,
204+
conversation_pending: chatwoot_conversation_pending || false,
183205
});
184206

185207
this.chatwootService.initInstanceChatwoot(
@@ -209,6 +231,8 @@ export class InstanceController {
209231
token: chatwoot_token,
210232
url: chatwoot_url,
211233
sign_msg: chatwoot_sign_msg || false,
234+
reopen_conversation: chatwoot_reopen_conversation || false,
235+
conversation_pending: chatwoot_conversation_pending || false,
212236
number,
213237
name_inbox: instance.instanceName,
214238
webhook_url: `${urlServer}/chatwoot/webhook/${instance.instanceName}`,

src/whatsapp/dto/chatwoot.dto.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,6 @@ export class ChatwootDto {
66
name_inbox?: string;
77
sign_msg?: boolean;
88
number?: string;
9+
reopen_conversation?: boolean;
10+
conversation_pending?: boolean;
911
}

src/whatsapp/dto/instance.dto.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@ export class InstanceDto {
1616
chatwoot_token?: string;
1717
chatwoot_url?: string;
1818
chatwoot_sign_msg?: boolean;
19+
chatwoot_reopen_conversation?: boolean;
20+
chatwoot_conversation_pending?: boolean;
1921
}

src/whatsapp/models/chatwoot.model.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ export class ChatwootRaw {
1010
name_inbox?: string;
1111
sign_msg?: boolean;
1212
number?: string;
13+
reopen_conversation?: boolean;
14+
conversation_pending?: boolean;
1315
}
1416

1517
const chatwootSchema = new Schema<ChatwootRaw>({

src/whatsapp/services/chatwoot.service.ts

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -231,12 +231,19 @@ export class ChatwootService {
231231

232232
if (qrcode) {
233233
this.logger.verbose('create conversation in chatwoot');
234+
const data = {
235+
contact_id: contactId.toString(),
236+
inbox_id: inboxId.toString(),
237+
};
238+
239+
if (this.provider.conversation_pending) {
240+
data['status'] = 'pending';
241+
}
242+
243+
console.log('this.provider', this.provider);
234244
const conversation = await client.conversations.create({
235245
accountId: this.provider.account_id,
236-
data: {
237-
contact_id: contactId.toString(),
238-
inbox_id: inboxId.toString(),
239-
},
246+
data,
240247
});
241248

242249
if (!conversation) {
@@ -521,24 +528,39 @@ export class ChatwootService {
521528
})) as any;
522529

523530
if (contactConversations) {
531+
let conversation: any;
532+
if (this.provider.reopen_conversation) {
533+
conversation = contactConversations.payload.find(
534+
(conversation) => conversation.inbox_id == filterInbox.id,
535+
);
536+
} else {
537+
conversation = contactConversations.payload.find(
538+
(conversation) =>
539+
conversation.status !== 'resolved' &&
540+
conversation.inbox_id == filterInbox.id,
541+
);
542+
}
524543
this.logger.verbose('return conversation if exists');
525-
const conversation = contactConversations.payload.find(
526-
(conversation) =>
527-
conversation.status !== 'resolved' && conversation.inbox_id == filterInbox.id,
528-
);
544+
529545
if (conversation) {
530546
this.logger.verbose('conversation found');
531547
return conversation.id;
532548
}
533549
}
534550

535551
this.logger.verbose('create conversation in chatwoot');
552+
const data = {
553+
contact_id: contactId.toString(),
554+
inbox_id: filterInbox.id.toString(),
555+
};
556+
557+
if (this.provider.conversation_pending) {
558+
data['status'] = 'pending';
559+
}
560+
536561
const conversation = await client.conversations.create({
537562
accountId: this.provider.account_id,
538-
data: {
539-
contact_id: `${contactId}`,
540-
inbox_id: `${filterInbox.id}`,
541-
},
563+
data,
542564
});
543565

544566
if (!conversation) {

src/whatsapp/services/whatsapp.service.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,19 @@ export class WAStartupService {
312312
this.localChatwoot.sign_msg = data?.sign_msg;
313313
this.logger.verbose(`Chatwoot sign msg: ${this.localChatwoot.sign_msg}`);
314314

315+
this.localChatwoot.number = data?.number;
316+
this.logger.verbose(`Chatwoot number: ${this.localChatwoot.number}`);
317+
318+
this.localChatwoot.reopen_conversation = data?.reopen_conversation;
319+
this.logger.verbose(
320+
`Chatwoot reopen conversation: ${this.localChatwoot.reopen_conversation}`,
321+
);
322+
323+
this.localChatwoot.conversation_pending = data?.conversation_pending;
324+
this.logger.verbose(
325+
`Chatwoot conversation pending: ${this.localChatwoot.conversation_pending}`,
326+
);
327+
315328
this.logger.verbose('Chatwoot loaded');
316329
}
317330

@@ -323,6 +336,8 @@ export class WAStartupService {
323336
this.logger.verbose(`Chatwoot url: ${data.url}`);
324337
this.logger.verbose(`Chatwoot inbox name: ${data.name_inbox}`);
325338
this.logger.verbose(`Chatwoot sign msg: ${data.sign_msg}`);
339+
this.logger.verbose(`Chatwoot reopen conversation: ${data.reopen_conversation}`);
340+
this.logger.verbose(`Chatwoot conversation pending: ${data.conversation_pending}`);
326341

327342
Object.assign(this.localChatwoot, data);
328343
this.logger.verbose('Chatwoot set');
@@ -342,6 +357,8 @@ export class WAStartupService {
342357
this.logger.verbose(`Chatwoot url: ${data.url}`);
343358
this.logger.verbose(`Chatwoot inbox name: ${data.name_inbox}`);
344359
this.logger.verbose(`Chatwoot sign msg: ${data.sign_msg}`);
360+
this.logger.verbose(`Chatwoot reopen conversation: ${data.reopen_conversation}`);
361+
this.logger.verbose(`Chatwoot conversation pending: ${data.conversation_pending}`);
345362

346363
return data;
347364
}
@@ -618,7 +635,6 @@ export class WAStartupService {
618635
color: { light: '#ffffff', dark: '#198754' },
619636
};
620637

621-
console.log(this.phoneNumber);
622638
if (this.phoneNumber) {
623639
await delay(2000);
624640
this.instance.qrcode.pairingCode = await this.client.requestPairingCode(

src/whatsapp/types/wa.types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ export declare namespace wa {
5656
url?: string;
5757
name_inbox?: string;
5858
sign_msg?: boolean;
59+
number?: string;
60+
reopen_conversation?: boolean;
61+
conversation_pending?: boolean;
5962
};
6063

6164
export type LocalSettings = {

0 commit comments

Comments
 (0)