钉钉群机器人的使用

钉钉群机器人介绍

群机器人是钉钉群的高级扩展功能。群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步。目前,大部分机器人在被添加后,还需要进行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

加签

如安全设置勾选的是“加签”,那么需要在接口地址中加上timestampsign这两个参数:

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 .= "&timestamp={$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

发表评论

邮箱地址不会被公开。 必填项已用*标注