Skip to content

Commit dd2caf7

Browse files
committed
Added Typebot integration
1 parent 0d16a7a commit dd2caf7

File tree

4 files changed

+82
-2
lines changed

4 files changed

+82
-2
lines changed

src/validate/validate.schema.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,6 +1001,18 @@ export const typebotStatusSchema: JSONSchema7 = {
10011001
...isNotEmpty('remoteJid', 'status'),
10021002
};
10031003

1004+
export const typebotStartSchema: JSONSchema7 = {
1005+
$id: v4(),
1006+
type: 'object',
1007+
properties: {
1008+
remoteJid: { type: 'string' },
1009+
url: { type: 'string' },
1010+
typebot: { type: 'string' },
1011+
},
1012+
required: ['remoteJid', 'url', 'typebot'],
1013+
...isNotEmpty('remoteJid', 'url', 'typebot'),
1014+
};
1015+
10041016
export const proxySchema: JSONSchema7 = {
10051017
$id: v4(),
10061018
type: 'object',

src/whatsapp/controllers/typebot.controller.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,9 @@ export class TypebotController {
3838
logger.verbose('requested changeStatus from ' + instance.instanceName + ' instance');
3939
return this.typebotService.changeStatus(instance, data);
4040
}
41+
42+
public async startTypebot(instance: InstanceDto, data: any) {
43+
logger.verbose('requested startTypebot from ' + instance.instanceName + ' instance');
44+
return this.typebotService.startTypebot(instance, data);
45+
}
4146
}

src/whatsapp/routers/typebot.router.ts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import { RequestHandler, Router } from 'express';
22

33
import { Logger } from '../../config/logger.config';
4-
import { instanceNameSchema, typebotSchema, typebotStatusSchema } from '../../validate/validate.schema';
4+
import {
5+
instanceNameSchema,
6+
typebotSchema,
7+
typebotStartSchema,
8+
typebotStatusSchema,
9+
} from '../../validate/validate.schema';
510
import { RouterBroker } from '../abstract/abstract.router';
611
import { InstanceDto } from '../dto/instance.dto';
712
import { TypebotDto } from '../dto/typebot.dto';
@@ -47,7 +52,7 @@ export class TypebotRouter extends RouterBroker {
4752
res.status(HttpStatus.OK).json(response);
4853
})
4954
.post(this.routerPath('changeStatus'), ...guards, async (req, res) => {
50-
logger.verbose('request received in findTypebot');
55+
logger.verbose('request received in changeStatusTypebot');
5156
logger.verbose('request body: ');
5257
logger.verbose(req.body);
5358

@@ -60,6 +65,22 @@ export class TypebotRouter extends RouterBroker {
6065
execute: (instance, data) => typebotController.changeStatus(instance, data),
6166
});
6267

68+
res.status(HttpStatus.OK).json(response);
69+
})
70+
.post(this.routerPath('start'), ...guards, async (req, res) => {
71+
logger.verbose('request received in startTypebot');
72+
logger.verbose('request body: ');
73+
logger.verbose(req.body);
74+
75+
logger.verbose('request query: ');
76+
logger.verbose(req.query);
77+
const response = await this.dataValidate<InstanceDto>({
78+
request: req,
79+
schema: typebotStartSchema,
80+
ClassRef: InstanceDto,
81+
execute: (instance, data) => typebotController.startTypebot(instance, data),
82+
});
83+
6384
res.status(HttpStatus.OK).json(response);
6485
});
6586
}

src/whatsapp/services/typebot.service.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,48 @@ export class TypebotService {
8484
return { typebot: { ...instance, typebot: typebotData } };
8585
}
8686

87+
public async startTypebot(instance: InstanceDto, data: any) {
88+
const remoteJid = data.remoteJid;
89+
const url = data.url;
90+
const typebot = data.typebot;
91+
92+
const id = Math.floor(Math.random() * 10000000000).toString();
93+
94+
const reqData = {
95+
sessionId: id,
96+
startParams: {
97+
typebot: data.typebot,
98+
prefilledVariables: {
99+
remoteJid: data.remoteJid,
100+
pushName: data.pushName,
101+
instanceName: instance.instanceName,
102+
},
103+
},
104+
};
105+
console.log(reqData);
106+
107+
const request = await axios.post(data.url + '/api/v1/sendMessage', reqData);
108+
109+
await this.sendWAMessage(
110+
instance,
111+
remoteJid,
112+
request.data.messages,
113+
request.data.input,
114+
request.data.clientSideActions,
115+
);
116+
117+
return {
118+
typebot: {
119+
...instance,
120+
typebot: {
121+
url: url,
122+
remoteJid: remoteJid,
123+
typebot: typebot,
124+
},
125+
},
126+
};
127+
}
128+
87129
private getTypeMessage(msg: any) {
88130
this.logger.verbose('get type message');
89131

0 commit comments

Comments
 (0)