OpenClaw跨平台控制:手机QQ远程触发nanobot任务
OpenClaw跨平台控制手机QQ远程触发nanobot任务1. 场景痛点与解决方案上周五下午我正在咖啡馆见客户时突然接到同事紧急需求能不能把项目文档打包发我现在就要当时我手边只有手机而所有文档都存在办公室电脑上。这种人机分离的困境最终促使我研究出这套移动端远程控制方案。传统远程控制方案通常需要提前开启远程桌面有安全风险记住复杂IP地址和端口号在手机端安装专用客户端而基于OpenClawnanobot的组合只需要手机QQ发送自然语言指令如备份项目文档nanobot调用本地部署的Qwen3-4B模型解析需求OpenClaw在PC端执行具体文件操作处理结果通过QQ自动返回手机端这个方案最吸引我的特点是无需提前准备就像平时聊天一样发送指令后台的AI助手就能完成复杂操作。下面分享我的具体实现过程。2. 环境准备与组件关系2.1 核心组件分工这套系统涉及三个关键组件nanobot轻量级OpenClaw实现内置Qwen3-4B模型负责指令理解OpenClaw主服务运行在PC端执行具体自动化操作QQ机器人作为移动端入口和通信桥梁它们的工作流程如下graph LR A[手机QQ] --|发送指令| B(nanobot) B --|解析指令| C[Qwen3-4B] C --|生成操作步骤| D[OpenClaw] D --|执行结果| B B --|返回消息| A2.2 具体配置清单我的实践环境服务端MacBook Pro (M1, 16GB)OpenClaw v0.9.3通过npm安装nanobot镜像含Qwen3-4B模型移动端iPhone 13 QQ 8.9.78网络环境办公室WiFi需公网IP或内网穿透特别注意nanobot默认使用2507端口需要确保防火墙放行。我在路由器设置了端口转发# 内网IP为192.168.1.100时 iptables -t nat -A PREROUTING -p tcp --dport 2507 -j DNAT --to-destination 192.168.1.100:25073. QQ机器人对接实战3.1 创建QQ机器人在QQ开放平台申请机器人时遇到两个关键配置项消息推送模式选择WebSocket比HTTP轮询更实时API权限需勾选接收群消息和发送群消息获取到AppID和AppSecret后在nanobot配置文件中添加// ~/.nanobot/config.json { qq_bot: { enabled: true, app_id: 你的AppID, token: 你的Token, secret: 你的AppSecret } }3.2 消息路由配置为了让QQ消息能正确路由到OpenClaw需要设置消息转发规则。这里我踩过一个坑最初直接在nanobot里写死转发逻辑导致所有QQ消息都被处理。后来改用关键词触发机制# 在nanobot的message_router.py中添加 async def handle_qq_message(msg): if [cmd] in msg.content: # 只有包含触发前缀的消息才处理 task parse_command(msg.content.replace([cmd], )) await openclaw.execute(task)现在只需要在QQ消息前加[cmd]前缀比如[cmd] 备份项目文档到百度网盘4. 文件备份任务实现4.1 创建OpenClaw Skill在PC端开发一个file-backup技能clawhub create skill file-backup -t python核心逻辑在skills/file-backup/main.pyimport zipfile from pathlib import Path def backup_project(project_name): docs_dir Path(f~/Projects/{project_name}/docs).expanduser() if not docs_dir.exists(): return {status: error, reason: 目录不存在} output_path Path(f~/Downloads/{project_name}_backup.zip).expanduser() with zipfile.ZipFile(output_path, w) as zipf: for file in docs_dir.rglob(*): zipf.write(file, arcnamefile.relative_to(docs_dir)) return { status: success, path: str(output_path), size: f{output_path.stat().st_size/1024/1024:.2f}MB }4.2 模型指令解析配置在nanobot中配置Qwen3-4B的提示词模板你是一个任务解析助手请将用户指令转换为JSON格式的操作指令。 示例输入 备份项目文档 输出 { skill: file-backup, action: backup_project, params: { project_name: 当前项目名 } }实际测试发现模型有时会混淆项目名称。后来我在提示词中加入当前项目列表才解决# 动态生成提示词 projects list(Path(~/Projects).expanduser().glob(*)) prompt f可选项目{, .join(p.name for p in projects)}\n用户指令{command}5. 完整工作流验证5.1 正常执行流程手机QQ发送[cmd] 备份AI助手项目文档nanobot调用Qwen3-4B解析出{ skill: file-backup, action: backup_project, params: { project_name: AI助手 } }OpenClaw执行打包操作QQ收到回复已完成备份AI助手_backup.zip (23.78MB) 存储位置~/Downloads/5.2 异常情况处理在测试中遇到几种典型问题及解决方案问题1模型识别错误现象将备份误认为备份数据库解决在提示词中明确限定操作范围问题2文件权限不足现象zip操作报Permission denied解决在skill开头添加try-catch块返回友好错误问题3网络延迟现象QQ消息超时未回复解决添加异步任务状态查询命令6. 安全增强措施由于要开放公网访问我做了以下安全加固指令白名单只允许预定义的操作类型ALLOWED_ACTIONS [backup_project, clean_cache]频率限制每分钟最多处理3条指令# 使用nginx限流 limit_req_zone $binary_remote_addr zoneqqbot:10m rate3r/m;二次确认对高风险操作要求确认您将要执行删除临时文件 回复Y确认其他内容取消这套方案已经稳定运行两周最让我惊喜的是在出差时用手机就能让办公室电脑完成打包发送会议材料查询日志文件内容重启开发服务不再需要麻烦同事帮忙操作真正实现了人不在工位工作照样推进。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。