微信推送 API 怎么做?4 种方案对比 + 3 分钟落地
一句话答案:微信官方没有面向个人号的开放 API,任何声称"个人微信 API"的方案都是协议逆向,有封号风险。真正可用的是 4 条路——微信服务号模板消息、企业微信应用消息、群机器人 Webhook、第三方推送服务。要最快跑通,用第三方推送服务:注册拿一个 SendKey,一条 HTTP 请求就能把消息发到微信。
如果你在搜「微信推送」「微信 API 发消息」「个人微信 API」,你要解决的多半是同一件事:
- 服务器 CPU 爆了、磁盘满了,想立刻知道;
- 爬虫 / 定时任务跑完或者报错,想收到结果;
- 监控告警、CI 构建失败、线上异常,不想盯着邮箱;
- 智能家居、下载完成、股价到位,想推一条到手机。
而你希望这条消息落在微信里——因为微信是你唯一不会静音的 App。
先说清楚:个人微信没有官方 API
微信开放平台没有提供「给自己的微信号发消息」的接口。市面上那些「个人微信 API」「微信机器人框架」,本质上是逆向微信的通信协议或者自动化 PC 版微信客户端。它们的问题不是能不能用,而是:
- 封号风险:微信持续在打击非官方客户端,轻则限制登录,重则封号;
- 不稳定:微信一次版本更新就可能让整套方案失效;
- 要挂机:需要一台机器 24 小时挂着你的微信登录态。
拿它推生产告警,等于在告警系统里埋一个更容易坏的东西。下面 4 种都是官方通道,不存在这些问题。
4 种官方可行方案对比
| 方案 | 消息落在哪 | 前置条件 | 免费额度 | 适合谁 |
|---|---|---|---|---|
| 微信服务号模板消息 | 微信(服务号会话) | 需认证服务号(企业主体,年审 300 元) | 依微信配额 | 已有认证服务号的团队 |
| 企业微信应用消息 | 微信(企业微信应用会话) | 注册企业微信、建应用、配微信插件 | 免费,额度宽松 | 愿意花 30 分钟配置的人 |
| 群机器人 Webhook | 企业微信群 / 钉钉群 / 飞书群 | 有一个群,加一个机器人 | 免费 | 团队协作场景 |
| Server酱 Turbo | 微信 + 上面所有通道 | 扫码注册,拿 SendKey | 每天 5 条免费 | 想 3 分钟跑通的个人开发者 |
几点实话:
- 服务号模板消息门槛最高。个人主体申请不了认证服务号,而且微信历史上多次调整模板消息政策,长期看是最不确定的一条。
- 企业微信应用消息免费、额度宽松、内容显示完整,问题在配置链路长(注册企业 → 创建应用 → 开启微信插件 → 拿 corpid/secret/agentid)。愿意自己搭的话,开源项目 WeCom酱(wecomchan)(方糖气球出品)把这条路封装好了。
- 群机器人配置最简单,但消息只能进群、不能进你的私聊——适合团队告警,不适合"只发给我自己"。
- Server酱 Turbo 把上面三条路都做成了通道,你只需要一个 SendKey:默认走微信服务号,想换成企业微信应用消息、企微/钉钉/飞书群,或者 Bark、PushDeer 客户端,都是控制台里点一下,程序侧代码一行不用改。代价是免费额度每天 5 条。
最快的做法:3 分钟跑通
以 Server酱 为例(它把上述通道都做成了统一接口):
第 1 步:打开 sct.ftqq.com 微信扫码登录,在 SendKey 页面 复制你的 SendKey。
第 2 步:把 SendKey 填进下面这条命令,回车。
curl -X POST "https://sctapi.ftqq.com/你的SENDKEY.send" \
-d "title=服务器磁盘告警" \
-d "desp=/dev/sda1 使用率 **92%**,请及时清理。"
第 3 步:手机微信收到消息。完成。
没有 SDK、没有鉴权流程、没有回调——就是一个 POST。
各语言调用示例
title 是必填项(超过 32 字会被截断),desp 是正文,支持 Markdown(表格、图片、链接都能用)。
# pip install serverchan-sdk
from serverchan_sdk import sc_send
sc_send("你的SENDKEY", "任务完成", "本次抓取 **1,204** 条,耗时 3m12s。")
// Node.js,无需依赖
await fetch(`https://sctapi.ftqq.com/${process.env.SENDKEY}.send`, {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({ title: '构建失败', desp: '分支 `main` 第 42 次构建未通过。' })
});
// go get github.com/easychen/serverchan-sdk-golang
package main
import serverchan_sdk "github.com/easychen/serverchan-sdk-golang"
func main() {
serverchan_sdk.ScSend("你的SENDKEY", "部署完成", "v2.3.1 已上线。", nil)
}
<?php
$key = getenv('SENDKEY');
file_get_contents("https://sctapi.ftqq.com/{$key}.send", false, stream_context_create([
'http' => [
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => http_build_query(['title' => '备份完成', 'desp' => '数据库备份 2.1GB。']),
],
]));
更多语言和框架见 140+ 篇接入教程。
不写代码也能用
如果你要推送的是现成软件,多半不用写一行代码——很多软件已经内置了 Server酱 通知类型,填个 SendKey 就行:
- Uptime Kuma:网站宕机 / 恢复告警
- 青龙面板:定时脚本执行结果
- 群晖 DSM:NAS 系统事件
- GitHub Actions:CI 成功 / 失败
- Sentry:线上异常
- iOS 快捷指令:到家 / 离开等自动化触发
- SmsForwarder:把短信转发到微信
怎么选
- 给自己发通知 → Server酱 Turbo,3 分钟搞定,每天 5 条免费额度对个人项目够用。
- 团队协作、消息进群 → 还是 Turbo,把通道设成企业微信/钉钉/飞书群机器人。同样是那套免费的群机器人,区别是走 Turbo 的话,以后想改成推给个人只是换个通道,不用重写调用代码。
- 不想依赖微信、想要独立 App → Server酱³。走手机厂商的系统推送通道,在 iOS/FCM/小米/华为/荣耀/vivo/OPPO/iQOO/Realme/OnePlus/魅族机型上 App 不在后台也能收到消息,不用做 Android 保活;另有多设备同时收、AI 摘要、翻译和 Tag 分组。
- 推送量极大、又必须落进微信 → 企业微信应用消息自建,或用 WeCom酱。这是唯一真正需要自己动手的场景。
- 已有认证服务号 → 可以直接用模板消息,但要有政策变动的心理准备;把它挂成 Turbo 的一个通道会更抗变化。
常见问题
微信推送需要认证的公众号吗?
用第三方推送服务或企业微信通道不需要。只有走「服务号模板消息」这条路才需要认证服务号,而认证服务号要求企业主体,个人申请不了。
微信推送 API 免费吗?
群机器人和企业微信应用消息本身是免费的,代价是配置时间。Server酱 Turbo 免费会员每天 5 条,注册即得,新用户另有 7 天全功能试用;订阅会员每天 1000 次 API 调用。
一条消息最多能写多长?
Server酱 的 title 最长 32 个字符,超出会被截断;正文 desp 支持 Markdown,长度限制宽松,表格、图片、代码块都能正常显示。图片需要引用公网 URL,不支持 base64。
推送失败了怎么排查?
按这个顺序:看接口返回的 code 是不是 0,非 0 时 message 会写明原因;确认当天额度没用完;确认没触发每分钟 50 条的频率限制;确认微信端没有取消关注服务号或屏蔽消息。详细排查步骤见 常见问题。
能推给别人,而不是只推给自己吗?
可以。发给一群人最简单的做法是把 Turbo 的通道设成企业微信/钉钉/飞书群机器人,消息直接进群。要精确指定某几个人,走企业微信应用消息通道并用 openid 参数抄送,这是订阅会员功能;免费用户只能推给自己。
个人微信机器人框架能替代吗?
技术上能,风险上不建议。那类方案依赖逆向微信协议,随时可能因为微信更新而失效,账号也有被限制的风险。作为兴趣项目可以玩,作为告警链路不合适。