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

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

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

登录钉钉开发者后台开发者后台 (dingtalk.com)https://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)https://open.dingtalk.com/document/org/develop-org-h5-micro-applications

应用类型介绍 - 钉钉开放平台 (dingtalk.com)https://open.dingtalk.com/document/org/application-types

钉钉通知-调用钉钉发送企业内部消息开发相关推荐

  1. 钉钉企业内部机器人开发——绑定群聊信息到机器人

    开发机器人的过程中,需要将用户添加的机器人存储在数据库中,对于企业内部机器人,官方只提供一个token,其他的机器人信息都没有提供. 对于自定义webhook机器人,还多了一个secret,其实,一个 ...

  2. 钉钉小程序 企业内部应用开发

    综述 什么是钉钉小程序 小程序是一种全新的开发模式,是一种不需要安装即可使用的应用.钉钉小程序以办公社交app钉钉为载体,支持iOS.安卓等多种操作系统部署. 钉钉小程序开发使用AXML(钉钉修改过的 ...

  3. 钉钉小程序h5微应用企业内部应用开发

    概述 钉钉在企业应用已经是一件很普遍的事情了,我这讲讲钉钉应用小程序中的h5微应用的开发.本文借鉴了lnexin的文章.主要从两个demo来阐述,第一个是通过依照钉钉官网的描述,html+java实现 ...

  4. 钉钉企业内部应用开发php,钉钉企业内部应用开发心得

    基本流程 以企业钉钉管理员身份登陆钉钉开发者平台,进入钉钉开放平台,选择企业内部应用 创建应用,并给应用添加对应logo图片 下载钉钉开放平台提供编译器,在编译器中扫码登陆钉钉账号,选择企业内部应用, ...

  5. 钉钉小程序企业内部应用开发总结

    1,小程序对应的管理后台开发调试 文档链接:https://ding-doc.dingtalk.com/doc#/kn6zg7/qg4y64 需要微应用前端调试工具,直接在钉钉桌面版是没法调试,并且还 ...

  6. 钉钉企业内部机器人开发——同步组织架构人员信息到数据库

    开发钉钉机器人的过程中,我们不仅需要直接把组织架构用户信息导入数据库,还要不定时的进行同步,因为钉钉里面的人员总是在变动,部门也是不断在调整. 下面是使用递归的方式,调用钉钉接口,同步部门和人员信息, ...

  7. C#发送企业内部邮件

    /// /// 发送邮件 /// /// 错误代码 /// 发送成功OR失败static bool sendMail(string errCode) { string host = Configura ...

  8. 企业对接钉钉流程(企业内部应用-H5)

    企业对接钉钉流程(企业内部应用-H5微应用) 开发前准备: 企业自主研发H5微应用 官方文档写的很全了,非常值得细读. 本片,我们企业要接入钉钉(企业内部应用-H5微应用),取钉钉后台数据用. 开发前 ...

  9. 钉钉企业内部机器人python开发(公网部署版本)

    钉钉企业内部机器人开发(公网部署版本) 钉钉给出的开发文档地址如下: https://open.dingtalk.com/document/group/enterprise-created-chatb ...

最新文章

  1. 避免神经网络过拟合的5种技术
  2. [na]vrrp两用(网关冗余+服务器热备)
  3. ASP.NET获取客户端IP及MAC地址
  4. 计算机考研学长学什么,研究生学长浅谈考研心得
  5. 字符内存转成字符串_字符串内存内部
  6. μC/OS-Ⅱ 操作系统内核知识
  7. python matplotlib 画一条水平直线遇到的问题
  8. 测试一下Windows Live Writer能否正常使用。
  9. 计算机管理 未分配磁盘,磁盘显示未分配怎么办?
  10. 如何用课件制作工具验证三角形内角和
  11. redhat升级linux内核,redhat内核升级方法
  12. 汉澳matrix矩阵电脑
  13. node-sass安装失败的解决方法
  14. NOIP2016提高组初赛难点整理
  15. 华为支付购买token的verify接口报错Token is expired or invalid
  16. 3D打印机的原理是什么
  17. 开源 串口调试助手 BaoYuanSerial 使用教程
  18. 弹性力学第五版pdf_弹性力学5-圣维南原理.pdf
  19. 富斯遥控器/接收机的PWM/PPM/iBUS/SBUS通道设置
  20. 电视安装群晖ds video

热门文章

  1. 专访凌云光技术3D视觉业务部经理李淼:做好技术和产品,为VR行业服务
  2. 新车可以无牌上路7天_新车可以无牌上路多少天
  3. MFC中关于char[]转换成LPCWSTR的问题
  4. Python3时间戳转换为指定格式的日期
  5. week2.2数组方法及封装——每天一个JS小总结
  6. 浅谈“phpinfo()信息泄漏”
  7. 【单片机项目】基于STM32的智能小车设计(三)软件设计
  8. 开关电源产生浪涌电流的原因
  9. 客户端需求多变,怎么合理设计服务端API版本?
  10. LCM通信库的安装及使用