Appearance
OpenClaw 企业微信机器人接入实战:办公自动化全攻略
企业微信是办公场景的核心工具。把 OpenClaw 接入企业微信,实现消息自动推送、审批流程自动化、智能提醒,让企业办公效率提升 3 倍。
接入方式对比
| 方式 | 特点 | 适用场景 |
|---|---|---|
| 群机器人 | 简单快速,30秒创建 | 群内通知、提醒 |
| 企业应用 | 功能完整,需开发 | 深度定制、内部系统 |
| 小程序 | 用户友好,交互丰富 | 复杂业务流程 |
方式一:群机器人(推荐入门)
创建群机器人
1. 打开企业微信群聊
2. 点击群设置(右上角)
3. 选择「群机器人」
4. 点击「添加机器人」
5. 填写机器人名称
6. 复制 Webhook 地址
地址格式:
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx-xxx-xxx发送消息
javascript
const axios = require('axios');
// 发送文本消息
async function sendTextMessage(webhookUrl, content) {
await axios.post(webhookUrl, {
msgtype: 'text',
text: {
content: content,
mentioned_list: ['@all'], // @所有人
}
});
}
// 发送 Markdown 消息
async function sendMarkdownMessage(webhookUrl, content) {
await axios.post(webhookUrl, {
msgtype: 'markdown',
markdown: {
content: content
}
});
}
// 发送图文消息
async function sendNewsMessage(webhookUrl, articles) {
await axios.post(webhookUrl, {
msgtype: 'news',
news: {
articles: articles
}
});
}消息模板示例
javascript
// 任务完成通知
const message = `### 任务完成通知
> 任务名称:数据抓取
> 状态:<font color="info">SUCCESS</font>
> 耗时:2分30秒
> 详情:[点击查看](https://example.com/task/123)`;
// 系统告警通知
const alert = `### ⚠️ 系统告警
> 服务器:production-server-01
> 指标:CPU 使用率
> 当前值:<font color="warning">87%</font>
> 时间:${new Date().toLocaleString()}
> 请及时处理!`;
// 发送示例
await sendMarkdownMessage(webhookUrl, message);方式二:企业应用(深度定制)
创建企业应用
1. 登录企业微信管理后台:https://work.weixin.qq.com
2. 进入「应用管理」
3. 点击「创建应用」
4. 填写应用信息
5. 记录 AgentId 和 Secret获取 Access Token
javascript
class QywxTokenManager {
constructor(corpId, corpSecret) {
this.corpId = corpId;
this.corpSecret = corpSecret;
this.token = null;
this.expiresAt = 0;
}
async getToken() {
if (this.token && Date.now() < this.expiresAt) {
return this.token;
}
const response = await axios.get(
`https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${this.corpId}&corpsecret=${this.corpSecret}`
);
this.token = response.data.access_token;
this.expiresAt = Date.now() + response.data.expires_in * 1000 - 300000;
return this.token;
}
}发送应用消息
javascript
// 发送文本卡片消息
async function sendTextCard(userId, title, description, url) {
const token = await tokenManager.getToken();
await axios.post(
`https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${token}`,
{
touser: userId,
msgtype: 'textcard',
agentid: AGENT_ID,
textcard: {
title: title,
description: description,
url: url,
btntxt: '查看详情'
}
}
);
}
// 发送模板卡片消息
async function sendTemplateCard(userId, templateId, data) {
const token = await tokenManager.getToken();
await axios.post(
`https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${token}`,
{
touser: userId,
msgtype: 'template_card',
agentid: AGENT_ID,
template_card: {
template_id: templateId,
data: data
}
}
);
}审批流程自动化
创建审批流程
javascript
// 提交审批申请
async function submitApproval(userId, templateId, formData) {
const token = await tokenManager.getToken();
const response = await axios.post(
`https://qyapi.weixin.qq.com/cgi-bin/oa/applyevent?access_token=${token}`,
{
creator_userid: userId,
template_id: templateId,
apply_data: formData
}
);
return response.data;
}
// 审批状态查询
async function getApprovalStatus(spNo) {
const token = await tokenManager.getToken();
const response = await axios.post(
`https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovalinfo?access_token=${token}`,
{ sp_no: spNo }
);
return response.data;
}审批回调处理
javascript
// 处理审批回调
router.post('/qywx/callback', async (req, res) => {
const { UserId, SpStatus, SpNo } = parseCallback(req.body);
if (SpStatus === 2) {
// 审批通过
await handleApprovalApproved(SpNo);
} else if (SpStatus === 3) {
// 审批驳回
await handleApprovalRejected(SpNo);
}
res.send('success');
});定时提醒
配置定时任务
javascript
const cron = require('node-cron');
// 每天早上 9 点发送日报提醒
cron.schedule('0 9 * * *', async () => {
const users = await getReportNotSubmittedUsers();
for (const user of users) {
await sendTextCard(
user.id,
'日报提醒',
'请及时提交今日工作日报',
'https://work.example.com/daily'
);
}
});
// 每周五下午 5 点发送周报提醒
cron.schedule('0 17 * * 5', async () => {
await sendTextMessage(
webhookUrl,
'📅 温馨提醒:本周工作即将结束,请及时提交周报!'
);
});
// 每月 1 号发送月报提醒
cron.schedule('0 9 1 * *', async () => {
await sendMarkdownMessage(
webhookUrl,
'### 📊 月报提醒\n> 新的一月开始了,请及时提交上月工作月报!'
);
});系统告警集成
监控告警推送
javascript
// 监控系统告警
async function sendSystemAlert(alert) {
const message = `### ⚠️ ${alert.level}级告警
> **服务名称**:${alert.service}
> **告警指标**:${alert.metric}
> **当前值**:<font color="warning">${alert.value}</font>
> **阈值**:${alert.threshold}
> **时间**:${alert.time}
> **持续时间**:${alert.duration}
[查看详情](https://monitor.example.com/alert/${alert.id})`;
await sendMarkdownMessage(webhookUrl, message);
}
// 自动故障处理
async function handleAutoFix(alert) {
const result = await openclaw.chat({
message: `系统告警:${alert.message},请分析并提供解决方案`
});
// 发送 AI 分析结果
await sendMarkdownMessage(
webhookUrl,
`### 🤖 AI 故障分析\n\n${result}`
);
}智能客服
企业微信客服机器人
javascript
// OpenClaw 配置企业微信客服
async function createCustomerService() {
const token = await tokenManager.getToken();
// 创建客服账号
await axios.post(
`https://qyapi.weixin.qq.com/cgi-bin/kf/account/add?access_token=${token}`,
{
name: 'OpenClaw智能客服',
media_id: 'MEDIA_ID'
}
);
}
// 处理客服消息
async function handleCustomerMessage(msg) {
// 调用 OpenClaw 生成回复
const reply = await openclaw.chat({
userId: msg.external_userid,
message: msg.text.content
});
// 发送回复
await axios.post(
`https://qyapi.weixin.qq.com/cgi-bin/kf/send_msg?access_token=${token}`,
{
touser: msg.external_userid,
open_kfid: msg.open_kfid,
msgtype: 'text',
text: {
content: reply
}
}
);
}实战案例
案例:自动化部署通知
javascript
// CI/CD 流程通知
async function notifyDeployment(deploy) {
const { project, env, status, time, logs } = deploy;
const message = `### 🚀 部署通知
> **项目**:${project}
> **环境**:<font color="info">${env}</font>
> **状态**:<font color="${status === 'SUCCESS' ? 'info' : 'warning'}">${status}</font>
> **耗时**:${time}
> **执行人**:${deploy.user}
${logs ? `[查看日志](${logs})` : ''}`;
await sendMarkdownMessage(webhookUrl, message);
}
// 使用示例
await notifyDeployment({
project: 'OpenClaw Web',
env: 'production',
status: 'SUCCESS',
time: '2分30秒',
user: '张三',
logs: 'https://ci.example.com/logs/123'
});案例:日报生成与提醒
javascript
// 自动生成日报并发送
cron.schedule('0 18 * * *', async () => {
// 获取今日工作数据
const stats = await getTodayStats();
// AI 生成日报摘要
const summary = await openclaw.chat({
message: `根据以下数据生成工作日报摘要:\n${JSON.stringify(stats)}`
});
// 发送日报
await sendMarkdownMessage(
webhookUrl,
`### 📊 今日工作日报\n\n${summary}`
);
});最佳实践
消息推送原则
| 原则 | 说明 |
|---|---|
| 重要性分级 | 根据重要程度选择推送方式 |
| 避免打扰 | 非紧急消息避免 @all |
| 内容简洁 | 核心信息优先展示 |
| 可操作性 | 提供明确的下一步操作 |
配置清单
□ 群机器人配置
□ Webhook 地址保存
□ 测试消息发送
□ 企业应用配置
□ 创建应用并获取凭证
□ 配置可信域名
□ 设置 IP 白名单
□ 审批流程配置
□ 创建审批模板
□ 配置审批规则
□ 设置审批人
□ 定时任务配置
□ 提醒任务创建
□ 工作时间设置
□ 接收人员配置总结
| 功能 | 实现难度 | 应用场景 |
|---|---|---|
| 群机器人消息 | ★☆☆ | 通知推送 |
| 企业应用消息 | ★★☆ | 用户触达 |
| 审批流程 | ★★★ | 办公自动化 |
| 定时提醒 | ★★☆ | 工作提醒 |
| 系统告警 | ★★☆ | 运维监控 |
企业微信接入核心:
- 群机器人最简单,30秒上手
- 企业应用功能更完整
- 结合 OpenClaw 实现智能化
- 合理使用定时任务提升效率
企业微信 + OpenClaw,打造企业办公自动化中枢,让重复工作自动化,让团队协作更高效。
