• 在庆祝海南建省办经济特区30周年大会上的讲话 2019-10-07
  • 俄罗斯世界杯F组:球迷风采 2019-09-24
  • 彭于晏廖凡曝姜文“精神洁癖” 2019-09-24
  • 苏州大学研究生支教团网上众筹资助留守儿童 2019-09-23
  • 湖北政务微信排行榜第187期出炉 交警类公号表现亮眼 2019-09-19
  • 【奋斗吧2018】风电检修工——荒原上的“听风者” 2019-08-31
  • 母亲节又送康乃馨?送这样的健康佳品才走心 2019-08-30
  • [酷]此文已经把马克思理论、边际理论、人类需求层次理论、生物学理论、心理学理论、社会管理学理论等理论在哲学层面完美融合了! 2019-08-26
  • 兰芝雪纱修颜气垫隔离霜 2019-07-27
  • “鹊桥”中继星顺利进入使命轨道运行 2019-07-27
  • 超越舆情管理的360度信息决策 2019-07-22
  • 视频陶然居变形记:从路边小饭馆到全国餐饮十强 2019-07-21
  • 防震减灾事业发展的重要理论成果 2019-07-20
  • 珠宝配美人!李冰冰大片衣着性感秀身段 2019-07-20
  • 机器人也能拥有“情商”?这个可以有 2019-07-19
  • 香港赛马会足球博彩:Asp.Net Core对接钉钉群机器人的完整步骤记录

     更新时间:2019年03月03日 11:13:55   作者:微笑刺客D   我要评论
    这篇文章主要给大家介绍了关于Asp.Net Core对接钉钉群机器人的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    香港赛马会网站惠泽社绝杀八码 www.mwcrz.tw 前言

    钉钉作为企业办公越来越常用的软件,对于企业内部自研系统提供接口支持,以此来打通多平台下的数据,本次先使用最简单的钉钉群机器人完成多种形式的消息推送,参考钉钉开发文档中自定义机器人环节,此次尝试所花的时间不多,但有几个地方是需要注意的。

      

    一、钉钉群中建立机器人获取WebHook地址

    首先得有一个钉钉群,如果没有得自行创建一个了,通过群内右上角菜单中找到群机器人然后添加一个自定义机器人

      

    并设置消息推送开启(默认是开启),复制下一行的webhook地址,该地址将作为后面消息推送的地址

      

    完成即可,如果不确定该地址是否有效可以用命令测试一下,比如在Linux平台下,通过该命令并将自己的webhook_token替换

    curl 'https://oapi.dingtalk.com/robot/send?access_token=cd1eb120c459ced6a65491af7b1eebbc84790fb672077a969bae8bb203aa1c52' \
     -H 'Content-Type: application/json' \
     -d '
     {"msgtype": "text", 
     "text": {
      "content": "我就是我, 是不一样的烟火"
      }
     }'

    然后回车进行测试,即刻收到群机器人推送的消息  

    二、参考文档完成基础类的封装并处理相关字段

    接下来开始在代码中完成对WebHook地址的调用,可以先分析一下群机器人的文档,可以获悉有五种消息类型:文本 (text)、连接 (link)、markdown(markdown)、ActionCard、FeedCard消息类型,其中的actionCard分整体和独立两类。针对这些类型及给出的参数要求完成基础类的设计和封装,以text类型为例:

    其中的msgtype是五种消息类型的字符串,因此针对该部分设计一个枚举,作为消息类型的区分。

    /// <summary>
    /// 钉钉群机器人消息类型枚举
    /// </summary>
    public enum MsgTypeEnum
    {
     text,
     link,
     markdown,
     actionCard,
     feedCard
    }

    设计一个text类并给定一个属性Content,在设计时我们喜欢使用帕斯卡命名法,但是钉钉接口却不允许,如果不做一些处理,直接使用Content属性将会调用不通接口,这点需要注意,使用Newtonjson提供的打包成json时用指定的名称替换来满足钉钉接口需求。

    /// <summary>
    /// 文本类型
    /// </summary>
    public class Text
    {
     /// <summary>
     /// 文本内容
     /// </summary>
     [JsonProperty(PropertyName = "content")]
     public string Content { get; set; }
    }

    其次对指定人群做一个类的封装,同样需要处理其中的属性在序列化时的替换名称。

    /// <summary>
    /// @指定人
    /// </summary>
    public class At
    {
     /// <summary>
     /// @的联系人
     /// </summary>
     [JsonProperty(PropertyName = "atMobiles")]
     public List<string> AtMobiles { set; get; }
    
     /// <summary>
     /// 是否@所有人
     /// </summary>
     [JsonProperty(PropertyName = "isAtAll")]
     public bool IsAtAll { set; get; }
    }

    通过分析五种消息类型,其中的一些参数可以完成共用,对自定义钉钉机器人文档的一系列挖掘后,确定了这几个类和枚举

    接下来可以完成对机器人调用了并使用不同消息类型推送到钉钉群中。

    三、完成对钉钉群机器人的调用

    首先在ConfigureService方法中完成对HttpClientFactory的注入

    本次直接在Asp.Net Core WebApi下完成机器人的调用,新建一个DingTalk的控制器,然后完成对IHttpClientFactory的注入工作,便开始接下来的服务调用了,对于钉钉的WebHook_Token的存放可以选择配置文件或是如果只是尝试,可以直接用一个变量保存即可。

    /// <summary>
    /// 发送钉钉消息接口
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    public class DingTalkController : ControllerBase
    {
     private readonly string WebHook_Token = "https://oapi.dingtalk.com/robot/send?access_token=cd1eb120c459ced6a65491af7b1eebbc84790fb672077a969bae8bb203aa1c52";
    
     private readonly IHttpClientFactory _httpClientFactory;
    
     public DingTalkController(IHttpClientFactory httpClientFactory)
     {
      _httpClientFactory = httpClientFactory;
     }
    }

    再次以text文本为例并完成文本消息的推送,建立一个action,用来发送文本消息,在其中完成对钉钉接口需要参数的组装工作,最终使用统一的发送方法完成消息推送。

    /// <summary>
    /// 调用钉钉机器人发送文本内容
    /// </summary>
    /// <returns></returns>
    [HttpGet]
    [Route(nameof(TextContent))]
    public async Task<ActionResult> TextContent()
    {
     //消息类型
     var msgtype = MsgTypeEnum.text.ToString();
    
     //文本内容
     var text = new Text
     {
      Content = "看万山红遍,层林尽染;漫江碧透,百舸争流@15675120617"
     };
    
     //指定目标人群
     var at = new At()
     {
      AtMobiles = new List<string>() { "15675120617" },
      IsAtAll = false
     };
    
     var response = await SendDingTalkMessage(new { msgtype, text, at });
    
     return Ok(response);
    }

    对于发送方法内需要根据钉钉文档的一些要求完成设计,如文档指明需要使用Post提交请求并使用UTF8编码,我直接在控制器内新建了一个方法(尽管不太合理),首先对内容进行序列化并封装,然后通过HttpClientFactory新建client并完成发送消息。

    /// <summary>
    /// 执行发送消息
    /// </summary>
    /// <param name="sendMessage"></param>
    /// <returns></returns>
    private async Task<HttpResponseMessage> SendDingTalkMessage(object value)
    {
     var sendMessage = JsonConvert.SerializeObject(value);
    
     var request = new HttpRequestMessage(HttpMethod.Post, WebHook_Token)
     {
      //钉钉文档需指定UTF8编码
      Content = new StringContent(sendMessage, Encoding.UTF8, "application/json")
     };
    
     var client = _httpClientFactory.CreateClient();
     var response = await client.SendAsync(request);
    
     return response;
    }

    启动程序并通过url访问控制器内的相应方法完成消息推送,注意各属性的命名方式或通过特性转换后的命名方式需要满足钉钉接口文档(文档中FeedCard类型后两个参数不太标准)。

    仓库地址:https://gitee.com/530521314/koInstance/tree/master/src/koInstance.WebApi

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:

    相关文章

    • .NET微信公众号开发之准备工作

      .NET微信公众号开发之准备工作

      本文是.NET微信公众号开发系列文章的第一篇,主要给大家简单介绍下微信公众号的一些操作,有需要的小伙伴可以参考下。
      2015-07-07
    • KindEditor图片上传的Asp.net代码实例

      KindEditor图片上传的Asp.net代码实例

      KindEditor是一个不错的网页在线编辑器,可是它只提供了asp,php,jsp上传的类,没有提供Asp.net上传的类,废话不多说,下面是ASP.NET的代码
      2013-11-11
    • asp.net textbox javascript实现enter与ctrl+enter互换 文本框发送消息与换行(类似于QQ)

      asp.net textbox javascript实现enter与ctrl+enter互换 文本框发

      今天与大家分享一下 asp.net textbox javascript实现enter与ctrl+enter互换 文本框发送消息与换行(类似于QQ),这个功能到底怎么实现?首先声明以下几点
      2012-01-01
    • .net中下载文件的实例代码

      .net中下载文件的实例代码

      .net中下载文件的实例代码,需要的朋友可以参考一下
      2013-03-03
    • 深入学习.net验证码生成及使用方法

      深入学习.net验证码生成及使用方法

      这篇文章主要介绍了.net验证码生成及使用方法,先了解验证码是什么以及其作用,最后分享了如何制作验证码,内容很全面,感兴趣的小伙伴们可以参考一下
      2015-11-11
    • asp.net 错误:0x8007000B 异常的解决方法

      asp.net 错误:0x8007000B 异常的解决方法

      这篇文章主要介绍了asp.net 错误:0x8007000B 异常的解决方法,需要的朋友可以参考下
      2015-01-01
    • ASP.NET 窗体间传值的方法

      ASP.NET 窗体间传值的方法

      这篇文章介绍了ASP.NET 窗体间传值的方法,有需要的朋友可以参考一下,希望对你有所帮助
      2013-07-07
    • .Net遍历窗体上控件的方法

      .Net遍历窗体上控件的方法

      这篇文章主要介绍了.Net遍历窗体上控件的方法,通过foreach语句实现遍历窗体上的控件以及找出TextBox控件的功能,具有一定参考借鉴价值,需要的朋友可以参考下
      2014-12-12
    • ASP.NET MVC HtmlHelper如何扩展

      ASP.NET MVC HtmlHelper如何扩展

      ASP.NET MVC 中HtmlHelper方法为我们提供很多html标签,只需在页面调用就行了,但是微软并没有把所有的html标签都对应有了扩展方法,需要我们自定义HtmlHelper,来满足我们需要。
      2016-05-05
    • 动态生成table并实现分页效果心得分享

      动态生成table并实现分页效果心得分享

      动态生成table并实现分页在开发过程中时一个很好的应用,接下来本文也要实现一个类似效果,感兴趣的朋友可以参考下哈
      2013-04-04

    最新评论

  • 在庆祝海南建省办经济特区30周年大会上的讲话 2019-10-07
  • 俄罗斯世界杯F组:球迷风采 2019-09-24
  • 彭于晏廖凡曝姜文“精神洁癖” 2019-09-24
  • 苏州大学研究生支教团网上众筹资助留守儿童 2019-09-23
  • 湖北政务微信排行榜第187期出炉 交警类公号表现亮眼 2019-09-19
  • 【奋斗吧2018】风电检修工——荒原上的“听风者” 2019-08-31
  • 母亲节又送康乃馨?送这样的健康佳品才走心 2019-08-30
  • [酷]此文已经把马克思理论、边际理论、人类需求层次理论、生物学理论、心理学理论、社会管理学理论等理论在哲学层面完美融合了! 2019-08-26
  • 兰芝雪纱修颜气垫隔离霜 2019-07-27
  • “鹊桥”中继星顺利进入使命轨道运行 2019-07-27
  • 超越舆情管理的360度信息决策 2019-07-22
  • 视频陶然居变形记:从路边小饭馆到全国餐饮十强 2019-07-21
  • 防震减灾事业发展的重要理论成果 2019-07-20
  • 珠宝配美人!李冰冰大片衣着性感秀身段 2019-07-20
  • 机器人也能拥有“情商”?这个可以有 2019-07-19
  • 宝赢彩票计划软件下载 地下赌博怎么压稳赚 组六全包稳赚方案 如何购买体育彩票 三公棋牌游戏可提现 2018最新二八杠游戏 九五至尊棋牌 中国竟彩网 福彩快三有人赚过吗 北京pk彩票官网