钉钉机器人报警-webhook

功能由来:

        工作中设置了对传感器的上下限报警,但是有时传感器在上下限来回波动,导致报警一直在发,之前绑定的是短信功能,短短2分钟几块钱没了。领导甚是心疼,决定后面用钉钉报警。

功能描述:

        根据报警来源,发出不同报警信息,并在群里艾特特定的人。

         没有限定我开发平台,最好windows,这里我将Linux和Windows的都发出来。

实现原理:

        钉钉群可以自定义机器人,生成一个url,并设定关键字(当然还有验证码,那个我没用到,所以没研究)。钉钉群创建方法见:很简单这里就不重复描述。

        https://blog.csdn.net/cen50958/article/details/92230109

        实现方法就是post json数据,使用curl命令即可。话不多说,show code!

Linux:

        解释一下,链接替换成自己生成那个,content需要包含你自己设置那个关键词,isAtAll意思是是否艾特群里所有人,atUserIds表示被艾特人的钉钉ID,atMobiles是被艾特人的电话。怎么样,简单吧!

#!/bin/bash

echo "start=="
curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text", 
     "text": {"content": "关键词:@phone"},
     "at":
     {
       "isAtAll": false,
       "atUserIds":["dingdingID"],
       "atMobiles":["电话"]
     }
    }'
echo "==>end"

Windows:

curl端也可以用curl,只是要单独下载,再将curl下的路径添加到系统环境变量中。具体可以参考链接:

Windows环境下curl的使用_是半半呀~的博客-CSDN博客_curl windows

使用curl的命令也和linux下差不多,只是windows的CMD命令中引号需要用"\"进行转义。于是大体的命令如下:

curl https://oapi.dingtalk.com/robot/send?access_token=xxxx  -H "Content-Type:application/json; charset=utf-8"  -d  "{\"text\": {\"content\":\"钉钉机器人群消息测试--from win10\"},\"msgtype\":\"text\"}"

但是出了问题,中文怎么都不能识别,是乱码。尝试过加charset=utf-8,将CMD命令的格式从chcp 639换成chcp 650001,但是都不行。windows端的curl命令,目前仅限英文。解决的小伙伴,可以私信我,万分感谢。

于是,我用QT写了一遍(在此感谢大佬,虽然你的链接我找不到了,遥寄对你的崇拜.....)

QNetworkAccessManager *mgr = new QNetworkAccessManager(this);
    const QUrl url(QStringLiteral("https://oapi.dingtalk.com/robot/send?access_token=xxxx"));
    QNetworkRequest request(url);
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");

    QJsonObject obj;
    QJsonObject obj1;
    obj1.insert("content", "钉钉机器人群消息测试--from QT win10");
    obj.insert("msgtype", "text");
    obj.insert("text", obj1);

    //obj["msgtype"] = "text";
    //obj["text"] = "value2";
    QJsonDocument doc(obj);
    QByteArray data = doc.toJson();
    // or
    // QByteArray data("{\"key1\":\"value1\",\"key2\":\"value2\"}");
    QNetworkReply *reply = mgr->post(request, data);

    QObject::connect(reply, &QNetworkReply::finished, [=](){
        if(reply->error() == QNetworkReply::NoError){
            QString contents = QString::fromUtf8(reply->readAll());
            qDebug() << contents;
        }
        else{
            QString err = reply->errorString();
            qDebug() << err;
        }
        reply->deleteLater();
    });

包含头文件:

#include <QNetworkAccessManager>
#include <QJsonObject>
#include <QJsonDocument>
#include <QNetworkReply>

结语:

     方法很简单,但是如果格式没对,或者没包含关键词会报对应的错误,对应解决就可以了。                      

补充:

        终于我还是自己找到了原因,是要win10系统CMD命令要支持UTF-8才行,Linux和QT本身是可以的。方法:windows设置--时间和语言--区域和语言--管理时间设置--更改系统区域设置,勾选Beta版支持UTF-8,然后重启即可。 感谢知乎提供的灵感,虽然帖子是考虑mount命令得出的解决办法,下面贴出链接:

https://zhuanlan.zhihu.com/p/46254792                                                             

                                                                                          此文仅此纪念苦逼又快乐的打工时光!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HayJack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值