diff --git a/CHANGELOG.md b/CHANGELOG.md index e467485a..e1103cc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# 2.0.8-rc (release candidate) + +### Features + +* Variables passed to the input in dify +* OwnerJid passed to typebot + # 2.0.7-rc (2024-08-03 14:04) ### Fixed diff --git a/README.md b/README.md index a20f5387..38d5dd4e 100644 --- a/README.md +++ b/README.md @@ -90,9 +90,7 @@ Join our Evolution Pro community for expert support and a weekly call to answer #### Buy me coffe - PIX
- - - +

CHAVE PIX (Telefone): (74)99987-9409

diff --git a/package.json b/package.json index ccb542fb..9d9ca0a9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "evolution-api", - "version": "2.0.6-rc", + "version": "2.0.7-rc", "description": "Rest api for communication with WhatsApp", "main": "./dist/src/main.js", "scripts": { diff --git a/src/api/integrations/dify/services/dify.service.ts b/src/api/integrations/dify/services/dify.service.ts index bfdc4f0b..b2538dcd 100644 --- a/src/api/integrations/dify/services/dify.service.ts +++ b/src/api/integrations/dify/services/dify.service.ts @@ -2,7 +2,7 @@ import { Dify, DifySession, DifySetting, Message } from '@prisma/client'; import axios from 'axios'; import { Readable } from 'stream'; -import { ConfigService, S3 } from '../../../../config/env.config'; +import { Auth, ConfigService, HttpServer, S3 } from '../../../../config/env.config'; import { Logger } from '../../../../config/logger.config'; import { sendTelemetry } from '../../../../utils/sendTelemetry'; import { InstanceDto } from '../../../dto/instance.dto'; @@ -999,6 +999,7 @@ export class DifyService { session, settings, debouncedContent, + msg?.pushName, ); }); } else { @@ -1009,6 +1010,7 @@ export class DifyService { session, settings, content, + msg?.pushName, ); } @@ -1046,6 +1048,7 @@ export class DifyService { settings: DifySetting, session: DifySession, content: string, + pushName?: string, ) { const data = await this.createNewSession(instance, { remoteJid, @@ -1061,7 +1064,13 @@ export class DifyService { if (dify.botType === 'chatBot') { endpoint += '/chat-messages'; const payload = { - inputs: {}, + inputs: { + remoteJid: remoteJid, + pushName: pushName, + instanceName: instance.instanceName, + serverUrl: this.configService.get('SERVER').URL, + apiKey: this.configService.get('AUTHENTICATION').API_KEY.KEY, + }, query: content, response_mode: 'blocking', conversation_id: session.sessionId === remoteJid ? undefined : session.sessionId, @@ -1112,6 +1121,11 @@ export class DifyService { const payload = { inputs: { query: content, + pushName: pushName, + remoteJid: remoteJid, + instanceName: instance.instanceName, + serverUrl: this.configService.get('SERVER').URL, + apiKey: this.configService.get('AUTHENTICATION').API_KEY.KEY, }, response_mode: 'blocking', conversation_id: session.sessionId === remoteJid ? undefined : session.sessionId, @@ -1160,7 +1174,13 @@ export class DifyService { if (dify.botType === 'agent') { endpoint += '/chat-messages'; const payload = { - inputs: {}, + inputs: { + remoteJid: remoteJid, + pushName: pushName, + instanceName: instance.instanceName, + serverUrl: this.configService.get('SERVER').URL, + apiKey: this.configService.get('AUTHENTICATION').API_KEY.KEY, + }, query: content, response_mode: 'streaming', conversation_id: session.sessionId === remoteJid ? undefined : session.sessionId, @@ -1238,6 +1258,11 @@ export class DifyService { const payload = { inputs: { query: content, + remoteJid: remoteJid, + pushName: pushName, + instanceName: instance.instanceName, + serverUrl: this.configService.get('SERVER').URL, + apiKey: this.configService.get('AUTHENTICATION').API_KEY.KEY, }, response_mode: 'blocking', user: remoteJid, @@ -1298,6 +1323,7 @@ export class DifyService { session: DifySession, settings: DifySetting, content: string, + pushName?: string, ) { if (session && session.status !== 'opened') { return; @@ -1331,13 +1357,13 @@ export class DifyService { }); } - await this.initNewSession(instance, remoteJid, dify, settings, session, content); + await this.initNewSession(instance, remoteJid, dify, settings, session, content, pushName); return; } } if (!session) { - await this.initNewSession(instance, remoteJid, dify, settings, session, content); + await this.initNewSession(instance, remoteJid, dify, settings, session, content, pushName); return; } @@ -1393,7 +1419,13 @@ export class DifyService { if (dify.botType === 'chatBot') { endpoint += '/chat-messages'; const payload = { - inputs: {}, + inputs: { + remoteJid: remoteJid, + pushName: pushName, + instanceName: instance.instanceName, + serverUrl: this.configService.get('SERVER').URL, + apiKey: this.configService.get('AUTHENTICATION').API_KEY.KEY, + }, query: content, response_mode: 'blocking', conversation_id: session.sessionId === remoteJid ? undefined : session.sessionId, @@ -1444,6 +1476,11 @@ export class DifyService { const payload = { inputs: { query: content, + remoteJid: remoteJid, + pushName: pushName, + instanceName: instance.instanceName, + serverUrl: this.configService.get('SERVER').URL, + apiKey: this.configService.get('AUTHENTICATION').API_KEY.KEY, }, response_mode: 'blocking', conversation_id: session.sessionId === remoteJid ? undefined : session.sessionId, @@ -1492,7 +1529,13 @@ export class DifyService { if (dify.botType === 'agent') { endpoint += '/chat-messages'; const payload = { - inputs: {}, + inputs: { + remoteJid: remoteJid, + pushName: pushName, + instanceName: instance.instanceName, + serverUrl: this.configService.get('SERVER').URL, + apiKey: this.configService.get('AUTHENTICATION').API_KEY.KEY, + }, query: content, response_mode: 'streaming', conversation_id: session.sessionId === remoteJid ? undefined : session.sessionId, @@ -1572,6 +1615,11 @@ export class DifyService { const payload = { inputs: { query: content, + remoteJid: remoteJid, + pushName: pushName, + instanceName: instance.instanceName, + serverUrl: this.configService.get('SERVER').URL, + apiKey: this.configService.get('AUTHENTICATION').API_KEY.KEY, }, response_mode: 'blocking', conversation_id: session.sessionId === remoteJid ? undefined : session.sessionId, diff --git a/src/api/integrations/typebot/services/typebot.service.ts b/src/api/integrations/typebot/services/typebot.service.ts index 8c98a0cd..a1239f14 100644 --- a/src/api/integrations/typebot/services/typebot.service.ts +++ b/src/api/integrations/typebot/services/typebot.service.ts @@ -1,4 +1,4 @@ -import { Message, Typebot as TypebotModel, TypebotSession } from '@prisma/client'; +import { Instance, Message, Typebot as TypebotModel, TypebotSession } from '@prisma/client'; import axios from 'axios'; import { Auth, ConfigService, HttpServer, S3, Typebot } from '../../../../config/env.config'; @@ -659,13 +659,13 @@ export class TypebotService { public async startTypebot(instance: InstanceDto, data: any) { if (data.remoteJid === 'status@broadcast') return; - const instanceId = await this.prismaRepository.instance - .findFirst({ - where: { - name: instance.instanceName, - }, - }) - .then((instance) => instance.id); + const instanceData = await this.prismaRepository.instance.findFirst({ + where: { + name: instance.instanceName, + }, + }); + + if (!instanceData) throw new Error('Instance not found'); const remoteJid = data.remoteJid; const url = data.url; @@ -682,7 +682,7 @@ export class TypebotService { const defaultSettingCheck = await this.prismaRepository.typebotSetting.findFirst({ where: { - instanceId, + instanceId: instanceData.id, }, }); @@ -751,6 +751,7 @@ export class TypebotService { instanceName: instance.instanceName, serverUrl: this.configService.get('SERVER').URL, apiKey: this.configService.get('AUTHENTICATION').API_KEY.KEY, + ownerJid: instanceData.number, }; if (variables?.length) { @@ -764,7 +765,7 @@ export class TypebotService { where: { url: url, typebot: typebot, - instanceId, + instanceId: instanceData.id, }, }); @@ -782,7 +783,7 @@ export class TypebotService { listeningFromMe: listeningFromMe, stopBotFromMe: stopBotFromMe, keepOpen: keepOpen, - instanceId, + instanceId: instanceData.id, }, }); } @@ -790,35 +791,29 @@ export class TypebotService { await this.prismaRepository.typebotSession.deleteMany({ where: { remoteJid: remoteJid, - instanceId, + instanceId: instanceData.id, }, }); - const response = await this.createNewSession( - { - instanceName: instance.instanceName, - instanceId: instanceId, - }, - { - enabled: true, - url: url, - typebot: typebot, - remoteJid: remoteJid, - expire: expire, - keywordFinish: keywordFinish, - delayMessage: delayMessage, - unknownMessage: unknownMessage, - listeningFromMe: listeningFromMe, - stopBotFromMe: stopBotFromMe, - keepOpen: keepOpen, - prefilledVariables: prefilledVariables, - typebotId: findTypebot.id, - }, - ); + const response = await this.createNewSession(instanceData, { + enabled: true, + url: url, + typebot: typebot, + remoteJid: remoteJid, + expire: expire, + keywordFinish: keywordFinish, + delayMessage: delayMessage, + unknownMessage: unknownMessage, + listeningFromMe: listeningFromMe, + stopBotFromMe: stopBotFromMe, + keepOpen: keepOpen, + prefilledVariables: prefilledVariables, + typebotId: findTypebot.id, + }); if (response.sessionId) { await this.sendWAMessage( - instance, + instanceData, response.session, { expire: expire, @@ -871,7 +866,7 @@ export class TypebotService { const request = await axios.post(url, reqData); await this.sendWAMessage( - instance, + instanceData, null, { expire: expire, @@ -966,7 +961,7 @@ export class TypebotService { return messageContent; } - public async createNewSession(instance: InstanceDto, data: any) { + public async createNewSession(instance: Instance, data: any) { if (data.remoteJid === 'status@broadcast') return; const id = Math.floor(Math.random() * 10000000000).toString(); @@ -982,9 +977,10 @@ export class TypebotService { ...data.prefilledVariables, remoteJid: data.remoteJid, pushName: data.pushName || data.prefilledVariables?.pushName || '', - instanceName: instance.instanceName, + instanceName: instance.name, serverUrl: this.configService.get('SERVER').URL, apiKey: this.configService.get('AUTHENTICATION').API_KEY.KEY, + ownerJid: instance.number, }, }; } else { @@ -997,9 +993,10 @@ export class TypebotService { ...data.prefilledVariables, remoteJid: data.remoteJid, pushName: data.pushName || data.prefilledVariables?.pushName || '', - instanceName: instance.instanceName, + instanceName: instance.name, serverUrl: this.configService.get('SERVER').URL, apiKey: this.configService.get('AUTHENTICATION').API_KEY.KEY, + ownerJid: instance.number, }, }, }; @@ -1018,13 +1015,14 @@ export class TypebotService { ...data.prefilledVariables, remoteJid: data.remoteJid, pushName: data.pushName || '', - instanceName: instance.instanceName, + instanceName: instance.name, serverUrl: this.configService.get('SERVER').URL, apiKey: this.configService.get('AUTHENTICATION').API_KEY.KEY, + ownerJid: instance.number, }, awaitUser: false, typebotId: data.typebotId, - instanceId: instance.instanceId, + instanceId: instance.id, }, }); } @@ -1036,7 +1034,7 @@ export class TypebotService { } public async sendWAMessage( - instance: InstanceDto, + instance: Instance, session: TypebotSession, settings: { expire: number; @@ -1053,7 +1051,7 @@ export class TypebotService { clientSideActions: any, ) { processMessages( - this.waMonitor.waInstances[instance.instanceName], + this.waMonitor.waInstances[instance.name], session, settings, messages, @@ -1436,6 +1434,14 @@ export class TypebotService { public async sendTypebot(instance: InstanceDto, remoteJid: string, msg: Message) { try { + const instanceData = await this.prismaRepository.instance.findFirst({ + where: { + name: instance.instanceName, + }, + }); + + if (!instanceData) throw new Error('Instance not found'); + const settings = await this.prismaRepository.typebotSetting.findFirst({ where: { instanceId: instance.instanceId, @@ -1569,7 +1575,7 @@ export class TypebotService { if (debounceTime && debounceTime > 0) { this.processDebounce(content, remoteJid, debounceTime, async (debouncedContent) => { await this.processTypebot( - instance, + instanceData, remoteJid, msg, session, @@ -1588,7 +1594,7 @@ export class TypebotService { }); } else { await this.processTypebot( - instance, + instanceData, remoteJid, msg, session, @@ -1614,7 +1620,7 @@ export class TypebotService { } private async processTypebot( - instance: InstanceDto, + instance: Instance, remoteJid: string, msg: Message, session: TypebotSession, @@ -1699,7 +1705,7 @@ export class TypebotService { if (!content) { if (unknownMessage) { - this.waMonitor.waInstances[instance.instanceName].textMessage( + this.waMonitor.waInstances[instance.name].textMessage( { number: remoteJid.split('@')[0], delay: delayMessage || 1000, @@ -1824,7 +1830,7 @@ export class TypebotService { if (data.messages.length === 0) { if (!content) { if (unknownMessage) { - this.waMonitor.waInstances[instance.instanceName].textMessage( + this.waMonitor.waInstances[instance.name].textMessage( { number: remoteJid.split('@')[0], delay: delayMessage || 1000, @@ -1916,7 +1922,7 @@ export class TypebotService { if (!content) { if (unknownMessage) { - this.waMonitor.waInstances[instance.instanceName].textMessage( + this.waMonitor.waInstances[instance.name].textMessage( { number: remoteJid.split('@')[0], delay: delayMessage || 1000,