调用钉钉接口

您所在的位置:网站首页 钉钉放假通知怎么发 调用钉钉接口

调用钉钉接口

2023-06-15 19:49| 来源: 网络整理| 查看: 265

前言

本人在项目中有一个任务是把系统与公司管理系统——钉钉 相结合,于是从钉钉官网的开放API出发,对钉钉的对接有了一个简单的了解。

对接简介

​ 根据任务的需求场景,本人需要用到钉钉API的功能主要有:

​ 授权:获取access_token

​ 功能:消息通知

钉钉API接入-发送通知消息 一、获取Accesstoken 1.设置参数

​ 获取一个access_token需要一个向"https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2"这个地址发送一个请求。

​ 需要的参数如下:

private static String APPKEY = "*************";//(这里是应用的AppKey) private static String APPSECRET = "*************";//(这里是应用的APPSECRET ) 2.获取access_token函数

获取access_token的函数(在这里我们只需要参考官方api代码,然后把APPKEY和APPSECRET设置为自己申请第三方应用获得的APPKEY和APPSECRET)如下:

private static String getAccessToken() throws Exception { DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken"); OapiGettokenRequest request = new OapiGettokenRequest(); request.setAppkey(APPKEY); request.setAppsecret(APPSECRET); request.setHttpMethod("GET"); OapiGettokenResponse response = client.execute(request); String accessToken = response.getAccessToken(); //将获取的AccessToken和它的过期时间封装到一个AccessToken类中 Atl=new AccessTokenlin(accessToken, "7200"); return accessToken; }

​ 附上Accesstoken类代码:

public class AccessTokenlin { private String accessToken; private long expireTime; public AccessTokenlin(String accessToken, String expirein) { this.accessToken = accessToken; this.expireTime = System.currentTimeMillis() + Integer.parseInt(expirein)*1000; } //判断accessToken是否过期 public boolean isExpired() { return System.currentTimeMillis()>expireTime; } public String getAccessToken() { return accessToken; } public void setAccessToken(String accessToken) { this.accessToken = accessToken; } public long getExpireTime() { return expireTime; } public void setExpireTime(long expireTime) { this.expireTime = expireTime; } } 3.提供一个向外暴露的接口

​ 自此我们已经取到了一个Accesstoken,但是getAccessToken()方法应该是private不可以向外暴露 ,我们应该向外暴露一个获取Accesstoken的一个接口GetAccessToken():

public static String GetAccessToken() throws Exception { //这里我们需要判断一下Accesstoken是否过期,然后才将其返回 if(Atl==null||Atl.isExpired()) { getAccessToken(); } return Atl.getAccessToken(); } 二、发送通知 1.需要关注的参数

​ 当我们获取了一个Accesstoken后,我们参考钉钉的开发文档,它的API给我们提供了6种通知发送的类型。我们需要关注的参数如下(切记同一条信息它一天只能发一次,无法重复发送):

(1)request.setUseridList(“manager4425,306507340036230940”);

​ 目前来说,淘宝没有向外提供一个通过电话号码获取员工id的一个接口,以上两个员工id是我以一个特殊的形式来获取的,获取的方法在如下:

​ 查阅钉钉的api我们可以知道,钉钉它向我们提供了一个查询部门字列表,和查询部门所有成员信息的api.

/** *获取子部门列表 */ public static void getDeptList() { DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list_ids"); OapiDepartmentListIdsRequest request = new OapiDepartmentListIdsRequest(); request.setId("1"); request.setHttpMethod("GET"); try { OapiDepartmentListIdsResponse response = client.execute(request, GetAccessToken()); //这里引用了JSONObject,需要导入相关的jar包,这里我是直接输出相关的信息到控制台获取一个部门id JSONObject jsonObject = JSONObject.fromObject(response); System.out.println(jsonObject); } catch (ApiException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }

​ 我们获取子部门列表,以根目录查找可以查找到当前所有部门(默认"1"位根目录),自此我找到了我添加的一个部门(id:142067643),然后我通过查找这个部门的成员信息查找到了用户的id,getDepartmentUser函数如下:

/** * 获取部门下的所有用户列 * @param departmentId * @return */ public static Object getDepartmentUser(Long departmentId){ DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/simplelist"); OapiUserSimplelistRequest request = new OapiUserSimplelistRequest(); request.setDepartmentId(departmentId); request.setOffset(0L); request.setSize(10L); request.setHttpMethod("GET"); try { OapiUserSimplelistResponse response = client.execute(request, getAccessToken()); //这里引用了JSONObject,我是直接输出相关的信息到控制台获取了员工id JSONObject jsonObject = JSONObject.fromObject(response); String body = jsonObject.getString("body"); System.out.println(jsonObject); return response; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } } (2)request.setAgentId(AgentId);

​ 这个Agentld在应用详情中可以获取。

(3)request.setToAllUser(false);

​ 默认为false,true的时候是向全体人员发送信息。

(4)msg.getText().setContent(“测试text文挡信息通知第一次”);

​ 这里可以编辑我们要发送的文档或其他类型的通知。

(5)OapiMessageCorpconversationAsyncsendV2Response response = client.execute(request,GetAccessToken());

​ 这是我们要传入我们获取的Accesstoken;

最后发送通知信息函数如下:

/** * 发送通知信息 * @throws ApiException * @throws Exception */ public static void SendMsg() throws ApiException, Exception { DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2"); OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request(); //传入的是员工的工号 request.setUseridList("manager4425,306507340036230940"); //申请的应用AgentId request.setAgentId(310559737L); //true为全体员工 request.setToAllUser(false); OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg(); msg.setMsgtype("text"); msg.setText(new OapiMessageCorpconversationAsyncsendV2Request.Text()); msg.getText().setContent("测试text文挡信息通知第一次"); request.setMsg(msg); /*//发送图片 msg.setMsgtype("image"); msg.setImage(new OapiMessageCorpconversationAsyncsendV2Request.Image()); msg.getImage().setMediaId("@lADOdvRYes0CbM0CbA"); request.setMsg(msg); /* //发送文件 msg.setMsgtype("file"); msg.setFile(new OapiMessageCorpconversationAsyncsendV2Request.File()); msg.getFile().setMediaId("@lADOdvRYes0CbM0CbA"); request.setMsg(msg); //发送链接 msg.setMsgtype("link"); msg.setLink(new OapiMessageCorpconversationAsyncsendV2Request.Link()); msg.getLink().setTitle("test"); msg.getLink().setText("test"); msg.getLink().setMessageUrl("test"); msg.getLink().setPicUrl("test"); request.setMsg(msg); msg.setMsgtype("markdown"); msg.setMarkdown(new OapiMessageCorpconversationAsyncsendV2Request.Markdown()); msg.getMarkdown().setText("##### text"); msg.getMarkdown().setTitle("### Title"); request.setMsg(msg); msg.setOa(new OapiMessageCorpconversationAsyncsendV2Request.OA()); msg.getOa().setHead(new OapiMessageCorpconversationAsyncsendV2Request.Head()); msg.getOa().getHead().setText("head"); msg.getOa().setBody(new OapiMessageCorpconversationAsyncsendV2Request.Body()); msg.getOa().getBody().setContent("xxx"); msg.setMsgtype("oa"); request.setMsg(msg); //发送的文本信息+url msg.setActionCard(new OapiMessageCorpconversationAsyncsendV2Request.ActionCard()); msg.getActionCard().setTitle("xxx123411111"); msg.getActionCard().setMarkdown("### 测试123111"); msg.getActionCard().setSingleTitle("接入钉钉发送通知接口"); msg.getActionCard().setSingleUrl("https://www.baidu.com"); msg.setMsgtype("action_card"); request.setMsg(msg); */ OapiMessageCorpconversationAsyncsendV2Response response = client.execute(request,GetAccessToken()); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3