钉钉机器人推送和抓取钉钉群消息
前言1.钉钉机器人能干什么?摘抄:群机器人是钉钉群的高级扩展功能。群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步。目前,大部分机器人在添加后,还需要进行Webhook配置,才可正常使用(配置说明详见操作流程中的帮助链接)。例如:通过聚合GitHub,GitLab等源码管理服务,实现源码更新同步。通过聚合Trello,JIRA等项目协调服务,实现项目信息同步。另外,群...
前言
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;
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)