Skip to content

Commit 0fd2e04

Browse files
Merge pull request #1448 from gomessguii/feature/n8n-chatbot
Add N8n integration with models, services, and routes
2 parents b1f3c5c + 4f2b0c4 commit 0fd2e04

File tree

13 files changed

+1706
-0
lines changed

13 files changed

+1706
-0
lines changed

prisma/mysql-schema.prisma

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ model Instance {
106106
Flowise Flowise[]
107107
FlowiseSetting FlowiseSetting?
108108
Pusher Pusher?
109+
N8n N8n[]
109110
}
110111

111112
model Session {
@@ -643,3 +644,52 @@ model IsOnWhatsapp {
643644
createdAt DateTime @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
644645
updatedAt DateTime @updatedAt @db.Timestamp
645646
}
647+
648+
model N8n {
649+
id String @id @default(cuid())
650+
enabled Boolean @default(true) @db.Boolean
651+
description String? @db.VarChar(255)
652+
webhookUrl String? @db.VarChar(255)
653+
basicAuthUser String? @db.VarChar(255)
654+
basicAuthPass String? @db.VarChar(255)
655+
expire Int? @default(0) @db.Integer
656+
keywordFinish String? @db.VarChar(100)
657+
delayMessage Int? @db.Integer
658+
unknownMessage String? @db.VarChar(100)
659+
listeningFromMe Boolean? @default(false) @db.Boolean
660+
stopBotFromMe Boolean? @default(false) @db.Boolean
661+
keepOpen Boolean? @default(false) @db.Boolean
662+
debounceTime Int? @db.Integer
663+
ignoreJids Json?
664+
splitMessages Boolean? @default(false) @db.Boolean
665+
timePerChar Int? @default(50) @db.Integer
666+
triggerType TriggerType?
667+
triggerOperator TriggerOperator?
668+
triggerValue String?
669+
createdAt DateTime? @default(now()) @db.Timestamp
670+
updatedAt DateTime @updatedAt @db.Timestamp
671+
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
672+
instanceId String
673+
N8nSetting N8nSetting[]
674+
}
675+
676+
model N8nSetting {
677+
id String @id @default(cuid())
678+
expire Int? @default(0) @db.Integer
679+
keywordFinish String? @db.VarChar(100)
680+
delayMessage Int? @db.Integer
681+
unknownMessage String? @db.VarChar(100)
682+
listeningFromMe Boolean? @default(false) @db.Boolean
683+
stopBotFromMe Boolean? @default(false) @db.Boolean
684+
keepOpen Boolean? @default(false) @db.Boolean
685+
debounceTime Int? @db.Integer
686+
ignoreJids Json?
687+
splitMessages Boolean? @default(false) @db.Boolean
688+
timePerChar Int? @default(50) @db.Integer
689+
createdAt DateTime? @default(now()) @db.Timestamp
690+
updatedAt DateTime @updatedAt @db.Timestamp
691+
Fallback N8n? @relation(fields: [n8nIdFallback], references: [id])
692+
n8nIdFallback String? @db.VarChar(100)
693+
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
694+
instanceId String @unique
695+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
-- CreateTable
2+
CREATE TABLE "N8n" (
3+
"id" TEXT NOT NULL,
4+
"enabled" BOOLEAN NOT NULL DEFAULT true,
5+
"description" VARCHAR(255),
6+
"webhookUrl" VARCHAR(255),
7+
"basicAuthUser" VARCHAR(255),
8+
"basicAuthPass" VARCHAR(255),
9+
"expire" INTEGER DEFAULT 0,
10+
"keywordFinish" VARCHAR(100),
11+
"delayMessage" INTEGER,
12+
"unknownMessage" VARCHAR(100),
13+
"listeningFromMe" BOOLEAN DEFAULT false,
14+
"stopBotFromMe" BOOLEAN DEFAULT false,
15+
"keepOpen" BOOLEAN DEFAULT false,
16+
"debounceTime" INTEGER,
17+
"ignoreJids" JSONB,
18+
"splitMessages" BOOLEAN DEFAULT false,
19+
"timePerChar" INTEGER DEFAULT 50,
20+
"triggerType" "TriggerType",
21+
"triggerOperator" "TriggerOperator",
22+
"triggerValue" TEXT,
23+
"createdAt" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
24+
"updatedAt" TIMESTAMP NOT NULL,
25+
"instanceId" TEXT NOT NULL,
26+
27+
CONSTRAINT "N8n_pkey" PRIMARY KEY ("id")
28+
);
29+
30+
-- CreateTable
31+
CREATE TABLE "N8nSetting" (
32+
"id" TEXT NOT NULL,
33+
"expire" INTEGER DEFAULT 0,
34+
"keywordFinish" VARCHAR(100),
35+
"delayMessage" INTEGER,
36+
"unknownMessage" VARCHAR(100),
37+
"listeningFromMe" BOOLEAN DEFAULT false,
38+
"stopBotFromMe" BOOLEAN DEFAULT false,
39+
"keepOpen" BOOLEAN DEFAULT false,
40+
"debounceTime" INTEGER,
41+
"ignoreJids" JSONB,
42+
"splitMessages" BOOLEAN DEFAULT false,
43+
"timePerChar" INTEGER DEFAULT 50,
44+
"createdAt" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
45+
"updatedAt" TIMESTAMP NOT NULL,
46+
"n8nIdFallback" VARCHAR(100),
47+
"instanceId" TEXT NOT NULL,
48+
49+
CONSTRAINT "N8nSetting_pkey" PRIMARY KEY ("id")
50+
);
51+
52+
-- CreateIndex
53+
CREATE UNIQUE INDEX "N8nSetting_instanceId_key" ON "N8nSetting"("instanceId");
54+
55+
-- AddForeignKey
56+
ALTER TABLE "N8n" ADD CONSTRAINT "N8n_instanceId_fkey" FOREIGN KEY ("instanceId") REFERENCES "Instance"("id") ON DELETE CASCADE ON UPDATE CASCADE;
57+
58+
-- AddForeignKey
59+
ALTER TABLE "N8nSetting" ADD CONSTRAINT "N8nSetting_n8nIdFallback_fkey" FOREIGN KEY ("n8nIdFallback") REFERENCES "N8n"("id") ON DELETE SET NULL ON UPDATE CASCADE;
60+
61+
-- AddForeignKey
62+
ALTER TABLE "N8nSetting" ADD CONSTRAINT "N8nSetting_instanceId_fkey" FOREIGN KEY ("instanceId") REFERENCES "Instance"("id") ON DELETE CASCADE ON UPDATE CASCADE;

prisma/postgresql-schema.prisma

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ model Instance {
106106
Flowise Flowise[]
107107
FlowiseSetting FlowiseSetting?
108108
Pusher Pusher?
109+
N8n N8n[]
110+
N8nSetting N8nSetting[]
109111
}
110112

111113
model Session {
@@ -643,3 +645,52 @@ model IsOnWhatsapp {
643645
createdAt DateTime @default(now()) @db.Timestamp
644646
updatedAt DateTime @updatedAt @db.Timestamp
645647
}
648+
649+
model N8n {
650+
id String @id @default(cuid())
651+
enabled Boolean @default(true) @db.Boolean
652+
description String? @db.VarChar(255)
653+
webhookUrl String? @db.VarChar(255)
654+
basicAuthUser String? @db.VarChar(255)
655+
basicAuthPass String? @db.VarChar(255)
656+
expire Int? @default(0) @db.Integer
657+
keywordFinish String? @db.VarChar(100)
658+
delayMessage Int? @db.Integer
659+
unknownMessage String? @db.VarChar(100)
660+
listeningFromMe Boolean? @default(false) @db.Boolean
661+
stopBotFromMe Boolean? @default(false) @db.Boolean
662+
keepOpen Boolean? @default(false) @db.Boolean
663+
debounceTime Int? @db.Integer
664+
ignoreJids Json?
665+
splitMessages Boolean? @default(false) @db.Boolean
666+
timePerChar Int? @default(50) @db.Integer
667+
triggerType TriggerType?
668+
triggerOperator TriggerOperator?
669+
triggerValue String?
670+
createdAt DateTime? @default(now()) @db.Timestamp
671+
updatedAt DateTime @updatedAt @db.Timestamp
672+
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
673+
instanceId String
674+
N8nSetting N8nSetting[]
675+
}
676+
677+
model N8nSetting {
678+
id String @id @default(cuid())
679+
expire Int? @default(0) @db.Integer
680+
keywordFinish String? @db.VarChar(100)
681+
delayMessage Int? @db.Integer
682+
unknownMessage String? @db.VarChar(100)
683+
listeningFromMe Boolean? @default(false) @db.Boolean
684+
stopBotFromMe Boolean? @default(false) @db.Boolean
685+
keepOpen Boolean? @default(false) @db.Boolean
686+
debounceTime Int? @db.Integer
687+
ignoreJids Json?
688+
splitMessages Boolean? @default(false) @db.Boolean
689+
timePerChar Int? @default(50) @db.Integer
690+
createdAt DateTime? @default(now()) @db.Timestamp
691+
updatedAt DateTime @updatedAt @db.Timestamp
692+
Fallback N8n? @relation(fields: [n8nIdFallback], references: [id])
693+
n8nIdFallback String? @db.VarChar(100)
694+
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
695+
instanceId String @unique
696+
}

src/api/integrations/chatbot/chatbot.controller.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
difyController,
55
evolutionBotController,
66
flowiseController,
7+
n8nController,
78
openaiController,
89
typebotController,
910
} from '@api/server.module';
@@ -97,6 +98,8 @@ export class ChatbotController {
9798

9899
await difyController.emit(emitData);
99100

101+
await n8nController.emit(emitData);
102+
100103
await flowiseController.emit(emitData);
101104
}
102105

src/api/integrations/chatbot/chatbot.router.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { Router } from 'express';
66

77
import { EvolutionBotRouter } from './evolutionBot/routes/evolutionBot.router';
88
import { FlowiseRouter } from './flowise/routes/flowise.router';
9+
import { N8nRouter } from './n8n/routes/n8n.router';
910

1011
export class ChatbotRouter {
1112
public readonly router: Router;
@@ -19,5 +20,6 @@ export class ChatbotRouter {
1920
this.router.use('/openai', new OpenaiRouter(...guards).router);
2021
this.router.use('/dify', new DifyRouter(...guards).router);
2122
this.router.use('/flowise', new FlowiseRouter(...guards).router);
23+
this.router.use('/n8n', new N8nRouter(...guards).router);
2224
}
2325
}

src/api/integrations/chatbot/chatbot.schema.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@ export * from '@api/integrations/chatbot/chatwoot/validate/chatwoot.schema';
22
export * from '@api/integrations/chatbot/dify/validate/dify.schema';
33
export * from '@api/integrations/chatbot/evolutionBot/validate/evolutionBot.schema';
44
export * from '@api/integrations/chatbot/flowise/validate/flowise.schema';
5+
export * from '@api/integrations/chatbot/n8n/validate/n8n.schema';
56
export * from '@api/integrations/chatbot/openai/validate/openai.schema';
67
export * from '@api/integrations/chatbot/typebot/validate/typebot.schema';

0 commit comments

Comments
 (0)