钉钉机器人实现消息通知

前言:步骤

    1:首先,配置自定义机器人webhook。

    2:然后,获取webhook地址,这个地址十分重要。

    3:最后,使用封装好的,发消息通知类进行发消息。


一:配置自定义机器人

    1:建一个钉钉群,把你想通知消息的用户放进钉钉群。


    2:配置钉钉机器人

        ①:个人中心点击机器人管理

        阿群博客

        ②:选择自定义那一项

阿群博客

        ③:点击添加,选择刚才你创建要通知消息对的群

阿群博客

阿群博客

二:webhook地址

    点击上图完成,这个机器人对应的webhook地址(一般写到配置文件中):

    https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx


三:进行应用

    1:怎么发消息?

        post请求webhook地址,请求成功,就会发送消息到创建的消息提醒群。

        不同类型的消息,post的数据不一样,post数据有三个类型:一是消息类型:msgType; 二是消息内容(不同的消息类型消息内容不一样的);三是:发送的对象(是@所有人还是@指定用户)。

<?php  
function request_by_curl($remote_server, $post_string) {  
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL, $remote_server);
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array ('Content-Type: application/json;charset=utf-8'));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
    // 线下环境不用开启curl证书验证, 未调通情况可尝试添加该代码
    // curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    // curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $data = curl_exec($ch);
    curl_close($ch);                
    return $data;  
}  

$webhook = "https://oapi.dingtalk.com/robot/send?access_token=xxxxxx";
$message="我就是我, 是不一样的烟火";
$data = array ('msgtype' => 'text','text' => array ('content' => $message));
$data_string = json_encode($data);

$result = request_by_curl($webhook, $data_string);  echo $result;


    2:消息内容格式

        不同的消息格式,不同的参数,参数详情看官网

        ①text    

        ②link

        ③markdown

        ④整体跳转ActionCard类型

        ⑤独立跳转ActionCard类型

        ⑥FeedCard类型


    3:封装发消息的类,达到复用

<?php
namespace dingtalk;

class Robot
{
    public static function exec(string $msgType, array $content, array $atAll=[])
    {
        try{
            $paramArr = self::getParam($msgType, $content, $atAll);

            //应该写到配置文档
            $webhook = "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxe184e2e317cdd48f1ecd14daa";
            $postString = json_encode($paramArr);

            $resJson = self::curlPost($webhook, $postString);
            $resArr = json_decode($resJson, true);

            if($resArr['errcode'] !== 0){
                throw new \Exception("请求失败,return: {$resJson}");
            }

            return ['status'=>1, 'msg'=>'ok', 'data'=>[]];
        }catch(\Exception $e){
            return ['status'=>0, 'msg'=>$e->getMessage(), 'data'=>[]];
        }
    }

    private static function getParam(string $msgType, array $content, array $atAll)
    {
        if ( !in_array($msgType, ['text', 'link', 'markdown', 'actionCard', 'feedCard']) ) {
            throw new \Exception("消息类型错误");
        }

        $atFlag = empty($atAll) ? true : false;

        return [
            'msgtype'   => $msgType,
            $msgType    => $content,
            'at'        => ['atMobiles' => $atAll, 'isAtAll' => $atFlag,]
        ];
    }


    private static function curlPost(string $remote_server, string $post_string) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $remote_server);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array ('Content-Type: application/json;charset=utf-8'));
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        // 线下环境不用开启curl证书验证, 未调通情况可尝试添加该代码
        // curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
        // curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }
}

    4:应用

       代码git地址:https://github.com/KingWQ/thinkphp5.1-wq

    public function testDD()
    {
        $atAll = ['156xxxxxxxxx'];

        //1:test
        $textArr = ['content'=>'我就是我, 是不一样的烟火'];
        $res = Robot::exec('text', $textArr, $atAll);
        dump($res);

        //2:markdown
        $json = '{
    "title": "杭州天气",
    "text": "#### 杭州天气 @156xxxx8827\n> 9度,西北风1级,空气良89,相对温度73%\n\n> ![screenshot](http://hbimg.huabanimg.com/957eebfd8b126ff4b6b8668c7c9f2c280d0f5315dd81-vRqsCS_fw236)\n> ###### 10点20分发布 [天气](https://www.timedifferent.com/) \n"
}';
        $markdownArr =  json_decode($json, true);
        $res = Robot::exec('markdown', $markdownArr, $atAll);
        dump($res);


        //3: actionCard 整体跳转
        $json = '{
        "title": "乔布斯 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身",
        "text": "![screenshot](@lADOpwk3K80C0M0FoA) \n ### 乔布斯 20 年前想打造的苹果咖啡厅 \n Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划",
        "hideAvatar": "0",
        "btnOrientation": "0",
        "singleTitle": "阅读全文",
        "singleURL": "https://www.timedifferent.com"
    }';
        $cardArr =  json_decode($json, true);
        $res = Robot::exec('actionCard', $cardArr, $atAll);
        dump($res);

        //3.1 actionCard 独立跳转
        $json = '{
        "title": "乔布斯 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身",
        "text": "![screenshot](@lADOpwk3K80C0M0FoA) \n ### 乔布斯 20 年前想打造的苹果咖啡厅 \n Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划",
        "hideAvatar": "0",
        "btnOrientation": "0",
        "btns": [
            {
                "title": "内容不错",
                "actionURL": "https://www.timedifferent.com"
            },
            {
                "title": "不感兴趣",
                "actionURL": "https://www.timedifferent.com"
            }
        ]}';

        $cardArr =  json_decode($json, true);
        $res = Robot::exec('actionCard', $cardArr, $atAll);
        dump($res);

        //4:feedCard 类型
        $json = '{
        "links": [
            {
                "title": "时代的火车向前开", 
                "messageURL": "https://www.timedifferent.com", 
                "picURL": "http://hbimg.huabanimg.com/957eebfd8b126ff4b6b8668c7c9f2c280d0f5315dd81-vRqsCS_fw236"
            },
            {
                "title": "时代的火车向前开2", 
                "messageURL": "https://www.timedifferent.com", 
                "picURL": "http://hbimg.huabanimg.com/957eebfd8b126ff4b6b8668c7c9f2c280d0f5315dd81-vRqsCS_fw236"
            }
        ]}';
        $feedArr =  json_decode($json, true);
        $res = Robot::exec('feedCard', $feedArr, $atAll);
        dump($res);

    }

 

阿群博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论