手机版

Asp.Net CORE对接钉组机器人完整步记录

时间:2021-08-27 来源:互联网 编辑:宝哥软件园 浏览:

前言

钉钉作为企业办公中越来越常用的软件,为企业内部自行开发的系统提供接口支持,从而打通多个平台下的数据。这次用最简单的钉钉组机器人完成各种形式的消息推送,机器人链接根据钉钉开发文档定制。这次尝试花的时间不多,但是有几个地方需要注意。

第一步,在钉钉群中建立一个机器人,获取网钩地址

首先要有钉钉组。如果您不必自己创建一个,请在组右上角的菜单中找到组机器人,并添加一个自定义机器人

并将消息推送设置为on(默认值为on),并复制下一行的webhook地址,该地址将用作后续消息推送的地址

如果您不确定该地址是否有效,可以用一个命令来测试它,例如,在Linux平台下,使用这个命令并替换您自己的webhook_token

curl ' https://oapi . ding talk.com/robot/send?access _ token=cd1eb 120 c 459 ced 6a 65491 af 7 B1 eebbc 84790 FB 672077 a 969 BAE 8 bb 203 aa 1c 52 ' \-H ' Content-type : application/JSON ' \-d ' { msgtype ' : ' text ',' text' : {'content' : '我是我,它是不同的烟花' }} ',然后进入车内进行测试,立即接收

其次,参考文档完成基本类的封装并处理相关字段

接下来,我们开始在代码中调用WebHook地址。我们可以先分析一下群体机器人的文档,可以知道有五种消息类型:文本、markdown(markdown)、actionCard和FeedCard,其中ActionCard分为整体和独立两种类型。根据这些类型和给定的参数,需要对基本类进行设计和封装,以文本类型为例:

Msgtype是一个由五种消息类型组成的字符串,因此为这一部分设计了一个枚举来区分消息类型。

///Summary////钉钉机器人消息类型枚举////Summary Public enum msgtypenum { text,link,markdown,actioncard,feedcard}设计一个文本类,赋予一个属性Content。我们喜欢在设计中使用帕斯卡命名法。但是,指甲接口是不允许的。如果您不做一些处理,您将使用Content属性直接调用无法通过的接口。需要注意的是,在打包Newtonjson提供的json时,可以用指定的名称替换,以满足钉钉接口要求。

///summary///text type///summary public class text {///summary///text content///summary[JSON属性(属性名=' content ')]public string content { get;设置;}}其次,为指定的人群打包一个类,在序列化时还需要处理属性的替换名称。

///summary///@指定人员/////summary public class at {///summary////@ '的联系人/////summary [JSON属性(属性名=' at mobiles ')]public list string at mobiles { set;得到;}///summary///@ everybody////summary[JSON属性(属性名=' isatall ')]public bool isatall { set;得到;}}通过分析五种消息类型,可以共享一些参数。在对定制钉钉机器人文档进行一系列挖掘之后,确定这些类和枚举

接下来,机器人可以通过使用不同的消息类型被调用并推送到钉钉组。

三、完成打钉机器人的调用

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

这次是在Asp.Net的Core Web API下直接调用机器人,创建一个新的DingTalk控制器,然后完成IHttpClientFactory的注入,然后开始下一个服务调用。对于钉住的WebHook_Token的存储,可以选择一个配置文件,或者如果只是尝试,可以直接用变量保存。

///summary////发送钉钉消息的接口////summary[route(' API/[controller]')][API controller]公共类Dingtalkcontroller : controller base { private readonly string WebHook _ Token=' https://oapi . Dingtalk.com/robot/send?access _ token=cd1eb 120 c 459 ced 6a 65491 af 7 B1 eebbc 84790 FB 672077 a 969 BAE 8 bb 203 aa 1c 52 ';私有只读IHttpClientFactory _ Httpclientfactory;public ding talkcontroller(IHttpClientFactory Httpclientfactory){ _ Httpclientfactory=Httpclientfactory;}}再以文本为例,推送文本消息,建立发送文本消息的动作,完成钉钉接口所需参数的组装,最后使用统一的发送方式推送消息。

///summary///调用钉钉机器人发送文本内容/////summary//returns/returns[http get][route(name of(text content)]public async taskoactionresult text content(){//消息类型var msgtype=msgtypenum . text . tostring();//文字内容var text=new Text {Content='看山是红的,层层森林是染的;满江笔头,百战@ 15675120617 ' };//指定目标群体var at=new at(){ at mobiles=new list string(){ ' 15675120617 ' },isatall=false };var response=wait sending talkmessage(new { msg type,text,at });返回Ok(响应);}对于发送方式,需要根据钉钉文件的一些要求完成设计。例如,文档表明需要使用Post提交请求并使用UTF8编码,所以我直接在控制器中创建了一个新方法(虽然不合理),首先序列化并封装内容,然后通过HttpClientFactory创建一个新的客户端并完成消息的发送。

///summary///send message///summary///param name=' send message '/param///returns sprite async taskshttpresponsemessage sending talkmessage(对象值){ var sendMessage=JsonConvert。SerializeObject(值);Var request=新的http请求消息(httpmethod。post,webhook _ token) {//UTF8编码内容=新字符串内容(sendmessage,编码。必须为钉钉文档指定utf8、' application/JSON ')};var client=_httpClientFactory。create client();var响应=等待客户端。SendAsync(请求);返回响应;}启动程序,通过url访问控制器中的相应方法完成消息推送。注意每个属性的命名方式或者特征转换后的命名方式,需要满足钉钉接口文档(文档中FeedCard类型的后两个参数不标准)。

仓库地址:https://gitee。com/530521314/KOInstance/tree/master/src/KOInstance。webapi

摘要

以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。

版权声明:Asp.Net CORE对接钉组机器人完整步记录是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。