自研系统事件通知到钉钉聊天群

企业内部有较多系统支撑着公司的核心业务流程,譬如CRM系统、交易系统、监控报警系统等等。我们可以通过钉钉提供的自定义机器人,将这些系统事件同步到钉钉的聊天群。

例如:

  • 预案平台的预案执行完毕后,通过钉钉机器人将预案的相关信息和状态同步到群里。

  • 故障处理平台将故障的处理过程实时同步到钉钉群。

  • 数据分析团队的分析任务完成后,会通过钉钉机器人将结果发送到群里,并通过消息的@功能提醒需求方。

1.首先我们需要下载钉钉PC端,然后新建 一个钉钉聊天群

自研系统事件通知到钉钉聊天群_第1张图片

2.点击群设置,点击智能群助手

自研系统事件通知到钉钉聊天群_第2张图片

3.点击添加机器人,然后选择自定义

自研系统事件通知到钉钉聊天群_第3张图片
自研系统事件通知到钉钉聊天群_第4张图片

4.输入机器人名字,安全设置选择加签,选择我已阅读并同意

自研系统事件通知到钉钉聊天群_第5张图片

5.完成之后得到Webhook地址

自研系统事件通知到钉钉聊天群_第6张图片

注意:记录好Webhook和签名,接下来我们使用Java来实现一个demo

5.创建demo项目,引入maven依赖


        
            com.aliyun
            alibaba-dingtalk-service-sdk
            1.0.1
        

6.Java示例


String sign = "my sign";
String webhook = "my webhook";
DingTalkClient client = new DefaultDingTalkClient(webhook + "&sign=" + sign);
OapiRobotSendRequest request = new OapiRobotSendRequest();

request.setMsgtype("text");
OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
text.setContent("测试文本消息");
request.setText(text);
OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
at.setAtMobiles(Arrays.asList("132xxxxxxxx"));
// 是否发送给所有人
at.setIsAtAll(true);
request.setAt(at);

request.setMsgtype("link");
OapiRobotSendRequest.Link link = new OapiRobotSendRequest.Link();
link.setMessageUrl("https://www.dingtalk.com/");
link.setPicUrl("");
link.setTitle("时代的火车向前开");
link.setText("这个即将发布的新版本,创始人xx称它为红树林。而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是红树林");
request.setLink(link);

request.setMsgtype("markdown");
OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
markdown.setTitle("杭州天气");
markdown.setText("#### 杭州天气 @156xxxx8827\n" +
        "> 9度,西北风1级,空气良89,相对温度73%\n\n" +
        "> ![screenshot](https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png)\n"  +
        "> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \n");
request.setMarkdown(markdown);

OapiRobotSendResponse response = client.execute(request);

7.说一下签名是如何生成的

把 timestamp + “\n” + access_token 当做签名字符串,使用 HmacSHA256 算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。


Long timestamp = System.currentTimeMillis();
String secret = "access_token";

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");
System.out.println(sign);

你可能感兴趣的:(其他)