From bb65b566e542cc8f96aa40f3eb04b1b11612d994 Mon Sep 17 00:00:00 2001 From: Davidson Gomes Date: Tue, 30 Jul 2024 15:38:27 -0300 Subject: [PATCH] chore: Update dify and openai services Modified the implementation of Dify and OpenAI services to improve overall functionality. These changes aim to enhance the stability and performance of the integration layer, although no new features have been added. Changes affected the following files: - dify.service.ts - openai.service.ts --- .../dify/services/dify.service.ts | 415 ++++++++++++++---- .../openai/services/openai.service.ts | 9 - 2 files changed, 324 insertions(+), 100 deletions(-) diff --git a/src/api/integrations/dify/services/dify.service.ts b/src/api/integrations/dify/services/dify.service.ts index c31115b1..846a2f9a 100644 --- a/src/api/integrations/dify/services/dify.service.ts +++ b/src/api/integrations/dify/services/dify.service.ts @@ -743,9 +743,6 @@ export class DifyService { enabled: true, triggerType: 'keyword', triggerOperator: 'startsWith', - triggerValue: { - startsWith: content, - }, instanceId: instanceId, }, }); @@ -767,9 +764,6 @@ export class DifyService { enabled: true, triggerType: 'keyword', triggerOperator: 'endsWith', - triggerValue: { - endsWith: content, - }, instanceId: instanceId, }, }); @@ -791,9 +785,6 @@ export class DifyService { enabled: true, triggerType: 'keyword', triggerOperator: 'contains', - triggerValue: { - contains: content, - }, instanceId: instanceId, }, }); @@ -1048,22 +1039,59 @@ export class DifyService { } let endpoint: string = dify.apiUrl; - let payload: any = {}; if (dify.botType === 'chatBot') { endpoint += '/chat-messages'; - payload = { + const payload = { inputs: {}, query: content, response_mode: 'blocking', conversation_id: session.sessionId === remoteJid ? undefined : session.sessionId, user: remoteJid, }; + + await instance.client.presenceSubscribe(remoteJid); + + await instance.client.sendPresenceUpdate('composing', remoteJid); + + const response = await axios.post(endpoint, payload, { + headers: { + Authorization: `Bearer ${dify.apiKey}`, + }, + }); + + await instance.client.sendPresenceUpdate('paused', remoteJid); + + const message = response?.data?.answer; + + await instance.textMessage( + { + number: remoteJid.split('@')[0], + delay: settings?.delayMessage || 1000, + text: message, + }, + false, + ); + + await this.prismaRepository.difySession.update({ + where: { + id: session.id, + }, + data: { + status: 'opened', + awaitUser: true, + sessionId: response?.data?.conversation_id, + }, + }); + + sendTelemetry('/message/sendText'); + + return; } if (dify.botType === 'textGenerator') { endpoint += '/completion-messages'; - payload = { + const payload = { inputs: { query: content, }, @@ -1071,67 +1099,150 @@ export class DifyService { conversation_id: session.sessionId === remoteJid ? undefined : session.sessionId, user: remoteJid, }; + + await instance.client.presenceSubscribe(remoteJid); + + await instance.client.sendPresenceUpdate('composing', remoteJid); + + const response = await axios.post(endpoint, payload, { + headers: { + Authorization: `Bearer ${dify.apiKey}`, + }, + }); + + await instance.client.sendPresenceUpdate('paused', remoteJid); + + const message = response?.data?.answer; + + await instance.textMessage( + { + number: remoteJid.split('@')[0], + delay: settings?.delayMessage || 1000, + text: message, + }, + false, + ); + + await this.prismaRepository.difySession.update({ + where: { + id: session.id, + }, + data: { + status: 'opened', + awaitUser: true, + sessionId: response?.data?.conversation_id, + }, + }); + + sendTelemetry('/message/sendText'); + + return; } if (dify.botType === 'agent') { endpoint += '/chat-messages'; - payload = { + const payload = { inputs: {}, query: content, response_mode: 'blocking', conversation_id: session.sessionId === remoteJid ? undefined : session.sessionId, user: remoteJid, }; + + await instance.client.presenceSubscribe(remoteJid); + + await instance.client.sendPresenceUpdate('composing', remoteJid); + + const response = await axios.post(endpoint, payload, { + headers: { + Authorization: `Bearer ${dify.apiKey}`, + }, + }); + + await instance.client.sendPresenceUpdate('paused', remoteJid); + + const message = response?.data?.answer; + + await instance.textMessage( + { + number: remoteJid.split('@')[0], + delay: settings?.delayMessage || 1000, + text: message, + }, + false, + ); + + await this.prismaRepository.difySession.update({ + where: { + id: session.id, + }, + data: { + status: 'opened', + awaitUser: true, + sessionId: response?.data?.conversation_id, + }, + }); + + sendTelemetry('/message/sendText'); + + return; } if (dify.botType === 'workflow') { endpoint += '/workflows/run'; - payload = { + const payload = { inputs: { query: content, }, response_mode: 'blocking', - conversation_id: session.sessionId === remoteJid ? undefined : session.sessionId, user: remoteJid, }; + + await instance.client.presenceSubscribe(remoteJid); + + await instance.client.sendPresenceUpdate('composing', remoteJid); + + const response = await axios.post(endpoint, payload, { + headers: { + Authorization: `Bearer ${dify.apiKey}`, + }, + }); + + await instance.client.sendPresenceUpdate('paused', remoteJid); + + const message = response?.data?.data.outputs.text; + + await instance.textMessage( + { + number: remoteJid.split('@')[0], + delay: settings?.delayMessage || 1000, + text: message, + }, + false, + ); + + if (settings.keepOpen) { + await this.prismaRepository.difySession.update({ + where: { + id: session.id, + }, + data: { + status: 'closed', + }, + }); + } else { + await this.prismaRepository.difySession.delete({ + where: { + id: session.id, + }, + }); + } + + sendTelemetry('/message/sendText'); + + return; } - await instance.client.presenceSubscribe(remoteJid); - - await instance.client.sendPresenceUpdate('composing', remoteJid); - - const response = await axios.post(endpoint, payload, { - headers: { - Authorization: `Bearer ${dify.apiKey}`, - }, - }); - - await instance.client.sendPresenceUpdate('paused', remoteJid); - - const message = response?.data?.answer; - - await instance.textMessage( - { - number: remoteJid.split('@')[0], - delay: settings?.delayMessage || 1000, - text: message, - }, - false, - ); - - await this.prismaRepository.difySession.update({ - where: { - id: session.id, - }, - data: { - status: 'opened', - awaitUser: true, - sessionId: response?.data?.conversation_id, - }, - }); - - sendTelemetry('/message/sendText'); - return; } @@ -1233,22 +1344,59 @@ export class DifyService { } let endpoint: string = dify.apiUrl; - let payload: any = {}; if (dify.botType === 'chatBot') { endpoint += '/chat-messages'; - payload = { + const payload = { inputs: {}, query: content, response_mode: 'blocking', conversation_id: session.sessionId === remoteJid ? undefined : session.sessionId, user: remoteJid, }; + + await instance.client.presenceSubscribe(remoteJid); + + await instance.client.sendPresenceUpdate('composing', remoteJid); + + const response = await axios.post(endpoint, payload, { + headers: { + Authorization: `Bearer ${dify.apiKey}`, + }, + }); + + await instance.client.sendPresenceUpdate('paused', remoteJid); + + const message = response?.data?.answer; + + await instance.textMessage( + { + number: remoteJid.split('@')[0], + delay: settings?.delayMessage || 1000, + text: message, + }, + false, + ); + + await this.prismaRepository.difySession.update({ + where: { + id: session.id, + }, + data: { + status: 'opened', + awaitUser: true, + sessionId: response?.data?.conversation_id, + }, + }); + + sendTelemetry('/message/sendText'); + + return; } if (dify.botType === 'textGenerator') { endpoint += '/completion-messages'; - payload = { + const payload = { inputs: { query: content, }, @@ -1256,22 +1404,98 @@ export class DifyService { conversation_id: session.sessionId === remoteJid ? undefined : session.sessionId, user: remoteJid, }; + + await instance.client.presenceSubscribe(remoteJid); + + await instance.client.sendPresenceUpdate('composing', remoteJid); + + const response = await axios.post(endpoint, payload, { + headers: { + Authorization: `Bearer ${dify.apiKey}`, + }, + }); + + await instance.client.sendPresenceUpdate('paused', remoteJid); + + const message = response?.data?.answer; + + await instance.textMessage( + { + number: remoteJid.split('@')[0], + delay: settings?.delayMessage || 1000, + text: message, + }, + false, + ); + + await this.prismaRepository.difySession.update({ + where: { + id: session.id, + }, + data: { + status: 'opened', + awaitUser: true, + sessionId: response?.data?.conversation_id, + }, + }); + + sendTelemetry('/message/sendText'); + + return; } if (dify.botType === 'agent') { endpoint += '/chat-messages'; - payload = { + const payload = { inputs: {}, query: content, response_mode: 'blocking', conversation_id: session.sessionId === remoteJid ? undefined : session.sessionId, user: remoteJid, }; + + await instance.client.presenceSubscribe(remoteJid); + + await instance.client.sendPresenceUpdate('composing', remoteJid); + + const response = await axios.post(endpoint, payload, { + headers: { + Authorization: `Bearer ${dify.apiKey}`, + }, + }); + + await instance.client.sendPresenceUpdate('paused', remoteJid); + + const message = response?.data?.answer; + + await instance.textMessage( + { + number: remoteJid.split('@')[0], + delay: settings?.delayMessage || 1000, + text: message, + }, + false, + ); + + await this.prismaRepository.difySession.update({ + where: { + id: session.id, + }, + data: { + status: 'opened', + awaitUser: true, + sessionId: response?.data?.conversation_id, + }, + }); + + sendTelemetry('/message/sendText'); + + return; } if (dify.botType === 'workflow') { endpoint += '/workflows/run'; - payload = { + const payload = { inputs: { query: content, }, @@ -1279,43 +1503,52 @@ export class DifyService { conversation_id: session.sessionId === remoteJid ? undefined : session.sessionId, user: remoteJid, }; + + await instance.client.presenceSubscribe(remoteJid); + + await instance.client.sendPresenceUpdate('composing', remoteJid); + + const response = await axios.post(endpoint, payload, { + headers: { + Authorization: `Bearer ${dify.apiKey}`, + }, + }); + + await instance.client.sendPresenceUpdate('paused', remoteJid); + + const message = response?.data?.data.outputs.text; + + await instance.textMessage( + { + number: remoteJid.split('@')[0], + delay: settings?.delayMessage || 1000, + text: message, + }, + false, + ); + + if (settings.keepOpen) { + await this.prismaRepository.difySession.update({ + where: { + id: session.id, + }, + data: { + status: 'closed', + }, + }); + } else { + await this.prismaRepository.difySession.delete({ + where: { + id: session.id, + }, + }); + } + + sendTelemetry('/message/sendText'); + + return; } - await instance.client.presenceSubscribe(remoteJid); - - await instance.client.sendPresenceUpdate('composing', remoteJid); - - const response = await axios.post(endpoint, payload, { - headers: { - Authorization: `Bearer ${dify.apiKey}`, - }, - }); - - await instance.client.sendPresenceUpdate('paused', remoteJid); - - const message = response?.data?.answer; - - await instance.textMessage( - { - number: remoteJid.split('@')[0], - delay: settings?.delayMessage || 1000, - text: message, - }, - false, - ); - - await this.prismaRepository.difySession.update({ - where: { - id: session.id, - }, - data: { - status: 'opened', - awaitUser: true, - }, - }); - - sendTelemetry('/message/sendText'); - return; } } diff --git a/src/api/integrations/openai/services/openai.service.ts b/src/api/integrations/openai/services/openai.service.ts index 580ed9a1..18705308 100644 --- a/src/api/integrations/openai/services/openai.service.ts +++ b/src/api/integrations/openai/services/openai.service.ts @@ -895,9 +895,6 @@ export class OpenaiService { enabled: true, triggerType: 'keyword', triggerOperator: 'startsWith', - triggerValue: { - startsWith: content, - }, instanceId: instanceId, }, }); @@ -919,9 +916,6 @@ export class OpenaiService { enabled: true, triggerType: 'keyword', triggerOperator: 'endsWith', - triggerValue: { - endsWith: content, - }, instanceId: instanceId, }, }); @@ -943,9 +937,6 @@ export class OpenaiService { enabled: true, triggerType: 'keyword', triggerOperator: 'contains', - triggerValue: { - contains: content, - }, instanceId: instanceId, }, });