准备工作
进入开发者后台创建企业内部应用开启权限,获得应用的AppKey和AppSecret
官方api文档:发送消息到企业群 - 钉钉开放平台
SDK下载地址:安装SDK - 钉钉开放平台
开发步骤
- 获取AccessToken
- 需要先根据公司员工手机号获得公司员工的userId
- 根据userId等信息创建钉钉公司内部群会话,在创建成功后会获得群会话chatid
- 根据chatid发送钉钉消息
1、获取AccessToken
private static AccesTokenCache accesTokenCache;
/**
* 使用 Token 初始化账号Client
* @return Client
* @throws Exception
*/
public static com.aliyun.dingtalkoauth2_1_0.Client createClient2() throws Exception {
Config config = new Config();
config.protocol = "https";
config.regionId = "central";
return new com.aliyun.dingtalkoauth2_1_0.Client(config);
}
/**
* 使用 Token 初始化账号Client
* @return Client
* @throws Exception
*/
public static String getAccessToken() throws Exception {
if(accesTokenCache == null || accesTokenCache.getExpires() < System.currentTimeMillis()){
com.aliyun.dingtalkoauth2_1_0.Client client = createClient2();
GetAccessTokenRequest getAccessTokenRequest = new GetAccessTokenRequest()
.setAppKey("企业内部应用的AppKey")
.setAppSecret("企业内部应用的AppSecret");
GetAccessTokenResponse response = client.getAccessToken(getAccessTokenRequest);
AccesTokenCache acctoken = new AccesTokenCache();
acctoken.setAccesToken(response.getBody().accessToken);
acctoken.setExpires(System.currentTimeMillis() + 6000000);
return response.getBody().accessToken;
}else{
return accesTokenCache.getAccesToken();
}
}
2、需要先根据公司员工手机号获得公司员工的userId
// 根据手机号获取 成员信息
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getbymobile");
OapiV2UserGetbymobileRequest req = new OapiV2UserGetbymobileRequest();
req.setMobile("内部员工手机号");
OapiV2UserGetbymobileResponse rsp = client.execute(req, getAccessToken());
System.out.println(rsp.getBody());//即可拿到userId
3、根据userId等信息创建钉钉公司内部群会话,在创建成功后会获得群会话chatid
// 创建群会话
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/chat/create");
OapiChatCreateRequest req = new OapiChatCreateRequest();
req.setOwner("群主的userId");
req.setName("群名称");
List<String> useridlist = new ArrayList<String>();
useridlist.add("群成员userId");
useridlist.add("群成员userId");
req.setUseridlist(useridlist);
OapiChatCreateResponse rsp = client.execute(req, getAccessToken());
System.out.println(rsp.getBody());//这里会拿到chatid 保存好 用于发送消息
4、根据chatid发送钉钉消息
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/chat/send");
OapiChatSendRequest req = new OapiChatSendRequest();
req.setChatid("创建的群的chatId");
OapiChatSendRequest.Markdown markdown = new OapiChatSendRequest.Markdown();
req.setMsgtype("markdown");//发送的markdown消息
markdown.setTitle(title);
markdown.setText(text);
req.setMarkdown(markdown);
OapiChatSendResponse rsp = client.execute(req, getAccessToken());
支持多种消息类型 详见官方文档:消息类型与数据格式 - 钉钉开放平台