前言
1.钉钉机器人能干什么?
摘抄:
群机器人是钉钉群的高级扩展功能。群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步。目前,大部分机器人在添加后,还需要进行Webhook配置,才可正常使用(配置说明详见操作流程中的帮助链接)。
例如:
通过聚合GitHub,GitLab等源码管理服务,实现源码更新同步。
通过聚合Trello,JIRA等项目协调服务,实现项目信息同步。
另外,群机器人支持Webhook协议的自定义接入,支持更多可能性,例如:你可将运维报警通过自定义机器人聚合到钉钉群实现提醒功能。
2.钉钉机器人怎么用?
2.1 网上对钉钉自定义机器人描述的帖子比较多,使用起来也比较简单;给个官方文档,相信以大家的聪明才智很容易就看懂了,地址:官方地址
2.2 下面对企业内部机器人做个介绍(网上对这方面的介绍比较少,不知道是不是用的人少);官方地址:官方API
企业机器人是钉钉为用户提供的组织内部使用的机器人,为组织数字化转型业务服务。开发者可通过本文所描述步骤进行机器人的自主开发和上架,组织内其它成员可通过方便快捷地在群内添加企业机器人,并使用用机器人的能力。
基于企业机器人的outgoing机制,用户@机器人之后,钉钉会将消息内容POST到开发者的消息接收地址。开发者解析出消息内容、发送者身份,根据企业的业务逻辑,组装响应的消息内容返回,钉钉会将响应内容发送到群里。
最后,给大家画个图介绍一下它的使用场景,大家可以结合自己的业务需求,对号入座;
很多人私信说要看源码,现在补上:
第一步 钉钉后台设置页面填写@机器人后调用地址(我们自己业务系统暴露的接口地址):
第二步:系统后台代码
//Entity 接收对象
@Data
public class DemdITVo {//姓名private String senderNick;//回调的webhookprivate String sessionWebhook;//内容json contentprivate JSONObject text;//加密ID 工单机器人private String chatbotUserId;//用户加密IDprivate String senderId;//群聊标题private String conversationTitle;//用户钉钉UserIdprivate 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;
}