博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从零开始打造专属钉钉机器人
阅读量:4033 次
发布时间:2019-05-24

本文共 4922 字,大约阅读时间需要 16 分钟。

一、前言

废话不多的实现简单的钉钉机器人。我们分为下面几个步骤来逐步讲解。

1.钉钉机器人的类型
2.如何打造一个最最简单的钉钉机器人

二、钉钉机器人的类型

常用的钉钉机器人有两种,

1、通知类型的机器人:适合在群内进行一些通知,推荐消息等内容。
2、可以回复消息的机器人:能够回复@机器人的消息,机器人会将响应内容发送到群里。
本次,我们分别讲解两种机器人是如何实现的

三、打造一个最简单的通知类型钉钉机器人

首先用通知类型的机器人为例子。

1. 打开一个你想创建机器人的钉钉群。
2.在右边栏选择更多选项,点击群助手的打开:

然后选择添加机器人

选择自定义机器人

然后需要注意!在这个配置页面中。

安全设置我们选择【自定义关键词】
只要每次发送的消息带有该自定义关键词,消息就能成功发送。接下来选择同意并完成。

拷贝标记出来的完整链接【Webhook】,然后选择完成

钉钉机器人的配置就完成了。

3.第三步开始开始写代码:

直接上发起的示例代码:
apiurl 就是获取的完整链接【Webhook】

jsonString是发起的请求内容,json格式示例如下:

{"msgtype": "text",     //钉钉的发送样式"text": {"content": "我就是我, 是不一样的烟火@156xxxx8827"   //发送到群中的内容},"at": {      //需要消息@对应人的手机号"atMobiles": ["156xxxx8827","189xxxx8325"],"isAtAll": false   //如果需要@所有人 这个值设置为true}}

下面就是发送代码:

/// /// 以Post方式发送请求/// /// 请求的URL/// 请求的json参数/// 请求头的key-value字典public static string PostDingDing(string jsonString, string apiurl = null, Dictionary
headers = null) {if (apiurl == null){apiurl = AppSettings.WebHook;//机器人的webhook}WebRequest request = WebRequest.Create(@apiurl);request.Method = "POST";request.ContentType = "application/json";if (headers != null){foreach (var keyValue in headers){if (keyValue.Key == "Content-Type"){request.ContentType = keyValue.Value;continue;}request.Headers.Add(keyValue.Key, keyValue.Value);}}if (String.IsNullOrEmpty(jsonString)){request.ContentLength = 0;}else{byte[] bs = Encoding.UTF8.GetBytes(jsonString);request.ContentLength = bs.Length;Stream newStream = request.GetRequestStream();newStream.Write(bs, 0, bs.Length);newStream.Close();}WebResponse response = request.GetResponse();Stream stream = response.GetResponseStream();Encoding encode = Encoding.UTF8;StreamReader reader = new StreamReader(stream, encode);string resultJson = reader.ReadToEnd();return resultJson;}

好了,我们的钉钉机器人消息就发起成功了,如下图:

四、打造一个最简单的自动回复机器人

自动回复消息的机器人,能够回复@机器人的消息,机器人会将响应内容发送到群里。

该功能能够直接在钉钉中就实现简单的数据查询与交互。
接下来我们实现一个简单的自动回复机器人的例子。
1. 首先需要登陆钉钉开发者后台,创建一个机器人。
登录钉钉开发者后台,
选择应用开发-企业内部开发-机器人,点击创建机器人。

2.选择创建机器人:

选择应用类型是机器人,想一个机器人的名称等等,然后直接点击【确定创建】,机器人就创建好了。

3.机器人简易配置:

参数 描述
服务器出口IP 填写本企业服务器的公网IP
消息接收地址 填写一个公网可访问的本企业HTTPS服务地址,用于接收POST过来的消息

只用配置如上两个参数。一个简单的机器人配置就完成了。

4.后端代码配置:

机器人配好了,但是目前还是调试模式,正式上线前,可以在测试群进行调试。

在测试群中,新增一个刚刚建好的机器人,保存好Webhook

5.接下来是代码了:

首先构建一个接收类

public class dingRotBotDto{public string msgtype { get; set; }public dingText text { get; set; }public string msgId { get; set; }public string createAt { get; set; }public string conversationType { get; set; }public string conversationId { get; set; }public string conversationTitle { get; set; }public string senderId { get; set; }public string senderNick { get; set; }public string senderCorpId { get; set; }public string senderStaffId { get; set; }public string chatbotUserId { get; set; }public List
atUsers { get; set; }}public class dingText{public string content { get; set; }}public class dingUser{public string dingtalkId { get; set; }public string staffId { get; set; }}
参数 是否必填 类型 描述
msgtype String 目前只支持text
content String 消息文本
msgId String 加密的消息ID
createAt String 消息的时间戳,单位ms
conversationType String 1-单聊、2-群聊
conversationId String 加密的会话ID
conversationTitle String 会话标题(群聊时才有)
senderId String 加密的发送者ID
senderNick String 发送者昵称
senderCorpId String 发送者当前群的企业corpId(企业内部群有)
senderStaffId String 发送者在企业内的userid(企业内部群有)
chatbotUserId String 加密的机器人ID
atUsers Array 被@人的信息dingtalkId: 加密的发送者IDstaffId: 发送者在企业内的userid(企业内部群有)

然后构建一个返回消息类:

public class DingDingMessage    {public DingDingMessage(){this.at = new At();this.text = new Text();this.markdown = new MarkDown();}public string msgtype { set; get; }//消息类型public Text text { set; get; }//text类型public MarkDown markdown { set; get; }//markdown类型public At at { set; get; }//@}
参数 是否必填 类型 描述
msgtype String text
content String 消息文本
atMobiles Array 被@人的手机号
isAtAll Boolean @所有人是true,否则为false

现在开始写一个接收钉钉机器人消息的方法:

[HttpPost("GetDingRoBot")]public async Task
GetDingRoBot([FromBody] dingRotBotDto input) {var phone=await _fuluDing.GetUserPhone(input.senderStaffId);//获取发送人的电话,回复消息的时候可以@对应的发送人。if (input.text.content.Contains("[XXXX]"))///input.text.content就是接受到的消息, 可以通过改字段进行消息过滤{var s = input.text.content.Split(']')[1];var text=await todo...;//调用自己的方法,返回需要回复的消息SendMessage(text, phone); //发送回复的消息}else{await SendMessage("请输入正确的命令:[流水上账查询]XXXX", phone);}return Ok(ResponseResult.Execute("0", null, $"发送成功"));}public SendMessage(string text,string atMobiles)//发送消息 {DingDingMessage message = new DingDingMessage();message.msgtype = "text";message.text.content = text;message.at.atMobiles.Add(atMobiles);String data = JsonConvert.SerializeObject(message);//Json将对象序列化var json = await _client.PostAsync("xxxxx", new StringContent(data, Encoding.UTF8, "application/json"));//post 发起一个请求到 配置该机器人群的 Webhook 地址xxxxx}

这样 ,一个可以回复消息的机器人就配置好了。我们可以试一试。

6.上线:

好了,当我们一切弄好就可以正式上线了

只要我们点击管理页面的上线。机器人就正式上线了。

文章的最后,顺带分享下几个踩坑问题
1.发起的消息中一定要带上【自定义关键词】的内容,不然发起不成功。
2.钉钉机器人发送消息有限制,1min最多20条,超过的无法发送,钉钉会进行限流一段时间。

转载地址:http://zbkdi.baihongyu.com/

你可能感兴趣的文章
慢慢欣赏linux exec加载执行程序
查看>>
慢慢欣赏linux 页框lru的作用
查看>>
慢慢欣赏linux glibc相关
查看>>
慢慢欣赏linux PCI-PCIE初始化总结
查看>>
慢慢欣赏linux PCI-PCIE定制化
查看>>
慢慢欣赏git
查看>>
慢慢欣赏linux 网络协议栈一 全景图
查看>>
慢慢欣赏linux 网络协议栈二 net_device以及初始化注册
查看>>
慢慢欣赏linux 网络协议栈三 监听链路状态
查看>>
慢慢欣赏linux 网络协议栈四 sk_buff以及数据收发
查看>>
慢慢欣赏linux 内核定位手段printk
查看>>
慢慢欣赏linux 网络协议栈七 虚拟网卡
查看>>
linux设备驱动模型代码分析
查看>>
uboot入门学习二 位置无关代码以及地址
查看>>
慢慢欣赏linux 块设备驱动基础
查看>>
慢慢欣赏linux文件缓冲区 mmap分析
查看>>
慢慢欣赏linux 页面回收
查看>>
微视linux waitX的意义
查看>>
微视linux 挂接中断action的前奏 设置中断处理函数
查看>>
RCU锁学习
查看>>