跳转到主内容

n8n 工作流

AI-Public 通过生产 webhook 启动 n8n 工作流。当你在 AI-Public 之外也想启动一个自动化流程时,例如创建任务、更新 CRM 记录、启动报表流程或将表单数据传送到其他系统时,这很有用。

示例:组织网站上的新闻文章

假设组织已经创建了一个 n8n 工作流,在 WordPress 网站上发布新闻文章。在 AI-Public 中,你只需输入简短的一段文本,例如关于一次会议、项目或公开公告的几句话。用这段文本即可在 n8n 中启动工作流。

接着,n8n 工作流可以例如:

  1. 通过一个 LLM 节点将简短文本转换成整洁的初稿文本,并使用适合组织语调的提示。
  2. 使用第二个 LLM 节点生成合适的插图,例如使用机构的品牌颜色和易于识别的插图风格。
  3. 将文本与图片整理为博客文章并在 WordPress 网站上发布。

这样 AI-Public 与 n8n 就能协同工作:在 AI-Public 中,用户选择工作流并填写所需信息。随后 n8n 执行自动化步骤并确保新闻文章整洁地出现在网站上。

这个集成的作用是?

你可以从工作流总览中启动一个 n8n 工作流。仅生产 webhook、POST 和 Header Auth 是必须的。来自 n8n 的字段和回传可选,并且可以互相独立设置。

  • 如果工作流没有字段,则 webhook 会立即被调用。
  • 如果工作流有字段,则先打开一个表单。用户填写字段后再点击按钮启动工作流。
  • 填写的值作为 JSON 在 POST 请求中发送到 n8n 的 webhook。
  • 没有回传时,AI-Public 只会确认工作流已启动并在 n8n 中继续执行。窗口不会显示加载指示器,可以直接关闭。
  • 如果在注册时启用,该工作流可以将中间步骤或结束结果回传给 AI-Public。
  • 如果注册时启用批准,用户可以在 AI-Public 中直接做出选择。随后 n8n 会从等待步骤继续。

在 AI-Public 中创建 n8n 工作流

管理员按如下注册工作流:

  1. 前往 助手
  2. 打开 工作流
  3. 选择 新的 n8n 工作流
  4. 输入工作流的名称和 n8n 生产 URL。
  5. 设置 Header 认证,使用一个 header 名称和秘密 header 值。
  6. 来自 n8n 的回传 下只勾选实际在此 n8n 工作流中构建的部分:进度、批准和/或工作流结束。
  7. 如需,请添加需要在 POST 请求中一起发送的字段。
  8. 保存工作流。

三种回传选项默认都关闭。若后续在 n8n 中设置回调或批准步骤,请同时更新 AI-Public 中的注册。对话框因此知道是仅显示启动确认还是需要继续等待后续信号。

字段

  • 字段是可选的。
  • 每个字段有一个字段名和一个类型。
  • 支持的字段类型有:简短文本、长文本、数字、是/否、日期、单选和多选。
  • 单选多选 中添加可用选项。单选 将以紧凑的下拉列表显示;多选 显示复选框。所选的值将作为 JSON 体发送。
  • 必填字段在工作流启动前必须填写。
  • 字段名将成为发送到 n8n 的 JSON 体中的键。

在 n8n 中创建兼容工作流

  1. 在 n8n 中创建一个新的工作流。
  2. 先添加一个 Webhook 节点。
  3. 将该节点命名为严格的 Start workflow。下面的示例表达式使用此名称。
  4. HTTP Method 设置为 POST
  5. 选择 Authentication: Header Auth,并使用与 AI-Public 相同的 header 名称和值。
  6. RespondResponse Mode 设置为 Immediately
  7. Production URL 复制到 AI-Public 的 n8n 生产 url 字段中。不要使用带有 /webhook-test/ 的测试 URL。
  8. 启用工作流。

接收的数据在 body 下;技术集成数据在 body.integration 下。请勿在 Edit Fields、Set 或 Code 节点中删除。

JSON 体示例

如果你定义了字段名为 promptklantnaamdoelgroependatum,n8n 将会收到以下 JSON 体。AI-Public 会自动添加 integration 对象。

{
"prompt": "Maak een korte samenvatting van de aanvraag.",
"klantnaam": "Voorbeeldorganisatie",
"doelgroepen": ["inwoners", "medewerkers"],
"datum": "2026-09-22",
"integration": {
"runId": "chat-document-id",
"tenant": "default",
"callbackUrl": "https://europe-west1-ai-public-pro.cloudfunctions.net/n8nWorkflowCallback",
"callbackToken": "tijdelijk-token-voor-deze-uitvoering"
}
}

回调令牌仅与一次执行相关。请勿将其保存在日志、固定配置或其他系统中。

可选:回传进度与结束状态

AI-Public 只能显示 n8n 回传的内容。若在注册时开启了“中间进度回传”和/或“工作流结束回传”,请使用这些回调。

按如下方式设置每个回调节点:

  1. 选择 Method: POST

  2. URL 使用 Expression,并粘贴:

    {{ $('Start workflow').first().json.body.integration.callbackUrl }}
  3. 选择 Authentication: None

  4. 打开 Send Headers 并添加以下头部。

  5. 打开 Send Body,选择 Body Content Type: JSONSpecify Body: Using JSON

使用以下头部:

Authorization: Bearer {{ $('Start workflow').first().json.body.integration.callbackToken }}
Content-Type: application/json

例如在某个步骤开始时发送以下消息:

{
"tenant": "{{ $('Start workflow').first().json.body.integration.tenant }}",
"runId": "{{ $('Start workflow').first().json.body.integration.runId }}",
"eventId": "document-maken-gestart",
"type": "progress",
"executionId": "{{ $execution.id }}",
"step": {
"id": "document_maken",
"label": "Document maken"
},
"message": "Het document wordt gemaakt."
}
  • 对同一次执行中的每个事件请使用唯一的 eventId
  • 使用清晰的荷兰语 step.label;该文本会在应用中显示。
  • 如果你开启了 Het einde van de workflow melden,结束时请始终发送 type: "completed"type: "failed"type: "rejected"
  • completed 中如有需要,可附加一个 output 对象表示结果。
  • failed 时请附上一条易于理解的错误信息。执行在应用中也会随之停止。

可选:在应用中请求批准

若工作流在获得选择后才继续,可以使用 n8n 的 Wait 节点并在等待 Webhook 调用时触发。发送回调,类型为 type: "approval_required"

将 Wait 节点设置为 Resume: On Webhook CallHTTP Method: POSTAuthentication: Header Auth。选择与“Start workflow”相同的 Header Auth 凭据。在 Wait 节点之后添加一个 Switch 节点,在其中检查 {{ $json.body.decision }}

{
"tenant": "{{ $('Start workflow').first().json.body.integration.tenant }}",
"runId": "{{ $('Start workflow').first().json.body.integration.runId }}",
"eventId": "controle-document",
"type": "approval_required",
"executionId": "{{ $execution.id }}",
"step": {
"id": "controle_document",
"label": "Document controleren"
},
"approval": {
"question": "Mag de workflow doorgaan?",
"context": "Controleer eerst het gegenereerde document.",
"resumeUrl": "{{ $execution.resumeUrl }}",
"choices": [
{ "value": "approve", "label": "Goedkeuren" },
{ "value": "reject", "label": "Afwijzen" }
]
}
}

用户在执行窗口中看到选项。作出选择后,Wait 节点会返回包括 decision 在内的信息。之后可使用比如 Switch 节点来决定后续。

一个选项值只能包含字母、数字、_ 和 -,标签可以包含可读文本。

生产 callback-url 设置

AI-Public 的生产回调 URL 是:

https://europe-west1-ai-public-pro.cloudfunctions.net/n8nWorkflowCallback

不要把这个 URL 作为固定文本粘贴到每个回调节点中。在 HTTP Request 节点的 URL 字段中选择 Expression,并使用:

{{ $('Start workflow').first().json.body.integration.callbackUrl }}

AI-Public 因此会在每次启动时自动提供正确的生产 URL。上面的固定 URL 仅用于测试时检查表达式是否指向 AI-Public,而不是指向 AI-School 或 AI-Corporate。

callables triggerCustomN8nWorkflowtriggerN8nWorkflowresumeN8nWorkflow 由应用自行调用。你无需在 n8n 中配置这些 URL。

错误处理

failed 回调类型返回预期错误。对于意外的节点错误,请另建一个集中式错误工作流:

  1. 新建一个带有 Error Trigger 节点的工作流。

  2. 增加一个 HTTP Request 节点,方法为 POST

  3. URL 中填写以下固定生产 URL:

    https://europe-west1-ai-public-pro.cloudfunctions.net/n8nWorkflowExecutionFailed
  4. 选择 Authentication: None,并添加头部 n8n-handihow-name,其值为平台管理员的秘密默认值。

  5. 选择一个 JSON 体并粘贴:

{
"executionId": "{{ $json.execution.id }}",
"workflowId": "{{ $json.workflow.id }}",
"workflowName": "{{ $json.workflow.name }}",
"lastNode": "{{ $json.execution.lastNodeExecuted }}",
"message": "{{ $json.execution.error.message }}"
}
  1. 启用错误工作流。
  2. 打开普通工作流的设置,在 Error Workflow 中选择它。

Start workflow 之后立刻发送至少一个带 executionId: "{{ $execution.id }}" 的回调。只有这样,AI-Public 才能将意外错误与正确的执行相关联。

重要限制

  • 仅支持 webhook 触发。
  • 仅支持生产 webhook URL。
  • 测试 webhook URL(带 /webhook-test/)将被拒绝。
  • 仅支持 POST。
  • 仅支持通用 header 认证。
  • header 值在应用中被视为秘密。
  • 回传令牌与 resume-url 仅在服务端处理,普通用户不可直接访问。
  • 租户在服务端由已登录用户确定,不能通过浏览器传送的值来确定。

故障排除

  • 404 或未注册 webhook:在 n8n 中启用工作流并使用生产 URL。
  • 认证错误:检查 header 名称和值在两个系统中是否完全一致。
  • 数据缺失:检查应用中的字段名是否与 n8n 期望的键一致。
  • 在 n8n 中没有请求:检查工作流是否以 webhook 触发器开始并使用 POST。
  • 执行窗口持续运行:如果你开启了工作流结束回传,请检查 n8n 是否发送了最后的 completedfailedrejected 回调;若不需要回传,请将注册中的所有三项选项关闭。
  • 无进度显示:检查注册时是否开启了 中间进度回传,或 integration 对象是否保持不变,以及每个回调是否具有唯一的 eventId
  • 批准按钮无效:检查 Wait 节点、resumeUrl、header 认证以及 choices[].value 中允许的字符。
WhatsApp