OneUptime 工作流组件全景指南:从 API、AI 到数据组件的选型与实现机制
2026/9/17 3:30:28 网站建设 项目流程

OneUptime 工作流组件全景指南:从 API、AI 到数据组件的选型与实现机制

【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime

本篇以 OneUptime 官方文档的 Workflow 组件目录(App/FeatureSet/Docs/Content/da/workflows/components.md)为主体,完整覆盖触发器之后可添加的每一类组件(API、AI、Webhook、Slack/Teams/Discord/Telegram/Email、Custom Code、JSON、Conditions、Delay、Log、Execute Workflow 以及 OneUptime 数据组件)的用途、设置项、输出端口与选型规则,并结合 RunWorkflow.ts、Component.ts 与 AI.md 等仓库源码,深入解析组件参数模型、执行路径与输出值的流转机制,帮助你既能照目录配置组件,也能读懂底层实现。

组件(Components)是什么

组件是触发器(Trigger)之后添加的构建块。每个组件只做一件事——发一条消息、调一个 API、判断一个条件——然后连接到下一个组件。组件目录页回答"有哪些组件、每个组件能做什么",而如何在画布上添加与连线,见 authoring.md。

从源码结构看,画布上每个节点都携带一份统一的元数据模型。Component.ts 定义了NodeDataProp接口:每个节点包含metadata/metadataId(组件定义)、arguments(输入参数)、returnValues(输出值)以及componentType(Trigger 或 Component 两类)。Argument定义中还有一个值得注意的字段isSensitive:当其为 true 时,运行时传给组件的仍是真实值,但该参数在工作流日志中的记录会被替换为脱敏标记——这是组件级敏感参数(如令牌)不落盘的原理依据。

API 组件:调用任意 HTTP 接口

向任意 URL 发起 HTTP 请求,是覆盖面最广的组件。

设置项

  • MethodGETPOSTPUTPATCHDELETE
  • URL— 要调用的地址。
  • Headers— 随请求发送的请求头。
  • BodyPOST/PUT/PATCH时的请求体。

输出端口

  • Succes(成功)— 调用成功(2xx 响应)时触发,向下游传递状态码、响应头和响应体。
  • Fejl(错误)— 网络失败或非 2xx 响应时触发,传递错误信息。

适用场景:任何外部 API、你自己的管理端点,或任何没有专属组件的集成。文档中给出的取舍规则很实用:需要读取响应就用 API;只想发一条消息就走 Webhook(出站)——后者是 API 组件的简化版,只向 URL 发送一个 JSON body,属于"发射后不管"(fire and forget)场景。

在仓库中,Webhook 组件有独立的实现文档 Webhook.md,其请求发送逻辑最终由 RunStep.ts 逐步执行。

AI 组件:Generate Text with AI

该组件基于一段 Prompt 和可选的 JSON Context 生成一个文本响应。组件使用项目配置好的默认 LLM 提供商;若不存在则回退到安装级别的全球(全局)提供商。提供商的凭据与端点是集中配置的,不是工作流的参数——这一点在 AI.md 中被反复强调,目的是让凭据永远不成为工作流参数。

设置项

  • System Instructions— 可选的模型角色、语气与约束说明。
  • Prompt— 必填任务描述,可包含工作流变量和之前组件的输出。
  • Context— 可选 JSON,是你有意带入请求的数据。它被追加在一条显式的"消息结束信任标记"之后,并在消息剩余部分中按不可信数据处理。
  • Temperature01的变化度,默认0.2,以获得可预测的自动化输出。
  • Maximum Output Tokens14096,默认1024

硬性限制:System Instructions、Prompt 与序列化后的 Context 合计上限 50,000 字符;对提供商的请求最长 60 秒且只尝试一次;每个项目最多 3 个工作流 AI 请求并发执行。

输出值(AI.md 中的输出表与文档一致):

输出说明
Response模型生成的文本。
Provider/Model本次调用使用的提供商与模型配置。
Total Tokens/Completion Tokens提供商报告的用量。
LLM Log ID本次调用对应的计费 AI 日志条目 ID。
Fejl(错误)校验、访问、提供商、预算、计费或超时错误(如有)。

执行方式与安全边界:组件发出的是无工具(tool-free)的单次模型请求,不包含工具定义或提供商原生能力字段——因此模型无法自行查询 OneUptime、调用 API 或修改项目数据。除 OneUptime 固定的组件安全指令外,只有你配置的 System Instructions、Prompt 和 Context(工作流变量先解析)会被发送给提供商。AI.md 进一步说明:提供商层的附加参数仍可通过一份"仅限生成调优字段"的白名单生效,而能力与保留类字段(工具、网页搜索/数据源、非文本模态、多路选择、流式、请求留存标志、更高的输出 token 上限)会被丢弃,未知未来能力字段默认丢弃。配置的提供商/模型仍是信任边界,因为模型可能带有内在的提供商托管能力。

数据、日志与计费:System Instructions、Prompt、Context 与生成的 Response 会从该 AI 组件自身在自动执行日志中的参数与返回值记录里被脱敏,但在本次运行中仍可供下游组件使用;如果你把它插入其他组件,则适用那个组件的日志策略。每次调用都被计量:计费的全球提供商会从项目 AI 信用余额中扣减,且调用受项目每日自主 AI token 预算约束,预算耗尽后组件走错误路径而不再发起提供商请求。

安全使用原则:模型输出是不可信文本。对外沟通的草稿要先审阅,不要用自由文本 AI 输出单独授权工作流中的破坏性操作;如果必须让输出控制分支,应把 Prompt 约束到一小集合允许值,并用确定性工作流逻辑校验后再行动。

消息组件:Slack、Microsoft Teams、Discord、Telegram、Email

组件作用设置项前置条件
Slack在 Slack 频道发消息Kanal(频道)— 频道名,机器人须已在该频道;Besked(消息)— 支持 Slack 格式化先在Projektindstillinger(项目设置)→ Arbejdsområde(工作区)→ Slack下连接 Slack(见 workspace-connections/slack)
Microsoft Teams在 Teams 频道发消息Team and channel— 目标位置;Besked— 消息文本见 workspace-connections/microsoft-teams
Discord通过入站 Webhook URL 在 Discord 频道发消息入站 webhook URLDiscord 侧创建 webhook
Telegram用 bot token + chat ID 向 Telegram 聊天发消息bot token、chat IDTelegram bot
Email通过 OneUptime 发送邮件Til(收件人)— 邮箱地址;Emne(主题)— 主题行;Body(正文)— Markdown 或 HTML邮件从项目配置的发送方发出,见 emails/smtp

这些专属消息组件的价值在于更友好的错误处理和更清晰的日志——这正是"有专属块就用专属块"规则的原因(见文末选型规则)。

Custom Code:跑一段小 JavaScript

当其他块做不到时使用。

设置项

  • Kode(代码)— 你的 JavaScript。最后一个值(或 async 函数中 return 的值)成为该块的输出。
  • Arguments(参数)— 你可以传入的命名值。

输出:succes(你的返回值)与 fejl(任何异常)。

用途:在两个系统之间整形数据、做小计算,任何不值得单独一块的场景。更重的脚本应改用 Runbook。仓库中对这类 JavaScript 执行组件的实现说明见 JavaScript.md。

JSON 组件:文本与 JSON 互转

  • JSON → Text— 把 JSON 对象转成字符串,适用于下一块期望文本的场景。
  • Text → JSON— 把字符串解析成 JSON 对象,适用于数据以文本形式到达、需要读取其中字段的场景。

Conditions:If / Else 分支

按一次比较结果分支。在Tilføj komponent(添加组件)面板中该块叫If / Else,位于 Conditions 分类下。

设置项

  • Left value(左值)— 通常是之前某个块的输出。
  • Operator(操作符)==!=>>=<<=containsstarts withends with
  • Right value(右值)— 比较对象。

输出Ja(是)Nej(否)两个端口,把后续块接到你需要的分支上。

Delay 与 Log

  • Delay— 让工作流暂停固定时长再继续,用于给另一个系统留出追赶时间。
  • Log— 往运行日志写一行。无任何对外效果,只出现在工作流日志里供你阅读,适合调试。

Execute Workflow:调用另一个工作流

从当前工作流调用另一个工作流。被调用的工作流独立运行——你的工作流不等待它完成就继续。适合共享公共逻辑:建一个"向事件频道发消息"的工作流,之后任何需要通知该频道的工作流都可以调用它。

存在安全上限,防止工作流互相调用成环。细节见 configuration.md。

OneUptime 数据组件:读写平台自身的数据

对 OneUptime 中的每一种记录(monitor、incident、alert、status page、on-call policy 等等),添加组件面板都提供一套按类型名生成的组件——按类型名搜索即可。每个标题由记录类型生成,以 Monitor 为例:

  • Find One Monitor— 读取一条匹配查询的记录。
  • Find Many Monitors— 读取匹配查询的记录列表。
  • Create One Monitor— 从一个 JSON 对象创建一条记录。
  • Create Many Monitors— 从一个 JSON 数组创建多条记录。
  • Update One Monitor— 把写载荷应用到一条匹配记录。
  • Update Many Monitors— 把写载荷应用到匹配记录,最多 Limit 条。
  • Delete One Monitor— 删除一条匹配记录。
  • Delete Many Monitors— 删除匹配记录,最多 Limit 条。

同一套模式还提供三个触发器——On Create MonitorOn Update MonitorOn Delete Monitor,见 triggers.md。

两个重要约束:

  1. 一种类型只提供其模型允许的组件。只读类型只有两个 Find 组件,因此如果你在面板里找不到Delete One Monitor,就是该类型不允许删除,而不是你没找到。
  2. 这是工作流读写 OneUptime 数据的唯一正规途径。例如:CI 工具的 webhook 可以用Create One Incident打开一条带失败详情的事件。

数据组件的完整实现说明分布在 DatabaseFind.md、DatabaseCreate.md、DatabaseUpdate.md、DatabaseDelete.md 与 DatabaseTriggers.md。

与记录(Records)打交道:列名、Query 与 Skip/Limit

数据组件的每个字段都以记录自身的列名为键——与 API 使用的名称相同,而不是 dashboard 表单上的标签。ID 列叫_idid拼写作为别名在任何可以输入列名的地方被接受,但记录返回时给的是_id,所以"出站"读取时用_id

{ "_id": "00000000-0000-0000-0000-000000000000" }

Query决定组件作用于哪些记录。键是列,值是匹配条件:

{ "monitorType": "Website", "isEnabled": true }

查询始终限定在 workflow 所在的项目内——你无法触达其他项目的记录,也不需要自己在查询里写项目。

写载荷同样按键传入:Create One 的JSON Object、Create Many 的JSON Array、Update 组件的Data (JSON Object)

{ "name": "Checkout API", "monitorType": "Website" }

非列名的键会被忽略而不是拒绝——运行日志会列出被丢弃的键,字段没落地时先看日志。Select Fields(Find 组件与触发器上)用相同的列名键配合true值:{"_id": true, "name": true}

Skip 与 Limit是 Find Many、Update Many、Delete Many 上的两个数字字段——Skip: 0Limit: 100取前 100 条匹配。Limit 默认10,且在 Update Many / Delete Many 上它限制的是实际写入的记录数,而不只是返回数。所以Items Deleted: 10意味着删掉了 10 条,而不是 10 条匹配。打算改动超过 10 条时记得调大 Limit。

Succes 与 Fejl 报告的是查询是否执行了,而不是查到什么。零匹配的查询返回0并依然从 Succes 出去——那不是失败。想按"是否匹配到"分支,就把返回的计数读进一个If / Else块。

执行引擎:组件如何被运行

从源码结构看,工作流的执行入口是 RunWorkflow.ts(约 1300 行):执行器从节点数据中识别ComponentType.Trigger节点作为起点,然后沿连线逐节点解析arguments、调用对应组件实现、把结果写入returnValues。单个步骤的请求执行在 RunStep.ts 中完成;排队与调度由 QueueWorkflow.ts 管理;组件参数的日志脱敏由 SecretRedaction.ts 落实——这与前文isSensitive字段描述的"真实值运行、日志中替换为脱敏标记"机制相互印证。这也解释了文档中反复出现的两条行为:未连接错误路径会让该分支停止,以及输出端口(Succes/Fejl、Ja/Nej)决定执行流向——端口本质上是节点数据上的连接关系,由执行器按端口 ID 解析。

该用哪个组件?速查规则

  • 有专属块(Slack、Email、OneUptime 记录)就用它——错误处理更好、日志更清晰。
  • 其他外部 API 一律用API
  • 要基于你有意选择的工作流数据做摘要、分类或写文本草稿,用Generate Text with AI
  • 块与块之间整形数据,用Custom CodeJSON
  • 按值执行不同动作,用Conditions

继续深入

  • Workflow-variabler(变量) — 数据如何在块之间传递。
  • Workflow-kørsler & logfiler(运行与日志) — 查看每次运行中每个块做了什么。
  • Workflow-konfiguration & sikkerhed(配置与安全) — 限制、属主与机密。
  • Opret et workflow(创建工作流) — 在画布上添加与连接组件的操作细节。

【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询