用 Cloudbase 云函数推送企业微信群机器人
一句话定义:用 Cloudbase 云函数通过企业微信群机器人的 Webhook 接口推送消息,支持文本、Markdown、图片等格式,可选配定时触发器做监控告警或数据日报。
预计耗时:15 分钟 | 难度:入门
适用场景
- 适用:从 Cloudbase 后端向企业微信群推送消息——监控告警、部署通知、数据日报、业务事件提醒
- 适用:已有企业微信(WeCom)使用权限,能创建群和群机器人
- 不适用:推送到个人微信(微信没有开放个人消息推送接口)
- 不适用:需要接收用户回复的双向交互(Webhook 只能发,不能收)
环境要求
| 依赖 | 版本 |
|---|---|
@cloudbase/node-sdk | 3.18.1 |
@cloudbase/cli | 3.0.4 |
| Node.js | ≥ 16.13 |
前置条件:Cloudbase 云函数默认具有公网访问能力(未配置 VPC 时)。如果你的云函数配置了 VPC 且未设置 NAT 网关,需要先在控制台开启公网访问,否则无法调用企业微信的 Webhook 接口。
第一步:创建企业微信群机器人
- 在企业微信里创建一个群(或用已有的群)
- 点击群名称 → 群机器人 → 添加群机器人
- 给机器人起个名字(比如"Cloudbase 告警")
- 创建成功后复制 Webhook 地址,形如:
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
把 key= 后面的 UUID 记下来。
第二步:写推送云函数
mkdir -p cloudfunctions/wecomNotify
cd cloudfunctions/wecomNotify
npm init -y
npm install --save @cloudbase/node-sdk@3.18.1
cloudfunctions/wecomNotify/index.js:
const https = require('https');
const WECOM_KEY = process.env.WECOM_WEBHOOK_KEY;
exports.main = async (event, context) => {
const { msgtype, content } = event;
if (!content) {
return { error: 'MISSING_CONTENT', message: 'event.content is required' };
}
let body;
if (msgtype === 'markdown') {
body = {
msgtype: 'markdown',
markdown: { content },
};
} else {
// 默认纯文本
body = {
msgtype: 'text',
text: {
content,
mentioned_list: event.mentioned_list || [],
},
};
}
const result = await postWebhook(body);
return result;
};
function postWebhook(body) {
return new Promise((resolve, reject) => {
const url = `https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${WECOM_KEY}`;
const data = JSON.stringify(body);
const req = https.request(
url,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(data),
},
},
(res) => {
let raw = '';
res.on('data', (chunk) => (raw += chunk));
res.on('end', () => {
try {
resolve(JSON.parse(raw));
} catch (err) {
resolve({ raw });
}
});
},
);
req.on('error', reject);
req.write(data);
req.end();
});
}
这里用 Node.js 内置的 https 模块,不需要装额外依赖。对于云函数场景,减少 node_modules 体积有助于降低冷启动延迟(参见 优化冷启动 的"裁依赖"小节)。
第三步:部署并发送测试消息
tcb fn deploy wecomNotify --dir ./cloudfunctions/wecomNotify -e your-env-id
控制台 → 云函数 → wecomNotify → 环境变量,添加:
WECOM_WEBHOOK_KEY= 第一步复制的 UUID
发送测试消息:
# 纯文本
tcb fn invoke wecomNotify \
--data '{"content":"Cloudbase 云函数推送测试,看到这条消息说明对接成功。"}' \
-e your-env-id
# Markdown 格式
tcb fn invoke wecomNotify \
--data '{"msgtype":"markdown","content":"## 部署通知\n\n**getLoginTicket** 函数已更新\n\n> 版本: v1.2.3"}' \
-e your-env-id
去企业微信群里应该能看到机器人发出的消息。
第四步(可选):配定时触发器
如果要做每天早上 9 点的数据日报,在控制台 → 云函数 → wecomNotify → 触发方式 → 定时触发,配置 Cron 表达式。
Cloudbase 的 Cron 表达式为 7 位格式:秒 分 时 日 月 星期 年。常用示例:
| 需求 | Cron 表达式 |
|---|---|
| 每天 09:00 | 0 0 9 * * * * |
| 每小时整点 | 0 0 * * * * * |