fix: clean remaining chatbot references and update MySQL schema

Completed cleanup of chatbot integrations:
- Removed Chatwoot import and env config references from whatsapp.baileys.service.ts
- Updated BaileysStartupService constructor to remove chatwootCache parameter
- Updated BusinessStartupService constructor to remove chatwootCache parameter
- Fixed channel.controller.ts ChannelDataType to remove chatwootCache
- Updated service instantiation calls to match new constructor signatures
- Cleaned MySQL Prisma schema: removed all 12 chatbot models and 2 enums
- Removed Chatwoot and Typebot fields from Message model in MySQL schema
- Removed chatbot relations from Instance model in MySQL schema

Both PostgreSQL and MySQL schemas are now fully cleaned of chatbot references.
This commit is contained in:
Claude 2025-11-09 07:50:43 +00:00
parent 2606dbdac3
commit d3d87ef13b
No known key found for this signature in database
4 changed files with 2 additions and 312 deletions

View File

@ -69,7 +69,6 @@ model Instance {
Contact Contact[] Contact Contact[]
Message Message[] Message Message[]
Webhook Webhook? Webhook Webhook?
Chatwoot Chatwoot?
Label Label[] Label Label[]
Proxy Proxy? Proxy Proxy?
Setting Setting? Setting Setting?
@ -78,24 +77,13 @@ model Instance {
Sqs Sqs? Sqs Sqs?
Kafka Kafka? Kafka Kafka?
Websocket Websocket? Websocket Websocket?
Typebot Typebot[]
Session Session? Session Session?
MessageUpdate MessageUpdate[] MessageUpdate MessageUpdate[]
TypebotSetting TypebotSetting?
Media Media[] Media Media[]
OpenaiCreds OpenaiCreds[]
OpenaiBot OpenaiBot[]
OpenaiSetting OpenaiSetting?
Template Template[] Template Template[]
Dify Dify[]
DifySetting DifySetting?
IntegrationSession IntegrationSession[] IntegrationSession IntegrationSession[]
Flowise Flowise[]
FlowiseSetting FlowiseSetting?
N8n N8n[] N8n N8n[]
N8nSetting N8nSetting? N8nSetting N8nSetting?
Evoai Evoai[]
EvoaiSetting EvoaiSetting?
Pusher Pusher? Pusher Pusher?
} }
@ -148,14 +136,8 @@ model Message {
contextInfo Json? @db.Json contextInfo Json? @db.Json
source DeviceMessage source DeviceMessage
messageTimestamp Int @db.Int messageTimestamp Int @db.Int
chatwootMessageId Int? @db.Int
chatwootInboxId Int? @db.Int
chatwootConversationId Int? @db.Int
chatwootContactInboxSourceId String? @db.VarChar(100)
chatwootIsRead Boolean? @default(false)
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
instanceId String instanceId String
typebotSessionId String?
MessageUpdate MessageUpdate[] MessageUpdate MessageUpdate[]
Media Media? Media Media?
webhookUrl String? @db.VarChar(500) webhookUrl String? @db.VarChar(500)
@ -200,31 +182,6 @@ model Webhook {
@@index([instanceId]) @@index([instanceId])
} }
model Chatwoot {
id String @id @default(cuid())
enabled Boolean? @default(true)
accountId String? @db.VarChar(100)
token String? @db.VarChar(100)
url String? @db.VarChar(500)
nameInbox String? @db.VarChar(100)
signMsg Boolean? @default(false)
signDelimiter String? @db.VarChar(100)
number String? @db.VarChar(100)
reopenConversation Boolean? @default(false)
conversationPending Boolean? @default(false)
mergeBrazilContacts Boolean? @default(false)
importContacts Boolean? @default(false)
importMessages Boolean? @default(false)
daysLimitImportMessages Int? @db.Int
organization String? @db.VarChar(100)
logo String? @db.VarChar(500)
ignoreJids Json?
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
updatedAt DateTime @updatedAt @db.Timestamp
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
instanceId String @unique
}
model Label { model Label {
id String @id @default(cuid()) id String @id @default(cuid())
labelId String? @db.VarChar(100) labelId String? @db.VarChar(100)
@ -334,50 +291,6 @@ model Pusher {
instanceId String @unique instanceId String @unique
} }
model Typebot {
id String @id @default(cuid())
enabled Boolean @default(true)
description String? @db.VarChar(255)
url String @db.VarChar(500)
typebot String @db.VarChar(100)
expire Int? @default(0) @db.Int
keywordFinish String? @db.VarChar(100)
delayMessage Int? @db.Int
unknownMessage String? @db.VarChar(100)
listeningFromMe Boolean? @default(false)
stopBotFromMe Boolean? @default(false)
keepOpen Boolean? @default(false)
debounceTime Int? @db.Int
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
updatedAt DateTime? @updatedAt @db.Timestamp
ignoreJids Json?
triggerType TriggerType?
triggerOperator TriggerOperator?
triggerValue String?
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
instanceId String
TypebotSetting TypebotSetting[]
}
model TypebotSetting {
id String @id @default(cuid())
expire Int? @default(0) @db.Int
keywordFinish String? @db.VarChar(100)
delayMessage Int? @db.Int
unknownMessage String? @db.VarChar(100)
listeningFromMe Boolean? @default(false)
stopBotFromMe Boolean? @default(false)
keepOpen Boolean? @default(false)
debounceTime Int? @db.Int
typebotIdFallback String? @db.VarChar(100)
ignoreJids Json?
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
updatedAt DateTime @updatedAt @db.Timestamp
Fallback Typebot? @relation(fields: [typebotIdFallback], references: [id])
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
instanceId String @unique
}
model IntegrationSession { model IntegrationSession {
id String @id @default(cuid()) id String @id @default(cuid())
sessionId String @db.VarChar(255) sessionId String @db.VarChar(255)
@ -409,77 +322,6 @@ model Media {
instanceId String instanceId String
} }
model OpenaiCreds {
id String @id @default(cuid())
name String? @unique @db.VarChar(255)
apiKey String? @unique @db.VarChar(255)
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
updatedAt DateTime @updatedAt @db.Timestamp
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
instanceId String
OpenaiAssistant OpenaiBot[]
OpenaiSetting OpenaiSetting?
}
model OpenaiBot {
id String @id @default(cuid())
enabled Boolean @default(true)
description String? @db.VarChar(255)
botType OpenaiBotType
assistantId String? @db.VarChar(255)
functionUrl String? @db.VarChar(500)
model String? @db.VarChar(100)
systemMessages Json? @db.Json
assistantMessages Json? @db.Json
userMessages Json? @db.Json
maxTokens Int? @db.Int
expire Int? @default(0) @db.Int
keywordFinish String? @db.VarChar(100)
delayMessage Int? @db.Int
unknownMessage String? @db.VarChar(100)
listeningFromMe Boolean? @default(false)
stopBotFromMe Boolean? @default(false)
keepOpen Boolean? @default(false)
debounceTime Int? @db.Int
ignoreJids Json?
splitMessages Boolean? @default(false)
timePerChar Int? @default(50) @db.Int
triggerType TriggerType?
triggerOperator TriggerOperator?
triggerValue String?
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
updatedAt DateTime @updatedAt @db.Timestamp
OpenaiCreds OpenaiCreds @relation(fields: [openaiCredsId], references: [id], onDelete: Cascade)
openaiCredsId String
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
instanceId String
OpenaiSetting OpenaiSetting[]
}
model OpenaiSetting {
id String @id @default(cuid())
expire Int? @default(0) @db.Int
keywordFinish String? @db.VarChar(100)
delayMessage Int? @db.Int
unknownMessage String? @db.VarChar(100)
listeningFromMe Boolean? @default(false)
stopBotFromMe Boolean? @default(false)
keepOpen Boolean? @default(false)
debounceTime Int? @db.Int
ignoreJids Json?
splitMessages Boolean? @default(false)
timePerChar Int? @default(50) @db.Int
speechToText Boolean? @default(false)
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
updatedAt DateTime @updatedAt @db.Timestamp
OpenaiCreds OpenaiCreds? @relation(fields: [openaiCredsId], references: [id])
openaiCredsId String @unique
Fallback OpenaiBot? @relation(fields: [openaiIdFallback], references: [id])
openaiIdFallback String? @db.VarChar(100)
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
instanceId String @unique
}
model Template { model Template {
id String @id @default(cuid()) id String @id @default(cuid())
templateId String @unique @db.VarChar(255) templateId String @unique @db.VarChar(255)
@ -492,103 +334,6 @@ model Template {
instanceId String instanceId String
} }
model Dify {
id String @id @default(cuid())
enabled Boolean @default(true)
description String? @db.VarChar(255)
botType DifyBotType
apiUrl String? @db.VarChar(255)
apiKey String? @db.VarChar(255)
expire Int? @default(0) @db.Int
keywordFinish String? @db.VarChar(100)
delayMessage Int? @db.Int
unknownMessage String? @db.VarChar(100)
listeningFromMe Boolean? @default(false)
stopBotFromMe Boolean? @default(false)
keepOpen Boolean? @default(false)
debounceTime Int? @db.Int
ignoreJids Json?
splitMessages Boolean? @default(false)
timePerChar Int? @default(50) @db.Int
triggerType TriggerType?
triggerOperator TriggerOperator?
triggerValue String?
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
updatedAt DateTime @updatedAt @db.Timestamp
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
instanceId String
DifySetting DifySetting[]
}
model DifySetting {
id String @id @default(cuid())
expire Int? @default(0) @db.Int
keywordFinish String? @db.VarChar(100)
delayMessage Int? @db.Int
unknownMessage String? @db.VarChar(100)
listeningFromMe Boolean? @default(false)
stopBotFromMe Boolean? @default(false)
keepOpen Boolean? @default(false)
debounceTime Int? @db.Int
ignoreJids Json?
splitMessages Boolean? @default(false)
timePerChar Int? @default(50) @db.Int
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
updatedAt DateTime @updatedAt @db.Timestamp
Fallback Dify? @relation(fields: [difyIdFallback], references: [id])
difyIdFallback String? @db.VarChar(100)
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
instanceId String @unique
}
model Flowise {
id String @id @default(cuid())
enabled Boolean @default(true)
description String? @db.VarChar(255)
apiUrl String? @db.VarChar(255)
apiKey String? @db.VarChar(255)
expire Int? @default(0) @db.Int
keywordFinish String? @db.VarChar(100)
delayMessage Int? @db.Int
unknownMessage String? @db.VarChar(100)
listeningFromMe Boolean? @default(false)
stopBotFromMe Boolean? @default(false)
keepOpen Boolean? @default(false)
debounceTime Int? @db.Int
ignoreJids Json?
splitMessages Boolean? @default(false)
timePerChar Int? @default(50) @db.Int
triggerType TriggerType?
triggerOperator TriggerOperator?
triggerValue String?
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
updatedAt DateTime @updatedAt @db.Timestamp
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
instanceId String
FlowiseSetting FlowiseSetting[]
}
model FlowiseSetting {
id String @id @default(cuid())
expire Int? @default(0) @db.Int
keywordFinish String? @db.VarChar(100)
delayMessage Int? @db.Int
unknownMessage String? @db.VarChar(100)
listeningFromMe Boolean? @default(false)
stopBotFromMe Boolean? @default(false)
keepOpen Boolean? @default(false)
debounceTime Int? @db.Int
ignoreJids Json?
splitMessages Boolean? @default(false)
timePerChar Int? @default(50) @db.Int
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
updatedAt DateTime @updatedAt @db.Timestamp
Fallback Flowise? @relation(fields: [flowiseIdFallback], references: [id])
flowiseIdFallback String? @db.VarChar(100)
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
instanceId String @unique
}
model IsOnWhatsapp { model IsOnWhatsapp {
id String @id @default(cuid()) id String @id @default(cuid())
remoteJid String @unique @db.VarChar(100) remoteJid String @unique @db.VarChar(100)
@ -645,51 +390,3 @@ model N8nSetting {
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
instanceId String @unique instanceId String @unique
} }
model Evoai {
id String @id @default(cuid())
enabled Boolean @default(true) @db.TinyInt()
description String? @db.VarChar(255)
agentUrl String? @db.VarChar(255)
apiKey String? @db.VarChar(255)
expire Int? @default(0) @db.Int
keywordFinish String? @db.VarChar(100)
delayMessage Int? @db.Int
unknownMessage String? @db.VarChar(100)
listeningFromMe Boolean? @default(false)
stopBotFromMe Boolean? @default(false)
keepOpen Boolean? @default(false)
debounceTime Int? @db.Int
ignoreJids Json?
splitMessages Boolean? @default(false)
timePerChar Int? @default(50) @db.Int
triggerType TriggerType?
triggerOperator TriggerOperator?
triggerValue String?
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
updatedAt DateTime @updatedAt @db.Timestamp
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
instanceId String
EvoaiSetting EvoaiSetting[]
}
model EvoaiSetting {
id String @id @default(cuid())
expire Int? @default(0) @db.Int
keywordFinish String? @db.VarChar(100)
delayMessage Int? @db.Int
unknownMessage String? @db.VarChar(100)
listeningFromMe Boolean? @default(false)
stopBotFromMe Boolean? @default(false)
keepOpen Boolean? @default(false)
debounceTime Int? @db.Int
ignoreJids Json?
splitMessages Boolean? @default(false)
timePerChar Int? @default(50) @db.Int
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
updatedAt DateTime @updatedAt @db.Timestamp
Fallback Evoai? @relation(fields: [evoaiIdFallback], references: [id])
evoaiIdFallback String? @db.VarChar(100)
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
instanceId String @unique
}

View File

@ -16,7 +16,6 @@ type ChannelDataType = {
eventEmitter: EventEmitter2; eventEmitter: EventEmitter2;
prismaRepository: PrismaRepository; prismaRepository: PrismaRepository;
cache: CacheService; cache: CacheService;
chatwootCache: CacheService;
baileysCache: CacheService; baileysCache: CacheService;
providerFiles: ProviderFiles; providerFiles: ProviderFiles;
}; };
@ -61,7 +60,6 @@ export class ChannelController {
data.eventEmitter, data.eventEmitter,
data.prismaRepository, data.prismaRepository,
data.cache, data.cache,
data.chatwootCache,
data.baileysCache, data.baileysCache,
data.providerFiles, data.providerFiles,
); );
@ -73,7 +71,6 @@ export class ChannelController {
data.eventEmitter, data.eventEmitter,
data.prismaRepository, data.prismaRepository,
data.cache, data.cache,
data.chatwootCache,
data.baileysCache, data.baileysCache,
data.providerFiles, data.providerFiles,
); );

View File

@ -38,11 +38,10 @@ export class BusinessStartupService extends ChannelStartupService {
public readonly eventEmitter: EventEmitter2, public readonly eventEmitter: EventEmitter2,
public readonly prismaRepository: PrismaRepository, public readonly prismaRepository: PrismaRepository,
public readonly cache: CacheService, public readonly cache: CacheService,
public readonly chatwootCache: CacheService,
public readonly baileysCache: CacheService, public readonly baileysCache: CacheService,
private readonly providerFiles: ProviderFiles, private readonly providerFiles: ProviderFiles,
) { ) {
super(configService, eventEmitter, prismaRepository, chatwootCache); super(configService, eventEmitter, prismaRepository);
} }
public stateConnection: wa.StateConnection = { state: 'open' }; public stateConnection: wa.StateConnection = { state: 'open' };

View File

@ -52,7 +52,6 @@ import {
StatusMessage, StatusMessage,
TypeButton, TypeButton,
} from '@api/dto/sendMessage.dto'; } from '@api/dto/sendMessage.dto';
import { chatwootImport } from '@api/integrations/chatbot/chatwoot/utils/chatwoot-import-helper';
import * as s3Service from '@api/integrations/storage/s3/libs/minio.server'; import * as s3Service from '@api/integrations/storage/s3/libs/minio.server';
import { ProviderFiles } from '@api/provider/sessions'; import { ProviderFiles } from '@api/provider/sessions';
import { PrismaRepository, Query } from '@api/repository/repository.service'; import { PrismaRepository, Query } from '@api/repository/repository.service';
@ -64,7 +63,6 @@ import { CacheEngine } from '@cache/cacheengine';
import { import {
AudioConverter, AudioConverter,
CacheConf, CacheConf,
Chatwoot,
ConfigService, ConfigService,
configService, configService,
ConfigSessionPhone, ConfigSessionPhone,
@ -229,11 +227,10 @@ export class BaileysStartupService extends ChannelStartupService {
public readonly eventEmitter: EventEmitter2, public readonly eventEmitter: EventEmitter2,
public readonly prismaRepository: PrismaRepository, public readonly prismaRepository: PrismaRepository,
public readonly cache: CacheService, public readonly cache: CacheService,
public readonly chatwootCache: CacheService,
public readonly baileysCache: CacheService, public readonly baileysCache: CacheService,
private readonly providerFiles: ProviderFiles, private readonly providerFiles: ProviderFiles,
) { ) {
super(configService, eventEmitter, prismaRepository, chatwootCache); super(configService, eventEmitter, prismaRepository);
this.instance.qrcode = { count: 0 }; this.instance.qrcode = { count: 0 };
this.messageProcessor.mount({ this.messageProcessor.mount({
onMessageReceive: this.messageHandle['messages.upsert'].bind(this), // Bind the method to the current context onMessageReceive: this.messageHandle['messages.upsert'].bind(this), // Bind the method to the current context