Java_钉钉发送私聊消息

这篇具有很好参考价值的文章主要介绍了Java_钉钉发送私聊消息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

随着公司体量的越来越庞大,很多时候需要用到部门协同,所以钉钉(DingTalk)应运而生。
钉钉(DingTalk)是阿里巴巴集团打造的企业级智能移动办公平台,引领未来新一代工作方式,将陪伴每一个企业成长,是数字经济时代的企业组织协同办公和应用开发平台,是新生产力工具。
有时候钉钉需要通过定时任务去给某一个人发送私聊消息,当然群聊消息也可以,只不过群消息的前提是先建群,然后在群里添加钉钉机器人,并且工作群一旦多了,消息看的也就没那么及时,所以群消息在某一些场景下没那么便捷,或者可以说没有那么高效。

一、文档地址

Api文档地址:批量发送单聊消息

二、使用步骤

1.创建企业内部应用

Java_钉钉发送私聊消息

2、获取应用AppKey和AppSecret

Java_钉钉发送私聊消息

3.创建机器人

Java_钉钉发送私聊消息

Java_钉钉发送私聊消息

4.开启机器人

Java_钉钉发送私聊消息

5.发布机器人

Java_钉钉发送私聊消息

6.开启应用权限

Java_钉钉发送私聊消息

7.引入JAR包

		<!-- 钉钉对接机器人 -->
        <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>

三、示例代码

import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.dingtalkrobot_1_0.Client;
import com.aliyun.dingtalkrobot_1_0.models.BatchSendOTOHeaders;
import com.aliyun.dingtalkrobot_1_0.models.BatchSendOTORequest;
import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.Common;
import com.aliyun.teautil.models.RuntimeOptions;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiGettokenRequest;
import com.dingtalk.api.request.OapiV2DepartmentListsubRequest;
import com.dingtalk.api.request.OapiV2UserGetbymobileRequest;
import com.dingtalk.api.response.OapiGettokenResponse;
import com.dingtalk.api.response.OapiV2DepartmentListsubResponse;
import com.dingtalk.api.response.OapiV2UserGetbymobileResponse;
import com.smallrig.common.response.ding.DeptInfoResp;
import com.taobao.api.ApiException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


/**
 * @author zhushuang
 * @program: nakadai
 * @description: 钉钉发送私聊消息
 * @time 2023/1/13
 */
@Component
@Slf4j
public class DingSendPrivateChatMsgService {


    // 企业凭证,两小时一更新
    private static String enterpriseToken = "";
    // 应用凭证
    private static String appkey = "你的应用AppKey";
    private static String appsecret = "你的应用AppSecret";

    // 获取token,每两小时失效
    public static void getToken() {
        try {
            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
            OapiGettokenRequest req = new OapiGettokenRequest();
            req.setAppkey(appkey);
            req.setAppsecret(appsecret);
            req.setHttpMethod("GET");
            OapiGettokenResponse rsp = client.execute(req);
            log.info("token:" + rsp.getBody());
            JSONObject json = JSON.parseObject(rsp.getBody());
            enterpriseToken = json.getString("access_token");
        } catch (ApiException e) {
            e.printStackTrace();
        }
    }

    /**
     * 使用 Token 初始化账号Client
     *
     * @return Client
     * @throws Exception
     */
    private static Client createClient() throws Exception {
        Config config = new Config();
        config.protocol = "https";
        config.regionId = "central";
        return new Client(config);
    }

    /**
     * 发送钉钉消息
     *
     * @param dingUserId 钉钉用户id
     * @param content    发送消息内容
     * @return void
     */
    public static void createDingNotify(String dingUserId, String content) throws Exception {
        if (StringUtils.isBlank(enterpriseToken)) {
            getToken();
        }
        Client client = createClient();
        BatchSendOTOHeaders batchSendOTOHeaders = new BatchSendOTOHeaders();
        batchSendOTOHeaders.xAcsDingtalkAccessToken = enterpriseToken;
        BatchSendOTORequest batchSendOTORequest = new BatchSendOTORequest()
                .setRobotCode(appkey)//机器人appkey
                .setUserIds(Arrays.asList(dingUserId))
                .setMsgKey("officialTextMsg")
                .setMsgParam("{ \"content\": \"" + content + "\" }");
        try {
            client.batchSendOTOWithOptions(batchSendOTORequest, batchSendOTOHeaders, new RuntimeOptions());
        } catch (TeaException err) {
            if (!Common.empty(err.code) && !Common.empty(err.message)) {
                // err 中含有 code 和 message 属性,可帮助开发定位问题
                log.error(err.code + ":" + err.message);
                // 企业凭证enterpriseToken不合法导致出错时获取新企业凭证并重试
                if (err.code.equals("InvalidAuthentication")) {
                    getToken();
                    createDingNotify(dingUserId, content);
                }
            }
        } catch (Exception e) {
            TeaException err = new TeaException(e.getMessage(), e);
            if (!Common.empty(err.code) && !Common.empty(err.message)) {
                // err中含有code和message 属性,可帮助开发定位问题
                log.error(err.code + ":" + err.message);
            }

        }
    }

    /**
     * 发送钉钉消息
     *
     * @param phone 用户手机号
     * @return void
     */
    public static String getDingdingUserIdByPhone(String phone) {
        try {
            if (StringUtils.isBlank(enterpriseToken)) {
                getToken();
            }
            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getbymobile");
            OapiV2UserGetbymobileRequest req = new OapiV2UserGetbymobileRequest();
            req.setMobile(phone);
            OapiV2UserGetbymobileResponse rsp = client.execute(req, enterpriseToken);
            if (rsp != null) {
                OapiV2UserGetbymobileResponse.UserGetByMobileResponse result = rsp.getResult();
                return result == null ? null : result.getUserid();
            }
        } catch (ApiException e) {
            log.error(e.getErrMsg(), e);
        }
        return null;
    }
}

四、成功示例

Java_钉钉发送私聊消息
这里不在将调用代码放出来了,毕竟。。。调用大家都会

原创不易,望一键三连 (^ _ ^)文章来源地址https://www.toymoban.com/news/detail-513109.html

到了这里,关于Java_钉钉发送私聊消息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python调用钉钉发送告警消息

    zabbix和prometheus都能做监控告警调用企业微信和钉钉。那么问题来了做为一名合格的运维和开发人员,脚本发现故障告警,自动调用发送详细告警内容,这点儿东西得会。 效果图如下:  普通发送方式 dingtalkchatbot发送方式 

    2024年02月16日
    浏览(41)
  • Python:使用钉钉dingtalk发送通知消息

    通过钉钉的开放API接口,可以很容易的将消息发送到钉钉dingtalk,比起邮件发送更稳定,及时 文档 官网:https://www.dingtalk.com/ API Explorer调试 https://open-dev.dingtalk.com/apiExplorer 文档:https://open.dingtalk.com/document/robots/custom-robot-access 使用场景:发送消息到聊天群 前期准备:需要新建

    2024年02月11日
    浏览(45)
  • Jenkins构建完成后发送消息至钉钉

    钉钉群的最终效果: 参考官网文档:快速开始 | 钉钉机器人插件 系统管理 拉到最下面,可以看到钉钉配置  按照如下配置钉钉机器人 配置完成可以点击测试按钮,进行发送测试。  发送测试成功  附:钉钉机器人的webhook地址 钉钉群聊新增机器人,这里有webhook地址,加签。

    2024年02月15日
    浏览(44)
  • 钉钉自定义机器人定时发送消息(超详细)

            因为工作需要,需要在钉钉群里添加一个可以每天定时发送消息的机器人,我找了很多网页查看,发现资料并不是很全,现在做出来了,就想发表出来,看看能不能帮到大家。接下来就进入正题。         详细步骤可以参考:钉钉群设置创建一个机器人-CSDN博客  

    2024年03月11日
    浏览(82)
  • 企业微信、飞书、钉钉机器人消息发送工具类

    其实你也可以使用RestTemplate,我这里主要是用到了webflux框架,所以需要实例化客户端请求对象

    2024年02月10日
    浏览(49)
  • jenkins自动化脚本集成时钉钉消息未发送

           在进行jenkins自动化脚本集成时,需要配置钉钉发送消息。钉钉的配置正确,测试钉钉消息发送成功,但是当构建项目时,却没有收到钉钉消息,报错如下: [钉钉插件]发送消息时报错: java.lang.NullPointerException: Cannot invoke \\\"io.jenkins.plugins.DingTalkUserProperty.getMobile()\\\" becaus

    2024年02月07日
    浏览(32)
  • 钉钉企业机器人单聊消息发送实践-大数据平台(XSailboat)消息中心消息推送

    在笔者开发的 大数据平台XSailboat 中有 消息中心 模块,用来全平台的消息收集,整理分拆、订阅发送等功能。消息推送方式支持钉钉群聊、钉钉单聊、短信通知。现记录一下企业机器人消息单聊推送的实现过程。 这是官方的开发文档地址:《机器人发送、查询和撤回单聊消

    2024年01月25日
    浏览(43)
  • Gradle和Aritifactory,实现上传Apk并发送消息到钉钉

    本文链接:https://blog.csdn.net/feather_wch/article/details/131746580 1、Gradle是一种语言吗? 不是 而是一种构建自动化工具,用于多语言软件开发。 可以控制编译、打包、测试、部署和发布等任务。 2、gradle支持的语言有哪些? Java Kotlin Groovy Scala C/C++ JavaScript²。 3、Gradle的构建脚本是用

    2024年02月16日
    浏览(32)
  • C#实现钉钉自定义机器人发送群消息帮助类

            在企业中,针对一些关键指标内容(如每天的生产产量、每天的设备报警信息等信息),需要同时给多人分享,此时就可以将需要查看这些数据的人员都拉到一个群中,让群里的机器人将这些关键指标内容推送到群里即可【(目前已实现在钉钉群里创建自定义机器

    2024年02月04日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包