作为一个同时兼顾运营和开发的“全栈打杂人”,我每天都要在企业微信群里回复各种用户反馈、手动记录需求、然后切到项目管理工具里派发任务。有时候同事在群里@我十几次,光是把这些零散信息整理成待办事项,就要花掉将近一个小时。
于是我开始琢磨:能不能“养一只虾”,让它替我完成一些机械工作呢?恰好看到腾讯云 OpenClaw 玩虾大赛的征稿,我决定把 WorkBuddy 和 CloudBase 联动起来,打造一个自动化的任务分发系统。
核心思路很简单:我在企微群里发一句自然语言指令,WorkBuddy 接收后调用 CloudBase 云函数,自动解析任务内容和负责人,写入数据库,再通过企微机器人回执通知相关人员。
最终效果是:原本需要手动操作的“接收→解析→记录→分发”四步,压缩成了一句话。
整个工作流的串联逻辑如下:

这套架构的巧妙之处在于:WorkBuddy 是“大脑”,CloudBase 是“双手”,企业微信是“嘴巴和耳朵”。三者通过 API 串联,形成一个完整的自动化闭环。
在 CloudBase 控制台创建环境 lobster-ops 后,进入「数据库」→「集合管理」,新建两个文档型集合:
task_board:存储待办任务,权限模板选择「读取全部数据,修改本人数据」team_members:存储团队成员信息,权限模板选择「仅创建者及管理员可读写」创建完成后,两个集合并排出现在列表里。

我给 WorkBuddy 下了一条 Prompt:
我的 CloudBase 环境 ID 是
lobster-ops-d5gm47l217e50bea8。已经手动创建好了 task_board 和 team_members 两个数据库集合。请帮我创建一个名为 taskDispatcher 的云函数,接收 messageText 参数,分析提取任务和负责人(找不到则为“待认领”),写入 task_board 集合……
WorkBuddy 很快返回了完整的 index.js 代码和部署说明。这就是“对话式开发”的魅力——不需要从零手写,只需用自然语言描述需求,AI 就能生成可执行的代码。

// taskDispatcher/index.js
// 依赖:@cloudbase/node-sdk(CloudBase 云函数运行环境内置,无需额外安装)
const app = require('@cloudbase/node-sdk').init({
// 不传 env,使用当前函数所在环境(即 lobster-ops-d5gm47l217e50bea8)
});
/**
* 从文本中解析"任务内容"和"负责人"
* 规则:
* 1. 支持"@xxx 负责..."、"由 xxx 负责..."、"交给 xxx"、"xxx 来做"等口语表达
* 2. 未匹配到负责人时,owner 默认为 "待认领"
*/
function parseMessage(text) {
let owner = '待认领';
let task = text.trim();
// 匹配模式:@某人、由某人负责、交给某人、某人来做/处理、负责人:某人
const ownerPatterns = [
/负责人[::]\s*(.+?)(?:[,,。\s]|$)/, // 负责人:张三
/由\s*(.+?)\s*负责/, // 由张三负责
/交给\s*(.+?)(?:[,,。\s去来]|$)/, // 交给张三
/@([^\s,,。、]+)/, // @张三
/(.+?)\s*来[做处理跟进]/, // 张三来处理
];
for (const pattern of ownerPatterns) {
const match = text.match(pattern);
if (match && match[1]) {
owner = match[1].trim();
break;
}
}
// 从 task 文本中剔除负责人相关片段,保留核心任务描述
if (owner !== '待认领') {
task = text
.replace(/负责人[::]\s*.+?(?=[,,。\s]|$)/, '')
.replace(/由\s*.+?\s*负责/, '')
.replace(/交给\s*.+?(?=[,,。\s去来]|$)/, '')
.replace(/@[^\s,,。、]+/, '')
.replace(/.+?\s*来[做处理跟进]/, '')
.trim()
.replace(/^[,,。、\s]+|[,,。、\s]+$/g, ''); // 清理首尾标点
}
// 如果清理后 task 为空,则回退到原始文本
if (!task) {
task = text.trim();
}
return { task, owner };
}
exports.main = async (event) => {
const { messageText } = event;
// 参数校验
if (!messageText || typeof messageText !== 'string' || !messageText.trim()) {
return {
success: false,
message: '参数 messageText 不能为空',
};
}
// 解析任务内容和负责人
const { task, owner } = parseMessage(messageText);
// 获取数据库引用(通过 app.database(),不使用 init 方法)
const db = app.database();
try {
// 写入 task_board 集合
await db.collection('task_board').add({
task: task,
owner: owner,
deadline: null,
status: '待处理',
source: '企微机器人',
createdAt: new Date().toISOString(),
});
return {
success: true,
message: '任务创建成功',
task: task,
};
} catch (err) {
console.error('[taskDispatcher] 写入数据库失败:', err);
return {
success: false,
message: '写入数据库失败:' + (err.message || String(err)),
};
}
};
在 CloudBase 控制台选择「云函数」→「新建云函数」,选择 Nodejs 空白模板:
taskDispatcherNodejs 18.15将 WorkBuddy 生成的代码粘贴进在线编辑器,同时修改 package.json,添加 @cloudbase/node-sdk 依赖。点击「保存并安装依赖」,等待部署完成。

进入云函数的「测试」页面,输入测试参数:
{
"messageText": "请小李在周五前完成用户反馈分析报告"
}点击执行测试,返回结果:
{"success":true,"message":"任务创建成功","task":"请小李在周五前完成用户反馈分析报告"}
第一次建集合的时候没注意权限,默认选了个很严的模板,结果云函数死活写不进去。查了半天日志才发现是权限被拒了。后来改成“读取全部数据,修改本人数据”就通了,这个小细节折腾了我好一阵。
模板自带的package.json里没有@cloudbase/node-sdk这行,部署成功了但一跑就报找不到模块。补上依赖重新部署才行。如果你跟着做,记得确认一下依赖声明。
测试的时候消息里写了“小李”,但进数据库一看,owner那栏写的是“待认领”。原因是team_members集合是空的,代码找不到匹配项就填了默认值。
这也是后面可以优化的地方——要么先把成员信息录进去,要么让代码更智能一点做模糊匹配。
这次从头搭完这套小东西,最大的感受是:人和AI的配合确实能省很多事。
以前从下需求到写完一个能跑的云函数,怎么也要二十分钟。这次代码让WorkBuddy出,我只负责配置和调试,整个后端部分几分钟就搞定了。省下来的时间可以多想想业务逻辑和扩展玩法。
当然目前只是个Demo,后续想把企微机器人的Webhook真接进去,再加个任务状态变更的通知,让它变成一个能追全流程的小工具。模式其实挺通用的,改成客户反馈入库、日报生成之类的场景应该也一样能跑。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。