-
使用.NET开发钉钉机器人消息通知_钉钉机器人接收消息
- 网站名称:使用.NET开发钉钉机器人消息通知_钉钉机器人接收消息
- 网站分类:技术文章
- 收录时间:2025-09-18 16:06
- 网站地址:
“使用.NET开发钉钉机器人消息通知_钉钉机器人接收消息” 网站介绍
“凌晨两点,线上崩了,群里@全体,没人回。
”
这不是段子,是上周隔壁组的真实事故。
钉钉群机器人响是响了,可值班同学手机静音,第二天才看到。
于是有人开始琢磨:能不能让机器人直接打电话?
答案是可以,而且用 .NET 写,一杯咖啡的功夫就能跑起来。
---
先说结论:
钉钉机器人 ≠ 只能群里吼。
2025 年的玩法是——
· 群通知 + 单聊私聊 + 语音电话,一条链路全打通
· 用 .NET 6/7 跨平台跑在 Linux 容器里,白天在阿里云,夜里自动缩到一台1C1G 的小水管
· 加签、重试、日志、监控,全都打包成一条 `dotnet run` 命令
---
第一步,别急着写代码。
先去钉钉后台把机器人拉出来,拿到两样东西:
1. Webhook 地址,长得像`
https://oapi.dingtalk.com/robot/send?access_token=xxx`
2. 加签密钥,一串 64 位的 secret,别弄丢,丢了就得重新建机器人
---
第二步,把消息格式写成 C# 匿名对象,顺手塞个 Markdown:
```csharp
var msg = new {
msgtype = "markdown",
markdown = new {
title = "线上告警",
text = #34;## 服务挂了\n> 时间:{DateTime.Now}\n>负责人:@{phone}"
},
at = new { atMobiles = new[] { phone } }
};
```
注意 `atMobiles` 里填手机号,钉钉才会真的 @ 到人。
---
第三步,加签。
钉钉要求把 timestamp 和 secret 拼在一起做 HMACSHA256,
网上抄的代码经常忘了 UrlEncode,结果 400 报错。
这里给一个能直接跑的版本:
```csharp
string Sign(long ts, string secret)
{
var bytes = Encoding.UTF8.GetBytes(#34;{ts}\n{secret}");
using var mac = new HMACSHA256(Encoding.UTF8.GetBytes(secret));
var hash = mac.ComputeHash(bytes);
return HttpUtility.UrlEncode(Convert.ToBase64String(hash),Encoding.UTF8);
}
```
---
第四步,发消息。
用 `HttpClient` 异步发,别用 RestSharp,那玩意重。
```csharp
await client.PostAsJsonAsync(webhook, msg);
```
发完把返回的 `errcode` 记下来,
如果是 310000,多半是 JSON 字段写错;
如果是 400403,那就是 IP 没在白名单。
---
第五步,电话通知。
钉钉官方没直接接口,但可以曲线救国:
· 机器人把告警丢到 Kafka
· 另一个用 .NET 写的 Consumer 收到后,调用阿里云语音通知 API
· 电话内容就是“服务异常,请立刻登录查看”,
语速调到 0.8,半夜被吵醒也不至于太暴躁
---
有人担心容器里跑 .NET 会不会太胖。
实测 Alpine 镜像 + ReadyToRun,
冷启动 1.2 秒,内存 60M,
比隔壁 Python 镜像轻一半。
---
最后留个小坑:
钉钉的 processQueryKey 可以查单聊消息已读状态,
但文档里没写清楚,
得先调 `
robot/query_message_status`,
再用 `chatid` 去拼,
拼错就 404。
别问我是怎么知道的,昨晚刚踩完。
---
如果你也在值班表里,
试试把机器人升级成“会打电话的小秘书”。
代码扔 GitHub,README 写两行就能跑。
跑通了回来聊,
看看谁家的告警电话铃声最魔性。
更多相关网站
- Chinese FM spokesperson briefs on coordination between China, EU on additional US tariffs
- Boao Forum for Asia: How can the continent forge a shared future?
- EU not doing itself any favors by trying to play the 'climate card'
- 企业级文档协同解决方案:深度整合OnlyOffice(私有化部署指南)
- 网盘用户的大杀器!Docker一键部署PanSou,开箱即用。
- 微软零基础开发:Win8版Project Siena下载
- Docker部署 CloudPan189Share,天翼云盘智能挂载与流媒体播放!
- 原创“中微子歌”,英文版,更好听!
- The true China being discovered by more and more people: foreign ministry spokesperson
- WPF小坑第十三篇之HttpWebRequest问题
- 【开源力荐】基于 .NET WinForm 开发的中小型酒店管理系统
- 网站流量拦截指南:这些 UA(Python/curl/sqlmap 等)建议屏蔽
- C#通过Rest接口访问WinCC(1)_c# restful api接口规范
- 最近发表
- 标签列表
-
- mydisktest_v298 (35)
- sql 日期比较 (33)
- document.appendchild (35)
- 头像打包下载 (35)
- 梦幻诛仙表情包 (36)
- java面试宝典2019pdf (26)
- disk++ (30)
- 加密与解密第四版pdf (29)
- iteye (26)
- centos7.4下载 (32)
- intouch2014r2sp1永久授权 (33)
- jdk1.8.0_191下载 (27)
- axure9注册码 (30)
- 兔兔工程量计算软件下载 (27)
- ccproxy破解版 (31)
- aida64模板 (28)
- engine=innodb (33)
- shiro jwt (28)
- segoe ui是什么字体 (27)
- head first java电子版 (32)
- clickhouse中文文档 (28)
- jdk-8u181-linux-x64.tar.gz (32)
- 计算机网络自顶向下pdf (34)
- -dfile.encoding=utf-8 (33)
- jdk1.9下载 (32)