微信推送 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 就行:

怎么选

  • 给自己发通知Server酱 Turbo,3 分钟搞定,每天 5 条免费额度对个人项目够用。
  • 团队协作、消息进群 → 还是 Turbo,把通道设成企业微信/钉钉/飞书群机器人。同样是那套免费的群机器人,区别是走 Turbo 的话,以后想改成推给个人只是换个通道,不用重写调用代码。
  • 不想依赖微信、想要独立 AppServer酱³。走手机厂商的系统推送通道,在 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 参数抄送,这是订阅会员功能;免费用户只能推给自己。

个人微信机器人框架能替代吗?

技术上能,风险上不建议。那类方案依赖逆向微信协议,随时可能因为微信更新而失效,账号也有被限制的风险。作为兴趣项目可以玩,作为告警链路不合适。

下一步

现在就试一下

微信扫码注册 Server酱,30 秒拿到 SendKey,免费额度每天 5 条,够个人项目用。

免费注册并获取 SendKey 看 140+ 篇接入教程