1.复制链接在浏览器打开并扫码或使用账户密码登录
https://open-dev.dingtalk.com/fe/app#/corp/robot
2.登录成功后按照下方图2步骤先点击【应用开发】选择【企业内部开发】-【机器人】
3.点击【创建应用】-【继续使用旧版本】
4.填写”应用名称=运维平台机器人”,”应用描述=钉钉机器人消息通知”好相应数据后点击【确定创建】按钮,创建好后可以看到我们刚新增的机器人
5.在机器人应用信息页,如图复制应用凭证的AppKey和AppSecret(后面直接粘贴到代码即可)
6.在应用详情页点击【开发管理】的【修改】,添加服务器出口IP(输入调用钉钉服务端API时使用的IP即企业服务器的公网IP,多个IP请以英文逗号","隔开),添加后直接点击保存
7.点击【权限管理】,在搜索框输入“根据手机号姓名获取成员信息的接口访问权限”后勾选数据并点击【权限申请】按钮,申请成功后”全部状态”会改为”已开通”,如图8,同样输入“企业内机器人发送消息权限”并勾选【权限申请】按钮,如”全部状态”为”已开通”说明已经申请到了该权限
8.点击【部署与发布】-【版本管理与发布】页,点击【上线】按钮
9.把第五步获取到的密钥信息直接粘贴到代码
@Test
public void test00001() throws Exception{
//1.获取token开始---------------------------------------------------
String TOKEN = null;
String appkey = "填写appkey";
String appsecret = "填写appsecret";
//获取企业内部应用的access_token,具体Api介绍:https://open.dingtalk.com/document/orgapp/obtain-orgapp-token
String url = "https://oapi.dingtalk.com/gettoken";
DingTalkClient client1 = new DefaultDingTalkClient(url);
OapiGettokenRequest req1 = new OapiGettokenRequest();
req1.setAppkey(appkey);
req1.setAppsecret(appsecret);
req1.setHttpMethod("GET");
OapiGettokenResponse rsp1 = client1.execute(req1);
Map map = JSON.parseObject(rsp1.getBody(), Map.class);
boolean flag = map.get("errcode").toString().equals("0");
if (flag){
TOKEN = map.get("access_token").toString();
}else {
throw new RuntimeException(map.get("errmsg").toString());
}
//获取token结束------------------------------------------------------
//2.根据手机号码获取钉钉用户信息userid开始------------------------------------
String userId = null;
String getbymobile = "https://oapi.dingtalk.com/topapi/v2/user/getbymobile";
DingTalkClient client2 = new DefaultDingTalkClient(getbymobile);
OapiV2UserGetbymobileRequest req2 = new OapiV2UserGetbymobileRequest();
req2.setMobile("填写你在钉钉的手机号");
OapiV2UserGetbymobileResponse rsp2 = client2.execute(req2, TOKEN);
Map<String, Object> object = JSON.parseObject(rsp2.getBody(), Map.class);
boolean flag2 = object.get("errcode").toString().equals("0");
if (flag2) {
JSONObject jsonObject = (JSONObject) object.get("result");
Iterator<Map.Entry<String, Object>> iterator = jsonObject.entrySet().iterator();
userId = iterator.next().getValue().toString();
} else {
throw new RuntimeException(object.get("errmsg").toString());
}
//根据手机号码获取钉钉用户信息userid结束------------------------------------
//3.根据钉钉的userId发送钉钉机器人消息开始------------------------------
com.aliyun.dingtalkrobot_1_0.Client client3 = createClient();
BatchSendOTOHeaders batchSendOTOHeaders = new BatchSendOTOHeaders();
batchSendOTOHeaders.xAcsDingtalkAccessToken = TOKEN;
BatchSendOTORequest batchSendOTORequest = new BatchSendOTORequest()
.setRobotCode(appkey)
.setUserIds(java.util.Arrays.asList(userId))
.setMsgKey("sampleText")
.setMsgParam("{\"content\":\""+"你想发送的钉钉机器人消息"+"\"}");
try {
client3.batchSendOTOWithOptions(batchSendOTORequest, batchSendOTOHeaders, new RuntimeOptions());
} catch (TeaException err) {
if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
// err 中含有 code 和 message 属性,可帮助开发定位问题
System.out.println("钉钉机器人短信发送失败:"+JSON.toJSONString(err));
}
} catch (Exception _err) {
TeaException err = new TeaException(_err.getMessage(), _err);
if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
// err 中含有 code 和 message 属性,可帮助开发定位问题
System.out.println("钉钉机器人短信发送失败:"+JSON.toJSONString(_err));
}
}
}
10.发送结果截图