Telegram 提供了创建 Telegram Bots 的可能性,这些机器人被视为第三方应用程序。因此,在本教程中,我们将演示如何创建 Telegram Bot
并配置 ThingsBoard 规则引擎,以便能够使用 Rest API 调用扩展将通知发送到 Telegram App。
本教程基于创建和清除警报教程及其用例。我们将重用上述教程中的规则链,并将添加更多规则节点以与 Telegram 集成
假设您的设备使用 DHT22 传感器收集温度读数并将其推送到 ThingsBoard。DHT22 传感器适用于 -40 至 80°C 的温度读数。如果温度超出正常范围,我们希望生成警报,并在创建警报时向 Telegram App 发送通知。
在本教程中,我们将配置 ThingsBoard 规则引擎以:
如果创建了警报,则向用户发送消息通知。
使用 Script Transform 节点将当前警报类型及其发起者添加到消息正文中。
我们假设您已完成以下指南并阅读了下面列出的文章:
入门指南。
规则引擎概述。
创建和清除警报指南。
在本节中,我们将解释本教程中每个节点的用途:
节点 A:转换脚本节点。
此节点将用于创建电报消息通知的主体。
节点 B:REST API 调用节点。
此节点将电报消息有效负载发送到配置的 REST 端点。在我们的例子中,它是 Telegram REST API。
BotFather是主要的机器人,可帮助您创建新机器人并更改其设置。
机器人创建完成后,您可以为新机器人生成授权令牌。令牌是一个字符串,看起来像这样 - '110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw',这是授权机器人所必需的。
先决条件:
ThingsBoard 已启动并正在运行
Telegram 机器人已创建
在下一步中,我们需要检索聊天 ID。需要聊天 ID 才能通过 HTTP API 发送消息。
有几种获取聊天 ID 的方法:
首先,您需要向您的机器人发送一些消息:
其中ThingsBoard_Bot是 Telegram 机器人的名称。
在私人聊天中;
在您的机器人被添加为成员的组中。
接下来,打开您的网络浏览器并输入以下 URL:
1
2
3
4
5https://api.telegram.org/bot"YOUR_BOT_TOKEN"/getUpdates"YOUR_BOT_TOKEN" has to be replaced by the authentication token of your bot, e.g.:
https://api.telegram.org/bot110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw/getUpdates
从输出数据中,您可以找到字段“id”。这就是所谓的 chat_id。
第一个选项:
第二个选项:
之后,您可以开始配置规则引擎以使用 Rest API 调用扩展。
在本教程中,我们使用了创建和清除警报教程中的规则链。我们通过添加上面消息流部分中描述的节点来修改规则链创建和清除警报, 并将此规则链重命名为:创建/清除警报并向电报发送通知。
以下屏幕截图显示了上述规则链的外观:
创建/清除警报并向 Telegram 发送通知:
根规则链:
以下部分将向您展示如何从头开始修改此规则链。
在此规则链中,您将创建 2 个节点,这将在以下部分中进行解释:
添加Transform Script节点并将其连接到关系类型为Created的Create Alarm节点。 该节点将用于创建消息通知的正文。 正文模板必须有 2 个参数:
这是出站消息的示例:
聊天ID;
文本。
{"chat_id" : "PUT YOUR CHOSEN CHAT_ID", "text" : "SOME MESSAGE YOU WANT TO RECEIVE"}
为此,请使用以下脚本:
1
2
3
4 var newMsg ={};
newMsg.text = '"' + msg.name + '"' + " alarm was created for device: " + '"' + metadata.deviceName + '"';
newMsg.chat_id = 337878729; //has to be replaced by the actual chat id
return {msg: newMsg, metadata: metadata, msgType: msgType};
输入 Name 字段作为New telegram message。
添加REST API Call节点并将其连接到关系类型为Success的Transform Script节点。 该节点会将完整的消息有效负载发送到配置的 REST 端点。在我们的例子中,它是 Telegram REST API。 在本教程的范围内,我们将使用“/sendMessage”操作路径来引用 Telegram Bot API 来发送消息。
使用下表中显示的输入数据填写字段:
场地 | 输入数据 |
名称 | REST API 电报调用 |
端点 URL 模式 | https://api.telegram.org/bot"YOUR_BOT_TOKEN"/sendMessage |
请求方法 | 邮政 |
标头 | 内容类型 |
价值 | 应用程序/json |
为了发布设备遥测数据,我们将使用 Rest API、遥测上传 API。为此,我们需要从设备Thermostat Home复制设备访问令牌。
让 post temperature = 99。应该创建警报:
1
2
3curl -v -X POST -d '{"temperature":99}' http://localhost:8080/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"**you need to replace $ACCESS_TOKEN with actual device token**
您应该了解,警报更新时不会将消息发送到 Telegram 应用程序,只有在创建警报时才会发送消息。
最后,我们可以看到收到的消息具有正确的值:
第一个选项:
第二个选项:
此外,您还可以:
在创建和清除警报节点中配置警报详细信息功能。
通过添加警报小部件来配置仪表板以可视化警报。
为警报处理定义其他附加逻辑,例如发送电子邮件。