From dd2caf720cedf28965aa0ee468c821e6516314c2 Mon Sep 17 00:00:00 2001 From: Davidson Gomes Date: Fri, 18 Aug 2023 12:24:05 -0300 Subject: [PATCH] Added Typebot integration --- src/validate/validate.schema.ts | 12 ++++++ .../controllers/typebot.controller.ts | 5 +++ src/whatsapp/routers/typebot.router.ts | 25 ++++++++++- src/whatsapp/services/typebot.service.ts | 42 +++++++++++++++++++ 4 files changed, 82 insertions(+), 2 deletions(-) diff --git a/src/validate/validate.schema.ts b/src/validate/validate.schema.ts index 81a61127..bce05660 100644 --- a/src/validate/validate.schema.ts +++ b/src/validate/validate.schema.ts @@ -1001,6 +1001,18 @@ export const typebotStatusSchema: JSONSchema7 = { ...isNotEmpty('remoteJid', 'status'), }; +export const typebotStartSchema: JSONSchema7 = { + $id: v4(), + type: 'object', + properties: { + remoteJid: { type: 'string' }, + url: { type: 'string' }, + typebot: { type: 'string' }, + }, + required: ['remoteJid', 'url', 'typebot'], + ...isNotEmpty('remoteJid', 'url', 'typebot'), +}; + export const proxySchema: JSONSchema7 = { $id: v4(), type: 'object', diff --git a/src/whatsapp/controllers/typebot.controller.ts b/src/whatsapp/controllers/typebot.controller.ts index 0cda7d57..53dc967f 100644 --- a/src/whatsapp/controllers/typebot.controller.ts +++ b/src/whatsapp/controllers/typebot.controller.ts @@ -38,4 +38,9 @@ export class TypebotController { logger.verbose('requested changeStatus from ' + instance.instanceName + ' instance'); return this.typebotService.changeStatus(instance, data); } + + public async startTypebot(instance: InstanceDto, data: any) { + logger.verbose('requested startTypebot from ' + instance.instanceName + ' instance'); + return this.typebotService.startTypebot(instance, data); + } } diff --git a/src/whatsapp/routers/typebot.router.ts b/src/whatsapp/routers/typebot.router.ts index 68bb6395..0f785de3 100644 --- a/src/whatsapp/routers/typebot.router.ts +++ b/src/whatsapp/routers/typebot.router.ts @@ -1,7 +1,12 @@ import { RequestHandler, Router } from 'express'; import { Logger } from '../../config/logger.config'; -import { instanceNameSchema, typebotSchema, typebotStatusSchema } from '../../validate/validate.schema'; +import { + instanceNameSchema, + typebotSchema, + typebotStartSchema, + typebotStatusSchema, +} from '../../validate/validate.schema'; import { RouterBroker } from '../abstract/abstract.router'; import { InstanceDto } from '../dto/instance.dto'; import { TypebotDto } from '../dto/typebot.dto'; @@ -47,7 +52,7 @@ export class TypebotRouter extends RouterBroker { res.status(HttpStatus.OK).json(response); }) .post(this.routerPath('changeStatus'), ...guards, async (req, res) => { - logger.verbose('request received in findTypebot'); + logger.verbose('request received in changeStatusTypebot'); logger.verbose('request body: '); logger.verbose(req.body); @@ -60,6 +65,22 @@ export class TypebotRouter extends RouterBroker { execute: (instance, data) => typebotController.changeStatus(instance, data), }); + res.status(HttpStatus.OK).json(response); + }) + .post(this.routerPath('start'), ...guards, async (req, res) => { + logger.verbose('request received in startTypebot'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ + request: req, + schema: typebotStartSchema, + ClassRef: InstanceDto, + execute: (instance, data) => typebotController.startTypebot(instance, data), + }); + res.status(HttpStatus.OK).json(response); }); } diff --git a/src/whatsapp/services/typebot.service.ts b/src/whatsapp/services/typebot.service.ts index 43178c34..1128bb0d 100644 --- a/src/whatsapp/services/typebot.service.ts +++ b/src/whatsapp/services/typebot.service.ts @@ -84,6 +84,48 @@ export class TypebotService { return { typebot: { ...instance, typebot: typebotData } }; } + public async startTypebot(instance: InstanceDto, data: any) { + const remoteJid = data.remoteJid; + const url = data.url; + const typebot = data.typebot; + + const id = Math.floor(Math.random() * 10000000000).toString(); + + const reqData = { + sessionId: id, + startParams: { + typebot: data.typebot, + prefilledVariables: { + remoteJid: data.remoteJid, + pushName: data.pushName, + instanceName: instance.instanceName, + }, + }, + }; + console.log(reqData); + + 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, + ); + + return { + typebot: { + ...instance, + typebot: { + url: url, + remoteJid: remoteJid, + typebot: typebot, + }, + }, + }; + } + private getTypeMessage(msg: any) { this.logger.verbose('get type message');