使用 Node-RED 向 Microsoft Teams 发送消息
本教程演示如何将 OV20i 摄像头的检测通知直接发送到 Microsoft Teams 频道。您将学习如何设置自动警报,包含检测结果和可点击的图像链接,实时让团队了解生产状态。
您将构建的内容: 一个自动化系统,将 OV20i 检测结果(包括图像和合格/不合格状态)直接发布到 Microsoft Teams 频道。
实际应用场景: 当检测失败时即时收到通知,与远程团队共享检测图像,或在团队协作空间自动生成质量报告。
先决条件
- 已连接到工厂网络的 OV20i 摄像头
- 具有添加连接器权限的 Microsoft Teams 访问权限
- 用于接收通知的 Teams 频道
- OV20i 与 Microsoft Teams 之间的网络连接
- Node-RED 流程的基础知识
教程概述
我们将构建: 一个 Node-RED 流程,自动将检测结果发送到 Microsoft Teams,附带可点击的图像链接。
所需时间: 15-20 分钟
学习技能: Teams webhook 集成、Node-RED HTTP 请求、自动通知系统
步骤 1:设置 Microsoft Teams Webhook
1.1 访问您的 Teams 频道
- 打开 Microsoft Teams 并导航到检测通知频道
- 点击频道名称旁的 三点 (•••)
- 从下拉菜单中选择 “管理频道”
1.2 添加 Incoming Webhook 连接器
- 在频道管理菜单中点击 “连接器”
- 在连接器列表中 搜索 “Incoming Webhook”
- 点击 Incoming Webhook 选项旁的 “添加”
1.3 配置 Webhook 设置
- 名称:输入描述性名称(例如 “OV20i Inspection Alerts”)
- 图标:可选,上传自定义通知图标
- 点击 “创建” 生成 webhook
1.4 保存 Webhook URL
- 复制生成的 webhook URL — 这是 Node-RED 设置的关键
- 将 URL 保存在安全位置(后续步骤需要用到)
- 点击 “完成” 完成 Teams 设置
检查点: 您现在应该有一个类似于 https://yourcompany.webhook.office.com/webhookb2/...
的 webhook URL
步骤 2:访问 OV20i Node-RED
2.1 导航到 Node-RED
- 打开您的 OV20i Web 界面
- 进入 Recipe Editor > IO Block
- 点击 “Configure I/O” 进入 Node-RED 编辑器
2.2 准备工作区
- 在 Node-RED 画布上 清理出一块区域 用于 Teams 集成流程
- 识别左侧调色板 中可用节点
- 规划流程:触发 → 处理 → 发送到 Teams
步骤 3:构建 Node-RED 流程
3.1 添加所需节点
从调色板拖拽以下节点到画布:
- Inject 节点(用于测试)
- Function 节点(格式化消息)
- HTTP request 节点(发送到 Teams)
- Debug 节点(可选,用于调试)
3.2 连接节点
- 将 Inject 输出连接到 Function 输入
- 将 Function 输出连接到 HTTP request 输入
- 将 HTTP request 输出连接到 Debug 输入(可选)
流程结构:
Inject → Function → HTTP Request → Debug
步骤 4:配置 Function 节点
4.1 基本消息配置
- 双击 Function 节点 打开配置
- 替换默认代码 为以下基本消息格式:
// 基本 Teams 消息
msg.headers = {
"Content-Type": "application/json"
};
msg.payload = {
text: "You got a new message from your OV20i"
};
return msg;
4.2 带图像链接的高级消息
用于动态检测结果和可点击图像:
// 带检测图像的动态消息
let imageUrl = msg.payload.image_url;
msg.headers = {
"Content-Type": "application/json"
};
msg.payload = {
text: `Inspection Complete - [View Image](${imageUrl})`
};
return msg;
4.3 完整检测通知
包含完整检测详情:
// 完整检测通知
const inspectionData = msg.payload;
const imageUrl = inspectionData.image_url;
const result = inspectionData.result ? "PASS" : "FAIL";
const timestamp = new Date().toLocaleString();
msg.headers = {
"Content-Type": "application/json"
};
msg.payload = {
text: `🔍 **Inspection ${result}** - ${timestamp}\n\n[View Image](${imageUrl})`
};
return msg;
4.4 保存 Function 配置
- 点击 “完成” 保存 Function 节点
- 为节点命名,如 “Format Teams Message”
步骤 5:配置 HTTP Request 节点
5.1 设置 HTTP 请求
- 双击 HTTP request 节点 进行配置
- 设置方法:从下拉菜单选择 “POST”
- 设置 URL:粘贴步骤 1.4 中的 Teams webhook URL
- 设置返回类型:选择 “UTF-8 string”
5.2 其他设置
- 名称:输入 “Send to Teams” 以便识别
- Headers:留空(由 Function 节点处理)
- Payload:选择 “忽略”(由 Function 节点处理)
5.3 保存 HTTP 配置
- 点击 “完成” 保存 HTTP request 节点
- 确认 webhook URL 正确无误 — 这是成功的关键
步骤 6:测试集成
6.1 部署流程
- 点击右上角的 “Deploy” 按钮
- 等待显示 “Successfully deployed” 确认
- 检查节点是否有错误指示(红色三角)
6.2 使用 Inject 节点测试
- 点击 Inject 节点左侧的按钮
- 查看右侧调试面板是否有错误消息
- 确认消息是否出现在 Teams 频道
6.3 验证 Teams 通知
- 切换到 Microsoft Teams,检查目标频道
- 查找来自 OV20i 的测试消息
- 测试所有可点击链接是否正常工作
步骤 7:与检测流程集成
7.1 连接检测结果
实现每次检测后自动发送通知:
- 找到主检测流程(通常以 “All Block Outputs” 开头)
- 将 Teams 通知作为主流程的分支添加
- 连接在检测处理后、最终结果之前
7.2 集成示例流程
All Block Outputs → [Inspection Logic] → Final Pass/Fail
↓
Format Teams Message → Send to Teams
7.3 过滤通知(可选)
仅发送失败检测通知:
// 仅发送失败通知
const inspectionResult = msg.payload.result;
if (!inspectionResult) { // 仅当检测失败时
const imageUrl = msg.payload.image_url;
msg.headers = {
"Content-Type": "application/json"
};
msg.payload = {
text: `⚠️ **INSPECTION FAILED** - Immediate attention required\n\n[View Failed Image](${imageUrl})`
};
return msg;
} else {
return null; // 合格检测不发送消息
}
步骤 8:故障排除
8.1 常见问题
问题 | 现象 | 解决方案 |
---|---|---|
Teams 无消息 | 调试显示成功但无 Teams 通知 | 检查 webhook URL,验证网络连接 |
HTTP 错误 400 | 调试中显示请求错误 | 检查消息格式,确保 Content-Type 头正确 |
图像链接无法打开 | 消息显示但图像无法访问 | 确认图像 URL 对 Teams 用户网络可访问 |
流程未触发 | 预期无调试输出 | 检查流程连接,确认触发条件 |
8.2 调试流程
- 在每个步骤后添加调试节点,跟踪数据流
- 查看调试面板中的错误消息和数据结构
- 使用 Inject 节点测试,排除配置问题
- 如有需要,使用外部工具验证 webhook URL
8.3 网络连接
- 确保 OV20i 能访问互联网(摄像头上执行 ping 测试)
- 检查防火墙设置,避免阻止出站 HTTPS
- 验证 Teams webhook URL 的 DNS 解析
- 在与摄像头相同网络的浏览器中测试访问
成功!您的 Teams 集成已完成
您的 OV20i 摄像头现可:
✅ 自动发送通知 到 Microsoft Teams 频道
✅ 包含可点击的图像链接,即时查看检测结果
✅ 根据检测结果过滤通知
✅ 支持丰富格式,显示检测详情和时间戳
✅ 支持多个频道,满足不同通知需求
最佳实践
消息管理
- 为不同通知类型使用描述性频道名称
- 在消息中包含时间戳和工位标识
- 过滤消息,避免通知过载
- 生产部署前充分测试
安全注意事项
- 保护 webhook URL,视为敏感凭证
- 使用 HTTPS 进行所有通信(Teams 默认)
- 限制网络访问,仅允许必要服务
- 若泄露,定期更换 webhook URL
性能优化
- 批量发送通知,减少消息数量
- 针对网络故障使用适当重试逻辑
- 监控消息发送成功率
- 实施速率限制,避免 Teams API 限制
后续步骤
完成 Teams 集成后:
- 为不同检测类型创建不同通知频道
- 设置关键故障的升级流程
- 与其他团队工具集成(邮件、短信等)
- 构建结合 Teams 的监控仪表板
- 培训团队响应自动通知