diff --git a/src/api/integrations/openai/services/openai.service.ts b/src/api/integrations/openai/services/openai.service.ts index 06d8a6af..0041d67d 100644 --- a/src/api/integrations/openai/services/openai.service.ts +++ b/src/api/integrations/openai/services/openai.service.ts @@ -730,16 +730,43 @@ export class OpenaiService { }) .then((instance) => instance.id); + const defaultSettingCheck = await this.prismaRepository.typebotSetting.findFirst({ + where: { + instanceId, + }, + }); + const remoteJid = data.remoteJid; const status = data.status; - if (status === 'closed') { + if (status === 'delete') { await this.prismaRepository.openaiSession.deleteMany({ where: { remoteJid: remoteJid, }, }); + return { openai: { remoteJid: remoteJid, status: status } }; + } + + if (status === 'closed') { + if (defaultSettingCheck?.keepOpen) { + await this.prismaRepository.openaiSession.updateMany({ + where: { + remoteJid: remoteJid, + }, + data: { + status: 'closed', + }, + }); + } else { + await this.prismaRepository.openaiSession.deleteMany({ + where: { + remoteJid: remoteJid, + }, + }); + } + return { openai: { ...instance, openai: { remoteJid: remoteJid, status: status } } }; } else { const session = await this.prismaRepository.openaiSession.updateMany({ @@ -1085,17 +1112,28 @@ export class OpenaiService { participant: string; }; - if (!listeningFromMe && key.fromMe) { + if (stopBotFromMe && key.fromMe && session) { + if (keepOpen) { + await this.prismaRepository.openaiSession.update({ + where: { + id: session.id, + }, + data: { + status: 'closed', + }, + }); + } else { + await this.prismaRepository.openaiSession.deleteMany({ + where: { + openaiBotId: findOpenai.id, + remoteJid: remoteJid, + }, + }); + } return; } - if (stopBotFromMe && listeningFromMe && key.fromMe && session) { - await this.prismaRepository.openaiSession.deleteMany({ - where: { - openaiBotId: findOpenai.id, - remoteJid: remoteJid, - }, - }); + if (!listeningFromMe && key.fromMe) { return; } @@ -1295,12 +1333,23 @@ export class OpenaiService { const diffInMinutes = Math.floor(diff / 1000 / 60); if (diffInMinutes > settings.expire) { - await this.prismaRepository.openaiSession.deleteMany({ - where: { - openaiBotId: openaiBot.id, - remoteJid: remoteJid, - }, - }); + if (settings.keepOpen) { + await this.prismaRepository.openaiSession.update({ + where: { + id: session.id, + }, + data: { + status: 'closed', + }, + }); + } else { + await this.prismaRepository.openaiSession.deleteMany({ + where: { + openaiBotId: openaiBot.id, + remoteJid: remoteJid, + }, + }); + } await this.initAssistantNewSession(instance, remoteJid, openaiBot, settings, session, content); return; @@ -1339,12 +1388,23 @@ export class OpenaiService { } if (settings.keywordFinish && content.toLowerCase() === settings.keywordFinish.toLowerCase()) { - await this.prismaRepository.openaiSession.deleteMany({ - where: { - openaiBotId: openaiBot.id, - remoteJid: remoteJid, - }, - }); + if (settings.keepOpen) { + await this.prismaRepository.openaiSession.update({ + where: { + id: session.id, + }, + data: { + status: 'closed', + }, + }); + } else { + await this.prismaRepository.openaiSession.deleteMany({ + where: { + openaiBotId: openaiBot.id, + remoteJid: remoteJid, + }, + }); + } return; } @@ -1555,12 +1615,23 @@ export class OpenaiService { const diffInMinutes = Math.floor(diff / 1000 / 60); if (diffInMinutes > settings.expire) { - await this.prismaRepository.openaiSession.deleteMany({ - where: { - openaiBotId: openaiBot.id, - remoteJid: remoteJid, - }, - }); + if (settings.keepOpen) { + await this.prismaRepository.openaiSession.update({ + where: { + id: session.id, + }, + data: { + status: 'closed', + }, + }); + } else { + await this.prismaRepository.openaiSession.deleteMany({ + where: { + openaiBotId: openaiBot.id, + remoteJid: remoteJid, + }, + }); + } await this.initChatCompletionNewSession(instance, remoteJid, openaiBot, settings, session, content); return; @@ -1599,12 +1670,23 @@ export class OpenaiService { } if (settings.keywordFinish && content.toLowerCase() === settings.keywordFinish.toLowerCase()) { - await this.prismaRepository.openaiSession.deleteMany({ - where: { - openaiBotId: openaiBot.id, - remoteJid: remoteJid, - }, - }); + if (settings.keepOpen) { + await this.prismaRepository.openaiSession.update({ + where: { + id: session.id, + }, + data: { + status: 'closed', + }, + }); + } else { + await this.prismaRepository.openaiSession.deleteMany({ + where: { + openaiBotId: openaiBot.id, + remoteJid: remoteJid, + }, + }); + } return; } diff --git a/src/api/integrations/openai/validate/openai.schema.ts b/src/api/integrations/openai/validate/openai.schema.ts index bb8e280c..7131e0dd 100644 --- a/src/api/integrations/openai/validate/openai.schema.ts +++ b/src/api/integrations/openai/validate/openai.schema.ts @@ -66,7 +66,7 @@ export const openaiStatusSchema: JSONSchema7 = { type: 'object', properties: { remoteJid: { type: 'string' }, - status: { type: 'string', enum: ['opened', 'closed', 'paused'] }, + status: { type: 'string', enum: ['opened', 'closed', 'paused', 'delete'] }, }, required: ['remoteJid', 'status'], ...isNotEmpty('remoteJid', 'status'),