版本:v1.0
编制时间:2026-04-28 14:12
编制依据:《建档流程与架构分析报告》
状态:待审批
---
根据《建档流程与架构分析报告》(2026-04-28),共识别出 **7 个问题**:
| 编号 | 问题 | 严重级别 | 状态 |
| P001 | user_index.json 同步风险 | 🔴 严重 | 待修复 |
| P002 | 渠道激活依赖用户主动发消息 | 🔴 严重 | 待修复 |
| P003 | 档案目录结构不统一 | ⚠️ 中等 | 待修复 |
| P004 | 活动名称映射维护成本高 | ⚠️ 中等 | 待修复 |
| P005 | SESSION_STATE 文件分散 | ⚠️ 中等 | 待修复 |
| P006 | 文档版本管理不规范 | ℹ️ 低 | 待修复 |
| P007 | 测试档案未清理 | ℹ️ 低 | 待修复 |
| 编号 | 问题 | 严重级别 | 状态 |
| P008 | 云部署脚本硬编码 contactId(越权风险) | 🔴 严重 | 待修复 |
---
| 阶段 | 时间 | 目标 | 问题数量 |
| **第一阶段:紧急修复** | 第 1 周 | 解决严重级别问题 | 3 个(P001, P002, P008) |
| **第二阶段:中期优化** | 第 2-3 周 | 解决中等级别问题 | 3 个(P003, P004, P005) |
| **第三阶段:长期完善** | 第 4-6 周 | 解决低级别问题 + 架构升级 | 2 个(P006, P007)+ 2 个新增 |
---
| 任务 ID | 关联问题 | 任务名称 | 优先级 | 预计工时 | 责任角色 |
| T001 | P001 | 增强 user_index.json 同步脚本健壮性 | P0 | 4 小时 | 开发 |
| T002 | P002 | 增加渠道状态监控机制 | P0 | 4 小时 | 开发 |
| T003 | P008 | 修复云部署脚本越权问题 | P0 | 2 小时 | 开发 |
| T004 | P003 | 统一档案目录结构 | P1 | 8 小时 | 开发 |
| T005 | P004 | 优化活动名称映射管理 | P1 | 6 小时 | 开发 + 运营 |
| T006 | P005 | 统一 SESSION_STATE 文件位置 | P1 | 4 小时 | 开发 |
| T007 | P006 | 规范文档版本管理 | P2 | 4 小时 | 文档 |
| T008 | P007 | 清理测试档案 | P2 | 2 小时 | 运维 |
| T009 | - | 引入数据库存储(长期) | P2 | 40 小时 | 开发 |
| T010 | - | 建立自动化测试体系 | P2 | 20 小时 | 测试 |
---
---
**关联问题:** P001 — user_index.json 同步风险
**问题描述:**
**整改目标:**
**技术方案:**
# 修改 skills/user-onboard/scripts/sync_user_index.py
def call_update_script(contact_id, *args):
"""调用 update_user_index.py(增加重试机制)"""
max_retries = 3
for attempt in range(max_retries):
try:
cmd = ["python3", str(UPDATE_SCRIPT), contact_id] + list(args)
result = subprocess.run(
cmd,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True,
timeout=10,
env=env
)
if result.returncode == 0:
return True
else:
if attempt == max_retries - 1:
return False
time.sleep(1) # 重试前等待
except Exception as e:
if attempt == max_retries - 1:
return False
time.sleep(1)
return False
**修改文件清单:**
**验收标准:**
**风险评估:**
---
**关联问题:** P002 — 渠道激活依赖用户主动发消息
**问题描述:**
**整改目标:**
**技术方案:**
# 新增脚本:scripts/check_channel_status.sh
#!/bin/bash
# 渠道状态监控脚本
USER_INDEX="/home/admin/.openclaw/workspace/user_index.json"
OUTPUT_FILE="/home/admin/.openclaw/workspace/logs/channel_status_$(date +%Y%m%d).json"
# 读取所有 contactId
contactIds=$(cat "$USER_INDEX" | jq -r 'keys[]')
results=()
for contactId in $contactIds; do
# 调用 tutu API 检查渠道状态
status=$(curl -s -X POST "https://tutu-gateway.lovebenefits.com/tutu-api/api/jkzl/mcp/chat/contact/status" \
-H "Content-Type: application/json" \
-d "{\"tenant\":\"jkzl\",\"contactId\":\"$contactId\"}" | jq -r '.status')
if [ "$status" != "active" ]; then
results+=("{\"contactId\":\"$contactId\",\"status\":\"inactive\"}")
fi
done
# 输出结果
echo "{\"timestamp\":\"$(date -Iseconds)\",\"unactivated\":[$(IFS=,; echo "${results[*]}")]}" > "$OUTPUT_FILE"
**新增文件清单:**
**修改文件清单:**
**验收标准:**
**风险评估:**
---
**关联问题:** P008 — 云部署脚本硬编码 contactId
**问题描述:**
**整改目标:**
**技术方案:**
# 修改 scripts/update-reports.sh
# 从环境变量或会话标识获取当前用户 contactId
CONTACT_ID="${DEPLOY_CONTACT_ID:-}"
if [ -z "$CONTACT_ID" ]; then
# 尝试从会话标识解析
CONTACT_ID=$(python3 -c "
import os
# 从环境变量或会话标识获取
session_key = os.environ.get('SESSION_KEY', '')
if ':' in session_key:
contact_id = session_key.split(':')[-1]
print(contact_id)
")
fi
if [ -z "$CONTACT_ID" ]; then
echo "❌ 错误:无法获取当前用户 contactId"
echo "请设置环境变量 DEPLOY_CONTACT_ID 或从会话中自动获取"
exit 1
fi
# 权限检查
ROLE=$(python3 -c "
import json
user_index = json.load(open('/home/admin/.openclaw/workspace/user_index.json'))
info = user_index.get('$CONTACT_ID', {})
print(info.get('role', 'unknown'))
")
if [ "$ROLE" = "owner" ]; then
echo "👤 当前用户:$CONTACT_ID (owner)"
elif [ "$ROLE" = "employee" ]; then
echo "👤 当前用户:$CONTACT_ID (employee)"
else
echo "👤 当前用户:$CONTACT_ID (other-contacts)"
fi
# 记录审计日志
echo "{\"timestamp\":\"$(date -Iseconds)\",\"contactId\":\"$CONTACT_ID\",\"role\":\"$ROLE\",\"action\":\"deploy\",\"project\":\"$PROJECT_NAME\"}" >> ~/.openclaw/cloud-deploy-audit.log
**修改文件清单:**
**新增文件清单:**
**验收标准:**
**风险评估:**
---
---
**关联问题:** P003 — 档案目录结构不统一
**问题描述:**
**整改目标:**
**修改文件清单:**
**新增文件清单:**
**验收标准:**
---
**关联问题:** P004 — 活动名称映射维护成本高
**问题描述:**
**整改目标:**
**修改文件清单:**
**新增文件清单:**
**验收标准:**
---
**关联问题:** P005 — SESSION_STATE 文件分散
**问题描述:**
**整改目标:**
**修改文件清单:**
**新增文件清单:**
**验收标准:**
---
---
**关联问题:** P006 — 文档版本管理不规范
**整改目标:**
**新增文件清单:**
**验收标准:**
---
**关联问题:** P007 — 测试档案未清理
**整改目标:**
**新增文件清单:**
**验收标准:**
---
**整改目标:**
**新增文件清单:**
---
**整改目标:**
**新增文件清单:**
---
| 风险 | 可能性 | 影响 | 风险等级 | 缓解措施 |
| 数据迁移丢失 | 低 | 高 | ⚠️ 中 | 迁移前完整备份 |
| 同步脚本故障 | 中 | 高 | ⚠️ 中 | 保留旧版本,灰度发布 |
| 渠道 API 变更 | 低 | 中 | ℹ️ 低 | 抽象 API 接口层 |
| 测试覆盖不足 | 中 | 中 | ℹ️ 低 | 分阶段增加测试 |
| 任务 | 回滚方案 |
| T001 | 保留旧版 sync_user_index.py,可随时切换 |
| T002 | 关闭渠道监控任务,不影响现有功能 |
| T003 | 恢复硬编码 contactId,重新部署 |
| T004 | 保留旧目录结构,手动恢复 |
| T005 | 恢复 AGENTS.md 内嵌映射表 |
| T006 | 恢复旧 SESSION_STATE 位置 |
| T009 | 保留文件存储,双写模式过渡 |
---
---
| 角色 | 人数 | 工时 |
| 开发工程师 | 1-2 | 80 小时 |
| 测试工程师 | 1 | 20 小时 |
| 文档工程师 | 0.5 | 10 小时 |
| 运营人员 | 0.5 | 6 小时 |
---
| 阶段 | 审批人 | 状态 | 日期 |
| 计划编制 | 小医 | ✅ 已完成 | 2026-04-28 |
| 技术评审 | 待指定 | ⏳ 待审批 | - |
| 产品评审 | 高祖峰 | ⏳ 待审批 | - |
| 最终批准 | 高祖峰 | ⏳ 待审批 | - |
---
| 文件 | 说明 | 位置 |
| 建档流程与架构分析报告.md | 分析报告原文 | docs/architecture-analysis/ |
| issue-tracker-20260427.md | 问题执行清单 | docs/ |
| history-issues-tracker.md | 历史问题追踪 | docs/ |
| 术语 | 说明 |
| contactId | tutu-aggchat 分配的用户短 ID(8 位) |
| user_index.json | 全局用户索引文件 |
| SESSION_STATE | 会话状态文件 |
| tutu-aggchat | 企业微信聚合聊天通道 |
---
_整改计划版本:v1.0_
_编制时间:2026-04-28 14:12_
_编制依据:《建档流程与架构分析报告》_
_状态:待审批_
_保存位置:/home/admin/.openclaw/workspace/docs/architecture-analysis/整改计划-v1.0.md_