前言
1.钉钉机器人能干什么?

摘抄:
群机器人是钉钉群的高级扩展功能。群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步。目前,大部分机器人在添加后,还需要进行Webhook配置,才可正常使用(配置说明详见操作流程中的帮助链接)。
例如:
通过聚合GitHub,GitLab等源码管理服务,实现源码更新同步。
通过聚合Trello,JIRA等项目协调服务,实现项目信息同步。
另外,群机器人支持Webhook协议的自定义接入,支持更多可能性,例如:你可将运维报警通过自定义机器人聚合到钉钉群实现提醒功能。

2.钉钉机器人怎么用?

2.1 网上对钉钉自定义机器人描述的帖子比较多,使用起来也比较简单;给个官方文档,相信以大家的聪明才智很容易就看懂了,地址:官方地址

2.2 下面对企业内部机器人做个介绍(网上对这方面的介绍比较少,不知道是不是用的人少);官方地址:官方API

企业机器人是钉钉为用户提供的组织内部使用的机器人,为组织数字化转型业务服务。开发者可通过本文所描述步骤进行机器人的自主开发和上架,组织内其它成员可通过方便快捷地在群内添加企业机器人,并使用用机器人的能力。

基于企业机器人的outgoing机制,用户@机器人之后,钉钉会将消息内容POST到开发者的消息接收地址。开发者解析出消息内容、发送者身份,根据企业的业务逻辑,组装响应的消息内容返回,钉钉会将响应内容发送到群里。

最后,给大家画个图介绍一下它的使用场景,大家可以结合自己的业务需求,对号入座;
在这里插入图片描述
很多人私信说要看源码,现在补上:
第一步 钉钉后台设置页面填写@机器人后调用地址(我们自己业务系统暴露的接口地址):
在这里插入图片描述
第二步:系统后台代码

//Entity 接收对象
@Data
public class DemdITVo {
    //姓名
    private String senderNick;
    //回调的webhook
    private String sessionWebhook;
    //内容json content
    private JSONObject text;
    //加密ID 工单机器人
    private String chatbotUserId;
    //用户加密ID
    private String senderId;
    //群聊标题
    private String conversationTitle;
    //用户钉钉UserId
    private String senderStaffId;
}

//Controller层
@PostMapping("/sendItByDd")
public ResMesg sendItByDd(@RequestBody DemdITVo params) {
    logger.info("接收钉钉群消息提交的信息,param:{}", params);

    return sendData(demdService.saveOnlineDemand(params));
}

//具体业务就不截图了 说一下怎么回调@当事人
/**
* 返回群消息
* @param vo
* @param content
*/
private void sendSessionWebHook(DemdITVo vo, String content) {
   try {
       logger.info("sendSessionWebHook start send robot:" + content);

       String msg = "{\n" +
               "     \"msgtype\": \"text\",\n" +
               "\"text\": {\n" +
               "         \"content\": \""+content+"\"\n" +
               "     }," +
               "    \"at\": {\n" +
               "        \"atDingtalkIds\": [\n" +
               "            \""+ vo.getSenderId() +"\"\n" +
               "        ], \n" +
               "        \"isAtAll\": false\n" +
               "    }\n" +
               " }";
       String jsonResult = HttpClientUtil.sendPostByThree(vo.getSessionWebhook(), msg);
       logger.info("sendSessionWebHook end send robot:" + jsonResult);
   } catch (Exception e) {
       logger.error("sendSessionWebHook 发送钉钉群消息时出错,error={}", e);
   }
}
//HttpClientUtil的代码
public static String sendPostByThree(String url, String jsonParam) {
    String respContent = "";
    try {
        HttpPost httpPost = new HttpPost(url);
        RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(8000)
                .setConnectTimeout(8000).setSocketTimeout(8000).setRedirectsEnabled(false).build();
        httpPost.setConfig(requestConfig);
        StringEntity entity = new StringEntity(jsonParam,"utf-8");
        entity.setContentEncoding("UTF-8");
        entity.setContentType("application/json");
        httpPost.setEntity(entity);

        HttpClient httpClient = HttpClients.createDefault();
        HttpResponse resp = httpClient.execute(httpPost);

        if (200 == resp.getStatusLine().getStatusCode()) {
            HttpEntity responseEntity = resp.getEntity();
            respContent = EntityUtils.toString(responseEntity);
        }
    } catch (Exception e) {
        logger.error(e.getMessage(),e);
    }
    return respContent;
}
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐