OneUptime 集成 Discord:用内置工作流组件将事故通知推送到频道
OneUptime 集成 Discord用内置工作流组件将事故通知推送到频道【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime导读本指南讲解如何在 OneUptime 中通过内置的Discord 工作流组件把事故Incident的新建与更新消息自动推送到 Discord 频道。这是一条典型的出站Outbound集成OneUptime 借助 Discord 的 Incoming Webhook URL 向频道发送消息无需安装任何插件只需在可视化工作流画布上拖拽连接即可完成。读完本文你将掌握从创建 Discord Webhook、用全局变量保管密钥到构建事件驱动工作流、使用 API 组件做替代方案的完整实战方法并能结合仓库源码理解该组件的底层安全与实现原理。集成模式出站推送Discord 集成属于 OneUptime 集成体系中的出站模式——即OneUptime 里的某个事件应该在另一个工具中呈现。官方集成概览文档将出站模式的通用配方归纳为三步见 App/FeatureSet/Docs/Content/en/integrations/index.md构建一个以OneUptime 事件触发器开头的流程例如Incident → On Create添加一个调用对方 REST API 的API 组件或专用组件携带事故详情把 API 密钥保存为秘密全局变量确保密钥不会出现在流程或日志中。本集成的完整数据流如下OneUptime Incident → On Create ──► Discord component ──► message in your channel在整个集成目录中Discord 与 Telegram 一样都是典型的出站集成Outbound而 Slack、Microsoft Teams 则属于更深的原生工作区连接支持双向操作与自动事故频道需要时建议优先走工作区连接而非工作流。为什么它是最快的集成之一Discord 集成之所以开箱即用、搭建最快是因为 OneUptime 在自动化引擎中内置了名为Send Message to Discord的专用组件其组件元数据定义在 Common/Types/Workflow/Components/Discord.ts组件 IDDiscordSendMessageToChannel分类category为Discord输入参数webhook-urlDiscord Incoming Webhook URL必填、标记为敏感isSensitive: true和text消息正文必填长文本输出success与error两个出端口分别对应消息发送成功与发生错误。而真正执行发送的运行时实现位于 Common/Server/Types/Workflow/Components/Discord/SendMessageToChannel.ts它调用 Discord 官方Execute Webhook接口POST到 webhook URL请求体为{ content: args[text] }。注意在run()开始处若没有提供text参数会直接抛出BadDataException(Discord message not found)因此消息正文是强制项。前置准备OneUptime 工作流基本概念在动手之前先补充工作流中的三个基础概念详见 工作流组件文档 与 变量文档触发器Trigger流程的起点例如Incident → On Create表示当事故被创建时启动流程组件Component触发器之后添加的构建块每个块只做一件事——发消息、调 API、做判断——并与下一个块相连。Discord、API、Conditions条件判断都是组件变量Variable分全局变量与局部变量两类用于在块之间传递数据也是保管密钥的官方方式。第一步在 Discord 创建 Webhook打开目标频道的Edit Channel编辑频道→ Integrations集成→ Webhooks点击New Webhook新建 Webhook给它一个便于识别的名称例如OneUptime确认目标频道无误点击Copy Webhook URL复制 Webhook URL复制形如下面的地址https://discord.com/api/webhooks/WEBHOOK_ID/WEBHOOK_TOKEN关于这个地址有一个值得注意的仓库细节OneUptime 的 Discord 组件在发送前会对 Webhook URL 做域名白名单校验。在 Common/Server/Types/Workflow/Components/IncomingWebhookUtils.ts 中定义export const DISCORD_WEBHOOK_DOMAINS: Arraystring [ discord.com, discordapp.com, ];getPinnedWebhookUrl()会校验 URL 原始字符串必须落在discord.com/discordapp.com这两个域名上否则流程会通过onError停止并给出可操作的错误信息。这意味着你无法把该组件指向任意第三方 URL——这是出于 SSRF服务端请求伪造防护的设计比单纯维护黑名单更安全白名单无法被 DNS 重绑定、备用 IP 写法或重定向绕过。同时源码中发送请求还设置了doNotFollowRedirects: true避免重定向把数据交给其他主机控制者。第二步把 Webhook URL 存入全局变量推荐直接把 URL 粘贴进组件固然可行但官方强烈建议先存入全局变量理由是可以跨多个工作流复用并在单点轮换密钥。进入Workflows → Global Variables → Create将变量命名为DISCORD_WEBHOOK_URL把 URL 粘贴进 Content 字段打开Is Secret开关保存。全局变量的关键属性见 变量文档属性说明Name引用时使用的名字。至少 2 个字符不能有空格只允许字母、数字、连字符和下划线官方建议使用UPPER_SNAKE_CASE命名习惯Description可选的自由文本用于说明用途Secret开启后变量值会从运行日志run logs与步骤追踪step traces中抹除Content实际值属于长文本字段支持多行内容在任何工作流中引用全局变量使用{{global.variables.NAME}}语法工作流局部变量则使用{{local.variables.NAME}}。两点提醒变量名区分大小写{{global.variables.MyKey}}与{{global.variables.mykey}}是两个不同的变量未解析的引用会原样透传拼写错误或变量被重命名后引用不会报错、也不会变成空字符串而是把花括号原样发出去例如出现在 Discord 消息正文里同时运行日志会给出警告行——所以重命名被引用的变量之前要三思。第三步构建事故 → Discord 工作流打开Workflows → Create Workflow命名例如Incidents → Discord进入Builder画布添加Incident触发器触发条件设为On Create并将它重命名为Incident后续引用触发器输出时要用到该 ID添加Discord组件把它连接到触发器并填写参数Webhook URL{{variable.DISCORD_WEBHOOK_URL}}或直接粘贴 URLMessage New incident: {{Incident.title}}\n{{Incident.description}}点击Save启用工作流然后创建一条测试事故——消息应出现在你的 Discord 频道中。关于消息模板中的变量引用这里补充一下官方文档的准确用法触发器属于记录类型触发器运行时会返回一个名为model的值需要逐级下钻引用例如某触发器 ID 为incident-on-create-1时事故标题的引用写法是{{local.components.incident-on-create-1.returnValues.model.title}}。在画布编辑器中请优先使用组件值选择器picker插入这类引用它会生成运行器所期望的精确 ID避免手写出错。Discord 组件的消息字段同样支持变量参见变量在何处生效一节Slack、Teams、Discord、Telegram、Email 的消息文本都接受变量。发送失败时的分支处理Discord 组件有两个出端口Success成功发到频道与Error发送出错。从 SendMessageToChannel.ts 的实现可见网络失败或非 2xx 响应时返回值returnValues.error会携带错误消息并走 error 端口。建议把Error端口接到Log组件或Email通知上让发送失败本身也能被看到。替代方案使用 API 组件如果不想使用专用组件API组件完全可以实现相同效果。API 组件支持GET、POST、PUT、PATCH、DELETE方法配置如下Method方法POSTURL{{variable.DISCORD_WEBHOOK_URL}}Headers请求头Content-Type: application/jsonBody请求体{ content: New incident: {{Incident.title}} }当需要 Discord 更丰富的embed嵌入卡片时API 方案是更好的选择——只需在请求体中追加embeds数组即可对应 Discord Execute Webhook 接口的embeds参数。API 组件的输出包含Success与Error两个端口Success 在调用成功2xx时触发并透传状态、请求头与响应体Error 在网络失败或非 2xx 时触发并透传错误消息。一个使用上的差别值得说明专用 Discord 组件内部已经替你完成了把content字段封装进 JSON 请求体这一步而 API 组件需要你自己构造完整的 JSON 请求体。此外若你用 API 组件发送到 Discord请同样把 URL 保存在秘密全局变量中避免密钥进入日志。进阶技巧按严重程度过滤只在特定级别发消息用ConditionsIf / Else组件在 Discord 块之前做分支。Conditions 组件支持、!、、、、、contains、starts with、ends with等运算符对事故严重程度字段做比较Left value左值{{Incident.incidentSeverity.name}}Operator运算符Right value右值例如CriticalConditions 输出Yes与No两个分支把 Discord 组件接在 Yes 分支上即可实现仅严重级别为 Critical 时推送。覆盖完整生命周期On Update 工作流触发器Incident → On Create只覆盖创建事件。要同步发布**确认acknowledgement和解决resolution**消息可以再构建一个以Incident → On Update为触发器的工作流同样接 Discord 组件发到同一频道消息模板可以引用更新后的事故状态字段。在流程之间复用通知逻辑组件文档中还提到一种模式用Execute Workflow组件构建一个发到事故频道的共享工作流然后从任何需要通知频道的流程中调用它。调用方继续运行、不等待被调用流程结束。配合全局变量中的DISCORD_WEBHOOK_URL通知逻辑只需维护一处。安全与限制小结域名白名单Discord 组件只接受discord.com与discordapp.com域名的 Webhook URLIncomingWebhookUtils.ts禁止重定向发送时设置doNotFollowRedirects: true防止数据被转发给其他主机SendMessageToChannel.ts密钥脱敏把 URL 标记为 Secret 后值会在运行日志与步骤追踪中被抹除官方还提示变量可写但不可读回——content字段对 API 而言是只写的这正适合存放轮换的令牌消息必填text参数缺失时组件会直接报错请确保模板引用能正确解析未解析引用会原样透传务必检查运行日志。延伸阅读集成概览 —— 出站 / 入站两种模式与全部集成目录Telegram 集成 —— 相同的思路用于 Telegram工作流组件参考 —— Discord 及全部组件目录工作流变量 —— 全局变量、秘密变量与引用语法Discord 组件运行时实现SendMessageToChannel.tsDiscord 组件元数据定义Common/Types/Workflow/Components/Discord.ts【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Qt 5.14.2 ARM交叉编译踩坑全记录:从工具链到上板部署

Qt 5.14.2 ARM交叉编译踩坑全记录:从工具链到上板部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 16:38:28 阅读更多 →
CANN opbase 算子开发指南:IsComplexType 复数数据类型判断接口详解

CANN opbase 算子开发指南:IsComplexType 复数数据类型判断接口详解

CANN opbase 算子开发指南:IsComplexType 复数数据类型判断接口详解 【免费下载链接】opbase 本项目是CANN算子库的基础框架库,为算子提供公共依赖文件和基础调度能力。 项目地址: https://gitcode.com/cann/opbase 导读 IsComplexType 是 CANN …

2026/9/19 16:38:28 阅读更多 →
Unity视频播放插件AVPro Video免费版与收费版选型指南

Unity视频播放插件AVPro Video免费版与收费版选型指南

在Unity项目里做视频播放,绕不开的一个插件就是AVPro Video。我最早接触它是在一个展厅互动项目上,当时用Unity自带的VideoPlayer播放4K宣传片,在PC上跑得好好的,一打包到安卓一体机就各种卡顿、音画不同步,折腾了整整…

2026/9/19 16:38:28 阅读更多 →

最新新闻

BiliBiliToolPro:如何用一套实用的B站自动任务接管12项日常差事

BiliBiliToolPro:如何用一套实用的B站自动任务接管12项日常差事

BiliBiliToolPro:如何用一套实用的B站自动任务接管12项日常差事 【免费下载链接】BiliBiliToolPro B 站(bilibili)自动任务工具,支持docker、青龙、k8s等多种部署方式。全面拥抱AI。敏感肌也能用。 项目地址: https://gitcode.c…

2026/9/19 17:27:50 阅读更多 →
CPF与UPF低功耗设计选型指南:语法差异、工具支持与实战避坑

CPF与UPF低功耗设计选型指南:语法差异、工具支持与实战避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 17:27:50 阅读更多 →
多目标决策实战:用TOPSIS与Python从决策矩阵到排序分析

多目标决策实战:用TOPSIS与Python从决策矩阵到排序分析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 17:27:50 阅读更多 →
可计算的人工智能定义:从图灵测试到智能体评分

可计算的人工智能定义:从图灵测试到智能体评分

简介:这是一份围绕“人工智能的定义”展开的教学课件,适合高校人工智能、计算机相关专业学生及入门学习者用于理解AI基本概念,也可作为教师备课参考。内容从智能本质的探讨切入,梳理认知科学中的思维理论、强调知识作用的知识阈值…

2026/9/19 17:27:50 阅读更多 →
tsParticles NeonCity 调色板完整指南:安装、配色与源码实现解析

tsParticles NeonCity 调色板完整指南:安装、配色与源码实现解析

tsParticles NeonCity 调色板完整指南:安装、配色与源码实现解析 【免费下载链接】tsparticles tsParticles - Easily create highly customizable JavaScript particles effects, confetti explosions and fireworks animations and use them as animated backgrou…

2026/9/19 17:27:50 阅读更多 →
AI语言基因编辑技术解决学术查重难题

AI语言基因编辑技术解决学术查重难题

1. 项目背景与行业痛点学术写作领域长期存在一个结构性矛盾:研究者需要大量引用前人成果来支撑自己的观点,但查重系统却将这种必要的学术传承判定为"抄袭"。传统降重方法就像用美工刀做显微手术——要么粗暴替换同义词导致语义失真&#xff0c…

2026/9/19 17:26:49 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/19 3:59:36 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/19 3:53:08 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/19 4:02:43 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →