当前位置: 代码网 > it编程>编程语言>Java > Java推送钉钉应用消息实现过程

Java推送钉钉应用消息实现过程

2025年07月23日 Java 我要评论
前言:本文的目的是通过手机号获取钉钉成员的userid,实现钉钉应用的消息推送。一、创建钉钉应用登录钉钉开放平台二、应用相关凭证需要获取client id (原 appkey 和 suitekey)c

前言:

本文的目的是通过手机号获取钉钉成员的userid,实现钉钉应用的消息推送。

一、创建钉钉应用

登录钉钉开放平台

二、应用相关凭证

需要获取

client id (原 appkey 和 suitekey)

client secret (原 appsecret 和 suitesecret)

app id 

原企业内部应用agentid

三、申请钉钉接口权限

需要先申请对应的接口权限才能调用接口。

但是钉钉的接口太多了,一时半会也找不到对应的接口,推荐直接全勾选。

四、钉钉官方接口

1、获取token

请求方式:get

参数:appkey,appsecret,reqmethod

url:https://oapi.dingtalk.com/gettoken

2、根据手机号获取用户id

参数:access_token,mobilenum

url:https://oapi.dingtalk.com/topapi/v2/user/getbymobile

3、发送通知

参数:access_token,msgtype,content,userid

url:https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2

五、工具类

import com.alibaba.fastjson.json;
import com.alibaba.fastjson.jsonobject;
import com.dingtalk.api.defaultdingtalkclient;
import com.dingtalk.api.dingtalkclient;
import com.dingtalk.api.request.oapigettokenrequest;
import com.dingtalk.api.request.oapimessagecorpconversationasyncsendv2request;
import com.dingtalk.api.request.oapiv2usergetbymobilerequest;
import com.dingtalk.api.response.oapigettokenresponse;
import com.dingtalk.api.response.oapimessagecorpconversationasyncsendv2response;
import com.dingtalk.api.response.oapiv2usergetbymobileresponse;
import com.taobao.api.apiexception;
import lombok.extern.slf4j.slf4j;
import org.springframework.stereotype.component;

import java.util.arraylist;
import java.util.arrays;
import java.util.list;

@slf4j
@component
public class dingtalkutil {

    private static final string get_token_url = "https://oapi.dingtalk.com/gettoken";
    private static final string get_by_mobile = "https://oapi.dingtalk.com/topapi/v2/user/getbymobile";
    private static final string async_send_v2_url = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2";
    private static final string default_app_key = "xxx";
    private static final string default_app_secret = "xxxx";
    private static final long default_agent_id = 123l;
    private static final string default_request_method = "get";

    private string appkey;
    private string appsecret;
    private long agentid;
    private string reqmethod;


    public dingtalkutil() {
        this(default_app_key, default_app_secret, default_agent_id, default_request_method);
    }

    public dingtalkutil(string appkey, string appsecret, long agentid, string reqmethod) {
        this.appkey = (appkey != null && !appkey.isempty()) ? appkey : default_app_key;
        this.appsecret = (appsecret != null && !appsecret.isempty()) ? appsecret : default_app_secret;
        this.agentid = (agentid != null) ? agentid : default_agent_id;
        this.reqmethod = (reqmethod != null && !reqmethod.isempty()) ? reqmethod : default_request_method;
    }


    // 获取accesstoken
    public string gettokenresponse() throws apiexception {
        dingtalkclient client = new defaultdingtalkclient(get_token_url);
        oapigettokenrequest req = new oapigettokenrequest();
        req.setappkey(appkey);
        req.setappsecret(appsecret);
        req.sethttpmethod(reqmethod);
        oapigettokenresponse rsp = client.execute(req);
        return rsp.getaccesstoken();
    }

    // 根据手机号获取userid
    public string getuseridbymobile(string accesstoken, string mobilenum) throws apiexception {
        dingtalkclient client = new defaultdingtalkclient(get_by_mobile);
        oapiv2usergetbymobilerequest req = new oapiv2usergetbymobilerequest();
        req.setmobile(mobilenum);
        oapiv2usergetbymobileresponse rsp = client.execute(req, accesstoken);

        jsonobject jsonobject = json.parseobject(rsp.getbody());
        jsonobject result = jsonobject.getjsonobject("result");
        string userid = result.getstring("userid");
        return userid;
    }

    // 发送工作通知消息
    public boolean sendworknotice(string accesstoken, string msgtype, string content, list<string> userids) throws apiexception {
        dingtalkclient client = new defaultdingtalkclient(async_send_v2_url);

        oapimessagecorpconversationasyncsendv2request req = new oapimessagecorpconversationasyncsendv2request();
        req.setagentid(agentid);
        req.setuseridlist(string.join(",", userids));

        oapimessagecorpconversationasyncsendv2request.msg msg = new oapimessagecorpconversationasyncsendv2request.msg();
        msg.setmsgtype(msgtype);
        oapimessagecorpconversationasyncsendv2request.text text = new oapimessagecorpconversationasyncsendv2request.text();
        text.setcontent(content);
        msg.settext(text);

        req.setmsg(msg);

        oapimessagecorpconversationasyncsendv2response rsp = client.execute(req, accesstoken);
        return rsp.issuccess();
    }

    public static class builder {
        private string msgtype = "text";
        private string content;
        private list<string> mobiles = new arraylist<>();
        private list<string> userids = new arraylist<>();

        public builder setmsgtype(string msgtype) {
            this.msgtype = msgtype;
            return this;
        }

        public builder setcontent(string content) {
            this.content = content;
            return this;
        }

        public builder adduserid(string userid) {
            this.mobiles.add(userid);
            return this;
        }

        public builder adduserids(list<string> userids) {
            this.mobiles = userids;
            return this;
        }

        public boolean send(dingtalkutil utils) throws apiexception {
            // 获取 accesstoken
            string accesstoken = utils.gettokenresponse();
            // 根据手机获取userid
            for (string mobilenum : mobiles) {
                string userid = utils.getuseridbymobile(accesstoken, mobilenum);
                userids.add(userid);
            }
            // 调用 sendworknotice 发送消息
            return utils.sendworknotice(accesstoken, msgtype, content, userids);
        }
    }


    // 封装的发送钉钉通知的方法
    public boolean senddingtalknotification(list<string> phonelist, string message) throws apiexception {
        dingtalkutil dingtalkutil = new dingtalkutil();
        return new dingtalkutil.builder().setmsgtype("text")
                .setcontent(message)
                .adduserids(phonelist)
                .send(dingtalkutil);
    }

    // 内部测试
    public static void main(string[] args) throws apiexception {
        dingtalkutil dingtalkutil = new dingtalkutil();
        list<string> phonelist = arrays.aslist("phonenum");
        string message = "your message";
        boolean result = dingtalkutil.senddingtalknotification(phonelist, message);
        system.out.println("消息发送结果: " + result);
    }

}

六、maven引入

        <dependency>
            <groupid>com.aliyun</groupid>
            <artifactid>dingtalk</artifactid>
            <version>1.5.24</version>
        </dependency>

        <dependency>
            <groupid>com.aliyun</groupid>
            <artifactid>alibaba-dingtalk-service-sdk</artifactid>
            <version>2.0.0</version>
        </dependency>

总结 

到此这篇关于java推送钉钉应用消息实现的文章就介绍到这了,更多相关java推送钉钉应用消息内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com