1,添加釘釘機器人;釘釘群 = > 群設置 => 智能群助手 => 添加機器人 => 自定義機器人
2,添加SDK配置,下載jar
<!-- 釘釘消息推送 --> <dependency> <groupId>com.aliyun</groupId> <artifactId>alibaba-dingtalk-service-sdk</artifactId> <version>1.0.1</version> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency>
下載SDK地址 https://ding-doc.dingtalk.com/doc#/faquestions/vzbp02/8DMhu
至於怎么添加到本地maven和上傳到私服庫,在其他博客中有詳細講解。
3,代碼實現
import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.request.OapiRobotSendRequest; import com.dingtalk.api.response.OapiRobotSendResponse; import com.zy.core.model.BDic; import com.zy.model.ding.in.SendMessageIn; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.binary.Base64; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; /** * @author zxq * @description 釘釘推送服務類 * @date 2020/11/26 */ @Slf4j public class DingTalkService { //文本消息 private static final String TEXT = "text"; private static final String LINK = "link"; private static final String MARKDOWN = "markdown"; private static final String ACTION_CARD = "actionCard"; private static final String FEED_CARD = "feedCard"; /** * @description: 推送消息 * @param in * @return: void * @author: zxq * @Date: 2020/11/26 13:28 */ public static void sendMessage(SendMessageIn in) throws Exception { log.info("開始推送釘釘消息:" + in); Long timestamp = System.currentTimeMillis(); String secret = in.getSecret(); String stringToSign = timestamp + "\n" + secret; Mac mac = Mac.getInstance("HmacSHA256"); mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256")); byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8")); String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8"); DingTalkClient client = new DefaultDingTalkClient(in.getWebhook() + "×tamp=" + timestamp + "&sign=" + sign); OapiRobotSendRequest request = new OapiRobotSendRequest(); OapiRobotSendRequest.At at = new OapiRobotSendRequest.At(); if (in.isAtAll() || in.getMobileList() == null || in.getMobileList().size() == 0) { //推送所有人 at.setIsAtAll(true); } else { //推送指定用戶 at.setAtMobiles(in.getMobileList()); at.setIsAtAll(false); } request.setAt(at); //文本消息 if (TEXT.equals(in.getMsgType())) { request.setMsgtype(BDic.DING_TALK_MSG_TYPE.TEXT); OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text(); text.setContent(in.getText()); request.setText(text); } OapiRobotSendResponse response = client.execute(request); log.info("釘釘推送返回結果:" + response); } public static void main(String[] args) throws Exception { List<String> mobileList = new ArrayList<>(); mobileList.add("156xxxxxxxx"); SendMessageIn in = new SendMessageIn(); in.setMsgType(TEXT); in.setAtAll(false); in.setMobileList(mobileList); in.setWebhook("https://oapi.dingtalk.com/robot/send?access_token=xxxxx"); in.setSecret("簽"); in.setText("桃花塢里桃花庵,桃花庵下桃花仙"); sendMessage(in); } } import lombok.Data; import java.util.List; /** * @author zxq * @description 發送釘釘消息 入參 * @date 2020/11/13 */ @Data public class SendMessageIn { //消息類型 private String msgType; //webhook private String webhook; //密鑰 private String secret; //文本 private String text; //指定對象 private List<String> mobileList; //是否推送所有人 private boolean isAtAll; }
4,結果
釘釘開發文檔地址:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq