钉钉也提供机器人,使用方法和企业微信虽然略有不同,但是最为简单的消息推送的使用方法大体类似,钉钉的机器人也是使用webhook接口用于消息的推送,非常适合将持续集成中的实时状态进行信息的共享,这篇文章介绍一下使用的具体方法。
添加机器人
相较于企业微信可以在群内创建一个或者多个机器人,现在钉钉的做法是在用户顶层上提供机器人管理的页面,点击个人头像,选择Robot Management选项
钉钉可以添加很多种类的机器人,这里选择Custom,通过webhook方式发送自定义消息
点击Add按钮
设定机器人名称,与群进行关联,并设定其他信息,与企业微信在群里创建有所不同,目前钉钉是整体对机器人进行管理然后与群进行关联。
为了避免被盗用乱发群短信,钉钉的自定义方式的机器人在使用上,有三种安全策略必选其一:
- Custom Keywords:包含特定内容的消息才能发送
- Additional Signature:签名
- IP Address:IP地址白名单(与企业微信的群机器人中的白名单类似)
这里为了简单演示选择Custom Keywords,并输入LiuMiaoMsg作为特定内容。
然后就创建了此群机器人,此时就可以获得webhook的地址了。
点击Finished按钮,在关联的群中即可看到此关联的机器人了
使用方法
创建此群聊机器人后,就可以直接使用Restful API以Json的格式进行消息的推送了。以curl命令为例,使用如下示例脚本即可进行验证
liumiaocn:robot liumiao$ cat demo_message_send.sh
#!/bin/sh
CHAT_WEBHOOK_URL='https://oapi.dingtalk.com/robot/send?access_token'
CHAT_CONTENT_TYPE='Content-Type: application/json'
echo "## demo: text: print hello liumiao"
curl "${CHAT_WEBHOOK_URL}=${CHAT_WEBHOOK_KEY}" \
-H "${CHAT_CONTENT_TYPE}" \
-d '
{
"msgtype": "text",
"text": {
"content": "[LiuMiaoMsg]: hello liumiao"
}
}' 2>/dev/null |jq .
liumiaocn:robot liumiao$
执行结果确认
liumiaocn:robot liumiao$ export CHAT_WEBHOOK_KEY=your_own_webhook_token_info
liumiaocn:robot liumiao$ sh demo_message_send.sh
## demo: text: print hello liumiao
{
"errcode": 0,
"errmsg": "ok"
}
liumiaocn:robot liumiao$
注:your_own_webhook_token_info使用自己的token信息进行替换
然后就可以看到推送的钉钉的消息内容了
注意的是钉钉在使用的时候消息发送的安全策略作为必须条件,本文示例中使用的方式是包含特定内容的方式,所以在发送的消息中必须包含此内容才可以,不然会提示类似如下的错误信息:
{
"errcode": 310000,
"errmsg": "keywords not in content"
}
如果选择其他的安全防护方式,没有满足条件时,返回的错误信息可能如下所示
// timestamp 无效
{
"errcode":310000,
"errmsg":"invalid timestamp"
}
// 签名不匹配
{
"errcode":310000,
"errmsg":"sign not match"
}
// IP地址不在白名单
{
"errcode":310000,
"errmsg":"ip X.X.X.X not in whitelist"
}
总结
企业微信的目前提供的机器人有三个特点,其一是虽然不依托与群而存在,但是也同样需要和群进行关联而进行消息推送,其二是直接将token作为URL中的一项参数传入,但是需要其他的安全设定比如包含特定内容、签名或者白名单,三是需要联网。
参考内容
https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq