skills/mercury-api.wepieoa.com/issue-troubleshooter

issue-troubleshooter

SKILL.md

客服工单问题排查助手

概述

统一排查入口,根据用户提供的工单/问题信息,自动编排多个下游 skill 完成标准化排查流程。

排查流程(四阶段,两次确认):

阶段一:信息收集 → 确认汇总 🛑(第一次确认)
阶段二:问题分类 → 生成排查计划 🛑(第二次确认)
阶段三:按计划逐步执行排查
阶段四:汇总结论与建议

下游 Skill 依赖

Skill 用途 默认脚本路径
sls-query 查询生产日志 ~/.claude/skills/act-sls-query/scripts/sls_cli.py
fetch-game-config-clean 查询活动配置 ~/.claude/skills/act-fetch-game-config-clean/scripts/fetch_config.py
weplay-config-query 查询平台配置(礼物、道具等) ~/.claude/skills/act-weplay-config-query/scripts/query_weplay_config.py
feishu-project-tool 查询飞书工单详情 ~/.claude/skills/act-feishu-project-tool/scripts/query_issue.py
redis-query 只读查询线上 Redis 数据 ~/.claude/skills/act-redis-query/scripts/redis_query.py
gitepic 查看代码和提交记录 gitepic CLI

脚本路径预检(阶段三执行前必须完成)

在阶段三开始执行排查前,必须先验证所有排查计划中涉及的脚本是否存在。 对排查计划中用到的每个 skill,执行路径检查:

# 检查脚本是否存在(按排查计划中实际用到的 skill 检查,不必全部检查)
ls -la ~/.claude/skills/act-sls-query/scripts/sls_cli.py 2>/dev/null && echo "✅ sls-query" || echo "❌ sls-query"
ls -la ~/.claude/skills/act-fetch-game-config-clean/scripts/fetch_config.py 2>/dev/null && echo "✅ fetch-game-config-clean" || echo "❌ fetch-game-config-clean"
ls -la ~/.claude/skills/act-weplay-config-query/scripts/query_weplay_config.py 2>/dev/null && echo "✅ weplay-config-query" || echo "❌ weplay-config-query"
ls -la ~/.claude/skills/act-feishu-project-tool/scripts/query_issue.py 2>/dev/null && echo "✅ feishu-project-tool" || echo "❌ feishu-project-tool"
ls -la ~/.claude/skills/act-redis-query/scripts/redis_query.py 2>/dev/null && echo "✅ redis-query" || echo "❌ redis-query"

预检结果处理:

结果 处理
全部 ✅ 正常进入阶段三执行
部分 ❌ 输出缺失提示,跳过该 skill 对应步骤,排查计划中标注"skill 不可用"
全部 ❌ 提示用户安装 skill:weactai install-all

缺失时的提示模板:

⚠️ 脚本预检发现以下 skill 未安装:
- ❌ fetch-game-config-clean(排查计划步骤 2 将跳过)

排查将继续执行可用步骤,跳过的步骤需手动排查。
如需安装缺失 skill,请执行:weactai install fetch-game-config-clean

备选路径探测(当默认路径不存在时):

部分 skill 可能安装在非标准路径,按以下优先级探测:

  1. ~/.claude/skills/act-<name>/scripts/ (Claude Code,默认)
  2. ~/.cursor/rules/act-<name>/scripts/ (Cursor)
  3. ~/.codex/skills/<name>/scripts/ (Codex)
# 备选路径探测示例(以 sls-query 为例)
for dir in ~/.claude/skills/act-sls-query ~/.cursor/rules/act-sls-query ~/.codex/skills/sls-query; do
  if [ -f "$dir/scripts/sls_cli.py" ]; then
    echo "found: $dir/scripts/sls_cli.py"
    break
  fi
done

阶段一:信息收集与确认 🛑

必填信息(缺一不可)

必填项 说明 缺失时处理
问题描述 飞书工单链接 或 文字描述 必须反问
区服 哪个区服(如 C/华语服/J/日服) 必须反问,禁止猜测
时间范围 问题发生的具体时间 必须反问,禁止用默认值
用户标识 uid 或 device_id 必须反问

可选信息(有则更精准)

可选项 说明
活动 ID act_id,有则直接查活动配置和日志
具体报错 错误码、接口名、截图描述
环境 测试服/正式服(默认正式服)
活动配置 key 有则直接查配置,无需推断

反问规则

缺少任意必填项时,一次性列出所有缺失项:

排查问题前需要确认以下信息:
1. 问题描述:具体是什么问题?(或提供飞书工单链接)
2. 区服:哪个区服?(如:华语服 C / 日服 J / ...)
3. 时间范围:大概什么时间发生的?(如:今天 14:00 左右 / 2026-04-07 14:00~16:00)
4. 用户标识:uid 或 device_id?

飞书工单自动提取

当用户提供飞书工单链接(project.feishu.cn)时:

  1. 调用 feishu-project-tool 获取工单详情
  2. 从工单中自动提取:问题描述、关联用户、发生时间
  3. 仍需用户补充缺失的必填项(如区服)

确认汇总(第一次确认)

所有必填项齐全后,必须输出确认汇总,等待用户确认:

📋 排查信息确认:
- 问题描述:用户反馈活动领不到奖励
- 区服:华语服 (C)
- 时间范围:2026-04-07 14:00:00 ~ 2026-04-07 16:00:00
- 用户:uid: 12345
- 活动 ID:100(可选)
- 环境:正式服

信息确认后将生成排查计划,请回复"确认"或修改以上信息。

用户确认后进入阶段二。


阶段二:问题分类与排查计划 🛑

问题分类决策树

根据问题描述中的关键词自动分类:

问题类型 触发关键词 排查步骤(按顺序执行)
活动奖励问题 领不到、发奖失败、奖励异常、没收到奖励、奖励错误 sls-query activity_server 日志 → ② fetch-game-config-clean 活动配置 → ③ sls-query coin/chip_change_log → ④ redis-query 验证 Redis 存储状态(按需)
活动配置问题 配置错误、时间不对、条件不对、活动没开、活动提前结束 fetch-game-config-clean 活动配置 → ② sls-query activity_server 日志
活动入口/显示问题 看不到活动、入口消失、UI异常、活动不显示、白屏 fetch-game-config-clean 活动配置(时间/条件) → ② sls-query http-extranet_api_info
接口报错 500、报错、请求失败、超时、接口异常 sls-query http-extranet_api_info → ② sls-query http-ex-access → ③ 代码排查
用户数据异常 金币不对、游戏币丢失、数据异常、余额错误、数据没重置、数据不一致 sls-query coin/chip_change_log → ② sls-query activity_server → ③ redis-query 查 Redis 存储状态 → ④ weplay-config-query 平台配置
礼物/道具问题 礼物、道具、装扮、背包、购买失败 weplay-config-query 礼物/道具配置 → ② sls-query coin_change_log → ③ sls-query http-extranet_api_info
定时任务问题 cron没执行、定时任务失败、没有自动执行 sls-query wespy-http-go-cron → ② fetch-game-config-clean 相关配置
用户登录问题 登不上、闪退、登录失败、版本不对 sls-query login_log → ② sls-query client_ping
成长值/等级问题 成长值、等级、经验、升级 sls-query sls_growth_log → ② sls-query activity_server
无法分类 反问用户补充更多信息

排查计划输出(第二次确认)

分类完成后,输出排查计划并等待用户确认:

📋 排查计划:
问题类型:活动奖励问题

排查步骤:
  1. [sls-query] 查 activity_server 日志
     → 区服: C | 时间: 14:00~16:00 | 条件: uid=12345, act_id=100
  2. [fetch-game-config-clean] 查活动配置
     → namespace: activity | region: C | key: <从步骤1结果推断或用户提供>
  3. [sls-query] 查 coin_change_log 奖励发放记录
     → 区服: C | 时间: 14:00~16:00 | 条件: uid=12345

确认后开始排查,请回复"确认"或修改以上计划。

用户确认后进入阶段三。


阶段三:按计划逐步执行

执行规则

  1. 按计划步骤顺序执行,每步调用对应 skill
  2. 每步必须设置超时:所有命令前加 timeout 300(5 分钟)
  3. 逐步输出结果:每步执行完立即输出关键发现,不要等全部跑完

逐步输出格式

每步执行完输出:

✅ 步骤 1/3 完成 [sls-query → activity_server]
发现:用户 12345 在 14:23 参与活动 100,状态为 success,但未触发发奖逻辑
→ 继续步骤 2...

动态调整

  • 某步发现关键线索 → 可调整后续步骤优先级
    • 例:日志发现 "config not found" → 优先查配置,跳过后续日志步骤
  • 某步结果指向新方向 → 可追加排查步骤
    • 例:活动配置正常,但日志显示平台礼物 ID 异常 → 追加 weplay-config-query 查礼物配置
  • 日志/配置无法解释数据不一致 → 追加 redis-query 查 Redis 实际存储值
    • 例:日志显示发奖成功但用户反馈没收到 → 用 redis-query 查 act:{actId}:*:{uid} 验证 Redis 中是否有奖励记录

超时与异常处理

⏱️ 步骤 2/3 超时 [fetch-game-config-clean]
可能原因:配置数据量过大或网络问题
处理:跳过此步,继续步骤 3,最终结论中标注此步未完成

异常处理原则:

  • 超时 → 记录原因,继续下一步,不阻塞整体流程
  • 无结果 → 记录"该维度未发现异常",继续下一步
  • skill 不可用 → 记录并跳过,建议用户手动检查

下游 Skill 调用规范

sls-query 调用

timeout 300 ~/.claude/skills/act-sls-query/scripts/sls_cli.py \
  --region <区服> query \
  --logstore <logstore> \
  --query "* and uid: <uid>" \
  --from "<开始时间>" --to "<结束时间>" \
  --limit 100 --reverse

fetch-game-config-clean 调用

timeout 300 ~/.claude/skills/act-fetch-game-config-clean/scripts/fetch_config.py \
  --namespace <namespace> \
  --region <区服> \
  --key <config_key> \
  --env <prod|dev> \
  --pretty

常用 namespace:

  • activity:活动配置
  • activity_config:活动全局配置
  • blindbox_config:盲盒配置
  • gift_box:礼盒配置
  • gift_pkg:礼包配置

weplay-config-query 调用

timeout 300 ~/.claude/skills/act-weplay-config-query/scripts/query_weplay_config.py \
  --namespace <namespace> \
  --key <key> \
  --regions <区服> \
  --scene online \
  --json-output

注意

  • 排查线上问题时 --scene 必须传 online(该脚本默认 test
  • 若脚本输出 terminal=trueretryable=false,必须立即停止,不得重试或换参数重查
  • 单轮对话内配置查询脚本最多执行一次

feishu-project-tool 调用

timeout 300 ~/.claude/skills/act-feishu-project-tool/scripts/query_issue.py \
  "<飞书工单URL或ID>" [--key <namespace_key> --type <issue|story|task>]

支持的输入格式:完整 URL、project_key:type:id、ID + --key + --type、纯 ID(自动遍历)。

redis-query 调用

timeout 300 ~/.claude/skills/act-redis-query/scripts/redis_query.py \
  --region <区服> \
  --env online \
  --agent-user-id <feishu_sender_id> \
  --ins <实例名> \
  --cmd <命令> [参数...]

排查未知 key 的标准流程:先 TYPE + TTL 探测类型和过期时间,再按类型选择对应读命令(GET/HGETALL/ZREVRANGE 等)。

活动 Redis 键命名规范act:{actId}:{module}:{entity}:{uid}:{suffix}

常用排查命令

# 探测 key 类型和过期
--cmd TYPE act:1001:reward:state:12345
--cmd TTL act:1001:reward:state:12345

# 读取 hash 全部字段
--cmd HGETALL act:1001:sign:state:12345

# 查排行榜 Top 10
--cmd ZREVRANGE act:1001:rank:score 0 9 WITHSCORES

# 检查 key 是否存在
--cmd EXISTS act:1001:reward:state:12345

注意

  • 排查线上问题时 --env 必须传 online(该脚本默认 test
  • --agent-user-id 必须使用当前对话中的飞书发送者 ID,禁止臆造
  • 只读查询,仅允许 GET/HGET/ZRANGE/EXISTS/TYPE/TTL 等读命令
  • GET/HGET 超过 4096 字节会被拒绝,需改用 GETRANGE 分段读取
  • 有敏感 key 黑名单(coin/充值/支付相关),触发时跳过该步骤
  • 请求失败时最多重试一次,禁止循环重试

阶段四:汇总结论与建议

结论输出模板

## 排查结论

**问题类型**:<问题分类>
**根因**:<一句话根因描述>

**证据链**:
  1. [activity_server] 用户 14:23 参与活动,状态 success,未触发发奖
  2. [活动配置] reward_time = "2026-04-08 00:00:00",用户参与时未到发奖时间
  3. [coin_change_log] 该时间段无该用户的奖励发放记录

**结论**:活动配置中发奖时间设置为 2026-04-08,用户在 04-07 参与时尚未到发奖时间,属于配置预期行为。

**建议**:
  - 方案 A:如需立即发奖,修改活动配置 reward_time 为 2026-04-07 00:00:00
  - 方案 B:如设计如此,向用户解释发奖将在 04-08 统一发放

**关联信息**:
  - 活动配置:namespace=activity, key=xxx
  - 关键日志时间:2026-04-07 14:23:15
  - 涉及 logstore:activity_server, coin_change_log

无法定位根因时

## 排查结论

**问题类型**:<问题分类>
**当前发现**:
  1. [activity_server] 日志显示 xxx
  2. [活动配置] 配置值为 xxx

**未能定位根因**,建议:
  1. 补充信息:<需要用户提供什么>
  2. 扩大排查范围:<建议查哪个库/什么时间段>
  3. 代码排查:<建议看哪个模块的代码>

完整示例

示例 1:用户提供飞书工单

用户:帮我排查一下这个工单 https://project.feishu.cn/weplay/issue/detail/6686747751

Agent:
📋 排查信息确认:
- 问题描述:[从工单提取] 用户反馈参与春节活动后未收到金币奖励
- 区服:需要确认,请问是哪个区服?
- 时间范围:[从工单提取] 2026-04-06 提交
- 用户:[从工单提取] uid: 88888
- 工单链接:https://project.feishu.cn/weplay/issue/detail/6686747751

请补充区服信息。

用户:华语服

Agent:
📋 排查信息确认(更新):
- 问题描述:用户参与春节活动后未收到金币奖励
- 区服:华语服 (C)
- 时间范围:2026-04-06 00:00:00 ~ 2026-04-06 23:59:59
- 用户:uid: 88888
- 环境:正式服

信息确认后将生成排查计划,请回复"确认"。

用户:确认

Agent:
📋 排查计划:
问题类型:活动奖励问题

排查步骤:
  1. [sls-query] 查 activity_server 日志 → uid=88888, 华语服, 04-06 全天
  2. [fetch-game-config-clean] 查活动配置 → namespace=activity, 华语服
  3. [sls-query] 查 coin_change_log → uid=88888, 华语服, 04-06 全天

确认后开始排查。

用户:确认

Agent:(执行排查...逐步输出结果...最终输出结论)

示例 2:用户直接描述问题

用户:华语服 uid 12345 今天下午活动领不到奖

Agent:
📋 排查信息确认:
- 问题描述:活动领不到奖励
- 区服:华语服 (C)
- 时间范围:2026-04-07 12:00:00 ~ 2026-04-07 18:00:00(今天下午)
- 用户:uid: 12345
- 环境:正式服

信息确认后将生成排查计划,请回复"确认"或修改以上信息。

全局超时兜底(10 分钟硬限制)

从阶段三开始计时,如果整体排查超过 10 分钟仍未完成,必须立即中断并输出当前进度报告:

⏱️ 排查已超过 10 分钟,暂停并汇报当前进度:

## 当前进度

| 步骤 | 状态 | 发现 |
|------|------|------|
| 1. activity_server 日志 | ✅ 完成 | 用户 14:23 参与活动,状态 success |
| 2. 活动配置 | ⏱️ 超时 | 未能获取配置数据 |
| 3. coin_change_log | ⏳ 未执行 | — |

## 当前卡点

- 步骤 2 查询活动配置超时,可能原因:配置数据量过大 / 网络问题
- 步骤 3 尚未执行

## 已有线索

- activity_server 显示用户参与成功但未触发发奖

## 加速排查建议

请补充以下信息,可大幅缩短排查时间:
1. **活动配置 key**:如果知道具体的配置 key,可跳过推断直接查询
2. **缩小时间范围**:当前查询 04-06 全天,如能精确到小时(如 14:00~15:00)会更快
3. **具体报错信息**:如有错误码或接口名,可精准定位日志
4. **是否需要继续**:回复"继续"将从卡点恢复执行剩余步骤

→ 补充信息后回复,或回复"继续"从断点恢复。

超时兜底规则:

  1. 进入阶段三时记录开始时间
  2. 每步执行完检查累计耗时,超过 10 分钟立即中断
  3. 中断时必须输出:已完成步骤及发现、卡点原因、已有线索、加速建议
  4. 用户补充信息后,从断点恢复执行(不重复已完成步骤)
  5. 用户回复"继续"→ 跳过卡点步骤,执行剩余步骤

注意事项

  1. 两次确认不可省略:信息确认 + 排查计划确认,确保不做无用功
  2. 禁止盲查:不在信息不全时尝试多个 logstore
  3. 双重超时保护:单步 timeout 300(5 分钟) + 全局 10 分钟硬限制
  4. 逐步输出:每步完成立即输出发现,用户可实时了解进展
  5. 结论有据:结论必须基于证据链,禁止猜测
  6. 无法定位时坦诚:给出已有发现和进一步排查建议,不强行下结论
  7. 断点恢复:超时中断后支持从断点继续,不重复已完成步骤
Installs
2
First Seen
Apr 13, 2026