mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-07-14 09:51:24 -06:00
Merge pull request #198 from gabrielpastori1/fix-typebot-error-handle
Handle erros in Typebot
This commit is contained in:
commit
c619e253a2
4
.vscode/settings.json
vendored
4
.vscode/settings.json
vendored
@ -7,5 +7,7 @@
|
|||||||
"editor.codeActionsOnSave": {
|
"editor.codeActionsOnSave": {
|
||||||
"source.fixAll.eslint": true,
|
"source.fixAll.eslint": true,
|
||||||
"source.fixAll": true
|
"source.fixAll": true
|
||||||
}
|
},
|
||||||
|
"prisma-smart-formatter.typescript.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
|
"prisma-smart-formatter.prisma.defaultFormatter": "Prisma.prisma"
|
||||||
}
|
}
|
@ -96,6 +96,8 @@ export class TypebotService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async startTypebot(instance: InstanceDto, data: any) {
|
public async startTypebot(instance: InstanceDto, data: any) {
|
||||||
|
if (data.remoteJid === 'status@broadcast') return;
|
||||||
|
|
||||||
const remoteJid = data.remoteJid;
|
const remoteJid = data.remoteJid;
|
||||||
const url = data.url;
|
const url = data.url;
|
||||||
const typebot = data.typebot;
|
const typebot = data.typebot;
|
||||||
@ -159,23 +161,28 @@ export class TypebotService {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const request = await axios.post(data.url + '/api/v1/sendMessage', reqData);
|
try {
|
||||||
|
const request = await axios.post(data.url + '/api/v1/sendMessage', reqData);
|
||||||
|
|
||||||
await this.sendWAMessage(
|
await this.sendWAMessage(
|
||||||
instance,
|
instance,
|
||||||
remoteJid,
|
remoteJid,
|
||||||
request.data.messages,
|
request.data.messages,
|
||||||
request.data.input,
|
request.data.input,
|
||||||
request.data.clientSideActions,
|
request.data.clientSideActions,
|
||||||
);
|
);
|
||||||
|
|
||||||
this.waMonitor.waInstances[instance.instanceName].sendDataWebhook(Events.TYPEBOT_START, {
|
this.waMonitor.waInstances[instance.instanceName].sendDataWebhook(Events.TYPEBOT_START, {
|
||||||
remoteJid: remoteJid,
|
remoteJid: remoteJid,
|
||||||
url: url,
|
url: url,
|
||||||
typebot: typebot,
|
typebot: typebot,
|
||||||
variables: variables,
|
variables: variables,
|
||||||
sessionId: id,
|
sessionId: id,
|
||||||
});
|
});
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.error(error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@ -228,7 +235,9 @@ export class TypebotService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async createNewSession(instance: InstanceDto, data: any) {
|
public async createNewSession(instance: InstanceDto, data: any) {
|
||||||
|
if (data.remoteJid === 'status@broadcast') return;
|
||||||
const id = Math.floor(Math.random() * 10000000000).toString();
|
const id = Math.floor(Math.random() * 10000000000).toString();
|
||||||
|
|
||||||
const reqData = {
|
const reqData = {
|
||||||
startParams: {
|
startParams: {
|
||||||
typebot: data.typebot,
|
typebot: data.typebot,
|
||||||
@ -241,39 +250,43 @@ export class TypebotService {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const request = await axios.post(data.url + '/api/v1/sendMessage', reqData);
|
try {
|
||||||
|
const request = await axios.post(data.url + '/api/v1/sendMessage', reqData);
|
||||||
|
|
||||||
if (request.data.sessionId) {
|
if (request?.data?.sessionId) {
|
||||||
data.sessions.push({
|
data.sessions.push({
|
||||||
remoteJid: data.remoteJid,
|
|
||||||
sessionId: `${id}-${request.data.sessionId}`,
|
|
||||||
status: 'opened',
|
|
||||||
createdAt: Date.now(),
|
|
||||||
updateAt: Date.now(),
|
|
||||||
prefilledVariables: {
|
|
||||||
...data.prefilledVariables,
|
|
||||||
remoteJid: data.remoteJid,
|
remoteJid: data.remoteJid,
|
||||||
pushName: data.pushName || '',
|
sessionId: `${id}-${request.data.sessionId}`,
|
||||||
instanceName: instance.instanceName,
|
status: 'opened',
|
||||||
},
|
createdAt: Date.now(),
|
||||||
});
|
updateAt: Date.now(),
|
||||||
|
prefilledVariables: {
|
||||||
|
...data.prefilledVariables,
|
||||||
|
remoteJid: data.remoteJid,
|
||||||
|
pushName: data.pushName || '',
|
||||||
|
instanceName: instance.instanceName,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
const typebotData = {
|
const typebotData = {
|
||||||
enabled: data.enabled,
|
enabled: data.enabled,
|
||||||
url: data.url,
|
url: data.url,
|
||||||
typebot: data.typebot,
|
typebot: data.typebot,
|
||||||
expire: data.expire,
|
expire: data.expire,
|
||||||
keyword_finish: data.keyword_finish,
|
keyword_finish: data.keyword_finish,
|
||||||
delay_message: data.delay_message,
|
delay_message: data.delay_message,
|
||||||
unknown_message: data.unknown_message,
|
unknown_message: data.unknown_message,
|
||||||
listening_from_me: data.listening_from_me,
|
listening_from_me: data.listening_from_me,
|
||||||
sessions: data.sessions,
|
sessions: data.sessions,
|
||||||
};
|
};
|
||||||
|
|
||||||
this.create(instance, typebotData);
|
this.create(instance, typebotData);
|
||||||
|
}
|
||||||
|
return request.data;
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.error(error);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
return request.data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async clearSessions(instance: InstanceDto, remoteJid: string) {
|
public async clearSessions(instance: InstanceDto, remoteJid: string) {
|
||||||
@ -469,16 +482,102 @@ export class TypebotService {
|
|||||||
|
|
||||||
const session = sessions.find((session) => session.remoteJid === remoteJid);
|
const session = sessions.find((session) => session.remoteJid === remoteJid);
|
||||||
|
|
||||||
if (session && expire && expire > 0) {
|
try {
|
||||||
const now = Date.now();
|
if (session && expire && expire > 0) {
|
||||||
|
const now = Date.now();
|
||||||
|
|
||||||
const diff = now - session.updateAt;
|
const diff = now - session.updateAt;
|
||||||
|
|
||||||
const diffInMinutes = Math.floor(diff / 1000 / 60);
|
const diffInMinutes = Math.floor(diff / 1000 / 60);
|
||||||
|
|
||||||
if (diffInMinutes > expire) {
|
if (diffInMinutes > expire) {
|
||||||
const newSessions = await this.clearSessions(instance, remoteJid);
|
const newSessions = await this.clearSessions(instance, remoteJid);
|
||||||
|
|
||||||
|
const data = await this.createNewSession(instance, {
|
||||||
|
enabled: findTypebot.enabled,
|
||||||
|
url: url,
|
||||||
|
typebot: typebot,
|
||||||
|
expire: expire,
|
||||||
|
keyword_finish: keyword_finish,
|
||||||
|
delay_message: delay_message,
|
||||||
|
unknown_message: unknown_message,
|
||||||
|
listening_from_me: listening_from_me,
|
||||||
|
sessions: newSessions,
|
||||||
|
remoteJid: remoteJid,
|
||||||
|
pushName: msg.pushName,
|
||||||
|
});
|
||||||
|
|
||||||
|
await this.sendWAMessage(instance, remoteJid, data.messages, data.input, data.clientSideActions);
|
||||||
|
|
||||||
|
if (data.messages.length === 0) {
|
||||||
|
const content = this.getConversationMessage(msg.message);
|
||||||
|
|
||||||
|
if (!content) {
|
||||||
|
if (unknown_message) {
|
||||||
|
this.waMonitor.waInstances[instance.instanceName].textMessage({
|
||||||
|
number: remoteJid.split('@')[0],
|
||||||
|
options: {
|
||||||
|
delay: delay_message || 1000,
|
||||||
|
presence: 'composing',
|
||||||
|
},
|
||||||
|
textMessage: {
|
||||||
|
text: unknown_message,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (keyword_finish && content.toLowerCase() === keyword_finish.toLowerCase()) {
|
||||||
|
const newSessions = await this.clearSessions(instance, remoteJid);
|
||||||
|
|
||||||
|
const typebotData = {
|
||||||
|
enabled: findTypebot.enabled,
|
||||||
|
url: url,
|
||||||
|
typebot: typebot,
|
||||||
|
expire: expire,
|
||||||
|
keyword_finish: keyword_finish,
|
||||||
|
delay_message: delay_message,
|
||||||
|
unknown_message: unknown_message,
|
||||||
|
listening_from_me: listening_from_me,
|
||||||
|
sessions: newSessions,
|
||||||
|
};
|
||||||
|
|
||||||
|
this.create(instance, typebotData);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const reqData = {
|
||||||
|
message: content,
|
||||||
|
sessionId: data.sessionId,
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
const request = await axios.post(url + '/api/v1/sendMessage', reqData);
|
||||||
|
|
||||||
|
await this.sendWAMessage(
|
||||||
|
instance,
|
||||||
|
remoteJid,
|
||||||
|
request.data.messages,
|
||||||
|
request.data.input,
|
||||||
|
request.data.clientSideActions,
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.error(error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (session && session.status !== 'opened') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!session) {
|
||||||
const data = await this.createNewSession(instance, {
|
const data = await this.createNewSession(instance, {
|
||||||
enabled: findTypebot.enabled,
|
enabled: findTypebot.enabled,
|
||||||
url: url,
|
url: url,
|
||||||
@ -488,7 +587,7 @@ export class TypebotService {
|
|||||||
delay_message: delay_message,
|
delay_message: delay_message,
|
||||||
unknown_message: unknown_message,
|
unknown_message: unknown_message,
|
||||||
listening_from_me: listening_from_me,
|
listening_from_me: listening_from_me,
|
||||||
sessions: newSessions,
|
sessions: sessions,
|
||||||
remoteJid: remoteJid,
|
remoteJid: remoteJid,
|
||||||
pushName: msg.pushName,
|
pushName: msg.pushName,
|
||||||
});
|
});
|
||||||
@ -515,7 +614,7 @@ export class TypebotService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (keyword_finish && content.toLowerCase() === keyword_finish.toLowerCase()) {
|
if (keyword_finish && content.toLowerCase() === keyword_finish.toLowerCase()) {
|
||||||
const newSessions = await this.clearSessions(instance, remoteJid);
|
sessions.splice(sessions.indexOf(session), 1);
|
||||||
|
|
||||||
const typebotData = {
|
const typebotData = {
|
||||||
enabled: findTypebot.enabled,
|
enabled: findTypebot.enabled,
|
||||||
@ -526,7 +625,7 @@ export class TypebotService {
|
|||||||
delay_message: delay_message,
|
delay_message: delay_message,
|
||||||
unknown_message: unknown_message,
|
unknown_message: unknown_message,
|
||||||
listening_from_me: listening_from_me,
|
listening_from_me: listening_from_me,
|
||||||
sessions: newSessions,
|
sessions,
|
||||||
};
|
};
|
||||||
|
|
||||||
this.create(instance, typebotData);
|
this.create(instance, typebotData);
|
||||||
@ -539,140 +638,30 @@ export class TypebotService {
|
|||||||
sessionId: data.sessionId,
|
sessionId: data.sessionId,
|
||||||
};
|
};
|
||||||
|
|
||||||
const request = await axios.post(url + '/api/v1/sendMessage', reqData);
|
let request: any;
|
||||||
|
try {
|
||||||
await this.sendWAMessage(
|
request = await axios.post(url + '/api/v1/sendMessage', reqData);
|
||||||
instance,
|
await this.sendWAMessage(
|
||||||
remoteJid,
|
instance,
|
||||||
request.data.messages,
|
remoteJid,
|
||||||
request.data.input,
|
request.data.messages,
|
||||||
request.data.clientSideActions,
|
request.data.input,
|
||||||
);
|
request.data.clientSideActions,
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.error(error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (session && session.status !== 'opened') {
|
sessions.map((session) => {
|
||||||
return;
|
if (session.remoteJid === remoteJid) {
|
||||||
}
|
session.updateAt = Date.now();
|
||||||
|
}
|
||||||
if (!session) {
|
|
||||||
const data = await this.createNewSession(instance, {
|
|
||||||
enabled: findTypebot.enabled,
|
|
||||||
url: url,
|
|
||||||
typebot: typebot,
|
|
||||||
expire: expire,
|
|
||||||
keyword_finish: keyword_finish,
|
|
||||||
delay_message: delay_message,
|
|
||||||
unknown_message: unknown_message,
|
|
||||||
listening_from_me: listening_from_me,
|
|
||||||
sessions: sessions,
|
|
||||||
remoteJid: remoteJid,
|
|
||||||
pushName: msg.pushName,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
await this.sendWAMessage(instance, remoteJid, data.messages, data.input, data.clientSideActions);
|
|
||||||
|
|
||||||
if (data.messages.length === 0) {
|
|
||||||
const content = this.getConversationMessage(msg.message);
|
|
||||||
|
|
||||||
if (!content) {
|
|
||||||
if (unknown_message) {
|
|
||||||
this.waMonitor.waInstances[instance.instanceName].textMessage({
|
|
||||||
number: remoteJid.split('@')[0],
|
|
||||||
options: {
|
|
||||||
delay: delay_message || 1000,
|
|
||||||
presence: 'composing',
|
|
||||||
},
|
|
||||||
textMessage: {
|
|
||||||
text: unknown_message,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (keyword_finish && content.toLowerCase() === keyword_finish.toLowerCase()) {
|
|
||||||
sessions.splice(sessions.indexOf(session), 1);
|
|
||||||
|
|
||||||
const typebotData = {
|
|
||||||
enabled: findTypebot.enabled,
|
|
||||||
url: url,
|
|
||||||
typebot: typebot,
|
|
||||||
expire: expire,
|
|
||||||
keyword_finish: keyword_finish,
|
|
||||||
delay_message: delay_message,
|
|
||||||
unknown_message: unknown_message,
|
|
||||||
listening_from_me: listening_from_me,
|
|
||||||
sessions,
|
|
||||||
};
|
|
||||||
|
|
||||||
this.create(instance, typebotData);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const reqData = {
|
|
||||||
message: content,
|
|
||||||
sessionId: data.sessionId,
|
|
||||||
};
|
|
||||||
|
|
||||||
const request = await axios.post(url + '/api/v1/sendMessage', reqData);
|
|
||||||
|
|
||||||
await this.sendWAMessage(
|
|
||||||
instance,
|
|
||||||
remoteJid,
|
|
||||||
request.data.messages,
|
|
||||||
request.data.input,
|
|
||||||
request.data.clientSideActions,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
sessions.map((session) => {
|
|
||||||
if (session.remoteJid === remoteJid) {
|
|
||||||
session.updateAt = Date.now();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const typebotData = {
|
|
||||||
enabled: findTypebot.enabled,
|
|
||||||
url: url,
|
|
||||||
typebot: typebot,
|
|
||||||
expire: expire,
|
|
||||||
keyword_finish: keyword_finish,
|
|
||||||
delay_message: delay_message,
|
|
||||||
unknown_message: unknown_message,
|
|
||||||
listening_from_me: listening_from_me,
|
|
||||||
sessions,
|
|
||||||
};
|
|
||||||
|
|
||||||
this.create(instance, typebotData);
|
|
||||||
|
|
||||||
const content = this.getConversationMessage(msg.message);
|
|
||||||
|
|
||||||
if (!content) {
|
|
||||||
if (unknown_message) {
|
|
||||||
this.waMonitor.waInstances[instance.instanceName].textMessage({
|
|
||||||
number: remoteJid.split('@')[0],
|
|
||||||
options: {
|
|
||||||
delay: delay_message || 1000,
|
|
||||||
presence: 'composing',
|
|
||||||
},
|
|
||||||
textMessage: {
|
|
||||||
text: unknown_message,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (keyword_finish && content.toLowerCase() === keyword_finish.toLowerCase()) {
|
|
||||||
sessions.splice(sessions.indexOf(session), 1);
|
|
||||||
|
|
||||||
const typebotData = {
|
const typebotData = {
|
||||||
enabled: findTypebot.enabled,
|
enabled: findTypebot.enabled,
|
||||||
url: url,
|
url: url,
|
||||||
@ -687,24 +676,63 @@ export class TypebotService {
|
|||||||
|
|
||||||
this.create(instance, typebotData);
|
this.create(instance, typebotData);
|
||||||
|
|
||||||
|
const content = this.getConversationMessage(msg.message);
|
||||||
|
|
||||||
|
if (!content) {
|
||||||
|
if (unknown_message) {
|
||||||
|
this.waMonitor.waInstances[instance.instanceName].textMessage({
|
||||||
|
number: remoteJid.split('@')[0],
|
||||||
|
options: {
|
||||||
|
delay: delay_message || 1000,
|
||||||
|
presence: 'composing',
|
||||||
|
},
|
||||||
|
textMessage: {
|
||||||
|
text: unknown_message,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (keyword_finish && content.toLowerCase() === keyword_finish.toLowerCase()) {
|
||||||
|
sessions.splice(sessions.indexOf(session), 1);
|
||||||
|
|
||||||
|
const typebotData = {
|
||||||
|
enabled: findTypebot.enabled,
|
||||||
|
url: url,
|
||||||
|
typebot: typebot,
|
||||||
|
expire: expire,
|
||||||
|
keyword_finish: keyword_finish,
|
||||||
|
delay_message: delay_message,
|
||||||
|
unknown_message: unknown_message,
|
||||||
|
listening_from_me: listening_from_me,
|
||||||
|
sessions,
|
||||||
|
};
|
||||||
|
|
||||||
|
this.create(instance, typebotData);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const reqData = {
|
||||||
|
message: content,
|
||||||
|
sessionId: session.sessionId.split('-')[1],
|
||||||
|
};
|
||||||
|
|
||||||
|
const request = await axios.post(url + '/api/v1/sendMessage', reqData);
|
||||||
|
|
||||||
|
await this.sendWAMessage(
|
||||||
|
instance,
|
||||||
|
remoteJid,
|
||||||
|
request.data.messages,
|
||||||
|
request.data.input,
|
||||||
|
request.data.clientSideActions,
|
||||||
|
);
|
||||||
|
|
||||||
|
return;
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.error(error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const reqData = {
|
|
||||||
message: content,
|
|
||||||
sessionId: session.sessionId.split('-')[1],
|
|
||||||
};
|
|
||||||
|
|
||||||
const request = await axios.post(url + '/api/v1/sendMessage', reqData);
|
|
||||||
|
|
||||||
await this.sendWAMessage(
|
|
||||||
instance,
|
|
||||||
remoteJid,
|
|
||||||
request.data.messages,
|
|
||||||
request.data.input,
|
|
||||||
request.data.clientSideActions,
|
|
||||||
);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user