钉钉群机器人介绍
群机器人是钉钉群的高级扩展功能。群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步。目前,大部分机器人在被添加后,还需要进行Webhook配置,才可正常使用。
例如:
通过聚合GitHub,GitLab等源码管理服务,实现源码更新同步。
通过聚合Trello,JIRA等项目协调服务,实现项目信息同步。
另外,群机器人支持Webhook协议的自定义接入,支持更多可能性,例如:你可将运维报警通过自定义机器人聚合到钉钉群实现提醒功能。
如何添加
群主/群成员可以在电脑端通过如下的路径添加自定义机器人:
步骤一:【电脑钉钉】-【群聊】-【群设置】-【智能群助手】-【添加更多】-【添加机器人】-【自定义】-【添加】,编辑机器人名称和选择添加的群组。完成必要的安全设置(至少选择一种),勾选 我已阅读并同意《自定义机器人服务及免责条款》,点击“完成”即可。
步骤二: 复制出机器人的Webhook地址(格式如下截图),可用于向这个群发送消息。并点击【完成】,自定义机器人就添加成功了。
详细说明:https://ding-doc.dingtalk.com/doc?#/serverapi2/qf2nxq
机器人发送消息频率限制
每个机器人每分钟最多发送20条。如果超过20条,会限流10分钟。
DEMO
sendDingding('推送消息测试');
function sendDingding($content)
{
$data['text']['content'] = '【织梦猫】'.$content;
$data['msgtype'] = 'text';
$url = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxx';
$header = array(
'Content-Type:application/json;',
);
$postStr = json_encode($data,JSON_UNESCAPED_UNICODE);
$result = curlPost($url,$postStr,$header);
}
function curlPost($url = '', $postData = '', $header=array(),$options = array())
{
if (is_array($postData)) {
$postData = http_build_query($postData);
}
$ch = curl_init();
if(!empty($header)){
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置cURL允许执行的最长秒数
if (!empty($options)) {
curl_setopt_array($ch, $options);
}
//https请求 不验证证书和host
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
安全设置
关于安全设置的说明文档:https://open.dingtalk.com/document/robots/customize-robot-security-settings
加签
如安全设置勾选的是“加签”,那么需要在接口地址中加上timestamp
和sign
这两个参数:
list($s1, $s2) = explode(' ', microtime());
$timestamp = (float)sprintf('%.0f', (floatval($s1) + floatval($s2)) * 1000);
$sign = getSign($timestamp);
$url = 'https://oapi.dingtalk.com/robot/send?access_token=xxx';
$url .= "×tamp={$timestamp}&sign={$sign}";
function getSign($timestamp)
{
$secret = 'xxxxxxx'; //密钥
$signStr = $timestamp . "\n" . $secret;
$signStr = base64_encode(hash_hmac('sha256', $signStr, $secret,true));
return utf8_encode(urlencode($signStr));
}
企业机器人
钉钉根据不同的场景提供了很多类型的机器人,可以查看官网关于机器人的介绍:https://open.dingtalk.com/document/group/robot-overview
上面章节创建的机器人只能主动推送一些信息到群里,如果你希望@机器人,给机器人下达一些指令时,需要新建企业内部开发-机器人
。
创建企业机器人
登录钉钉开放平台,在应用开发菜单找到“企业内部开发”,然后在左侧菜单点击“机器人”:
点击右上角的“创建应用”:
在“开发管理”中填写“服务器出口IP”和“消息接收地址”:
点击“调试”并扫码进入调试群:
通用字段
conversationType = req_data['conversationType'] # 消息类型,1单聊,2群聊
conversationId = req_data['conversationId'] # 加密的会话id
msgId = req_data['msgId'] # 加密的消息id
senderNick = req_data['senderNick'] # 发送消息的人昵称
isAdmin = req_data['isAdmin'] # 是否为管理员
sessionWebhookExpiredTime = req_data['sessionWebhookExpiredTime'] # 当前会话的Webhook地址过期时间
createAt = req_data['createAt'] # 消息的时间戳
senderId = req_data['senderId'] # 加密的发送者id
chatbotUserId = req_data['chatbotUserId'] # 加密的机器人id
msgtype = req_data['msgtype'] # 消息类型,目前只支持text
text = req_data['text']['content'] # 消息的关键字
sessionWebhook = req_data['sessionWebhook'] # 当前会话的webhook地址
robotCode = req_data['robotCode'] # 消息机器人代码
post_timestamp = request.headers.get('Timestamp') # 消息timestamp
post_sign = request.headers.get('Sign') # 消息sign