134 lines
4.5 KiB
TypeScript
134 lines
4.5 KiB
TypeScript
import { z, IntegrationDefinition } from '@botpress/sdk'
|
|
|
|
export default new IntegrationDefinition({
|
|
name: 'n8n',
|
|
title: 'n8n',
|
|
description: 'This integration allows you to interact with n8n workflows.',
|
|
version: '0.1.1',
|
|
readme: 'hub.md',
|
|
icon: 'icon.svg',
|
|
configuration: {
|
|
schema: z.object({
|
|
baseUrl: z
|
|
.string()
|
|
.url()
|
|
.title('Base URL')
|
|
.describe('The base URL of your n8n instance, for example https://example.app.n8n.cloud'),
|
|
accessKey: z
|
|
.string()
|
|
.min(1)
|
|
.title('Access Key')
|
|
.describe('Your n8n API key. Found in n8n under Settings → n8n API.'),
|
|
}),
|
|
},
|
|
actions: {
|
|
listWorkflows: {
|
|
title: 'List Workflows',
|
|
description: 'Retrieves workflows from n8n.',
|
|
input: {
|
|
schema: z.object({
|
|
active: z.boolean().optional().title('Active').describe('Filter by workflow active state'),
|
|
name: z.string().optional().title('Name').describe('Filter by workflow name'),
|
|
tags: z.string().optional().title('Tags').describe('Comma-separated tag filter'),
|
|
projectId: z.string().optional().title('Project ID').describe('Filter by project ID'),
|
|
excludePinnedData: z
|
|
.boolean()
|
|
.optional()
|
|
.default(true)
|
|
.title('Exclude Pinned Data')
|
|
.describe('Exclude pinned data from the response'),
|
|
limit: z
|
|
.number()
|
|
.int()
|
|
.max(250)
|
|
.optional()
|
|
.title('Limit')
|
|
.describe('Maximum number of workflows to return (1-250)'),
|
|
cursor: z.string().optional().title('Cursor').describe('Pagination cursor from a previous request'),
|
|
}),
|
|
},
|
|
output: {
|
|
schema: z.object({
|
|
data: z.array(z.any()).title('Workflows').describe('List of workflows returned by n8n'),
|
|
nextCursor: z
|
|
.string()
|
|
.optional()
|
|
.title('Next Cursor')
|
|
.describe('Cursor for fetching the next page of results'),
|
|
}),
|
|
},
|
|
},
|
|
getWorkflow: {
|
|
title: 'Get Workflow',
|
|
description: 'Retrieves a single workflow from n8n by ID.',
|
|
input: {
|
|
schema: z.object({
|
|
workflowId: z.string().min(1).title('Workflow ID').describe('The workflow ID'),
|
|
excludePinnedData: z
|
|
.boolean()
|
|
.optional()
|
|
.default(true)
|
|
.title('Exclude Pinned Data')
|
|
.describe('Exclude pinned data from the response'),
|
|
}),
|
|
},
|
|
output: {
|
|
schema: z.object({
|
|
workflow: z.any().title('Workflow').describe('The full workflow object returned by n8n'),
|
|
}),
|
|
},
|
|
},
|
|
triggerWorkflow: {
|
|
title: 'Trigger Workflow',
|
|
description: 'Resolves an n8n workflow webhook and posts data to it.',
|
|
input: {
|
|
schema: z.object({
|
|
workflowIdOrName: z.string().min(1).title('Workflow ID or Name').describe('The workflow ID or name'),
|
|
conversationId: z
|
|
.string()
|
|
.min(1)
|
|
.placeholder('{{ event.conversationId }}')
|
|
.title('Conversation ID')
|
|
.describe('The current Botpress conversation ID — use {{event.conversationId}}'),
|
|
payload: z
|
|
.record(z.string(), z.any())
|
|
.optional()
|
|
.default({})
|
|
.title('Payload')
|
|
.describe('The JSON payload to send to the workflow'),
|
|
}),
|
|
},
|
|
output: {
|
|
schema: z.object({
|
|
workflowId: z.string().optional().title('Workflow ID').describe('The ID of the triggered workflow'),
|
|
workflowName: z.string().optional().title('Workflow Name').describe('The name of the triggered workflow'),
|
|
response: z.any().optional().title('Response').describe('The response body returned by the n8n webhook'),
|
|
}),
|
|
},
|
|
},
|
|
},
|
|
events: {
|
|
n8nEvent: {
|
|
title: 'n8n event',
|
|
description: 'Triggered when n8n posts data back to Botpress.',
|
|
schema: z.object({
|
|
workflowId: z
|
|
.string()
|
|
.optional()
|
|
.title('Workflow ID')
|
|
.describe('The ID of the workflow that posted this event'),
|
|
workflowName: z
|
|
.string()
|
|
.optional()
|
|
.title('Workflow Name')
|
|
.describe('The name of the workflow that posted this event'),
|
|
data: z.record(z.string(), z.any()).title('Data').describe('Arbitrary data payload sent by the n8n workflow'),
|
|
}),
|
|
},
|
|
},
|
|
attributes: {
|
|
category: 'Developer Tools',
|
|
repo: 'botpress',
|
|
},
|
|
})
|