mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-12-09 09:59:40 -06:00
fix: integrate Typebot status change events for webhook in chatbot controller and service
This commit is contained in:
parent
c2085b59ea
commit
0116bc4c9f
@ -9,6 +9,7 @@ import { getConversationMessage } from '@utils/getConversationMessage';
|
||||
|
||||
import { BaseChatbotDto } from './base-chatbot.dto';
|
||||
import { ChatbotController, ChatbotControllerInterface, EmitData } from './chatbot.controller';
|
||||
import { Events } from '@api/types/wa.types';
|
||||
|
||||
// Common settings interface for all chatbot integrations
|
||||
export interface ChatbotSettings {
|
||||
@ -58,7 +59,7 @@ export abstract class BaseChatbotController<BotType = any, BotData extends BaseC
|
||||
settingsRepository: any;
|
||||
sessionRepository: any;
|
||||
userMessageDebounce: { [key: string]: { message: string; timeoutId: NodeJS.Timeout } } = {};
|
||||
|
||||
|
||||
// Name of the integration, to be set by the derived class
|
||||
protected abstract readonly integrationName: string;
|
||||
|
||||
@ -445,7 +446,17 @@ export abstract class BaseChatbotController<BotType = any, BotData extends BaseC
|
||||
});
|
||||
|
||||
const remoteJid = data.remoteJid;
|
||||
const status = data.status;
|
||||
const status = data.status;
|
||||
const session = await this.getSession(remoteJid, instance);
|
||||
|
||||
if (this.integrationName === 'Typebot') {
|
||||
const typebotData = {
|
||||
remoteJid: remoteJid,
|
||||
status: status,
|
||||
session
|
||||
};
|
||||
this.waMonitor.waInstances[instance.instanceName].sendDataWebhook(Events.TYPEBOT_CHANGE_STATUS, typebotData);
|
||||
}
|
||||
|
||||
if (status === 'delete') {
|
||||
await this.sessionRepository.deleteMany({
|
||||
@ -496,7 +507,7 @@ export abstract class BaseChatbotController<BotType = any, BotData extends BaseC
|
||||
status: status,
|
||||
session,
|
||||
};
|
||||
|
||||
|
||||
return { bot: { ...instance, bot: botData } };
|
||||
}
|
||||
} catch (error) {
|
||||
@ -867,6 +878,16 @@ export abstract class BaseChatbotController<BotType = any, BotData extends BaseC
|
||||
status: 'paused',
|
||||
},
|
||||
});
|
||||
|
||||
if (this.integrationName === 'Typebot') {
|
||||
const typebotData = {
|
||||
remoteJid: remoteJid,
|
||||
status: 'paused',
|
||||
session,
|
||||
};
|
||||
this.waMonitor.waInstances[instance.instanceName].sendDataWebhook(Events.TYPEBOT_CHANGE_STATUS, typebotData);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -8,10 +8,11 @@ import axios from 'axios';
|
||||
|
||||
import { BaseChatbotService } from '../../base-chatbot.service';
|
||||
import { OpenaiService } from '../../openai/services/openai.service';
|
||||
import { Events } from '@api/types/wa.types';
|
||||
|
||||
export class TypebotService extends BaseChatbotService<TypebotModel, any> {
|
||||
private openaiService: OpenaiService;
|
||||
|
||||
private openaiService: OpenaiService;
|
||||
|
||||
constructor(
|
||||
waMonitor: WAMonitoringService,
|
||||
configService: ConfigService,
|
||||
@ -19,7 +20,7 @@ export class TypebotService extends BaseChatbotService<TypebotModel, any> {
|
||||
openaiService: OpenaiService,
|
||||
) {
|
||||
super(waMonitor, prismaRepository, 'TypebotService', configService);
|
||||
this.openaiService = openaiService;
|
||||
this.openaiService = openaiService;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -151,6 +152,14 @@ export class TypebotService extends BaseChatbotService<TypebotModel, any> {
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
const typebotData = {
|
||||
remoteJid: data.remoteJid,
|
||||
status: 'opened',
|
||||
session,
|
||||
};
|
||||
this.waMonitor.waInstances[instance.name].sendDataWebhook(Events.TYPEBOT_CHANGE_STATUS, typebotData);
|
||||
|
||||
return { ...request.data, session };
|
||||
} catch (error) {
|
||||
this.logger.error(error);
|
||||
@ -399,12 +408,14 @@ export class TypebotService extends BaseChatbotService<TypebotModel, any> {
|
||||
},
|
||||
});
|
||||
} else {
|
||||
let statusChange = 'closed';
|
||||
if (!settings?.keepOpen) {
|
||||
await prismaRepository.integrationSession.deleteMany({
|
||||
where: {
|
||||
id: session.id,
|
||||
},
|
||||
});
|
||||
statusChange = 'delete';
|
||||
} else {
|
||||
await prismaRepository.integrationSession.update({
|
||||
where: {
|
||||
@ -415,6 +426,14 @@ export class TypebotService extends BaseChatbotService<TypebotModel, any> {
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
const typebotData = {
|
||||
remoteJid: session.remoteJid,
|
||||
status: statusChange,
|
||||
session,
|
||||
};
|
||||
instance.sendDataWebhook(Events.TYPEBOT_CHANGE_STATUS, typebotData);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -639,6 +658,7 @@ export class TypebotService extends BaseChatbotService<TypebotModel, any> {
|
||||
}
|
||||
|
||||
if (keywordFinish && content.toLowerCase() === keywordFinish.toLowerCase()) {
|
||||
let statusChange = 'closed';
|
||||
if (keepOpen) {
|
||||
await this.prismaRepository.integrationSession.update({
|
||||
where: {
|
||||
@ -649,6 +669,7 @@ export class TypebotService extends BaseChatbotService<TypebotModel, any> {
|
||||
},
|
||||
});
|
||||
} else {
|
||||
statusChange = 'delete';
|
||||
await this.prismaRepository.integrationSession.deleteMany({
|
||||
where: {
|
||||
botId: findTypebot.id,
|
||||
@ -656,6 +677,14 @@ export class TypebotService extends BaseChatbotService<TypebotModel, any> {
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
const typebotData = {
|
||||
remoteJid: remoteJid,
|
||||
status: statusChange,
|
||||
session,
|
||||
};
|
||||
waInstance.sendDataWebhook(Events.TYPEBOT_CHANGE_STATUS, typebotData);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -788,6 +817,7 @@ export class TypebotService extends BaseChatbotService<TypebotModel, any> {
|
||||
}
|
||||
|
||||
if (keywordFinish && content.toLowerCase() === keywordFinish.toLowerCase()) {
|
||||
let statusChange = 'closed';
|
||||
if (keepOpen) {
|
||||
await this.prismaRepository.integrationSession.update({
|
||||
where: {
|
||||
@ -798,6 +828,7 @@ export class TypebotService extends BaseChatbotService<TypebotModel, any> {
|
||||
},
|
||||
});
|
||||
} else {
|
||||
statusChange = 'delete';
|
||||
await this.prismaRepository.integrationSession.deleteMany({
|
||||
where: {
|
||||
botId: findTypebot.id,
|
||||
@ -805,6 +836,13 @@ export class TypebotService extends BaseChatbotService<TypebotModel, any> {
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
const typebotData = {
|
||||
remoteJid: remoteJid,
|
||||
status: statusChange,
|
||||
session,
|
||||
};
|
||||
waInstance.sendDataWebhook(Events.TYPEBOT_CHANGE_STATUS, typebotData);
|
||||
|
||||
return;
|
||||
}
|
||||
@ -881,6 +919,7 @@ export class TypebotService extends BaseChatbotService<TypebotModel, any> {
|
||||
}
|
||||
|
||||
if (keywordFinish && content.toLowerCase() === keywordFinish.toLowerCase()) {
|
||||
let statusChange = 'closed';
|
||||
if (keepOpen) {
|
||||
await this.prismaRepository.integrationSession.update({
|
||||
where: {
|
||||
@ -891,6 +930,7 @@ export class TypebotService extends BaseChatbotService<TypebotModel, any> {
|
||||
},
|
||||
});
|
||||
} else {
|
||||
statusChange = 'delete';
|
||||
await this.prismaRepository.integrationSession.deleteMany({
|
||||
where: {
|
||||
botId: findTypebot.id,
|
||||
@ -898,6 +938,15 @@ export class TypebotService extends BaseChatbotService<TypebotModel, any> {
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
const typebotData = {
|
||||
remoteJid: remoteJid,
|
||||
status: statusChange,
|
||||
session,
|
||||
};
|
||||
|
||||
waInstance.sendDataWebhook(Events.TYPEBOT_CHANGE_STATUS, typebotData);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user