通过钉钉 API 向员工推送消息分为多种形式, 今天只以工作通知的形式讲述。
第一步: 进入 钉钉开放平台 注册账号按照流程操作即可
进入开发者后台后需要进行创建应用(之所以创建应用, 是因为以应用为一个 demo)
第二步:创建应用(今天以创建小程序为例)
第三步: 获取企业内部应用的 accessToken(accessToken 用于身份令牌)
获取 accessToken 需要开通相应的接口权限,没有开通权限,用 api 是获取不到任何数据的。上图所示获取: 获取企业内部应用的 accessToken 需要开通 ” 调用企业 API 基础权限 ” 权限
下面是获取 accessToken 代码:
/**1. 获取企业内部应用的 accessToken*/
// 填写 appKey 和 appSecret$appKey = 'XXXXXXXXXXXX';$appSecret = 'XXXXXXXXXXXXXX';// 发起请求获取 access_token$url = 'https://api.dingtalk.com/v1.0/oauth2/accessToken';$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array('appKey' => $appKey,'appSecret' => $appSecret,)));curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json',));$response = curl_exec($ch);curl_close($ch);// 解析响应获取 access_token$json = json_decode($response, true);$access_token = $json['accessToken'];
返回结果如下:
{"errcode": 0,"access_token": "96fc7a7axxx","errmsg": "ok","expires_in": 7200
}
第四步: 获取公司组织架构下的所有部门(需要开通通讯录部门信息读权限)
代码如下:
// 获取公司组织架构下的部分$url = "https://oapi.dingtalk.com/topapi/v2/department/listsub?access_token=".$access_token;$data = array('dept_id' => '' // dept_id 需要替换为实际的部门 ID(获取部门应当为空)
);
// 设置 POST 请求头部信息
$header = array('Content-Type: application/json','charset: utf-8'
);
// 创建一个 cURL 句柄
$ch = curl_init();
// 设置 cURL 句柄的相关选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
// 执行 cURL 请求,并获取返回结果
$bumen = curl_exec($ch);
// 关闭 cURL 句柄
curl_close($ch);
// 输出返回结果
// 解析响应获取 $bumen
$bumens = json_decode($bumen, true);
返回结果:
{"errcode": 0,"errmsg":"ok","result": [{"auto_add_user": true,"create_dept_group": true,"dept_id": 37xxxx95,"name": "市场部","parent_id": 1},{"auto_add_user": true,"create_dept_group": true,"dept_id": 399xxxx96,"name": "财务部","parent_id": 1}],"request_id": "5um7ykyaalsj"
}
获取员工的 useridxu 需要用到 ”dept_id” 字段,”dept_id” 是部门 id
第五步: 获取到员工 id(获取员工 id,需要开启通讯录部门成员读权限)
获取部门用户基础信息代码如下:
// 获取员工信息$url = "https://oapi.dingtalk.com/topapi/user/listsimple?access_token=".$access_token;$data = array('dept_id' =>'XXXXXXXXXXXXXXXXX', // dept_id 需要替换为实际的部门 ID'cursor' =>0, // 分页查询的游标,最开始传 0'size' =>10 // 分页长度,最大值 100);// 设置 POST 请求头部信息$header = array('Content-Type: application/json','charset: utf-8');// 创建一个 cURL 句柄$ch = curl_init();设置 cURL 句柄的相关选项curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_HTTPHEADER, $header);// 执行 cURL 请求,并获取返回结果$List = curl_exec($ch);// 关闭 cURL 句柄curl_close($ch);// 解析响应获取 $bumen$Lists = json_decode($List, true);
返回结果如下:
{"errcode": 0,"errmsg": "ok","result": {"has_more": false,"list": [{"name": "测试用户 2","userid": "user100"},{"name": "李思","userid": "user1"}]},"request_id": "x4p6arvi0fzj"
}
第六步: 给员工发送工作通知(开通调用企业 API 基础权限,在第三步时候开通了,现在就不截图了),直接上代码
// 发送工作通知
$url = "https://oapi.dingtalk.com/topapi/message
$data = array('agent_id' => 'XXXXX','msg' => array('msgtype' => 'markdown','markdown' => array('title' => 'XXXX 提醒你','text' => '你好,今天是周几?')),'userid_list' => 'xxxxxxxxxxxx',// 员工 id// 'dept_id_list' => 'xxxxxxx' // 接收者是部门 ID 时,包括子部门下的所有用户);// 设置 POST 请求头部信息$header = array('Content-Type: application/json','charset: utf-8');// 创建一个 cURL 句柄$ch = curl_init();// 设置 cURL 句柄的相关选项curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_HTTPHEADER, $header);// 执行 cURL 请求,并获取返回结果$UserBumen = curl_exec($ch);// 关闭 cURL 句柄curl_close($ch);// 解析响应获取 $bumen$UserBumens = json_decode($UserBumen, true);
返回结果如下:
{"errcode":0,"task_id":256271667526,"request_id":"4jzllmte0wau"
}
推送结果截图
-
企业内部应用发送消息单次最多只能给 5000 人发送,第三方企业应用发送消息单次最多能给 1000 人发送。
-
给同一员工一天只能发送一条内容相同的消息通知。
-
企业内部应用每天给每个员工最多可发送 500 条消息通知,第三方企业应用最多可发送 100 条。
-
企业内部应用或第三方企业应用发送消息时,每分钟最多有 5000 人可以接收到消息。
到此结束了,后面再写其它的推送方法,如果有小伙伴想快点写出来,请在下方留言,我会尽快把其他方法也写出来。