参考官网: https://ding-doc.dingtalk.com/doc#/serverapi2/gh60vz
钉钉开放了丰富的服务端接口能力,开发者可以借助这些接口能力,实现企业系统与钉钉的集成打通。
调用钉钉接口时,需使用HTTPS协议、JSON数据格式、UTF8编码,访问域名为https://oapi.dingtalk.com。POST请求请在HTTP Header中设置 Content-Type:application/json。
返回结果/参数说明,标明返回参数示例及说明。所有接口的返回结果里都有errcode、errmsg。开发者需根据errcode是否为0判断是否调用成功(errcode意义请见全局错误码)。而errmsg仅作参考,后续可能会有变动,因此不可作为是否调用成功的判据。
总结: 统一请求为json,返回码中 errcode为0位正常调用。
第三方个人应用
频率限制
用户在使用第三方个人应用时,进行了提交表单操作,且提交该表单后需要向用户发送消息时,有以下限制:
(1)每个第三方个人应用,可以向用户在7天内推送有限条数的消息;
(2)提交1次表单可发送1条,多次提交发送多条;
如上,根据官方描述,可以总结和理解,个人应用 在发送消息这一块有很大限制。根据官方描述 :提交1次表单可发送1条,多次提交发送多条;
小程序个人应用,小程序客户端通过e.detail.formId获取推送消息临时授权码,服务器端必须获取该授权码,才可以发消息,而且是一次性的。而且这个临时授权码应该还有时间限制。
总结:所以个人应用不太适合那种,那种需要服务器端完全掌控发消息的场景。第三方个人小程序需要提交表单才可以发送消息,企业内部应用,可以使用服务端接口主动发送消息。
根据官网进入到相应文档,发现 个人小程序文档连服务器API 菜单都没有,目测 个人小程序能调钉钉开放接口非常有限。
经过测试,你调企业内部接口 https://oapi.dingtalk.com/gettoken 会报 错误的appKey和appSecrect。 就是说你个人应用的 appKey和appSecrect 是调不了一些 企业内部应用接口的。
第三方企业应用
第三方企业应用开发,是指开发者以钉钉、企业之外的第三方身份,基于钉钉的开放能力开发应用,并提供给钉钉上的其他组织使用。
企业内部应用
官方参考 https://ding-doc.dingtalk.com/doc#/bgb96b/ok9au2
企业内部应用 发送消息需要先调 https://oapi.dingtalk.com/gettoken接口获取access_token。
所有的发送消息接口都需要access_token。
总结: 三个应用场景各有不同。
接下来,我们主要以 **企业内部应用** 为主进行分析学习。
参考官网https://ding-doc.dingtalk.com/doc#/ln6dmh/wbhq0x/ker7fv
第三方企业应用,若需在钉钉应用市场上架,必须使用钉钉云。同时还需要购买钉钉云解决方案并将应用部署在钉钉云上。原因主要包含以下:首先企业的数据应该在可控的环境下使用,不能造成企业信息泄漏的严重事故;另外保障应用的稳定性及可用性非常重要,钉钉云会在架构、监控及报警等方面有相应的要求。
个人小程序如果需要上架到钉钉应用市场,也需要使用钉钉云,通过钉钉云解决方案进行部署。这是因为钉钉的个人小程序更多的是和工作相关的场景,安全及稳定性的要求会更高一些。
总结: 个人小程序、第三方企业应用 这两者你要上传到应用市场,就都必须使用钉钉云。
根部门ID为1
接口
https://oapi.dingtalk.com/department/list
参数
其中 fetch_child参数比较重要,默认是false, 是否递归部门的全部子部门,ISV微应用固定传递false。
比如设置为true,返回如下:
{
"errcode":0,
"errmsg":"ok",
"department":[
{
"createDeptGroup":true,
"name":"金融部",
"id":285358123,
"autoAddUser":true,
"parentid":1
},
{
"createDeptGroup":false,
"name":"财务部",
"id":286635451,
"autoAddUser":false,
"parentid":1
}
]
}
开放平台应用后台,如下 需要开通 通讯录只读权限。
它返回部门列表信息含有,部门id信息。
相关接口如下:
接口:
https://oapi.dingtalk.com/user/getDeptMember
返回
{
"errcode":0,
"userIds":[
"manager36299"
],
"errmsg":"ok"
}
总结:这个接口直接获取某个部门下 userid列表。
接口:
https://oapi.dingtalk.com/user/simplelist
返回信息如下:
{
"errcode":0,
"userlist":[
{
"name":"郭xx",
"userid":"022222223211111111"
}
],
"hasMore":false,
"errmsg":"ok"
}
总结: 正如接口命名simple list ,这个接口返回的部门下人员信息比较简单,只有name和userid。
接口:
https://oapi.dingtalk.com/user/listbypage
返回信息如下:
{
"errcode": 0,
"errmsg": "ok",
"hasMore": false,
"userlist":[
{
"userid": "zhangsan",
"unionid": "PiiiPyQqBNBii0HnCJ3zljcuAiEiE",
"mobile": "1xxxxxxxxxx",
"tel" : "xxxx-xxxxxxxx",
"workPlace" :"",
"remark" : "",
"order" : 1,
"isAdmin": true,
"isBoss": false,
"isHide": true,
"isLeader": true,
"name": "张三",
"active": true,
"department": [1, 2],
"position": "工程师",
"email": "test@xxx.com",
"avatar": "xxx",
"jobnumber": "xxx",
"extattr": {
"爱好":"旅游",
"年龄":"24"
}
}
]
}
总结:它这个接口和上一个接口一样,获取部门下人员,不过比上一个接口获取的人员信息详细。
钉钉消息通知
参考官网: https://ding-doc.dingtalk.com/doc#/serverapi2/pgoxpy/DgMTZ
相关接口;
工作通知消息是以企业工作通知会话中某个微应用的名义推送到员工的通知消息,例如生日祝福、入职提醒等等。下图是工作通知的会话和消息示例:
发送工作通知消息需要注意以下事项:
总结: 工作通知消息 是以应用的名义发送消息,它也可以发送各种消息类型,取决你传参。
接口:
https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2
传参
{
"agent_id":"你的微应用id",
"msg":{
"msgtype":"text",
"text":{
"content":"2020不平凡的一年"
}
},
"to_all_user":"true"
}
群消息相关接口:
群会话消息是指可以调用接口创建企业群聊会话,然后可以以系统名义向群里推送群聊消息。
发送群消息,需要群会话的id。
群会话的id,可以在调用创建群会话接口的返回结果里面获取,也可以通过dd.chooseChat获取
请求方式:POST(HTTPS)
请求地址:https://oapi.dingtalk.com/chat/create?access_token=ACCESS_TOKEN
请求包结构体:
{
"name": "groupName",
"owner": "zhangsan",
"useridlist": ["zhangsan","lisi"]
}
参数如下:
总结:默认情况下,我们一般只需设置如下3个参数,组名、群主的userid、群成员userid列表
{
“name”: “groupName”,
“owner”: “zhangsan”,
“useridlist”: [“zhangsan”,“lisi”]
}
注意:该接口也需要开放平台后台,专门开接口权限,否则,报如下返回:
{
"errcode":60011,
"errmsg":"没有调用该接口的权限"
}
注意:这个需要打开的权限是
高级权限-微应用开发应用所需要的应用相关权限,根据应用功能合理开通。
下的 企业会话 权限。
开发者后台找到该应用,进入应用详情,有个接口权限,最下方有个企业会话权限检查一下有没有开通。
另外,目前群会话id(chatid)的获取只有前端api。
创建会话创建失败,常见错误还有: 不合法的UserID列表,注意请求参数中useridlist的值必须是一个数组。
{
"name":"gggg",
"owner":"aaa9876",
"useridlist":"['aaa9876','081234232936594740']"
}
请求地址:https://oapi.dingtalk.com/chat/send?access_token=ACCESS_TOKEN
群会话的id,可以在调用创建群会话接口的返回结果里面获取,也可以通过dd.chooseChat获取
请求参数示例:
{
"chatid":"chat6aca4f0991afc7f3f635ee902ads31d2f",
"msg":{
"msgtype":"text",
"text":{
"content":" 成功测试通过"
}
}
}
正确响应结果:
{
"errcode":0,
"errmsg":"ok",
"messageId":"msg6XMrDnA/DSAsdfaafsdfQ=="
}