钉钉通知-调用钉钉发送企业内部消息开发

首先,我们要明确需求:自己的系统需要发送通知消息到用户,接收消息用户为同一企业内的人员,选用短信可能涉及到费用问题,故可以选用钉钉或者企业微信,在此我使用钉钉进行发送消息。

调用钉钉发送企业内部消息:

第一步:需要单位授权为子管理员,以便进行应用的创建;

登录钉钉开发者后台开发者后台 (dingtalk.com)icon-default.png?t=M0H8https://open-dev.dingtalk.com/#/

确认自己的开发者信息

选择  应用开发 --> 企业内部应用开发

 选择创建应用

 应用创建示例:

 此处不再创建,用之前创建的进行演示,进入应用,可以看到应用凭证,在开发时会重点用到,

 由于需求简单,故不需要做过多配置,只需要添加  根据手机号姓名获取成员信息的接口访问权限  即可,用户根据手机号获取钉钉用户信息,进行发送到指定用户。

关于消息的发送,应用最基本的权限已经包括了此功能,直接使用即可;

 到此步,配置完成,上代码

pom.xml

<!--钉钉开放平台SDK--><dependency><groupId>com.aliyun.api</groupId><artifactId>top-api-sdk</artifactId><version>0.0.1</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>dingtalk</artifactId><version>1.1.88</version></dependency>

application.yml

service接口class

import com.taobao.api.ApiException;/*** 钉钉service* @Author zhangjiantianya* @create 2021/10/19 9:10*/
public interface IDingtalkService {/*** xxxx状态通知* @param mobiles* @param info* @return* @throws ApiException*/Boolean xxxxStatusNotice(String mobiles, String info) throws ApiException;
}

serviceImpl实现类

import cn.hutool.core.util.StrUtil;
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.OapiUserGetByMobileRequest;
import com.dingtalk.api.response.OapiGettokenResponse;
import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response;
import com.dingtalk.api.response.OapiUserGetByMobileResponse;
import com.taobao.api.ApiException;
import com.xha.job.export.executor.dingtalkService.IDingtalkService;
import com.xha.job.export.executor.util.MyStringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;import java.util.ArrayList;
import java.util.List;/*** 钉钉Service实现类* @Author zhangjiantianya* @create 2021/10/18 14:42*/
@Service
public class DingtalkServiceImpl implements IDingtalkService {@Value("${dingtalk.xxxxStatusNotice.DingAppkey}")private String DING_APP_KEY;@Value("${dingtalk.xxxxStatusNotice.DingAppsecret}")private String DING_APP_SECRET;@Value("${dingtalk.xxxxStatusNotice.dingAccessToken}")private int DING_AGENT_ID;/*** 获取AccessToken** @return AccessToken* @throws ApiException*/private String getAccessToken() throws ApiException {DefaultDingTalkClient client =new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");OapiGettokenRequest request = new OapiGettokenRequest();//Appkeyrequest.setAppkey(DING_APP_KEY);//Appsecretrequest.setAppsecret(DING_APP_SECRET);/*请求方式*/request.setHttpMethod("GET");OapiGettokenResponse response = client.execute(request);return response.getAccessToken();}/*** 根据手机号获取用户urid* @param mobiles* @return* @throws ApiException*/private String getUridByMobile(String mobiles) throws ApiException{//获取应用密钥String accessToken = getAccessToken();String[] mobilesList = mobiles.split(",");List<String> list = new ArrayList<>();for (String mobile : mobilesList) {//根据手机号获取用户信息UridDingTalkClient clientByMobile = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/get_by_mobile");OapiUserGetByMobileRequest req = new OapiUserGetByMobileRequest();req.setMobile(mobile);req.setHttpMethod("GET");OapiUserGetByMobileResponse rsp = clientByMobile.execute(req, accessToken);if (rsp.isSuccess()){list.add(rsp.getUserid());}}return MyStringUtils.ListToString(list); // list转为String(逗号分隔)}@Overridepublic Boolean xxxxStatusNotice(String mobiles, String info) throws ApiException{//获取应用密钥String accessToken = getAccessToken();boolean result = true;//根据手机号获取用户信息UridString uridList = getUridByMobile(mobiles);if (StrUtil.isEmpty(uridList)){return false;}DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2");OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request();request.setUseridList(uridList); // 接收者的userid列表,最大用户列表长度100。request.setAgentId(Long.valueOf(DING_AGENT_ID)); // 发送消息时使用的微应用的AgentIDrequest.setToAllUser(false); //是否发送给企业全部用户OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();//文本消息OapiMessageCorpconversationAsyncsendV2Request.Text text = new OapiMessageCorpconversationAsyncsendV2Request.Text();text.setContent(info);msg.setMsgtype("text");msg.setText(text);request.setMsg(msg);OapiMessageCorpconversationAsyncsendV2Response response = client.execute(request, accessToken);result = response.isSuccess();return result;}
}

工具类 

import java.util.List;/*** @Author zhangjiantianya* @create 2021/10/18 17:59*/
public class MyStringUtils {/*** List<String>转以逗号分隔的String* @param data* @return*/public static String ListToString(List<String> data) {StringBuilder sb = new StringBuilder();for(int i = 0; i < data.size(); i++) {if (sb.length() > 0) {//该步即不会第一位有逗号,也防止最后一位拼接逗号!sb.append(",");}sb.append(data.get(i));}return sb.toString();}
}

调用service代码,仅供参考: 

/*** @Author zhangjiantianya* @create 2021/9/23 10:39*/
@Service
public class test {@Autowiredprivate IDingtalkService iDingtalkService;@Autowiredprivate CyyDingtalkPushUserDao cyyDingtalkPushUserDao;/*** XXXX状态通知* @return*/@Overridepublic R noticeForxxxxStatus() {try {// 编辑钉钉推送手机号List<String> mobileList = new ArrayList<>();List<CyyDingtalkPushUser> cyyDingtalkPushUserList =cyyDingtalkPushUserDao.createLambdaQuery().andEq(CyyDingtalkPushUser::getStatus, 0).select();if (cyyDingtalkPushUserList.size() == 0){// 手机号没有,直接抛出异常throw new Exception(String.format("未查询到需推送手机号!"));}for (int i = 0; i < cyyDingtalkPushUserList.size(); i++) {mobileList.add(cyyDingtalkPushUserList.get(i).getMobile());}String mobiles = MyStringUtils.ListToString(mobileList);// 编辑钉钉推送文本List<String> infoList = new ArrayList<>();String info = "*****XXXX状态通知*****";Boolean res = iDingtalkService.transferStatusNotice(mobiles, info);if (!res){XxlJobLogger.log("<< 钉钉推送服务异常:{}", info);return R.fail("转关单状态钉钉推送失败!");}XxlJobLogger.log(">> 推送成功!");}} catch (Exception e) {XxlJobLogger.log("<<XXXX状态通知推送服务异常:{},{}", e.getMessage(), e);}return R.success();}}

 参考文档:开发H5微应用 - 钉钉开放平台 (dingtalk.com)icon-default.png?t=M0H8https://open.dingtalk.com/document/org/develop-org-h5-micro-applications

应用类型介绍 - 钉钉开放平台 (dingtalk.com)icon-default.png?t=M0H8https://open.dingtalk.com/document/org/application-types

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/19852.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Prometheus+Alertmanager+webhook-dingtalk实现钉钉告警

文章目录 一、前提准备及规划二、安装及启动2.1 Prometheus安装启动2.2 Node_export安装启动2.3 Alertmanager安装启动2.4 Webhook-dingtalk安装启动 三、配置及测试3.1 Webhook-dingtalk配置钉钉webhook地址3.2 Alertmanager配置钉钉告警3.3 Prometheus集成Alertmanager及告警…

和chatgpt学架构02-环境搭建

目录 1 安装vs code2 vs code功能介绍3 安装nodejs4 安装vue5 在vs code打开工程总结 我们在上一篇 技术选型 里咨询了chatgpt前后端的框架选择和数据库的选择。有了框架之后就需要选择合适的开发工具了&#xff0c;继续咨询一下chatgpt 我现在选型&#xff0c;前端使用vue&am…

〖编程初学者的自我修养 - 职业规划篇①〗- 大学生选择职业前的自我认知与剖析

历时18个月&#xff0c;采访 850 得到的需求。 不管你是在校大学生、研究生、还是在职的小伙伴&#xff0c;该专栏有你想要的职业规划、简历、面试的答案。说明&#xff1a;该文属于 编程初学者的自我修养 专栏&#xff0c;购买任意白宝书体系化专栏可加入易编程社区&#xff0…

谷歌Bard被曝剽窃ChatGPT?BERT一作跳槽OpenAI,揭惊天内幕

【导读】谷歌有大麻烦了&#xff01;外媒爆料说&#xff0c;Bard的训练数据部分来自ChatGPT。谷歌可能跳到黄河里也洗不清了。 3月29日&#xff0c;外媒The Information曝出了一个惊天大瓜&#xff01; 谷歌的离职员工、已跳槽OpenAI的顶级研究员竟然曝出——Bard竟是用ChatG…

人工智能AIGC最新综述:从 GAN 到 ChatGPT 的AI生成历史

一句话总结 本综述全面回顾了生成模型的历史、基本模型组件、AIGC从单模态交互和多模态交互的最新进展&#xff0c;以及模态之间的交叉应用&#xff0c;最后讨论了AIGC中存在的开放问题和未来挑战。 摘要 最近&#xff0c;ChatGPT 与 DALL-E-2 和 Codex 一起受到了社会的广泛关…

ChatGPT is not all you need,一文综述6大公司9类生成式AI模型

关注并星标 从此不迷路 计算机视觉研究院 公众号ID&#xff5c;ComputerVisionGzq 学习群&#xff5c;扫码在主页获取加入方式 计算机视觉研究院专栏 作者&#xff1a;Edison_G 生成模型领域里&#xff0c;ChatGPT 并不是一切。 转自《机器之心》 过去两年&#xff0c;AI 领域里…

chatgpt赋能python:Python最简单的小游戏:猜数

Python 最简单的小游戏&#xff1a;猜数 作为一门高效、简单而且易于学习的编程语言&#xff0c;Python 受到了越来越多的开发者的喜爱。其中&#xff0c;编写小游戏是Python语言学习中一个很有趣的领域&#xff0c;因为它可以帮助你通过实践加深对Python语法和概念的理解。在…

chatgpt赋能Python-python3小游戏

Python3小游戏&#xff1a;为你的休闲时光增添乐趣 如果你正处于寻找一款简单好玩的小游戏&#xff0c;那么Python3小游戏将是你的不二之选。作为一名有10年Python编程经验的工程师&#xff0c;我可以说Python3小游戏是一款非常有趣、挑战性适中、易于上手的游戏。接下来&…

Github推荐--PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了)

逛Github的时候会遇到一些很好玩的项目 今天分享一个可以在PC端实现QQ防撤回功能的项目。&#xff08;安卓手机有Xposed框架&#xff09; 首先是项目地址&#xff1a; 我已经看到了&#xff0c;撤回也没用了 使用方法&#xff1a; 下载后解压&#xff0c;会出现RevokeMsgPatche…

微信防撤回功能修改

今天无意之中看到了一个帖子&#xff0c;谈到了有关微信消息撤回的。突发奇想实现一下&#xff0c;以后就不怕错过朋友的消息了。 首先介绍一下基本思路&#xff0c;由于微信采用的是CS端原理&#xff0c;所有的数据请求均通过服务器&#xff0c;客户端只是响应指令而已。 A向…

Git 如何撤回已经push到远端上的代码

首先 git log&#xff0c;目的是找到这次想要撤回的提交的上一次提交&#xff0c;并记录下红框中的commit id 回退代码&#xff0c;输入 git reset --soft commit id 回退代码, 回退完成后代码相当于刚写完的状态&#xff0c;即还没有进行add、commit、push…

微信多开防撤回工具再也不用担心好友撤回消息和登录多个账号了

微信&#xff0c;大家工作中生活中用的最多的一款应用&#xff1b;很多公司喜欢用微信来作为工作沟通的工具&#xff0c;官方原版只支持登陆一个微信&#xff0c;这对于需要在电脑上登陆多个微信账号的朋友来说肯定是极其的不方便。另外有的时候别人撤回了一些重要消息&#xf…

Python神级操作,还原已撤回的微信消息

项目环境 语言&#xff1a;Python3 编辑器&#xff1a;Pycharm 导包效果展示 以下截图显示的撤回消息类型依次是文字消息、微信自带表情、图片、语音、定位地图、名片、公众号文章、音乐、视频。有群里撤回的&#xff0c;也有个人号撤回的。 图文来源&#xff1a;http://kk…

利用Python查看微信好友撤回的消息

效果图如下&#xff1a; 不仅可以查看微信好友撤回的文字消息&#xff0c;如位置、视频、音频、图片等等都可以查看。 直接上源代码&#xff1a; # Python查看微信撤回消息 import re import os import time import itchat import platform from itchat.content import TEXT …

用Python实现微信撤回消息还原

在使用微信过程中&#xff0c;有时候我们会撤回一些发错或者不该发的一些信息&#xff0c;今天我就用一段代码实现将撤回的消息还原。。。 从此再也不怕别人撤回消息&#xff0c;自己不能看的尴尬了 import osimport reimport shutilimport timeimport itchatfrom itchat.con…

python学习 -对象把微信消息撤回后好慌,有了这个你就能看到撤回的消息了(超详解)

目录​​​​​​​ 一.简介 普通人 python技术人员 1、准备环境 2、itchat介绍 3、itchat使用 4、pycharm解释器写入代码 一.简介 当我们与朋友&#xff0c;亲人&#xff0c;爱人聊天的时候&#xff0c;我估计每个人都经理过&#xff0c;那就是微信撤回功能中所提到的…

微信能自定义“撤回消息”? QQ 笑了!

大家有没有遇到过和小伙伴聊天&#xff0c;结果输入法突然崛起&#xff0c;等到你撤回的时候尴尬到不行的窘境&#xff1f; 没办法&#xff0c;只好撤回...&#xff08;咳咳&#xff0c;只能说我的输入法已经妖魔化了 但是小伙伴的&#xff1f;号已经紧随其后&#xff0c;要是…

Telegram防撤回工具(Windows)

使用方法 Telegram v2.8.5 及之后版本 使用最新版本补丁将 TAR-Resources文件夹 、TAR-Launcher-x64.exe 、TAR-Launcher-x86.exe 全部解压到Telegram根目录 通过 TAR-Launcher-x64.exe 或 TAR-Launcher-x86.exe&#xff08;取决于你安装的Telegram版本&#xff0c;如果不知道…

用python实现监听微信撤回消息

import itchat from itchat.content import * import os import time import xml.dom.minidom temp d:/itchat / 撤回的消息 if not os.path.exists(temp):os.mkdir(temp)itchat.auto_login(True) dict {} itchat.msg_register([TEXT, PICTURE, FRIENDS, CARD, MAP, …

Git回退已经提交commit的(还未推送push的)代码及撤回代码回退

1.Git回退已经提交的代码 原文链接&#xff08;原文写的是已经推送push的代码&#xff09; http://t.csdn.cn/CDjgq 已经开始难过了&#xff0c;我提交后没有推送就按照上文提示进行了代码回退&#xff0c;结果idea里面没得我最后一次提交的代码。。。然后我开始了第二轮操作…