Asp.Net Core对接钉钉群机器人的完整步骤记录
在现代企业中,即时通讯工具已成为日常工作不可或缺的一部分,钉钉作为一款广泛使用的办公软件,其群机器人功能能够极大地提高团队协作效率,本文将详细介绍如何在Asp.Net Core项目中对接钉钉群机器人,实现自动化消息推送,以下是对接步骤的详细记录:
一、准备工作
1、创建钉钉群:首先需要有一个钉钉群,如果没有可以自行创建一个。
2、添加自定义机器人:在群设置中找到“智能群助手”,选择“添加机器人”,然后选择“自定义”并添加机器人。
3、获取Webhook地址:添加机器人后,会生成一个Webhook地址,复制这个地址备用,可以在群设置中的“安全设置”里查看和修改Webhook地址。
4、验证Webhook地址:为了确保Webhook地址有效,可以使用curl命令进行测试。
curl -H 'Content-Type: application/json' \ -d '{"msgtype": "text", "text": {"content": "Hello, this is a test message"}}' \ https://oapi.dingtalk.com/robot/send?access_token=YOUR_WEBHOOK_TOKEN
如果测试成功,会在钉钉群中收到相应的消息。
二、代码实现
1. 创建基础类
根据钉钉群机器人文档,我们需要封装五种消息类型:文本(text)、链接(link)、Markdown(markdown)、整体ActionCard和独立ActionCard,以下是基础类的设计和实现:
public enum MsgTypeEnum { Text, Link, Markdown, ActionCard, FeedCard } public class Text { [JsonProperty(PropertyName = "content")] public string Content { get; set; } } public class Link { [JsonProperty(PropertyName = "title")] public string Title { get; set; } [JsonProperty(PropertyName = "messageUrl")] public string MessageUrl { get; set; } [JsonProperty(PropertyName = "picUrl")] public string PicUrl { get; set; } } public class Markdown { [JsonProperty(PropertyName = "title")] public string Title { get; set; } [JsonProperty(PropertyName = "text")] public string Text { get; set; } } public class ActionCard { [JsonProperty(PropertyName = "btns")] public List<Button> Btns { get; set; } } public class Button { [JsonProperty(PropertyName = "actionEntitySet")] public List<ActionEntity> ActionEntitySet { get; set; } } public class ActionEntity { [JsonProperty(PropertyName = "actions")] public List<string> Actions { get; set; } [JsonProperty(PropertyName = "btnOrientation")] public int BtnOrientation { get; set; } } public class FeedCard { [JsonProperty(PropertyName = "links")] public List<Link> Links { get; set; } }
2. 配置HttpClientFactory
在Asp.Net Core项目中,我们需要注入IHttpClientFactory
以便发送HTTP请求,在Startup.cs
或Program.cs
中进行配置:
public void ConfigureServices(IServiceCollection services) { services.AddHttpClient(); }
3. 创建控制器
我们创建一个控制器来处理与钉钉机器人的交互:
using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks; using Newtonsoft.Json; using System.Net.Http; using System.Collections.Generic; [ApiController] [Route("api/[controller]")] public class DingTalkController : ControllerBase { private readonly IHttpClientFactory _httpClientFactory; private readonly string webhookToken = "https://oapi.dingtalk.com/robot/send?access_token=YOUR_WEBHOOK_TOKEN"; public DingTalkController(IHttpClientFactory httpClientFactory) { _httpClientFactory = httpClientFactory; } [HttpPost] public async Task SendMessage([FromBody] MessageRequest request) { var client = _httpClientFactory.CreateClient(); var content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json"); var response = await client.PostAsync(webhookToken, content); return Ok(response.IsSuccessStatusCode); } }
4. 定义请求模型
定义一个模型来接收前端传来的消息内容:
public class MessageRequest { public string msgtype { get; set; } public Text text { get; set; } public Link link { get; set; } public Markdown markdown { get; set; } public ActionCard actionCard { get; set; } public FeedCard feedCard { get; set; } }
5. 发送消息示例
可以通过POST请求向/api/DingTalk
发送消息:
{ "msgtype": "text", "text": { "content": "Hello from Asp.Net Core!" } }
三、常见问题解答(FAQs)
Q1:如何测试Webhook地址是否有效?
A1:可以使用curl命令进行测试。
curl -H 'Content-Type: application/json' \ -d '{"msgtype": "text", "text": {"content": "Hello, this is a test message"}}' \ https://oapi.dingtalk.com/robot/send?access_token=YOUR_WEBHOOK_TOKEN
如果测试成功,会在钉钉群中收到相应的消息。
Q2:如何处理钉钉返回的错误信息?
A2:钉钉返回的错误信息通常包含在HTTP响应的Body中,可以通过读取响应内容来获取详细的错误信息,并进行相应的处理。
var responseBody = await response.Content.ReadAsStringAsync(); // 处理错误信息
通过以上步骤,您可以在Asp.Net Core项目中成功对接钉钉群机器人,实现自动化消息推送,希望本文对您有所帮助!
到此,以上就是小编对于“Asp.Net Core对接钉钉群机器人的完整步骤记录”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。