「连接平台」开发实践——企业告警信息通过机器人同步至钉钉群

教程简介

本教程将指导你如何基于连接器的触发事件官方执行动作连接流,发送机器人业务告警信息到指定群会话。

本教程最终发送的机器人告警信息效果如下:

准备工作

在开始本教程前,确保你已经完成了以下准备工作:

  • 已经完成了钉钉开发者的注册与激活并拥有了子管理员和开发者权限。若尚未完成,请参考成为钉钉开发者

  • 已经安装了Java开发环境。若未安装,请访问Oracle官网下载。

  • 已下载并安装了IntelliJ IDEA工具。若未安装,请访问IntelliJ IDEA

步骤一:创建并配置应用

在本部分,你需要在开发者后台创建一个H5微应用,并获取应用的AgentIdAppKeyAppSecret等信息。

  1. 登录钉钉开发者后台

    说明 

    只有管理员和子管理员可登录开发者后台,详情可查看成为钉钉开发者

  2. 开发者后台页面,选择企业内部开发,然后单击创建应用

  3. 在弹出的创建应用页面中填写基本信息,然后单击确定创建。

    • 应用类型:选择H5微应用。

    • 开发方式:选择企业自主开发。

  4. 应用创建完成后,在基础信息页面,复制应用的AgentIdAppKeyAppSecret备用。

步骤二:创建自定义机器人

在本部分你将在群会话中创建一个用于发送告警信息的群机器人。

  1. 选择需要添加机器人的群聊,然后依次单击群设置 智能群助手

  2. 在机器人管理页面选择自定义机器人,输入机器人名字并选择要发送消息的群,同时可以为机器人设置机器人头像。

  3. 完成必要的自定义机器人安全设置,勾选我已阅读并同意《自定义机器人服务及免责条款》,然后单击完成

    本示例仅配置自定义关键字业务报警

  4. 完成安全设置后,复制出机器人的Webhook地址,可用于向这个群发送消息,格式如下:

    https://oapi.dingtalk.com/robot/send?access_token=XXXXXX
    说明 

    请保管好此Webhook地址,不要公布在外部网站上,泄露后有安全风险。

步骤三:创建自建连接器

在本部分你将创建一个自建连接器。

  1. 登录开发者后台

  2. 选择开放能力,然后选择连接平台

  3. 选择我的连接,然后依次单击连接器 > 创建连接器

步骤四:配置连接器

在本部分你将完成连接器的配置。

  1. 连接器详情页,单击左侧列表中的触发事件,然后在触发事件页面单击创建触发事件

  2. 在创建触发事件页面,输入触发事件名称,然后选择不加入主数据联盟并单击下一步

  3. 根据以下内容完成模型配置,并单击下方保存

    1. 单击导入json,然后选择JSON-SCHEMA并将下方Json字符串粘贴进去,最后单击确定

      说明 

      以下数据模型仅用于本教程发送MarkDown消息展示,切勿用于实际开发。

      {
          "description": "当前对象模型根容器",
          "type": "object",
          "title": "root",
          "properties": {
              "msgType": {
                  "description": "消息类型",
                  "type": "string",
                  "title": "msgType"
              },
              "markdown": {
                  "description": "markdown消息",
                  "type": "object",
                  "title": "markdown",
                  "properties": {
                      "text": {
                          "description": "markdown消息内容",
                          "type": "string",
                          "title": "text"
                      },
                      "title": {
                          "description": "首屏会话透出的展示内容",
                          "type": "string",
                          "title": "title"
                      }
                  },
                  "required": [
                      "text",
                      "title"
                  ]
              },
              "accessToken": {
                  "description": "AccessToken",
                  "type": "string",
                  "title": "AccessToken"
              }
          },
          "required": [
              "accessToken",
              "msgType",
              "markdown"
          ]
      }
      • 输出类型类型选择默认(与上文数据模型一致)

  4. 触发事件创建完成后,复制触发事件ID备用。

步骤五:创建连接流

在本部分你将使用完成连接流的创建和配置。

  1. 在连接平台首页,依次单击我的连接 > 连接流进入连接流页面,然后单击右上角创建流

  2. 根据以下信息创建流,然后单击确定,创建成功后会自动跳转到连接流配置页面。。

    • 名称、描述:分别填写连接流的名称和描述。

    • 触发器:选择步骤二配置的触发事件。

  3. 在连接流配置页面,单击执行动作开始配置。

  4. 在弹出的页面,依次选择官方连接器 > 机器人 > 自定义机器人接入发送消息

  5. 单击入参映射下方设置,将参数赋值给节点入参

    • msgType:连接右侧消息类型。

    • markdown:连接右侧Markdown消息。

    • AccessToken:连接右侧accessToken。

  6. 单击保存,然后单击发布

步骤六:调用接口触发事件

在本部分你将调用发送连接器事件接口,触发连接器事件发送机器人消息。

  1. 打开IntelliJ代码编辑工具。

  2. 在项目的pom.xml文件中添加以下Maven依赖。

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.6</version>
    </dependency>
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>dingtalk</artifactId>
        <version>1.1.86</version>
    </dependency>
    • 在项目下新建一个测试类ConnectorSendMsgDemo,然后将以下代码复制进去。

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.dingtalkconnector_1_0.Client;
      import com.aliyun.dingtalkconnector_1_0.models.SyncDataRequest;
      import com.aliyun.dingtalkconnector_1_0.models.SyncDataResponse;
      import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest;
      import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponse;
      import com.aliyun.tea.*;
      import com.aliyun.teautil.models.*;
      import com.aliyun.dingtalkconnector_1_0.models.SyncDataRequest.*;
      import com.aliyun.dingtalkconnector_1_0.models.*;
      import com.aliyun.teaopenapi.models.*;
      import java.util.Arrays;
      import java.util.Date;
      
      public class ConnectorSendMsgDemo {
      
          // 微应用ID
          private static final String APP_ID ="***";
          // 微应用AppKey
          private static final String APP_KEY ="***";
          // 微应用AppSecret
          private static final String APP_SECRET ="***";
          // 连接器触发事件ID
          private static final String TRIGGER_ID ="G-TRI-***";
          // 机器人发动消息的accessToken
          // https://oapi.dingtalk.com/robot/send?access_token=***
          private static final String ACCESS_TOKEN ="***";
      
          /**
           * @param appKey:微应用的appKey
           * @param appSecret:微应用的appSecret
           * @return accessToken
           * @throws Exception
           */
          public static String getAccessToken(String appKey, String appSecret) throws Exception {
              Config config = new Config();
              config.protocol = "https";
              config.regionId = "central";
              com.aliyun.dingtalkoauth2_1_0.Client client = new com.aliyun.dingtalkoauth2_1_0.Client(config);
              GetAccessTokenRequest accessTokenRequest = new GetAccessTokenRequest()
                      .setAppKey(appKey)
                      .setAppSecret(appSecret);
              GetAccessTokenResponse accessToken = client.getAccessToken(accessTokenRequest);
              return accessToken.getBody().getAccessToken();
          }
      
          /**
           * @param appId:发起调用的微应用ID
           * @param accessToken:接口调用凭证
           * @param sriggerId:触发事件ID
           * @param msg:消息内容
           * @throws Exception
           */
          public static void sendMSG(String appId, String accessToken, String sriggerId, String msg) throws Exception {
              Config config = new Config();
              config.protocol = "https";
              config.regionId = "central";
              Client client = new Client(config);
              SyncDataHeaders syncDataHeaders = new SyncDataHeaders();
              syncDataHeaders.xAcsDingtalkAccessToken = accessToken;
              SyncDataRequestTriggerDataList triggerDataList = new SyncDataRequestTriggerDataList()
                      .setTriggerId(sriggerId)
                      .setJsonData(msg)
                      .setDataGmtCreate(new Date().getTime())
                      .setDataGmtModified(new Date().getTime())
                      .setAction("add");
              SyncDataRequest syncDataRequest = new SyncDataRequest()
                      .setTriggerDataList(Arrays.asList(
                              triggerDataList
                      ))
                      .setAppId(appId);
              try {
                  SyncDataResponse response = client.syncDataWithOptions(syncDataRequest, syncDataHeaders, new RuntimeOptions());
                  System.out.println(JSON.toJSONString(response, true));
              } catch (TeaException err) {
                  if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                      // err 中含有 code 和 message 属性,可帮助开发定位问题
                      System.out.println(JSON.toJSONString(err.getData(), true));
                  }
              } catch (Exception _err) {
                  TeaException err = new TeaException(_err.getMessage(), _err);
                  if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                      // err 中含有 code 和 message 属性,可帮助开发定位问题
                      System.out.println(JSON.toJSONString(err.getData(), true));
                  }
              }
          }
      
          public static String msg() {
              JSONObject msg = new JSONObject();
              JSONObject markdown = new JSONObject();
              markdown.put("text","## 业务报警    \n 这是一条报警信息!!!");
              markdown.put("title","告警信息");
              msg.put("accessToken",ACCESS_TOKEN);
              msg.put("msgType","markdown");
              msg.put("markdown",markdown);
              System.out.println(msg.toJSONString());
              return msg.toJSONString();
          }
      
          public static void main(String[] args_) throws Exception {
              sendMSG(APP_ID,getAccessToken(APP_KEY, APP_SECRET),TRIGGER_ID,msg());
          }
      }
      • 根据以下内容补充代码中所必须的参数。

        • APP_ID:填写步骤一创建的应用的AgentId

        • APP_KEY:填写步骤一创建的应用的AppKey

        • APP_SECRET:填写步骤一创建的应用的AppSecret

        • TRIGGER_ID:填写步骤四配置连接器触发事件的事件ID

        • ACCESS_TOKEN:自定义机器人的设置页面,Webhook地址中的access_token参数。

      • 参数添加完成后,右键单击代码的任意位置,然后单击Run'ConnectorSendMsgDemo.main()'运行此代码。

      • 由下图可以看出,业务报警信息发送成功。

恭喜

你已完成本教程全部内容,如需了解连接平台的更多功能,可参考什么是连接平台

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值