@@ -33,23 +33,57 @@ export class TypebotService {
33
33
}
34
34
}
35
35
36
+ public async changeStatus ( instance : InstanceDto , data : any ) {
37
+ const remoteJid = data . remoteJid ;
38
+ const status = data . status ;
39
+
40
+ const findData = await this . find ( instance ) ;
41
+
42
+ const session = findData . sessions . find ( ( session ) => session . remoteJid === remoteJid ) ;
43
+
44
+ if ( session ) {
45
+ if ( status === 'closed' ) {
46
+ findData . sessions . splice ( findData . sessions . indexOf ( session ) , 1 ) ;
47
+
48
+ const typebotData = {
49
+ enabled : true ,
50
+ url : findData . url ,
51
+ typebot : findData . typebot ,
52
+ expire : findData . expire ,
53
+ sessions : findData . sessions ,
54
+ } ;
55
+
56
+ this . create ( instance , typebotData ) ;
57
+
58
+ return { typebot : { ...instance , typebot : typebotData } } ;
59
+ }
60
+
61
+ findData . sessions . map ( ( session ) => {
62
+ if ( session . remoteJid === remoteJid ) {
63
+ session . status = status ;
64
+ }
65
+ } ) ;
66
+ }
67
+
68
+ const typebotData = {
69
+ enabled : true ,
70
+ url : findData . url ,
71
+ typebot : findData . typebot ,
72
+ expire : findData . expire ,
73
+ sessions : findData . sessions ,
74
+ } ;
75
+
76
+ this . create ( instance , typebotData ) ;
77
+
78
+ return { typebot : { ...instance , typebot : typebotData } } ;
79
+ }
80
+
36
81
private getTypeMessage ( msg : any ) {
37
82
this . logger . verbose ( 'get type message' ) ;
38
83
39
84
const types = {
40
85
conversation : msg . conversation ,
41
- imageMessage : msg . imageMessage ?. caption ,
42
- videoMessage : msg . videoMessage ?. caption ,
43
86
extendedTextMessage : msg . extendedTextMessage ?. text ,
44
- messageContextInfo : msg . messageContextInfo ?. stanzaId ,
45
- stickerMessage : undefined ,
46
- documentMessage : msg . documentMessage ?. caption ,
47
- documentWithCaptionMessage : msg . documentWithCaptionMessage ?. message ?. documentMessage ?. caption ,
48
- audioMessage : msg . audioMessage ?. caption ,
49
- contactMessage : msg . contactMessage ?. vcard ,
50
- contactsArrayMessage : msg . contactsArrayMessage ,
51
- locationMessage : msg . locationMessage ,
52
- liveLocationMessage : msg . liveLocationMessage ,
53
87
} ;
54
88
55
89
this . logger . verbose ( 'type message: ' + types ) ;
@@ -86,6 +120,10 @@ export class TypebotService {
86
120
sessionId : id ,
87
121
startParams : {
88
122
typebot : data . typebot ,
123
+ prefilledVariables : {
124
+ remoteJid : data . remoteJid ,
125
+ pushName : data . pushName ,
126
+ } ,
89
127
} ,
90
128
} ;
91
129
@@ -95,6 +133,7 @@ export class TypebotService {
95
133
data . sessions . push ( {
96
134
remoteJid : data . remoteJid ,
97
135
sessionId : `${ id } -${ request . data . sessionId } ` ,
136
+ status : 'opened' ,
98
137
createdAt : Date . now ( ) ,
99
138
updateAt : Date . now ( ) ,
100
139
} ) ;
@@ -114,23 +153,9 @@ export class TypebotService {
114
153
}
115
154
116
155
public async sendWAMessage ( instance : InstanceDto , remoteJid : string , messages : any [ ] , input : any [ ] ) {
117
- processMessages ( this . waMonitor . waInstances [ instance . instanceName ] , messages , input )
118
- . then ( async ( ) => {
119
- if ( ! input ) {
120
- const typebotData = await this . find ( instance ) ;
121
-
122
- const session = typebotData . sessions . find ( ( session ) => session . remoteJid === remoteJid ) ;
123
-
124
- if ( session ) {
125
- typebotData . sessions . splice ( typebotData . sessions . indexOf ( session ) , 1 ) ;
126
-
127
- this . create ( instance , typebotData ) ;
128
- }
129
- }
130
- } )
131
- . catch ( ( err ) => {
132
- console . error ( 'Erro ao processar mensagens:' , err ) ;
133
- } ) ;
156
+ processMessages ( this . waMonitor . waInstances [ instance . instanceName ] , messages , input ) . catch ( ( err ) => {
157
+ console . error ( 'Erro ao processar mensagens:' , err ) ;
158
+ } ) ;
134
159
135
160
async function processMessages ( instance , messages , input ) {
136
161
for ( const message of messages ) {
@@ -174,7 +199,7 @@ export class TypebotService {
174
199
await instance . textMessage ( {
175
200
number : remoteJid . split ( '@' ) [ 0 ] ,
176
201
options : {
177
- delay : 1200 ,
202
+ delay : instance . localTypebot . delay_message || 1000 ,
178
203
presence : 'composing' ,
179
204
linkPreview : linkPreview ,
180
205
} ,
@@ -188,7 +213,7 @@ export class TypebotService {
188
213
await instance . mediaMessage ( {
189
214
number : remoteJid . split ( '@' ) [ 0 ] ,
190
215
options : {
191
- delay : 1200 ,
216
+ delay : instance . localTypebot . delay_message || 1000 ,
192
217
presence : 'composing' ,
193
218
} ,
194
219
mediaMessage : {
@@ -202,7 +227,7 @@ export class TypebotService {
202
227
await instance . mediaMessage ( {
203
228
number : remoteJid . split ( '@' ) [ 0 ] ,
204
229
options : {
205
- delay : 1200 ,
230
+ delay : instance . localTypebot . delay_message || 1000 ,
206
231
presence : 'composing' ,
207
232
} ,
208
233
mediaMessage : {
@@ -216,7 +241,7 @@ export class TypebotService {
216
241
await instance . audioWhatsapp ( {
217
242
number : remoteJid . split ( '@' ) [ 0 ] ,
218
243
options : {
219
- delay : 1200 ,
244
+ delay : instance . localTypebot . delay_message || 1000 ,
220
245
presence : 'recording' ,
221
246
encoding : true ,
222
247
} ,
@@ -279,6 +304,7 @@ export class TypebotService {
279
304
expire : expire ,
280
305
sessions : sessions ,
281
306
remoteJid : remoteJid ,
307
+ pushName : msg . pushName ,
282
308
} ) ;
283
309
284
310
await this . sendWAMessage ( instance , remoteJid , data . messages , data . input ) ;
@@ -287,13 +313,18 @@ export class TypebotService {
287
313
}
288
314
}
289
315
316
+ if ( session && session . status !== 'opened' ) {
317
+ return ;
318
+ }
319
+
290
320
if ( ! session ) {
291
321
const data = await this . createNewSession ( instance , {
292
322
url : url ,
293
323
typebot : typebot ,
294
324
expire : expire ,
295
325
sessions : sessions ,
296
326
remoteJid : remoteJid ,
327
+ pushName : msg . pushName ,
297
328
} ) ;
298
329
299
330
await this . sendWAMessage ( instance , remoteJid , data . messages , data . input ) ;
@@ -320,22 +351,18 @@ export class TypebotService {
320
351
const content = this . getConversationMessage ( msg . message ) ;
321
352
322
353
if ( ! content ) {
323
- return ;
324
- }
325
-
326
- if ( content . toLowerCase ( ) === 'sair' ) {
327
- sessions . splice ( sessions . indexOf ( session ) , 1 ) ;
328
-
329
- const typebotData = {
330
- enabled : true ,
331
- url : url ,
332
- typebot : typebot ,
333
- expire : expire ,
334
- sessions,
335
- } ;
336
-
337
- this . create ( instance , typebotData ) ;
338
-
354
+ if ( this . waMonitor . waInstances [ instance . instanceName ] . localTypebot . unknown_message ) {
355
+ this . waMonitor . waInstances [ instance . instanceName ] . textMessage ( {
356
+ number : remoteJid . split ( '@' ) [ 0 ] ,
357
+ options : {
358
+ delay : this . waMonitor . waInstances [ instance . instanceName ] . localTypebot . delay_message || 1000 ,
359
+ presence : 'composing' ,
360
+ } ,
361
+ textMessage : {
362
+ text : this . waMonitor . waInstances [ instance . instanceName ] . localTypebot . unknown_message ,
363
+ } ,
364
+ } ) ;
365
+ }
339
366
return ;
340
367
}
341
368
@@ -346,18 +373,6 @@ export class TypebotService {
346
373
347
374
const request = await axios . post ( url + '/api/v1/sendMessage' , reqData ) ;
348
375
349
- if ( ! request . data . input ) {
350
- sessions . splice ( sessions . indexOf ( session ) , 1 ) ;
351
-
352
- await this . createNewSession ( instance , {
353
- url : url ,
354
- typebot : typebot ,
355
- expire : expire ,
356
- sessions : sessions ,
357
- remoteJid : remoteJid ,
358
- } ) ;
359
- }
360
-
361
376
await this . sendWAMessage ( instance , remoteJid , request . data . messages , request . data . input ) ;
362
377
363
378
return ;
0 commit comments