使用asp.net开发钉钉群机器人全过程

本文介绍了如何使用ASP.NET开发钉钉群机器人,从下载C# SDK,配置机器人,到编写WebService接口,解析JSON,以及验证信息和处理不同消息类型。文中提供关键代码片段,并分享了开发过程中的经验与注意事项。
摘要由CSDN通过智能技术生成

集团是使用钉钉进行工作交流的, 发现群里有很多问题其实是重复的,就在想是不是可以使用钉钉的群机器人,虽然说的确是可以部分实现,但是感觉还是差点什么,而且公司内部很多东西也不方便放上去,所以就想开发一个群机器人,然后就看钉钉开发文档,发现是有这个功能的,就开始研究,官方文档使用的语言主要是Java,并没有c#或者asp.net的相关文档,这就意味着要从头开始开发, 所幸的是他是有c#的SDK开发包,开发包里是有DLL的,这样能省下不少事,废话不多说,上链接

https://open.dingtalk.com/document/resourcedownload/download-server-sdk

打开页面后往下拉,知道如图所示处

我下载的是.net版本,下载下来后,导入到项目中即可
然后是配置机器人,这些在往上教程很多就不多赘诉了,直接上图

 

一开始我是在页面上面写的,看到官方文档上面说到了header,考虑到可能要使用到request 获取,就直接在页面写了,

后来在页面上通过以后改到了WebService中,毕竟感觉上webservice 会好一些,

 把消息接收地址改成了这样,其实两者代码类似,只是我可能更喜欢在接口里写

 1  protected string secret = 改成你自己的机器人的appSecret;
 2     #region 机器人操作类
 3     [WebMethod]
 4     public void Reboot()
 5     {
 6         string result = "";
 7         using (StreamReader reader = new StreamReader(HttpContext.Current.Request.InputStream, Encoding.UTF8))
 8         {
 9             result = reader.ReadToEnd();
10         }
11         try
12         {
13             string sign = HttpContext.Current.Request.Headers.GetValues("sign")[0].ToString();
14             string timestamp = HttpContext.Current.Request.Headers.GetValues("timestamp")[0].ToString();
15             string json = result;
16             CommonJsonModel model = SymmetricMethod.DeSerialize(json);
17             string text = model.GetModel("text").GetValue("content");
18             string sessionWebhook = model.GetValue("sessionWebhook");
19             string senderStaffId = model.GetValue("senderStaffId");
20             DBHelper.InsertRebootLog(HttpContext.Current.Request, HttpContext.Current.Request.Url.ToString(), "调用机器人", text + "--" + sessionWebhook + "--" + senderStaffId, sign + "----------" + timestamp, result, HttpContext.Current.Request.Headers, "调用机器人");
21         }
22         catch (Exception ex)
23         {
24             DBHelper.InsertRebootLog(HttpContext.Current.Request, HttpContext.Current.Request.Url.ToString(), "调用机器人", result, ex.Message, "接口调用来源不正确","", "调用机器人");
25         }        
26     }
27     #endregion

这是webservice 接口的

 1   string result = "";
 2         using (StreamReader reader = new StreamReader(Request.InputStream, Encoding.UTF8))
 3         {
 4             result = reader.ReadToEnd();
 5         }
 6         try
 7         {
 8             string sign = Request.Headers.GetValues("sign")[0].ToString();
 9             string timestamp = Request.Headers.GetValues("timestamp")[0].ToString();
10             string json = result;
11             CommonJsonModel model = SymmetricMethod.DeSerialize(json);
12             string text = model.GetModel("text").GetValue("content");
13             string sessionWebhook = model.GetValue("sessionWebhook");
14             string senderStaffId = model.GetValue("senderStaffId");
15             DBHelper.InsertRebootLog(Request, Request.Url.ToString(), "调用机器人", text + "--" + sessionWebhook + "--" + senderStaffId, sign + "----------" + timestamp, result, Request.Headers, "调用机器人");
16         }
17         catch (Exception ex)
18         {
19             DBHelper.InsertRebootLog(Request, Request.Url.ToString(), "调用机器人", result, ex.Message, "", "", "调用机器人");
20         }

这是写在页面Page_Load方法里面的,因为只要执行到这个页面,就是直接执行,没有任何其他操作,所以一定要写在Page_Load方法里

那么json 解析的源码我也放后面,也就是 CommonJsonModel 这个方法的代码

直接建两个类,名字分别是CommonJsonModelAnalyzer 和 CommonJsonModel 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Web;
  4 using System.Text;
  5 
  6 /// <summary>
  7 ///CommonJsonModelAnalyzer 的摘要说明
  8 /// </summary>
  9 public class CommonJsonModelAnalyzer
 10 {
 11     public CommonJsonModelAnalyzer()
 12     {
 13         //
 14         //TODO: 在此处添加构造函数逻辑
 15         //
 16 
 17     }
 18     protected string _GetKey(string rawjson)
 19     {
 20         if (string.IsNullOrEmpty(rawjson))
 21             return rawjson;
 22 
 23         rawjson = rawjson.Trim();
 24 
 25         string[] jsons = rawjson.Split(new char[] { ':' });
 26 
 27         if (jsons.Length < 2)
 28             return rawjson;
 29 
 30         return jsons[0].Replace
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值