Skip to content

Commit 2b6dbfd

Browse files
committed
Merge branch 'release/1.4.4'
2 parents 82b1567 + 6bb1abd commit 2b6dbfd

File tree

11 files changed

+139
-23
lines changed

11 files changed

+139
-23
lines changed

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
# 1.4.4 (2023-07-25 15:24)
2+
3+
### Fixed
4+
5+
* Fixed chatwoot line wrap issue
6+
* Solved receive location in chatwoot
7+
* 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
10+
111
# 1.4.3 (2023-07-25 10:51)
212

313
### Fixed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "evolution-api",
3-
"version": "1.4.3",
3+
"version": "1.4.4",
44
"description": "Rest api for communication with WhatsApp",
55
"main": "./dist/src/main.js",
66
"scripts": {

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: 56 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { SendAudioDto } from '../dto/sendMessage.dto';
1313
import { SendMediaDto } from '../dto/sendMessage.dto';
1414
import { ROOT_DIR } from '../../config/path.config';
1515
import { ConfigService, HttpServer } from '../../config/env.config';
16+
import { type } from 'os';
1617

1718
export class ChatwootService {
1819
private messageCacheFile: string;
@@ -230,12 +231,19 @@ export class ChatwootService {
230231

231232
if (qrcode) {
232233
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);
233244
const conversation = await client.conversations.create({
234245
accountId: this.provider.account_id,
235-
data: {
236-
contact_id: contactId.toString(),
237-
inbox_id: inboxId.toString(),
238-
},
246+
data,
239247
});
240248

241249
if (!conversation) {
@@ -520,24 +528,39 @@ export class ChatwootService {
520528
})) as any;
521529

522530
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+
}
523543
this.logger.verbose('return conversation if exists');
524-
const conversation = contactConversations.payload.find(
525-
(conversation) =>
526-
conversation.status !== 'resolved' && conversation.inbox_id == filterInbox.id,
527-
);
544+
528545
if (conversation) {
529546
this.logger.verbose('conversation found');
530547
return conversation.id;
531548
}
532549
}
533550

534551
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+
535561
const conversation = await client.conversations.create({
536562
accountId: this.provider.account_id,
537-
data: {
538-
contact_id: `${contactId}`,
539-
inbox_id: `${filterInbox.id}`,
540-
},
563+
data,
541564
});
542565

543566
if (!conversation) {
@@ -1125,12 +1148,12 @@ export class ChatwootService {
11251148
}
11261149

11271150
if (body.message_type === 'template' && body.event === 'message_created') {
1128-
this.logger.verbose('check if is csat');
1151+
this.logger.verbose('check if is template');
11291152

11301153
const data: SendTextDto = {
11311154
number: chatId,
11321155
textMessage: {
1133-
text: body.content,
1156+
text: body.content.replace(/\\\r\n|\\\n|\n/g, '\n'),
11341157
},
11351158
options: {
11361159
delay: 1200,
@@ -1186,6 +1209,11 @@ export class ChatwootService {
11861209
audioMessage: msg.audioMessage?.caption,
11871210
contactMessage: msg.contactMessage?.vcard,
11881211
contactsArrayMessage: msg.contactsArrayMessage,
1212+
locationMessage: !msg.protocolMessage
1213+
? msg.locationMessage?.degreesLatitude +
1214+
',' +
1215+
msg.locationMessage?.degreesLongitude
1216+
: undefined,
11891217
};
11901218

11911219
this.logger.verbose('type message: ' + types);
@@ -1199,6 +1227,20 @@ export class ChatwootService {
11991227

12001228
const result = typeKey ? types[typeKey] : undefined;
12011229

1230+
if (typeKey === 'locationMessage') {
1231+
const [latitude, longitude] = result.split(',');
1232+
1233+
const formattedLocation = `**Location:**
1234+
**latitude:** ${latitude}
1235+
**longitude:** ${longitude}
1236+
https://www.google.com/maps/search/?api=1&query=${latitude},${longitude}
1237+
`;
1238+
1239+
this.logger.verbose('message content: ' + formattedLocation);
1240+
1241+
return formattedLocation;
1242+
}
1243+
12021244
if (typeKey === 'contactMessage') {
12031245
const vCardData = result.split('\n');
12041246
const contactInfo = {};

src/whatsapp/services/whatsapp.service.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -242,13 +242,9 @@ export class WAStartupService {
242242

243243
public get qrCode(): wa.QrCode {
244244
this.logger.verbose('Getting qrcode');
245-
if (this.instance.qrcode?.pairingCode) {
246-
return {
247-
pairingCode: this.instance.qrcode?.pairingCode,
248-
};
249-
}
250245

251246
return {
247+
pairingCode: this.instance.qrcode?.pairingCode,
252248
code: this.instance.qrcode?.code,
253249
base64: this.instance.qrcode?.base64,
254250
};
@@ -316,6 +312,19 @@ export class WAStartupService {
316312
this.localChatwoot.sign_msg = data?.sign_msg;
317313
this.logger.verbose(`Chatwoot sign msg: ${this.localChatwoot.sign_msg}`);
318314

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+
319328
this.logger.verbose('Chatwoot loaded');
320329
}
321330

@@ -327,6 +336,8 @@ export class WAStartupService {
327336
this.logger.verbose(`Chatwoot url: ${data.url}`);
328337
this.logger.verbose(`Chatwoot inbox name: ${data.name_inbox}`);
329338
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}`);
330341

331342
Object.assign(this.localChatwoot, data);
332343
this.logger.verbose('Chatwoot set');
@@ -346,6 +357,8 @@ export class WAStartupService {
346357
this.logger.verbose(`Chatwoot url: ${data.url}`);
347358
this.logger.verbose(`Chatwoot inbox name: ${data.name_inbox}`);
348359
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}`);
349362

350363
return data;
351364
}
@@ -622,7 +635,6 @@ export class WAStartupService {
622635
color: { light: '#ffffff', dark: '#198754' },
623636
};
624637

625-
console.log(this.phoneNumber);
626638
if (this.phoneNumber) {
627639
await delay(2000);
628640
this.instance.qrcode.pairingCode = await this.client.requestPairingCode(

0 commit comments

Comments
 (0)