跳转到主内容

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 name 和 secret header value 设置 Header authentication。
  6. 在 来自 n8n 的回调 下,只勾选该 n8n 工作流中真正实现的部分:进度、审批和/或工作流结束。
  7. 如有需要,添加要在 POST 请求中传递的字段。
  8. 保存工作流。

这三个回调选项默认都是关闭的。如果你之后在 n8n 中添加了回调或审批步骤,也要同步更新 AI-Public 中的注册信息。这样对话框才知道是只显示启动确认,还是要继续等待后续信号。

字段​

  • 字段是可选的。
  • 每个字段都有一个字段名和一种类型。
  • 支持的字段类型包括短文本、长文本、数字、是/否、日期、单选和多选。
  • 对于 单选 和 多选,需要添加可用选项。单选 会显示为紧凑的下拉列表;多选 会显示为复选框。所选的值会作为 JSON body 发送。
  • 必填字段必须在启动工作流前完成填写。
  • 字段名会成为发送到 n8n 的 JSON body 中的 key。

在 n8n 中创建兼容的工作流​

  1. 在 n8n 中创建一个新工作流。
  2. 添加一个 Webhook 节点作为第一个节点。
  3. 将该节点的名称精确设置为 Start workflow。下面的示例表达式使用了这个名称。
  4. 将 HTTP Method 设为 POST。
  5. 选择 Authentication: Header Auth,并使用与 AI-Public 中相同的 header 名称和 secret value。
  6. 将 Respond 或 Response Mode 设为 Immediately。
  7. 将 Production URL 复制到 AI-Public 中的 n8n productie-url 字段。不要使用带 /webhook-test/ 的测试 URL。
  8. 激活工作流。

接收到的数据位于 body 下;技术集成信息位于 body.integration 下。请不要在 Edit Fields、Set 或 Code 节点中删除它们。

JSON body 示例​

如果你定义了名为 prompt、klantnaam、doelgroepen 和 datum 的字段,n8n 可能会收到如下 JSON body。AI-Public 会自动添加 integration 对象。

{
"prompt": "为该请求撰写一个简短摘要。",
"klantnaam": "示例组织",
"doelgroepen": ["居民", "员工"],
"datum": "2026-09-22",
"integration": {
"runId": "chat-document-id",
"tenant": "default",
"callbackUrl": "https://europe-west1-ai-public-pro.cloudfunctions.net/n8nWorkflowCallback",
"callbackToken": "本次执行的临时令牌"
}
}

callback token 只对应一次执行。不要将它保存在日志、固定配置或其他系统中。

可选:回传进度和完成状态​

AI-Public 只能显示 n8n 回传的内容。仅当你在注册时启用了 Tussentijdse voortgang melden 和/或 Het einde van de workflow melden 时,才使用这些回调。

请按如下方式配置每个 callback node:

  1. 选择 Method: POST。

  2. 在 URL 旁点击 Expression,然后粘贴:

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

  4. 打开 Send Headers,并添加以下 header。

  5. 打开 Send Body,选择 Body Content Type: JSON 和 Specify Body: Using JSON。

使用以下 headers:

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": "文档正在生成。"
}
  • 同一次执行中的每个事件都要使用唯一的 eventId。
  • 使用清晰的荷兰语 step.label;该文本会显示在应用中。
  • 如果你启用了 Het einde van de workflow melden,结束时务必发送 type: "completed"、type: "failed" 或 type: "rejected"。
  • 在 completed 中可选地添加一个包含结果的 output 对象。
  • 在 failed 时附带一个易懂的错误信息。这样执行也会在应用中停止。

可选:在应用中请求审批​

当工作流只有在用户做出选择后才能继续时,请使用带 On Webhook Call 的 n8n Wait 节点。在 Wait 节点之前发送一个 type: "approval_required" 的回调:

将 Wait 节点设置为 Resume: On Webhook Call、HTTP Method: POST 和 Authentication: 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": "工作流可以继续吗?",
"context": "请先检查生成的文档。",
"resumeUrl": "{{ $execution.resumeUrl }}",
"choices": [
{ "value": "approve", "label": "Goedkeuren" },
{ "value": "reject", "label": "Afwijzen" }
]
}
}

用户会在执行窗口中看到这些选项。做出选择后,Wait 节点会收到 decision 等数据。然后可使用例如 Switch 节点来决定正确的后续流程。

选项值只能包含字母、数字、_ 和 -。标签可以使用普通可读文本。

设置生产环境 callback-url​

AI-Public 的生产环境 callback-url 为:

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

不要把这个 URL 作为固定文本写进每个 callback node。请在 HTTP Request 节点的 URL 字段中选择 Expression,并使用:

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

这样 AI-Public 会在每次启动时自动提供正确的生产环境 URL。上面的固定 URL 可用于测试时确认表达式是否指向 AI-Public,而不是 AI-School 或 AI-Corporate。

triggerCustomN8nWorkflow、triggerN8nWorkflow 和 resumeN8nWorkflow 这些 callables 会由应用自行调用。你不需要在 n8n 中配置这些 URL。

处理错误​

对于预期错误,使用类型为 failed 的回调返回。对于意外的节点错误,还要创建一个中央 Error Workflow:

  1. 创建一个包含 Error Trigger 节点的新工作流。

  2. 然后添加一个 HTTP Request 节点,将 Method 设为 POST。

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

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

  5. 选择 JSON body,并粘贴:

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

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

重要限制​

  • 仅支持 webhook 触发器。
  • 仅支持生产环境 webhook URL。
  • 带 /webhook-test/ 的测试 webhook URL 会被拒绝。
  • 仅支持 POST。
  • 仅支持通用 header authentication。
  • 应用会将 header value 视为机密。
  • callback token 和 resume URL 仅在服务端处理,用户无法直接访问。
  • tenant 由服务端根据已登录用户确定,而不是由浏览器传入的值决定。

排查问题​

  • 404 或 webhook 未注册:请在 n8n 中激活工作流并使用生产环境 URL。
  • 认证错误:检查两个系统中的 header name 和 value 是否完全一致。
  • 数据缺失:检查应用中的字段名是否与 n8n 期望的 key 一致。
  • n8n 中没有请求:检查工作流是否以 webhook trigger 开始并使用 POST。
  • 执行窗口一直在转动:如果你已启用 Het einde van de workflow melden,请检查 n8n 是否发送了最后的 completed、failed 或 rejected callback。如果你不期望任何回调,请在注册时关闭这三个选项。
  • 没有显示进度:检查注册时是否启用了 Tussentijdse voortgang melden,integration 对象是否仍然保留,以及每个 callback 是否都有唯一的 eventId。
  • 审批按钮无效:检查 Wait 节点、resumeUrl、header authentication 以及 choices[].value 中允许的字符。