凌晨两点,线上数据库磁盘满了。第二天早上打开邮箱才看到告警邮件,已经过去了 6 个小时,用户投诉早就堆满了客服群。
如果当时能立刻收到微信通知,5 分钟就能处理完。
这件事之后我就一直在想------有没有一种推送方式,能做到免费、实时到达、不用装额外的 App、锁屏也能弹窗提醒?
答案其实很简单:微信 。每个人手机上都有,消息实时到达,锁屏弹窗带声音。更关键的是,微信公众平台提供了测试号 ,不需要企业资质,个人开发者扫码就能申请,每天 10 万次推送额度,完全免费。
唯一的门槛是微信的模板消息接口用起来比较繁琐。所以我把这些都封装好了,用 C# 写了个开箱即用的推送服务。
CSharp-WXPush
一个 HTTP 请求就能把消息推到你的微信:
bash
curl "http://你的服务器:5566/wxsend?title=磁盘告警&content=数据库服务器磁盘使用率已达95%25"
几秒后,手机上就弹出了微信通知:

点开消息,跳转到自带的详情页,支持 Markdown 渲染:

技术上有什么特点?
项目基于 .NET 9 Minimal API 构建,整个核心逻辑就一个 Program.cs,不到 160 行:
- 零第三方依赖 ------ 只用了 ASP.NET Core 内置组件,没有引入任何 NuGet 包
- 单文件架构 ------ 路由、微信 API 调用、参数解析、模型定义全在一个文件里,风格类似 Go 的
main.go - 嵌入式资源 ------ 详情页 HTML 通过
EmbeddedResource编译进 DLL,部署时只需要一个可执行文件 - 同时支持 GET 和 POST ------ GET 方便浏览器和 curl 直接调用,POST 方便对接 Webhook
没有数据库,没有 Redis,没有消息队列。启动就能用。
3 分钟跑起来
第一步:拿到微信测试号的 4 个参数
打开 微信测试号申请页面,微信扫码登录。
登录后你需要拿到 4 样东西:
1) appID 和 appsecret ------ 页面最上面就能看到

2) 你的 openid ------ 用微信扫描页面上的测试号二维码关注,然后在"用户列表"里找到

3) template_id ------ 在"模板消息接口"那里新增一个模板
模板内容这样填:
标题: {{title.DATA}}
内容: {{content.DATA}}

有个坑要注意:模板内容不能只写
{{content.DATA}},前面必须加点文案(比如"内容:"),不然推送出来是空白的。
第二步:一行命令启动
bash
git clone https://github.com/hueifeng/CSharp-WXPush.git
cd CSharp-WXPush
dotnet run -- \
-appid "你的appID" \
-secret "你的appsecret" \
-userid "你的openid" \
-template_id "你的模板ID"
看到这个输出就 OK 了:
Server is running on: http://127.0.0.1:5566
第三步:发一条试试
浏览器直接打开:
http://localhost:5566/wxsend?title=Hello&content=我的第一条推送
或者用 curl:
bash
curl "http://localhost:5566/wxsend?title=Hello&content=我的第一条推送"
返回 {"errcode":0,"errmsg":"ok"} ------ 去看微信,消息已经到了。
也支持 POST,方便对接 Webhook:
bash
curl -X POST http://localhost:5566/wxsend \
-H "Content-Type: application/json" \
-d '{"title":"构建通知","content":"main 分支构建成功"}'
实战场景
用了一段时间,基本上能想到的通知需求都能覆盖,分享几个我自己在用的。
AI Agent 任务通知
现在越来越多的工作交给 AI Agent 去跑------代码生成、数据分析、文档整理、批量翻译... 这些任务丢出去之后,你不可能一直盯着等它跑完。接上推送服务,Agent 干完活自动通知你:
python
import requests
# AI Agent 完成任务后回调
def on_task_complete(task_name, result_summary):
requests.get("http://your-server:5566/wxsend", params={
"title": f"Agent 任务完成:{task_name}",
"content": f"执行结果:{result_summary}\n耗时:3 分 28 秒"
})
# 也可以在异常时告警
def on_task_error(task_name, error):
requests.get("http://your-server:5566/wxsend", params={
"title": f"Agent 异常:{task_name}",
"content": f"错误信息:{error}"
})
不管你在开会、吃饭还是遛弯,Agent 的工作进度随时掌握。
服务器监控告警
写个脚本丢到 crontab 里,每分钟检测一次,站点挂了立刻通知:
bash
#!/bin/bash
if ! curl -sf http://yoursite.com > /dev/null 2>&1; then
curl "http://localhost:5566/wxsend?title=站点告警&content=yoursite.com 无法访问,请立即检查"
fi
CI/CD 构建通知
在 GitHub Actions 的 workflow 最后加一步:
yaml
- name: 推送结果到微信
if: always()
run: |
curl "http://your-server:5566/wxsend?title=构建${{ job.status }}&content=${{ github.repository }} ${{ github.ref_name }}"
数据库备份 / 长任务完成提醒
bash
# 备份完成通知
pg_dump mydb > backup_$(date +%Y%m%d).sql && \
curl "http://localhost:5566/wxsend?title=备份完成&content=mydb 数据库备份成功"
# 模型训练完成通知
python train.py && \
curl "http://localhost:5566/wxsend?title=训练完成&content=模型训练结束,准确率98.5%25"
不用一直盯着终端了,该干嘛干嘛,完了微信告诉你。
智能家居 / IoT
树莓派、ESP32 之类的设备,条件触发时推一条:
bash
curl "http://your-server:5566/wxsend?title=家庭告警&content=客厅烟雾传感器触发,请注意安全"
参数一览
启动时设置默认值,请求时可以临时覆盖任意参数:
| 参数 | 说明 | 默认值 |
|---|---|---|
-port |
服务端口 | 5566 |
-appid |
微信 AppID | - |
-secret |
微信 AppSecret | - |
-userid |
接收者 OpenID | - |
-template_id |
模板 ID | - |
-title |
默认标题 | - |
-content |
默认内容 | - |
-base_url |
详情页公网地址 | http://127.0.0.1:{port} |
-tz |
时区 | Asia/Shanghai |
比如启动时设好了默认的 userid,但某次想推给另一个人,请求时带上 userid=xxx 就行,不用重启服务。
Docker 一键部署
生产环境推荐用 Docker:
bash
docker build -t csharp-wxpush .
docker run -d -p 5566:5566 --name wxpush --restart=always csharp-wxpush \
-appid "你的appID" \
-secret "你的appsecret" \
-userid "你的openid" \
-template_id "你的模板ID" \
-base_url "https://你的域名"
配好 -base_url,微信里点消息就能跳到详情页看完整内容。
写在最后
这个项目的初衷很简单:用最少的代码,解决"第一时间知道"这个问题。
一个文件、一行命令、一个 curl,搞定所有推送需求。无论是传统的运维告警,还是现在越来越多的 AI Agent 工作流,只要你需要"事情做完了通知我一声"------它都能帮到你。
如果你也有类似的需求,欢迎试试:
觉得有用的话,欢迎 Star 和推荐,有问题随时提 Issue。