官方连接
https://open.dingtalk.com/document/robots/custom-robot-access
添加Webhook机器人,我选择的安全方式是关键词==“消息”==
static async Task SendMarkdownMessage(string webhookUrl, string title, string markdownContent)
{
using (HttpClient client = new HttpClient())
{
var payload = new
{
msgtype = "markdown",
markdown = new
{
title = title,
text = markdownContent
}
};
string jsonPayload = Newtonsoft.Json.JsonConvert.SerializeObject(payload);
var content = new StringContent(jsonPayload, Encoding.UTF8, "application/json");
var response = await client.PostAsync(webhookUrl, content);
if (response.IsSuccessStatusCode)
{
Console.WriteLine("Markdown message sent successfully!");
}
else
{
Console.WriteLine("Failed to send Markdown message. Status code: " + response.StatusCode);
}
}
}
private async void button1_Click(object sender, EventArgs e)
{
string webhookUrl = "https://oapi.dingtalk.com/robot/send?access_token=你自己的的token";
string markdownContent = "# 消息 Hello, Markdown#";
string title = "消息 Markdown Message";
await SendMarkdownMessage(webhookUrl, title, markdownContent);
}
}
但是这样有缺陷,不能发送本地文件
使用关键词有一个累赘词,还是比较讨厌的,虽然方式简单,下面使用加签的方式
static async Task SendMarkdownMessage(string webhookUrl, string accessToken, string secret, string title, string markdownContent)
{
long timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
string sign = ComputeSignature(secret, timestamp);
string url = $"{webhookUrl}?access_token={accessToken}×tamp={timestamp}&sign={sign}";
using (HttpClient client = new HttpClient())
{
var payload = new
{
msgtype = "markdown",
markdown = new
{
title = title,
text = markdownContent
}
};
string jsonPayload = Newtonsoft.Json.JsonConvert.SerializeObject(payload);
var content = new StringContent(jsonPayload, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
Console.WriteLine("Markdown message sent successfully!");
}
else
{
Console.WriteLine("Failed to send Markdown message. Status code: " + response.StatusCode);
}
}
}
static string ComputeSignature(string secret, long timestamp)
{
string stringToSign = $"{timestamp}\n{secret}";
byte[] secretBytes = Encoding.UTF8.GetBytes(secret);
byte[] stringToSignBytes = Encoding.UTF8.GetBytes(stringToSign);
using (var hmac = new HMACSHA256(secretBytes))
{
byte[] hashBytes = hmac.ComputeHash(stringToSignBytes);
return Convert.ToBase64String(hashBytes);
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private async void button1_Click(object sender, EventArgs e)
{
string webhookUrl = "https://oapi.dingtalk.com/robot/send";
string accessToken = "自己的token";
string secret = "设置加签后的密钥";
string markdownContent = "# 使用加签无拘无束!";
string title = "Markdown Message";
await SendMarkdownMessage(webhookUrl, accessToken, secret, title, markdownContent);
}
}
}