Enhancement of Session Initialization in "StartTypebot" Function

Enhanced "StartTypebot" to initialize sessionIDs during the initial interaction, improving user experience on WhatsApp and preventing unexpected bot restarts.
This commit is contained in:
Matheus Gomes 2023-09-25 02:38:37 -03:00
parent 4dfe6bdbe8
commit c656bd6f4b
3 changed files with 63 additions and 26 deletions

View File

@ -4,6 +4,13 @@ export class Session {
status?: string;
createdAt?: number;
updateAt?: number;
prefilledVariables?: PrefilledVariables;
}
export class PrefilledVariables {
remoteJid?: string;
pushName?: string;
additionalData?: { [key: string]: any };
}
export class TypebotDto {

View File

@ -8,6 +8,11 @@ class Session {
status?: string;
createdAt?: number;
updateAt?: number;
prefilledVariables?: {
remoteJid?: string;
pushName?: string;
additionalData?: { [key: string]: any };
};
}
export class TypebotRaw {
@ -40,6 +45,11 @@ const typebotSchema = new Schema<TypebotRaw>({
status: { type: String, required: true },
createdAt: { type: Number, required: true },
updateAt: { type: Number, required: true },
prefilledVariables: {
remoteJid: { type: String, required: false },
pushName: { type: String, required: false },
additionalData: { type: Schema.Types.Mixed, required: false }
},
},
],
});

View File

@ -100,6 +100,13 @@ export class TypebotService {
const url = data.url;
const typebot = data.typebot;
const variables = data.variables;
const findTypebot = await this.find(instance);
const sessions = (findTypebot.sessions as Session[]) ?? [];
const expire = findTypebot.expire;
const keyword_finish = findTypebot.keyword_finish;
const delay_message = findTypebot.delay_message;
const unknown_message = findTypebot.unknown_message;
const listening_from_me = findTypebot.listening_from_me;
const prefilledVariables = {
remoteJid: remoteJid,
@ -109,34 +116,39 @@ export class TypebotService {
prefilledVariables[variable.name] = variable.value;
});
const id = Math.floor(Math.random() * 10000000000).toString();
const reqData = {
sessionId: id,
startParams: {
typebot: data.typebot,
prefilledVariables: prefilledVariables,
},
};
const request = await axios.post(data.url + '/api/v1/sendMessage', reqData);
await this.sendWAMessage(
instance,
remoteJid,
request.data.messages,
request.data.input,
request.data.clientSideActions,
);
this.waMonitor.waInstances[instance.instanceName].sendDataWebhook(Events.TYPEBOT_START, {
remoteJid: remoteJid,
const response = await this.createNewSession(instance, {
url: url,
typebot: typebot,
variables: variables,
sessionId: id,
remoteJid: remoteJid,
expire: expire,
keyword_finish: keyword_finish,
delay_message: delay_message,
unknown_message: unknown_message,
listening_from_me: listening_from_me,
sessions: sessions,
prefilledVariables: prefilledVariables,
});
if (response.sessionId) {
await this.sendWAMessage(
instance,
remoteJid,
response.messages,
response.input,
response.clientSideActions,
);
this.waMonitor.waInstances[instance.instanceName].sendDataWebhook(Events.TYPEBOT_START, {
remoteJid: remoteJid,
url: url,
typebot: typebot,
prefilledVariables: prefilledVariables,
sessionId: `${response.sessionId}`,
});
} else {
throw new Error("Session ID not found in response");
}
return {
typebot: {
...instance,
@ -144,7 +156,7 @@ export class TypebotService {
url: url,
remoteJid: remoteJid,
typebot: typebot,
variables: variables,
prefilledVariables: prefilledVariables,
},
},
};
@ -194,8 +206,9 @@ export class TypebotService {
typebot: data.typebot,
prefilledVariables: {
remoteJid: data.remoteJid,
pushName: data.pushName,
pushName: data.pushName || 'Default Name',
instanceName: instance.instanceName,
...data.prefilledVariables,
},
},
};
@ -209,6 +222,12 @@ export class TypebotService {
status: 'opened',
createdAt: Date.now(),
updateAt: Date.now(),
prefilledVariables: {
...data.prefilledVariables,
remoteJid: data.remoteJid,
pushName: data.pushName || 'Default Name',
instanceName: instance.instanceName,
}
});
const typebotData = {
@ -390,6 +409,7 @@ export class TypebotService {
const listening_from_me = findTypebot.listening_from_me;
const session = sessions.find((session) => session.remoteJid === remoteJid);
session.prefilledVariables.pushName = msg.pushName;
if (session && expire && expire > 0) {
const now = Date.now();