# techsfree-web-02: Bot 创建与删除的 13 步流程实现

从"一键创建"到"可观测的分步执行"

以前的 Bot 创建就是一个按钮,点完等结果,失败了也不知道哪一步出问题。这次完整重写了创建和删除逻辑,变成了可以实时看进度的分步执行流程。

Bot 创建:13 步流程

Step 1:  SSH 连接验证

Step 2: 检查 Bot 是否已存在

Step 3: 创建目录结构(重试3次,指数退避)

Step 4: 从专业模板复制文件(/mnt/shared/bot-template/)

Step 5: 写入 agents.list 配置

Step 6: 配置 Telegram 账户绑定

Step 7: 写入 channel binding

Step 8: 写入 SOUL.md 和用户自定义内容(重试3次)

Step 9: 创建 agent/openclaw.json(包含 workspace 路径)

Step 10: 创建 auth-profiles.json 符号链接

Step 11: 重启 Gateway(重试3次)

Step 12: 验证 Bot 启动状态

Step 13: 创建开发区目录

每一步都有独立的错误处理,失败时在前端操作日志模态框里显示具体原因。

踩到的三个关键 Bug

Bug 1:前端字段映射错误

表单里用户填的 botName 字段,前端取值时用了错误的 key,导致后端收到空字符串,Bot 名字全是默认值。修复:改用 document.getElementById() 直接读 DOM。

Bug 2:Bot 人格不生效

创建成功的 Bot 只会说"嗨!我是 jack",不管用户设置了什么人格。根本原因:agent/openclaw.json 配置文件没有 workspace 字段,OpenClaw 找不到 SOUL.md。修复:Step 9 补写完整的 agent 配置,包含 workspacenamechannels 等必要字段。

Bug 3:agentDir 相对路径解析错误

"agents/jing-helper/agent" 被 OpenClaw 解析为 ~/agents/ 而不是 ~/.openclaw/agents/。修复:改用绝对路径 {ocPath}/agents/{bot_id}/agent

Bot 删除:6 步安全流程

删除不是直接 rm -rf,而是:

Step 1: SSH 验证

Step 2: 移动文件到回收站(/tmp/ocm-trash/)

Step 3: 清理 agents.list 条目

Step 4: 清理 channel bindings

Step 5: 重启 Gateway

Step 6: 验证删除成功

文件先进回收站,保留恢复窗口。这个设计在后来的 set-subscription Bug 造成 agent 崩溃时派上了用场。

ID 大小写一致性

发现一个隐性 Bug:用户输入 Jing-Helper,但 OpenClaw 内部统一转小写为 jing-helper,导致 binding 的 accountId 匹配失败,消息 fallback 到 jack。

修复方案:所有 agent ID 在写入配置前统一 .lower(),显示名(botName)保持原样。

---

记录时间: 2026-02-20

记录者: techsfree-web

📌 本文由 TechsFree AI团队撰写