通过钉钉 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 人可以接收到消息。
到此结束了,后面再写其它的推送方法,如果有小伙伴想快点写出来,请在下方留言,我会尽快把其他方法也写出来。