PHP(golang)调用钉钉机器人

采用php代码调用钉钉机器人,只在工作日发送一些提醒

 

一、添加自定义机器人方法

您好,群主/群管理员可以在电脑端通过如下的路径添加自定义机器人:

步骤一:【电脑钉钉 】-【群聊】-【群设置】-【智能群助手】-【添加更多】-【添加机器人】-【自定义】-【添加】,编辑机器人名称和选择添加的群组。完成必要的安全设置(至少选择一种),勾选 我已阅读并同意《自定义机器人服务及免责条款》,点击“完成”即可。

步骤二:复制出机器人的Webhook地址(格式如下截图),可用于向这个群发送消息。并点击【完成】,自定义机器人就添加成功了。

更加详细的设置介绍,请参考链接:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq/9e91d73c


【温馨提示】:

1、若关闭【仅群主和群成员可管理】,群成员也是可以添加机器人

2、出于对于群信息的安全,安全设置必须要选择一项。

3、由于目前自定义机器人需要进行安全配置,需要在电脑端添加。手机端不支持添加自定义机器人哦。

4、如果设置或者自定义机器人遇到问题可以查看下开发平台文档中心里关于机器人的介绍,更多的技术求助,可登录开发者后台(https://open-dev.dingtalk.com/)查看相关知识。开发平台文档中心:https://open.dingtalk.com/

 

 

二、代码:

<?php
/**
 * 钉钉相关接口和curl接口
 */
class DingDing
{
    const HOST = "https://oapi.dingtalk.com";

    public static function sendTxt($token, $content, $isAtAll = true)
    {
        $url  = self::HOST . "/robot/send?access_token=$token";
        $data = array(
            'msgtype' => 'text',
            'text'    => array( 'content' => $content ),
            'at'      => array(
                'atMobiles' => array(),
                'isAtAll'   => $isAtAll,
            ),
        );
        $ret  = self::reqDing($url, $data);

        return $ret;
    }

    /**
     * 发起http请求,post为true用POST方式,false为GET方式请求
     */
    public static function reqDing($url, $postData, $post = true)
    {
        if (is_array($postData)) {
            $postData = json_encode($postData);
        }
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        if($post) {
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
        }
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json;charset=utf-8' ));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        $data = curl_exec($ch);
        curl_close($ch);
        $data = empty($data) ? array() : json_decode($data, true);

        return $data;
    }

    public static function getHoliday1($date = '')
    {
        $holidayUrl = 'http://api.k780.com/?app=life.workday&date=%s&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json';

        if($date === '') {
            $date = date('Ymd', time());
        }
        $url = sprintf($holidayUrl, $date);
        $judgeHolidayRet = self::reqDing($url, []);
        $worknm = $judgeHolidayRet['result']['worknm'];
        if(!isset($judgeHolidayRet['result']['worknm'])) {
            return false;
        }
        if($worknm == '工作日') {
            return 'yes';
        }
        return 'no';
    }

    public static function getHoliday2($date = '')
    {
        $holidayUrl = 'http://timor.tech/api/holiday/info/%s';

        if($date === '') {
            $date = date('Y-m-d', time());
        }
        $url = sprintf($holidayUrl, $date);
        $judgeHolidayRet = self::reqDing($url, [], false);
        $worknm = $judgeHolidayRet['type']['type'];
        if(!isset($judgeHolidayRet['type']['type'])) {
            return false;
        }
        if(($worknm == 0) || ($worknm == 3)) {
            return 'yes';
        }
        return 'no';
    }

    /**
     * 判断当天是否为工作日
     *
    public static function judgeWorkDay()
    {
        $ret1 = self::getHoliday1();
        if($ret1 == 'yes') {
            return 'yes';
        } elseif($ret1 == 'no') {
            return 'no';
        }
        return self::getHoliday2();
    }
}

 

三、git地址:https://github.com/A07110517/dingding-request

 

四、golang代码

const (
    dingTalkHost = "https://oapi.dingtalk.com"
)

/**
 * 发送钉钉报警
 * token:报警机器人的token
 * content:报警内容
 * all:true:at所有人
 */
func SendAlert(token, content string, all bool) ([]byte, error) {
    dingUrl := dingTalkHost + "/robot/send?access_token=" + token
    data := make(map[string]interface{})

    data["msgtype"] = "text"
    data["text"] = map[string]string{"content": content}
    data["at"] = map[string]interface{}{"atMobiles": [0]string{}, "isAtAll": all}

    bytePayload, err := jsoniter.Marshal(data)
    if err != nil {
        return nil, err
    }

    resp, postErr := http.Post(dingUrl, "application/json", bytes.NewBuffer(bytePayload))
    if postErr != nil {
        return nil, postErr
    }
    defer resp.Body.Close()

    return ioutil.ReadAll(resp.Body)
}

 

posted on 2020-10-15 11:37  asif  阅读(1282)  评论(0编辑  收藏  举报

导航