第三方插件的引用(5) : 钉钉根据手机号码发送工作消息

钉钉开放平台 : https://open.dingtalk.com/

应用为 E应用之企业内部应用

应用首页有秘钥信息

钉钉开发文档 : https://open-doc.dingtalk.com/microapp/serverapi2/pgoxpy

SDK 下载 : http://open-dev.dingtalk.com/download/openSDK/java

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.OapiUserGetRequest;
import com.dingtalk.api.request.OapiUserSimplelistRequest;
import com.dingtalk.api.response.OapiGettokenResponse;
import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response;
import com.dingtalk.api.response.OapiUserGetResponse;
import com.dingtalk.api.response.OapiUserSimplelistResponse;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Auther: liyue
 * @Date: 2018/10/12 11:58
 * @Description: 钉钉发送工作消息
 */
public class SendDingDingMsgUtil {

    private static String APPKEY = "xxx";

    private static String APPSECRET = "xxx";

    private static Long AGENT_ID = xxx;

    private static Map<String, String> map = new HashMap<>(16);

    public static void main(String[] args) throws Exception {
        send("147****9309", "哈喽...");
    }


    /**
     * 根据手机号码发送工作消息
     * @param mobile
     * @param content
     */
    public static void send(String mobile, String content) {
        try {
            String accessToken = getAccessToken();
            if (map == null) {
                initUserList(accessToken);
            }
            int userListCount = getUserListCount(accessToken);
            if (userListCount > map.size()) {
                initUserList(accessToken);
            }
            senWorkMsg(accessToken, map.get(mobile), content);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 获取 accessToken
     *
     * @return
     * @throws Exception
     */
    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();
        return accessToken;
    }


    /**
     * 发送工作消息
     *
     * @param accessToken
     * @param userId
     * @param content
     * @throws Exception
     */
    private static void senWorkMsg(String accessToken, String userId, String content) throws Exception {
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2");
        OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request();
        request.setUseridList(userId);
        request.setAgentId(AGENT_ID);
        request.setToAllUser(false);
        OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.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(content);
        msg.setMsgtype("oa");
        request.setMsg(msg);

        OapiMessageCorpconversationAsyncsendV2Response response = client.execute(request, accessToken);

    }

    /**
     * 部门用户列表
     *
     * @param accessToken
     * @throws Exception
     */
    private static void initUserList(String accessToken) throws Exception {
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/simplelist");
        OapiUserSimplelistRequest request = new OapiUserSimplelistRequest();
        request.setDepartmentId(1L);//根部门
        request.setOffset(0L);// 不设置分页获取所有用户
        request.setSize(10L);//不设置分页获取所有用户
        request.setHttpMethod("GET");

        OapiUserSimplelistResponse response = client.execute(request, accessToken);
        List<OapiUserSimplelistResponse.Userlist> userlist = response.getUserlist();
        for (OapiUserSimplelistResponse.Userlist user : userlist) {
            String userId = user.getUserid();
            String mobile = getMobile(accessToken, userId);
            map.put(mobile, userId);
        }
    }

    /**
     * 获取部门用户数量
     *
     * @param accessToken
     * @return
     * @throws Exception
     */
    private static int getUserListCount(String accessToken) throws Exception {
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/simplelist");
        OapiUserSimplelistRequest request = new OapiUserSimplelistRequest();
        request.setDepartmentId(1L);
        request.setOffset(0L);
        request.setSize(10L);
        request.setHttpMethod("GET");

        OapiUserSimplelistResponse response = client.execute(request, accessToken);
        List<OapiUserSimplelistResponse.Userlist> userlist = response.getUserlist();
        return userlist.size();
    }

    /**
     * 根据 userId 获取手机号
     *
     * @param accessToken
     * @param userId
     * @return
     * @throws Exception
     */
    private static String getMobile(String accessToken, String userId) throws Exception {
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/get");
        OapiUserGetRequest request = new OapiUserGetRequest();
        request.setUserid(userId);
        request.setHttpMethod("GET");
        OapiUserGetResponse response = client.execute(request, accessToken);
        return response.getMobile();
    }

}

 

END。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值