Jelajahi Sumber

update 支付返回逻辑与token传入openclaw

gangvy 5 bulan lalu
induk
melakukan
4f92268029
72 mengubah file dengan 7951 tambahan dan 97 penghapusan
  1. 3 0
      .netlify/state.json
  2. 11 0
      README.md
  3. 49 3
      competitor-analysis/competitor-bsr-tracking/api-config.json
  4. 48 2
      competitor-analysis/competitor-discovery/api-config.json
  5. 50 4
      competitor-analysis/competitor-pricing-analysis/api-config.json
  6. 48 2
      competitor-analysis/competitor-product-comparison/api-config.json
  7. 17 1
      deploy-to-openclaw.ps1
  8. 259 0
      docs/TikHub-vs-蝉妈妈-API对比分析.md
  9. 422 0
      docs/VOC工作坊方案-两天一夜.html
  10. 128 0
      docs/cloudfunction/apig-payment/getApigAuth.md
  11. 143 0
      docs/cloudfunction/apig-payment/getApigInfo.md
  12. 11 0
      docs/index.html
  13. 423 0
      docs/other/VOC工作坊方案-两天一夜.md
  14. 1008 0
      docs/other/voc.md
  15. 1336 0
      docs/tikhub-vs-chanmama-comparison.html
  16. 244 0
      docs/禅妈妈接口文档/品牌数据.md
  17. 206 0
      docs/禅妈妈接口文档/品类数据.md
  18. 172 0
      docs/禅妈妈接口文档/商品数据.md
  19. 142 0
      docs/禅妈妈接口文档/小店数据.md
  20. 134 0
      docs/禅妈妈接口文档/达人数据.md
  21. 47 1
      douyin/douyin-comment-replies/api-config.json
  22. 47 1
      douyin/douyin-general-search/api-config.json
  23. 47 1
      douyin/douyin-hashtag-search/api-config.json
  24. 47 1
      douyin/douyin-user-profile/api-config.json
  25. 47 1
      douyin/douyin-user-search/api-config.json
  26. 47 1
      douyin/douyin-video-comments/api-config.json
  27. 47 1
      douyin/douyin-video-detail/api-config.json
  28. 110 18
      payment/apig-pay.html
  29. 48 2
      review-analysis/review-batch-collection/api-config.json
  30. 47 1
      review-analysis/review-highlight-extraction/api-config.json
  31. 48 2
      review-analysis/review-keyword-cloud/api-config.json
  32. 47 1
      review-analysis/review-pain-point-extraction/api-config.json
  33. 47 1
      review-analysis/review-sentiment-analysis/api-config.json
  34. 47 1
      social-media/instagram-search/api-config.json
  35. 47 1
      social-media/instagram-user-info/api-config.json
  36. 47 1
      social-media/instagram-user-posts/api-config.json
  37. 47 1
      social-media/tiktok-hashtag-detail/api-config.json
  38. 47 1
      social-media/tiktok-hashtag-videos/api-config.json
  39. 47 1
      social-media/tiktok-user-posts/api-config.json
  40. 47 1
      social-media/tiktok-user-profile/api-config.json
  41. 47 1
      social-media/tiktok-user-search/api-config.json
  42. 47 1
      social-media/tiktok-video-comments/api-config.json
  43. 47 1
      social-media/tiktok-video-detail/api-config.json
  44. 47 1
      social-media/tiktok-video-search/api-config.json
  45. 47 1
      social-voc/instagram-brand-voc/api-config.json
  46. 47 1
      social-voc/social-trend-analysis/api-config.json
  47. 47 1
      social-voc/tiktok-brand-voc/api-config.json
  48. 47 1
      social-voc/tiktok-category-voc/api-config.json
  49. 50 4
      synthesis/brand-profile/api-config.json
  50. 48 2
      synthesis/category-landscape/api-config.json
  51. 47 1
      synthesis/html-report-generator/api-config.json
  52. 51 5
      synthesis/product-deep-analysis/api-config.json
  53. 47 1
      synthesis/user-persona/api-config.json
  54. 47 1
      synthesis/voc-proposal/api-config.json
  55. 116 0
      video-creation/quickly-video-create/SKILL.md
  56. 248 0
      video-creation/quickly-video-create/api-config.json
  57. 88 0
      video-creation/quickly-video-library/SKILL.md
  58. 183 0
      video-creation/quickly-video-library/api-config.json
  59. 86 0
      video-creation/quickly-video-query/SKILL.md
  60. 129 0
      video-creation/quickly-video-query/api-config.json
  61. 48 2
      voc/asin-reverse-keywords/api-config.json
  62. 48 2
      voc/asin-sales-volume/api-config.json
  63. 48 2
      voc/category-products/api-config.json
  64. 48 2
      voc/category-tree/api-config.json
  65. 48 2
      voc/keyword-product-ranking/api-config.json
  66. 48 2
      voc/keyword-search-trend/api-config.json
  67. 48 2
      voc/keyword-search/api-config.json
  68. 48 2
      voc/product-detail-query/api-config.json
  69. 48 2
      voc/product-monitor/api-config.json
  70. 48 2
      voc/product-reviews-query/api-config.json
  71. 48 2
      voc/product-search/api-config.json
  72. 48 2
      voc/similar-products/api-config.json

+ 3 - 0
.netlify/state.json

@@ -0,0 +1,3 @@
+{
+	"siteId": "4b1b03dc-998f-4d96-aa27-aa58b065176c"
+}

+ 11 - 0
README.md

@@ -85,6 +85,17 @@ openclaw-voc-skill/
 │   ├── user-persona/                 # 用户画像 + 购买行为分析 + 季节/渠道偏好
 │   └── voc-proposal/                 # 6章节提案 + ROI估算 + 30天行动时间线
+├── video-creation/                   # 一键成片(Quickly AI视频生成)
+│   ├── quickly-video-create/         # 创建视频生成任务(素材→task_id)
+│   │   ├── SKILL.md
+│   │   └── api-config.json
+│   ├── quickly-video-query/          # 查询视频生成结果(轮询 task_id)
+│   │   ├── SKILL.md
+│   │   └── api-config.json
+│   └── quickly-video-library/        # 视频库管理(分页查询/筛选/下载计数)
+│       ├── SKILL.md
+│       └── api-config.json
+│
 └── workflows/                        # 报告生成编排
     ├── report_generation.workflow.json
     ├── pipeline.md

+ 49 - 3
competitor-analysis/competitor-bsr-tracking/api-config.json

@@ -29,7 +29,7 @@
         "endpoint": "/api/MonitorQuery",
         "method": "POST",
         "forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
-        "headers": { "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7" },
+        "headers": { "Authorization": "Bearer {{vocToken}}" },
         "requestBody": { "ASIN": "${asin}" },
         "queryParams": { "domain": "${domain}" }
       },
@@ -45,7 +45,7 @@
         "endpoint": "/api/ProductRequest",
         "method": "POST",
         "forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
-        "headers": { "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7" },
+        "headers": { "Authorization": "Bearer {{vocToken}}" },
         "requestBody": { "ASIN": "${asin}", "Trend": 1, "QueryTrendStartDt": "", "QueryTrendEndDt": "" },
         "queryParams": { "domain": "${domain}" }
       },
@@ -149,5 +149,51 @@
     "maxAttempts": 2,
     "delay": 2000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 48 - 2
competitor-analysis/competitor-discovery/api-config.json

@@ -53,7 +53,7 @@
         "endpoint": "/api/ProductQuery",
         "method": "POST",
         "forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
-        "headers": { "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7" },
+        "headers": { "Authorization": "Bearer {{vocToken}}" },
         "requestBody": { "Page": 1, "Query": "1", "QueryType": "7", "Pattern": "${categoryKeyword}" },
         "queryParams": { "domain": "${domain}" }
       },
@@ -207,5 +207,51 @@
     "maxAttempts": 2,
     "delay": 2000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 50 - 4
competitor-analysis/competitor-pricing-analysis/api-config.json

@@ -38,7 +38,7 @@
         "endpoint": "/api/ProductQuery",
         "method": "POST",
         "forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
-        "headers": { "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7" },
+        "headers": { "Authorization": "Bearer {{vocToken}}" },
         "requestBody": { "Page": 1, "Query": "1", "QueryType": "7", "Pattern": "${categoryKeyword}" },
         "queryParams": { "domain": "${domain}" }
       },
@@ -54,7 +54,7 @@
         "endpoint": "/api/ProductRequest",
         "method": "POST",
         "forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
-        "headers": { "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7" },
+        "headers": { "Authorization": "Bearer {{vocToken}}" },
         "requestBody": { "ASIN": "${asin}", "Trend": 1, "QueryTrendStartDt": "", "QueryTrendEndDt": "" },
         "queryParams": { "domain": "${domain}" }
       },
@@ -70,7 +70,7 @@
         "endpoint": "/api/MonitorQuery",
         "method": "POST",
         "forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
-        "headers": { "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7" },
+        "headers": { "Authorization": "Bearer {{vocToken}}" },
         "requestBody": { "ASIN": "${asin}" },
         "queryParams": { "domain": "${domain}" }
       },
@@ -172,5 +172,51 @@
     "maxAttempts": 2,
     "delay": 2000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 48 - 2
competitor-analysis/competitor-product-comparison/api-config.json

@@ -41,7 +41,7 @@
         "endpoint": "/api/ProductRequest",
         "method": "POST",
         "forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
-        "headers": { "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7" },
+        "headers": { "Authorization": "Bearer {{vocToken}}" },
         "requestBody": { "ASIN": "${asin}", "Trend": 1, "QueryTrendStartDt": "", "QueryTrendEndDt": "" },
         "queryParams": { "domain": "${domain}" }
       },
@@ -159,5 +159,51 @@
     "maxAttempts": 2,
     "delay": 2000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 17 - 1
deploy-to-openclaw.ps1

@@ -22,7 +22,8 @@ $categories = @(
     "review-analysis",
     "synthesis",
     "social-voc",
-    "douyin"
+    "douyin",
+    "video-creation"
 )
 
 Write-Host "========================================"
@@ -113,6 +114,21 @@ Write-Host "========================================"
 if ($DryRun) {
     Write-Host "Remove -DryRun to execute actual deployment." -ForegroundColor Yellow
 } else {
+    # 复制凭证模板(不覆盖已有凭证文件)
+    $credTemplate = Join-Path $SourceRoot "__config\voc-credentials.template.json"
+    $credTarget   = Join-Path (Split-Path $SkillsRoot -Parent) "voc-credentials.template.json"
+    $credFile     = Join-Path (Split-Path $SkillsRoot -Parent) "voc-credentials.json"
+    if (Test-Path $credTemplate) {
+        Copy-Item $credTemplate -Destination $credTarget -Force
+        Write-Host ""
+        Write-Host "Credentials template: $credTarget" -ForegroundColor Cyan
+        if (-not (Test-Path $credFile)) {
+            Write-Host "  → No voc-credentials.json found. Copy template and fill in vocToken to enable per-user tokens." -ForegroundColor Yellow
+        } else {
+            Write-Host "  → voc-credentials.json already exists, not overwritten." -ForegroundColor Green
+        }
+    }
+    Write-Host ""
     Write-Host "Done! Refresh OpenClaw skill list to verify." -ForegroundColor Green
     Write-Host "  openclaw skills list"
 }

+ 259 - 0
docs/TikHub-vs-蝉妈妈-API对比分析.md

@@ -0,0 +1,259 @@
+# TikHub vs 蝉妈妈 API 对比分析
+
+> **核心区别**:TikHub 是**原始数据爬取/代理型 API**,直接获取抖音/TikTok平台原始数据;蝉妈妈是**电商数据分析型 API**,提供经过加工的销售、品牌、达人等商业智能数据。
+
+---
+
+## 一、TikHub 独有能力(蝉妈妈没有的)
+
+### 1. 原始内容数据获取
+| 接口 | 说明 |
+|------|------|
+| 获取单个作品数据 (V1/V2/V3) | 获取视频原始数据、无水印播放链接 |
+| 获取视频最高画质播放链接 | 无水印高清下载 |
+| 批量获取视频信息 | 批量视频数据获取 |
+| 获取单个作品视频弹幕数据 | 弹幕原始数据 |
+| 获取首页推荐数据 / Home Feed | 推荐流数据 |
+| 获取相关作品推荐数据 | 相关视频推荐 |
+| 短剧/知识/游戏/二次元/音乐/美食作品推荐 | 分类频道推荐 |
+
+### 2. TikTok 国际版完整数据(蝉妈妈仅覆盖抖音)
+| API 模块 | 主要接口 |
+|----------|---------|
+| TikTok-Web-API | 视频/用户/搜索/直播/Tag/探索/热门趋势 |
+| TikTok-App-V3-API | 视频/用户/评论/搜索/音乐/话题/商品/商家/直播/创作者洞察 |
+| TikTok-Creator-API | 创作者账号健康/违规/概览/视频分析/商品分析/受众分析 |
+| TikTok-Analytics-API | 视频统计/虚假流量检测/评论关键词分析/创作者里程碑 |
+| TikTok-Ads-API | 广告搜索/详情/关键词洞察/热门产品/标签/音乐排行 |
+| TikTok-Shop-Web-API | 商品详情/评论/商家列表/搜索/分类/热卖 |
+| TikTok-Interaction-API | 发送评论/回复/点赞/关注/收藏/转发(自动化操作) |
+
+### 3. 其他平台数据(蝉妈妈完全没有)
+| 平台 | 说明 |
+|------|------|
+| Instagram | 用户信息、帖子、搜索 |
+| 小红书 | 笔记、用户、搜索 |
+| 快手 | 视频、用户 |
+| B站 | 视频、用户 |
+| 微信公众号 | 文章提取 |
+| Sora2 | 视频生成平台数据 |
+
+### 4. 搜索能力(深度搜索)
+| 接口 | 说明 |
+|------|------|
+| 综合搜索 V1/V2 | 全类型搜索 |
+| 视频搜索 V1/V2 | 按关键词搜索视频 |
+| 用户搜索 / V2 | 按关键词搜索用户 |
+| 话题搜索 V1/V2 | 搜索话题/挑战 |
+| 图片搜索 / 图文搜索 V3 | 图片内容搜索 |
+| 直播搜索 | 搜索正在直播的房间 |
+| 音乐搜索 | 搜索背景音乐 |
+| 经验搜索 / 讨论搜索 / 学校搜索 | 细分领域搜索 |
+| 图像识别搜索 | 以图搜索 |
+| 多重搜索 | 多类型混合搜索 |
+| 搜索关键词推荐 | 搜索建议/联想词 |
+
+### 5. 评论原始数据
+| 接口 | 说明 |
+|------|------|
+| 获取单个视频评论数据 | 完整评论文本、用户、时间、点赞数 |
+| 获取指定视频的评论回复数据 | 评论回复的完整文本 |
+| 评论关键词分析 (Analytics) | AI 分析评论关键词 |
+
+### 6. 用户互动关系数据
+| 接口 | 说明 |
+|------|------|
+| 获取用户粉丝列表 | 完整粉丝列表 |
+| 获取用户关注列表 | 完整关注列表 |
+| 获取用户点赞列表 | 用户点赞过的作品 |
+| 获取用户收藏列表 / 收藏夹 | 用户收藏内容 |
+| 获取用户转发作品列表 | 用户转发内容 |
+
+### 7. 直播实时数据
+| 接口 | 说明 |
+|------|------|
+| 提取直播间弹幕 | 实时弹幕流 |
+| 直播间弹幕参数获取 | WebSocket连接参数 |
+| 直播间在线检测 / 批量检测 | 是否在播 |
+| 获取直播间信息 | 直播间详情 |
+| 获取直播间首页推荐列表 | 直播推荐 |
+| 获取直播间礼物列表 | 可用礼物 |
+| 获取直播间送礼用户排行榜 | 送礼排行 |
+| 获取直播间商品列表 (V1/V2) | 直播间挂车商品 |
+| 获取直播每日榜单 | 直播排行榜 |
+
+### 8. 热搜 / 榜单
+| 接口 | 说明 |
+|------|------|
+| 获取抖音热搜榜数据 | 热搜词 |
+| 获取抖音直播热搜榜数据 | 直播热搜 |
+| 获取抖音音乐榜数据 | 热门音乐 |
+| 获取抖音品牌热榜分类/具体数据 | 品牌热榜 |
+| 获取每日热门内容作品数据 (TikTok) | 每日趋势 |
+| 获取每日趋势搜索关键词 (TikTok) | 趋势搜索词 |
+
+### 9. 工具类接口
+| 接口 | 说明 |
+|------|------|
+| 链接/ID提取 | 从分享链接提取视频ID、用户ID、直播间ID |
+| 生成短链接/二维码 | 分享功能 |
+| 加密/解密 | XBogus / ABogus / msToken / ttwid 等 |
+| 设备注册 | APP设备注册 |
+| Cookie获取 | 游客Cookie |
+| SSO登录 | 二维码登录流程 |
+
+---
+
+## 二、蝉妈妈独有能力(TikHub 没有的)
+
+### 1. ⭐ 销量/销售额数据(核心差异)
+| 数据 | 说明 |
+|------|------|
+| 商品销量/销售额 | 每日/累计销量和GMV |
+| 品牌销量/销售额 | 品牌维度的销售数据 |
+| 小店销量/销售额 | 店铺维度的销售数据 |
+| 达人带货销量/销售额 | 达人维度的带货数据 |
+
+> **TikHub 完全无法获取销量和销售额数据**,这是蝉妈妈的核心壁垒。
+
+### 2. 品牌维度分析
+| 数据 | 说明 |
+|------|------|
+| 品牌每日销售汇总 | 品牌名称/ID、日期、总/直播/视频/商品卡 销量销售额 |
+| 品牌关联达人记录 | 哪些达人在卖这个品牌 |
+| 品牌商品销售记录 | 品牌下各商品销售情况 |
+| 品牌SPU销售记录 | 按SPU聚合的销售分析 |
+| 品牌关联小店记录 | 哪些小店在卖这个品牌 |
+| 品牌带货直播/视频记录 | 品牌相关的直播和视频 |
+| 品牌商品卡销售记录 | 品牌的商品卡渠道销售 |
+
+### 3. 小店维度分析
+| 数据 | 说明 |
+|------|------|
+| 小店每日销售汇总 | 店铺日期、总/直播/视频/商品卡 销量销售额 |
+| 小店关联达人记录 | 哪些达人在为该店铺带货 |
+| 小店商品销售记录 | 店铺各商品的销售数据 |
+| 小店带货直播/视频记录 | 店铺相关的直播和视频 |
+
+### 4. 达人带货深度分析
+| 数据 | 说明 |
+|------|------|
+| 达人带货记录 | 达人卖了什么商品、销量销售额、佣金 |
+| 带货口碑分 | 达人的带货口碑评分 |
+| 带货水平 | 达人带货能力评级 |
+| 每日带货数据 | 按日的销量销售额趋势 |
+| 直播GPM / UV价值 | 直播间的商业效率指标 |
+| 直播流量结构 | 流量来源分布 |
+| 直播曝光商品数 | 直播间展示的商品数 |
+
+### 5. 商品全链路分析
+| 数据 | 说明 |
+|------|------|
+| 商品关联达人记录 | 哪些达人在卖这个商品 |
+| 商品关联直播记录 | 在哪些直播间售卖、讲解时长、销量 |
+| 商品关联视频记录 | 哪些视频在带这个商品 |
+| 商品卡销售记录 | 商品卡渠道的独立销售数据 |
+| 商品佣金比例 | 佣金率 |
+| 商品优惠券 | 优惠券信息 |
+
+### 6. 受众画像分析
+| 数据 | 说明 |
+|------|------|
+| 性别分布 | 男女比例 |
+| 年龄分布 | 各年龄段占比 |
+| 地区分布 | 省份分布 |
+| 城市等级分布 | 一线/二线/三线等 |
+| 八大消费人群 | 资深中产、新锐白领、精致妈妈等 |
+| 消费偏好分析 | 消费能力标签 |
+
+### 7. 渠道拆分能力
+| 渠道 | 数据 |
+|------|------|
+| 直播渠道 | 直播销量/销售额/达人数/场次 |
+| 视频渠道 | 视频销量/销售额/达人数/视频数 |
+| 商品卡渠道 | 商品卡销量/销售额 |
+
+> 蝉妈妈能将销售数据拆分为**直播、视频、商品卡**三大渠道,TikHub无此能力。
+
+### 8. SPU 聚合分析
+| 数据 | 说明 |
+|------|------|
+| 品牌SPU销售记录 | 将SKU聚合为SPU进行分析 |
+| SPU销量/销售额 | SPU维度的销售数据 |
+
+### 9. 品类分类体系
+| 数据 | 说明 |
+|------|------|
+| 蝉妈妈品类 | 蝉妈妈自建的品类层级体系 |
+| 抖音品类 | 抖音官方品类体系 |
+| 双分类映射 | 两套分类体系的映射关系 |
+
+---
+
+## 三、两者重叠/共有能力
+
+| 数据维度 | TikHub | 蝉妈妈 | 差异说明 |
+|----------|--------|--------|---------|
+| **用户/达人基础信息** | ✅ 完整原始数据(昵称、头像、签名、粉丝数、关注数、获赞数、认证等) | ✅ 精简业务数据(昵称、抖音号、粉丝量级、MCN、认证、带货口碑) | TikHub数据更全但偏原始;蝉妈妈增加了带货相关字段 |
+| **视频基础数据** | ✅ 完整(标题、描述、播放链接、封面、点赞/评论/转发/收藏数、发布时间、作者、音乐、话题标签) | ✅ 简要(视频标题、时长、互动数据) + 销量销售额 | TikHub有完整视频元数据;蝉妈妈有销售转化数据 |
+| **商品基础信息** | ✅ 商品详情/SKU/价格/评价 | ✅ 商品标题/ID/分类/价格/佣金/好评率 | TikHub有SKU级别详情;蝉妈妈有佣金和销售数据 |
+| **商品评价** | ✅ 评价列表原文 | ✅ 好评率数值 | TikHub有评论原文;蝉妈妈只有汇总评分 |
+| **直播间数据** | ✅ 直播流/弹幕/商品/礼物/排行 | ✅ 直播标题/时间/观看人次/销量销售额/GPM | TikHub偏实时互动;蝉妈妈偏销售分析 |
+| **话题/标签** | ✅ 话题详情/作品列表/搜索 | ❌ 无独立话题接口 | TikHub独有 |
+| **音乐** | ✅ 音乐详情/视频列表/搜索/排行 | ❌ 无 | TikHub独有 |
+
+---
+
+## 四、总结:选型建议
+
+### 适合用 TikHub 的场景
+- 🔍 **内容采集**:批量获取视频、评论、用户信息等原始数据
+- 🌍 **多平台覆盖**:需要TikTok国际版、Instagram、小红书等平台数据
+- 💬 **舆情监控**:评论采集与分析、弹幕监控
+- 🔎 **关键词搜索**:多维度深度搜索(视频/用户/话题/图片等)
+- 📊 **TikTok广告分析**:广告投放数据分析
+- 🤖 **自动化操作**:自动评论/点赞/关注等
+- 🔧 **技术集成**:需要原始API数据构建自己的分析系统
+
+### 适合用蝉妈妈的场景
+- 💰 **销售数据分析**:商品/品牌/小店/达人的销量和GMV
+- 🏷️ **品牌竞品分析**:品牌维度的全链路销售分析
+- 🏪 **店铺运营分析**:小店销售、关联达人、商品表现
+- 👤 **达人筛选**:通过带货数据筛选合适的达人合作
+- 📈 **趋势追踪**:每日销售趋势、渠道拆分
+- 🎯 **受众画像**:目标人群分析
+- 📦 **品类研究**:品类层级体系和市场分析
+
+### 互补使用建议
+| 需求 | TikHub 提供 | 蝉妈妈 提供 |
+|------|------------|------------|
+| 竞品分析 | 竞品视频内容、评论舆情 | 竞品销量、市场份额 |
+| 达人合作 | 达人粉丝画像、内容风格 | 达人带货数据、佣金、ROI |
+| 商品调研 | 商品评价原文、SKU详情 | 商品销量趋势、渠道表现 |
+| 市场洞察 | 热搜趋势、话题热度 | 品牌/品类销售数据 |
+| VOC分析 | 评论/弹幕原始文本 | 受众画像、消费人群 |
+
+---
+
+## 五、接口数量统计
+
+| API模块 | TikHub | 蝉妈妈 |
+|---------|--------|--------|
+| 抖音Web API | ~60+ | - |
+| 抖音App V3 API | ~40+ | - |
+| 抖音搜索 API | ~18 | - |
+| TikTok Web API | ~50+ | - |
+| TikTok App V3 API | ~70+ | - |
+| TikTok Creator API | ~14 | - |
+| TikTok Analytics API | ~4 | - |
+| TikTok Ads API | ~30+ | - |
+| TikTok Shop Web API | ~15 | - |
+| TikTok Interaction API | ~7 | - |
+| Instagram / 小红书 / 快手 / B站 | 各若干 | - |
+| 商品数据 | - | 6类数据表 |
+| 达人数据 | - | 5类数据表 |
+| 品牌数据 | - | 8类数据表 |
+| 小店数据 | - | 5类数据表 |
+| **合计** | **300+接口** | **~24类数据表** |
+
+> **说明**:TikHub按API endpoint计数,蝉妈妈按数据表/数据类型计数,两者统计口径不同。TikHub接口数量多但很多是工具类/辅助类接口;蝉妈妈数据表少但每张表的字段非常丰富且有深度加工。

File diff ditekan karena terlalu besar
+ 422 - 0
docs/VOC工作坊方案-两天一夜.html


+ 128 - 0
docs/cloudfunction/apig-payment/getApigAuth.md

@@ -0,0 +1,128 @@
+# getApigAuth 云函数
+
+## 功能说明
+通过 userId 和 APIG objectId 查询用户的 APIGAuth 授权记录(余额、使用情况等)。
+用于 OpenClaw 检查用户是否有额度、支付页面显示当前余额。
+
+## 参数
+
+| 参数名 | 必填 | 说明 |
+|--------|------|------|
+| userId | 是   | _User 表的 objectId |
+| apigId | 是   | APIG 表的 objectId |
+
+## 返回格式
+
+```json
+{
+  "code": 200,
+  "success": true,
+  "data": {
+    "objectId": "authObjectId",
+    "user": "userId",
+    "apig": "Vo3ROWEvDy",
+    "count": 1000,
+    "totalRecharge": 2000,
+    "createdAt": "2026-01-01T00:00:00.000Z",
+    "updatedAt": "2026-04-02T00:00:00.000Z"
+  }
+}
+```
+
+如果用户没有授权记录,返回:
+```json
+{
+  "code": 200,
+  "success": true,
+  "data": null
+}
+```
+
+## 云函数代码
+
+```javascript
+async function handler(request, response) {
+  console.log('🚀 执行 getApigAuth 云函数...');
+  
+  try {
+    // 1. 获取参数
+    let userId = null;
+    let apigId = null;
+    if (request.params) {
+      userId = request.params.userId;
+      apigId = request.params.apigId;
+    }
+    if (!userId && request.body) userId = request.body.userId;
+    if (!apigId && request.body) apigId = request.body.apigId;
+    
+    // 2. 参数校验
+    if (!userId || !apigId) {
+      response.json({ code: 400, success: false, error: '缺少必需参数 userId 或 apigId' });
+      return;
+    }
+
+    // 3. 查询 APIGAuth 表 — 通过 user 和 apig 字段查找
+    const sql = `
+      SELECT 
+        a."objectId",
+        a."count",
+        a."createdAt",
+        a."updatedAt",
+        a."user",
+        a."apig"
+      FROM "APIGAuth" a
+      WHERE a."user" = $1 AND a."apig" = $2
+      LIMIT 1
+    `;
+
+    const result = await Psql.query(sql, [userId, apigId]);
+
+    // 4. 返回结果
+    if (!result || result.length === 0) {
+      response.json({ 
+        code: 200, 
+        success: true, 
+        data: null 
+      });
+      return;
+    }
+
+    const row = result[0];
+    response.json({ 
+      code: 200, 
+      success: true, 
+      data: {
+        objectId: row.objectId,
+        user: row.user,
+        apig: row.apig,
+        count: row.count || 0,
+        createdAt: row.createdAt,
+        updatedAt: row.updatedAt
+      }
+    });
+
+  } catch (error) {
+    console.error('❌ getApigAuth 执行失败:', error.message);
+    response.json({ code: 500, success: false, error: error.message });
+  }
+}
+```
+
+## 云函数部署说明
+
+- **云函数名称**: `getApigAuth`
+- **功能**: 查询用户的 APIG 授权和余额
+- **调用方式**: POST `https://server.fmode.cn/parse/functions/getApigAuth`
+- **请求体**:
+```json
+{
+  "_ApplicationId": "ncloudmaster",
+  "userId": "nd7NOCmFiE",
+  "apigId": "Vo3ROWEvDy"
+}
+```
+
+## 使用场景
+1. **OpenClaw skill 调用前** — 检查用户是否有足够额度
+2. **支付页面** — 显示当前余额
+3. **支付成功后** — 轮询确认余额到账

+ 143 - 0
docs/cloudfunction/apig-payment/getApigInfo.md

@@ -0,0 +1,143 @@
+# getApigInfo 云函数
+
+## 功能说明
+通过 APIG objectId 查询 APIG 接口详情(标题、描述、套餐列表、当前余额等)。
+用于支付页面加载接口信息,替代直接查询 Parse `APIG` 类。
+
+## 参数
+
+| 参数名 | 必填 | 说明 |
+|--------|------|------|
+| apigId | 是   | APIG 表的 objectId |
+
+## 返回格式
+
+```json
+{
+  "code": 200,
+  "success": true,
+  "data": {
+    "objectId": "Vo3ROWEvDy",
+    "title": "国内外社媒数据中台",
+    "content": "由未来飞马提供的电商数据中台相关接口",
+    "count": 99999,
+    "price": "0.1",
+    "cost": 0.1,
+    "priceStep": [
+      { "count": 1000, "price": 100 },
+      { "count": 26000, "price": 2500 },
+      { "count": 60000, "price": 5000 }
+    ],
+    "service": "Fmode",
+    "type": "AIGC",
+    "path": "/apig/voc-social",
+    "isCached": true
+  }
+}
+```
+
+## 云函数代码
+
+```javascript
+async function handler(request, response) {
+  console.log('🚀 执行 getApigInfo 云函数...');
+  
+  try {
+    // 1. 获取参数 (兼容 params / body 两种方式)
+    let apigId = null;
+    if (request.params && request.params.apigId) apigId = request.params.apigId;
+    else if (request.body && request.body.apigId) apigId = request.body.apigId;
+    
+    console.log('apigId:', apigId);
+
+    // 2. 参数校验
+    if (!apigId) {
+      response.json({ code: 400, success: false, error: '缺少必需参数 apigId' });
+      return;
+    }
+
+    // 3. 查询 APIG 表 (使用 SELECT * 避免列名问题)
+    const sql = `SELECT * FROM "APIG" WHERE "objectId" = $1 LIMIT 1`;
+    const result = await Psql.query(sql, [apigId]);
+    
+    console.log('查询结果数量:', result ? result.length : 0);
+
+    // 4. 检查结果
+    if (!result || result.length === 0) {
+      response.json({ code: 404, success: false, error: '未找到对应的 APIG 记录' });
+      return;
+    }
+
+    // 5. 格式化数据 — 直接返回行数据,前端自行解析
+    const row = result[0];
+    
+    // 处理 priceStep (可能是 JSON string 或已解析的对象)
+    let priceStep = row.priceStep;
+    if (typeof priceStep === 'string') {
+      try { priceStep = JSON.parse(priceStep); } catch(e) { priceStep = []; }
+    }
+
+    const data = {
+      objectId: row.objectId,
+      title: row.title || '',
+      content: row.content || '',
+      count: row.count || 0,
+      price: row.price || '0',
+      cost: row.cost || 0,
+      priceStep: priceStep || [],
+      service: row.service || '',
+      type: row.type || '',
+      path: row.path || '',
+      isCached: row.isCached || false
+    };
+
+    console.log('返回数据:', JSON.stringify(data).substring(0, 200));
+
+    // 6. 返回结果
+    response.json({ 
+      code: 200, 
+      success: true, 
+      data: data 
+    });
+
+  } catch (error) {
+    console.error('❌ getApigInfo 执行失败:', error.message, error.stack);
+    response.json({ code: 500, success: false, error: error.message });
+  }
+}
+```
+
+## 云函数部署说明
+
+- **云函数名称**: `getApigInfo`
+- **功能**: 通过 APIG objectId 查询接口详情
+- **调用方式**: POST `https://server.fmode.cn/parse/functions/getApigInfo`
+- **请求体**:
+```json
+{
+  "_ApplicationId": "ncloudmaster",
+  "apigId": "Vo3ROWEvDy"
+}
+```
+
+## 前端调用示例
+
+```javascript
+// 方式一:直接 fetch
+const resp = await fetch('https://server.fmode.cn/parse/functions/getApigInfo', {
+  method: 'POST',
+  headers: { 'Content-Type': 'application/json' },
+  body: JSON.stringify({
+    _ApplicationId: 'ncloudmaster',
+    apigId: 'Vo3ROWEvDy'
+  })
+});
+const data = await resp.json();
+// data.result => { code: 200, success: true, data: { ... } }
+
+// 方式二:FmodeParse
+const result = await Parse.Cloud.function({
+  id: '云函数ID',
+  apigId: 'Vo3ROWEvDy'
+});
+```

+ 11 - 0
docs/index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+<meta charset="UTF-8">
+<meta http-equiv="refresh" content="0;url=VOC%E5%B7%A5%E4%BD%9C%E5%9D%8A%E6%96%B9%E6%A1%88-%E4%B8%A4%E5%A4%A9%E4%B8%80%E5%A4%9C.html">
+<title>Redirecting...</title>
+</head>
+<body>
+<script>window.location.href='VOC%E5%B7%A5%E4%BD%9C%E5%9D%8A%E6%96%B9%E6%A1%88-%E4%B8%A4%E5%A4%A9%E4%B8%80%E5%A4%9C.html';</script>
+</body>
+</html>

+ 423 - 0
docs/other/VOC工作坊方案-两天一夜.md

@@ -0,0 +1,423 @@
+# "AI情报官" VOC虾工作坊 · 两天一夜完整方案
+
+> **活动时间**: 2025年4月25日-26日(两天一夜)
+> **活动形式**: 线下工作坊 · 企业组队参加
+> **核心定位**: 不卷品牌专业知识,聚焦"养虾·教虾·用虾"
+
+---
+
+## 一、工作坊核心理念
+
+### 1.1 我们不做什么
+- ❌ 不交付"帮企业老板干更专业的方案"
+- ❌ 不卷品牌专业知识——来的负责人比我们更懂自己的品牌
+- ❌ 不做一次性咨询报告,走了就用不上
+
+### 1.2 我们做什么
+- ✅ **养虾**: 帮企业培养一个"AI情报实习生"(虾),让它认识企业的品类和产品
+- ✅ **教虾**: 教这只虾学会用AI工具做VOC调研、竞品分析、用户洞察
+- ✅ **用虾**: 虾当场产出一份可以给老板看的VOC报告,证明它能干活
+
+### 1.3 角色定义
+| 角色 | 是谁 | 职责 |
+|------|------|------|
+| **虾(AI情报实习生)** | AI Agent + 工作坊技能系统 | 执行数据采集、分析、报告生成 |
+| **养虾人(企业负责人)** | 企业品牌/运营/产品负责人 | 提供品牌知识、校准分析结果、指导虾的方向 |
+| **教练组** | 工作坊导师团队 | 教会养虾人如何"喂虾"、"训虾"、"验收虾的作业" |
+
+> **核心隐喻**: 企业带走的不是一份报告,而是一只"懂自己、能干活"的AI情报实习生。
+
+---
+
+## 二、工作坊解决的企业VOC痛点
+
+| 企业痛点 | 工作坊怎么解决 | 对应环节 |
+|---------|-------------|---------|
+| "我知道要做VOC,但不知道从哪开始" | 虾自动跑品类全景分析,帮你画出品类地图 | Day1上午 |
+| "竞品分析全靠人肉扒数据,太慢了" | 虾5分钟自动筛出3-5个直接竞品+竞争格局 | Day1下午 |
+| "看了几百条评论也总结不出什么" | 虾批量采集+AI情感分析+痛点/亮点自动聚类 | Day1晚 |
+| "社媒上用户在说什么完全没概念" | 虾自动扫描TikTok/Instagram/抖音评论热点 | Day2上午 |
+| "调研做了一堆但落不了地" | 虾生成6章节提案+ROI估算+30天行动时间线 | Day2下午 |
+| "招个分析师太贵,实习生又不会" | 带走一只训好的AI虾,以后自己就能跑分析 | 全程 |
+
+---
+
+## 三、AI技能系统功能全览(排除一键成片)
+
+工作坊底层由 **41个AI技能** 驱动,分为两层架构:
+
+### 3.1 数据采集层(23个原子技能)
+
+#### 电商数据采集(12个)— Amazon/跨境电商
+| 技能 | 功能 | 工作坊用途 |
+|------|------|----------|
+| `product-search` | 关键词搜Top100产品 | 品类格局分析入口 |
+| `product-detail-query` | 产品完整信息(价格/评分/BSR/卖点) | 竞品档案建立 |
+| `asin-sales-volume` | 批量获取产品销量 | 市场规模计算 |
+| `product-reviews-query` | 批量抓取用户评论 | **VOC核心数据源** |
+| `keyword-search` | 关键词搜索量/竞争度 | 品类热度判断 |
+| `keyword-search-trend` | 关键词趋势曲线 | 品类增长/衰退判断 |
+| `keyword-product-ranking` | 关键词下产品排名 | 竞品流量入口分析 |
+| `asin-reverse-keywords` | ASIN反查关键词 | 竞品关键词库构建 |
+| `category-tree` | 品类类目定位 | 品类边界确定 |
+| `category-products` | 类目下全部产品 | 品类完整画像 |
+| `similar-products` | 发现相似竞品 | 竞品扩展筛选 |
+| `product-monitor` | 价格/排名变化追踪 | 竞品动态监控 |
+
+#### 海外社媒数据采集(11个)— TikTok & Instagram
+| 技能 | 功能 | 工作坊用途 |
+|------|------|----------|
+| `tiktok-video-search` | 品类相关TikTok视频搜索 | 社媒VOC内容发现 |
+| `tiktok-video-detail` | 爆款视频深度数据 | 内容策略分析 |
+| `tiktok-video-comments` | TikTok视频评论抓取 | **社媒VOC核心数据** |
+| `tiktok-user-search` | 品类达人/红人搜索 | KOL资源发现 |
+| `tiktok-user-profile` | 达人账号数据 | 竞品社媒画像 |
+| `tiktok-user-posts` | 达人内容列表 | 竞品内容策略 |
+| `tiktok-hashtag-detail` | 话题标签热度 | 品类话题热度 |
+| `tiktok-hashtag-videos` | 话题下热门视频 | 趋势内容分析 |
+| `instagram-search` | 竞品IG账号发现 | 品牌社媒档案 |
+| `instagram-user-info` | IG粉丝/帖子数据 | 社媒影响力评估 |
+| `instagram-user-posts` | IG内容分析 | 竞品内容策略 |
+
+#### 国内社媒数据采集(7个)— 抖音
+| 技能 | 功能 | 工作坊用途 |
+|------|------|----------|
+| `douyin-general-search` | 抖音综合搜索(视频/图文) | 国内品类内容趋势 |
+| `douyin-video-detail` | 单视频完整数据 | 爆款内容拆解 |
+| `douyin-video-comments` | 视频评论采集 | **国内VOC数据源** |
+| `douyin-comment-replies` | 热评回复采集 | 深层用户声音 |
+| `douyin-user-search` | 抖音达人搜索 | 国内KOL发现 |
+| `douyin-user-profile` | 达人主页数据 | 达人商业价值评估 |
+| `douyin-hashtag-search` | 抖音话题搜索 | 国内品类话题热度 |
+
+### 3.2 智能编排层(18个高阶技能)
+
+#### 竞品分析模块(4个)
+| 技能 | 功能 | 交付物 |
+|------|------|--------|
+| `competitor-discovery` | 自动发现筛选3-5家竞品 + CR5竞争格局 | 《竞品档案卡》 |
+| `competitor-product-comparison` | 多维对比 + 5维健康度仪表盘 | 《竞品对比矩阵》 |
+| `competitor-pricing-analysis` | 5分位价格带 + 黄金带 + 毛利估算 | 《定价策略分析》 |
+| `competitor-bsr-tracking` | BSR追踪 + 增长路径 + 风险预警 | 《竞品动态监控》 |
+
+#### 评论/VOC分析模块(5个)
+| 技能 | 功能 | 交付物 |
+|------|------|--------|
+| `review-batch-collection` | 批量采集+去重+竞品VOC对比 | 结构化评论语料库 |
+| `review-sentiment-analysis` | 情感分类 + 情感词云 | 《情感分析报告》 |
+| `review-pain-point-extraction` | 痛点聚类 + VOC优化建议 | 《用户痛点清单》 |
+| `review-highlight-extraction` | 亮点提取 + Listing卖点建议 | 《卖点植入方案》 |
+| `review-keyword-cloud` | 关键词云 + 情感标签 | 《关键词情感地图》 |
+
+#### 社媒VOC分析模块(4个)
+| 技能 | 功能 | 交付物 |
+|------|------|--------|
+| `tiktok-category-voc` | TikTok品类视频+评论+话题热度 | 《TikTok品类洞察》 |
+| `tiktok-brand-voc` | 竞品TikTok内容策略+粉丝反馈 | 《竞品社媒画像》 |
+| `instagram-brand-voc` | 竞品IG搜索+帖子+互动分析 | 《IG品牌分析》 |
+| `social-trend-analysis` | 跨平台热度对比 + 行动清单 | 《社媒趋势报告》 |
+
+#### 综合分析模块(5个)
+| 技能 | 功能 | 交付物 |
+|------|------|--------|
+| `category-landscape` | CR5/HHI集中度 + 风险预警 + 行动清单 | 《品类认知校准表》 |
+| `brand-profile` | 六维品牌画像 + 机会/风险标签 | 《品牌认知校准卡》 |
+| `product-deep-analysis` | 6维单品诊断 + AI运营建议 | 《单品深度诊断》 |
+| `user-persona` | AI用户画像 + 购买行为分析 | 《用户画像手册》 |
+| `voc-proposal` | 6章节提案 + ROI估算 + 30天时间线 | 《VOC优化提案》 |
+
+#### 报告生成模块(1个)
+| 技能 | 功能 | 交付物 |
+|------|------|--------|
+| `html-report-generator` | 全数据注入HTML模板,9屏幻灯片报告 | 《可演示HTML报告》 |
+
+### 3.3 内置核心算法
+
+| 算法 | 说明 |
+|------|------|
+| **CR5/HHI集中度** | Top5品牌销量占比 + 市占率平方和×10000,垄断度分级 |
+| **5维健康度评分** | 定价(0.2)+评分(0.25)+流量(0.2)+销售(0.15)+增长(0.2) |
+| **5分位价格带** | 按P20/P40/P60/P80分5档,每档统计SKU/销量/评分 |
+| **黄金价格带** | bandScore=avgSales×0.5+avgRating×20+(skuCount>0?10:0) |
+| **毛利估算** | 15%佣金+$5FBA+30%采购→grossMargin%+盈亏平衡销量 |
+| **6维品牌画像** | 定价/评分/流量/销售/增长/口碑 各0-100分 |
+| **情感短语规则** | regex匹配多词情感短语,短语优先于单词 |
+| **VOC驱动优化** | 评分差距→转化影响估算→listing/产品/售后三维建议 |
+| **ROI估算** | 每条建议估算投入/收益/回本周期 |
+
+---
+
+## 四、两天一夜完整流程
+
+### Day 1 · 4月25日(周五)—— "认品类·认品牌·抓评论"
+
+---
+
+#### 🌅 Day1 上午 09:00-12:00「教虾认品类」
+
+**目标**: 虾从零开始认识企业所在品类,产出《品类认知校准表》
+
+| 时间 | 环节 | 具体内容 | 参与方式 |
+|------|------|---------|---------|
+| 09:00-09:30 | **开营破冰** | ① 工作坊理念介绍:你不是来听课的,你是来"养虾"的 ② 各组自我介绍:品牌名、品类、当前痛点 ③ 演示"虾"能做什么(3分钟Demo) | 全体 |
+| 09:30-10:00 | **喂虾第一餐:品类关键词** | ① 养虾人告诉虾:你的品类叫什么?核心关键词是什么? ② 教练引导:如何选择准确的品类关键词 ③ 虾开始执行 `category-landscape`(品类全景分析) | 分组实操 |
+| 10:00-10:45 | **虾的第一份作业:品类地图** | 虾自动产出: ① 品类市场规模(月销量/月销售额) ② CR5/HHI市场集中度→判断是垄断还是分散 ③ 价格带分布→黄金价格带在哪 ④ 搜索趋势→品类在增长还是衰退 ⑤ 风险预警(价格战/集中度/增长风险) | 虾跑数据 + 养虾人校准 |
+| 10:45-11:00 | ☕ 茶歇 | | |
+| 11:00-11:45 | **养虾人校准:品类认知纠偏** | ① 养虾人审阅虾的品类分析结果 ② 对照自己的行业经验:哪些数据对?哪些偏了? ③ 教练引导校准:教虾修正关键词/调整分析范围 ④ **关键动作**:养虾人在校准表上签字确认 | 养虾人主导 |
+| 11:45-12:00 | **上午总结** | 各组1分钟分享:我的虾对品类的认知准确率有多少? | 快速分享 |
+
+**本环节交付物**:
+- ✅ 《品类认知校准表》— 包含CR5/HHI、价格带、增长趋势、风险预警
+- ✅ 品类核心关键词库(已验证)
+- ✅ 养虾人对虾的品类认知评分
+
+**调用技能**: `category-landscape` → `product-search` × 2-3 + `asin-sales-volume` × 100 + `keyword-search` × 5-10 + `keyword-search-trend` × 5 + `category-tree` × 1
+
+---
+
+#### 🍽️ 午餐 12:00-13:30
+
+> 💡 午餐时间建议:各组养虾人之间交流品类经验,教练巡场答疑
+
+---
+
+#### 🌤️ Day1 下午 13:30-18:00「教虾认品牌·找竞品」
+
+**目标**: 虾认识自家品牌 + 自动找到竞品 + 完成竞品对比
+
+| 时间 | 环节 | 具体内容 | 参与方式 |
+|------|------|---------|---------|
+| 13:30-14:30 | **喂虾第二餐:自家品牌** | ① 养虾人告诉虾:你的品牌叫什么?核心ASIN是哪几个? ② 虾执行 `brand-profile`(品牌六维画像) ③ 虾产出:定价/评分/流量/销售/增长/口碑 6维得分 ④ **关键动作**:养虾人看虾对自己品牌的理解准不准,校准 | 分组实操 |
+| 14:30-14:45 | ☕ 茶歇 | | |
+| 14:45-15:30 | **喂虾第三餐:自家爆款** | ① 养虾人选1个核心ASIN让虾深度分析 ② 虾执行 `product-deep-analysis`(6维单品诊断) ③ 虾产出:流量架构、定价策略、Listing评估、VOC痛点、广告策略 ④ **关键动作**:养虾人看虾的诊断和自己的认知差距在哪 | 分组实操 |
+| 15:30-16:00 | **虾自己找竞品** | ① 虾执行 `competitor-discovery`(竞品发现与筛选) ② 虾自动筛出3-5个直接竞品 + 竞争格局CR5 ③ **关键动作**:养虾人审核——虾找的竞品对不对?漏了谁? ④ 养虾人可以告诉虾补充/替换竞品 | 虾跑 + 养虾人审核 |
+| 16:00-17:00 | **虾给竞品做体检** | ① 虾执行 `competitor-product-comparison`(5维对比仪表盘) ② 虾执行 `competitor-pricing-analysis`(5分位价格带+黄金带+毛利估算) ③ 虾产出:竞品对比矩阵 + 定价策略分析 ④ **关键动作**:养虾人在竞品卡上标注"这个分析有道理/不靠谱" | 分组实操 |
+| 17:00-17:45 | **养虾人给虾打分** | ① 各组养虾人给虾打分:品牌认知准确率、竞品判断准确率 ② 教练引导:虾目前的"智商水平"大概相当于几个月的实习生? ③ 发现虾的短板→下一步重点训练方向 | 互动讨论 |
+| 17:45-18:00 | **下午总结** | 各组2分钟分享:我的虾找到了哪些竞品?最让我意外的发现是什么? | 快速分享 |
+
+**本环节交付物**:
+- ✅ 《品牌认知校准卡》— 品牌六维画像+四象限定位+机会/风险标签
+- ✅ 《单品深度诊断》— 流量/定价/Listing/VOC/广告 6维诊断
+- ✅ 《竞品档案卡》— 3-5个竞品 + 竞争格局CR5
+- ✅ 《竞品对比矩阵》— 5维健康度 + 定价策略
+- ✅ 养虾人对虾的品牌认知评分
+
+**调用技能**: `brand-profile` + `product-deep-analysis` + `competitor-discovery` + `competitor-product-comparison` + `competitor-pricing-analysis`
+
+---
+
+#### 🍽️ 晚餐 18:00-19:00
+
+---
+
+#### 🌙 Day1 晚 19:00-21:30「教虾抓评论·VOC初体验」
+
+**目标**: 虾第一次"下海捕虾"——批量采集用户评论,完成初步VOC分析
+
+| 时间 | 环节 | 具体内容 | 参与方式 |
+|------|------|---------|---------|
+| 19:00-19:30 | **VOC是什么?为什么重要?** | ① 教练讲解:VOC = Voice of Customer = 用户的真实声音 ② 演示:从一条差评里能读出什么?(痛点/需求/改进方向) ③ 告诉养虾人:接下来你要教虾去"听"用户在说什么 | 全体讲解 |
+| 19:30-20:15 | **虾下海捕评论** | ① 养虾人指定ASIN列表(自家+竞品,共5-8个) ② 虾执行 `review-batch-collection`(批量评论采集) ③ 虾采集300-500条评论,自动去重清洗 ④ 虾产出:竞品VOC对比汇总(本店vs竞品均分/差评率) | 分组实操 |
+| 20:15-20:45 | **虾学会看评论** | ① 虾执行 `review-sentiment-analysis`(情感分类+词云) ② 虾执行 `review-keyword-cloud`(关键词+情感标签) ③ 虾产出:正面/负面/中性情感分布 + 关键词情感地图 ④ **关键动作**:养虾人看词云→这些词你认识吗?和你的直觉一致吗? | 虾跑 + 养虾人校准 |
+| 20:45-21:15 | **养虾人教虾读评论** | ① 教练引导:挑出3条最有价值的差评,和养虾人一起分析 ② 养虾人角度:这个痛点我知道/我不知道/我以为解决了其实没有 ③ 在评论上标注:✅已知 / ⚡新发现 / ❌误判 | 互动讨论 |
+| 21:15-21:30 | **晚间总结·今日收获** | ① 各组分享:虾今天最大的发现是什么? ② 教练布置"虾的overnight作业":虾在后台继续跑数据 | 快速分享 |
+
+**本环节交付物**:
+- ✅ 结构化评论语料库(300-500条清洗后评论)
+- ✅ 《情感分析报告》— 正面/负面/中性分布+情感词云
+- ✅ 《关键词情感地图》— 每个关键词带情感标签
+- ✅ 竞品VOC对比汇总(本店vs竞品差评率对比)
+
+**调用技能**: `review-batch-collection` + `review-sentiment-analysis` + `review-keyword-cloud`
+
+---
+
+### Day 2 · 4月26日(周六)—— "社媒VOC·用户画像·提案生成"
+
+---
+
+#### 🌅 Day2 上午 09:00-12:00「教虾看社媒·画用户」
+
+**目标**: 虾从社媒渠道采集VOC + 竞品诊断 + 生成用户画像
+
+| 时间 | 环节 | 具体内容 | 参与方式 |
+|------|------|---------|---------|
+| 09:00-09:15 | **昨日回顾+今日预告** | 回顾虾昨天学到了什么,今天虾要学会"看社媒"和"画用户" | 全体 |
+| 09:15-10:00 | **虾去TikTok/Instagram找声音** | ① 虾执行 `tiktok-category-voc`(TikTok品类视频+评论+话题) ② 虾执行 `tiktok-brand-voc`(竞品TikTok内容策略) ③ 虾执行 `instagram-brand-voc`(竞品IG搜索+帖子+互动) ④ 虾产出:竞品在TikTok/IG上怎么玩?用户在评论区说什么? | 分组实操 |
+| 10:00-10:30 | **虾去抖音找国内声音** | ① 虾执行 `douyin-general-search`(品类关键词搜索爆款内容) ② 虾执行 `douyin-video-comments`(爆款视频评论采集) ③ 虾产出:国内消费者在抖音上对这个品类的讨论热点 ④ **关键动作**:养虾人对比海外社媒 vs 国内抖音的用户声音差异 | 分组实操 |
+| 10:30-10:45 | ☕ 茶歇 | | |
+| 10:45-11:10 | **虾做竞品VOC诊断** | ① 虾执行 `review-pain-point-extraction`(竞品差评痛点Top10) ② 虾执行 `review-highlight-extraction`(竞品好评亮点+Listing卖点建议) ③ 虾执行 `social-trend-analysis`(跨平台热度对比+行动清单) ④ 虾执行 `competitor-bsr-tracking`(BSR追踪+增长路径+风险预警) | 虾跑数据 |
+| 11:10-11:50 | **虾画用户画像** | ① 虾执行 `user-persona`(综合电商+社媒VOC数据) ② 虾产出3-5个核心用户类型:人口特征/核心需求/决策因素/使用场景/痛点/触达渠道 ③ 虾产出购买行为分析:价格敏感度/季节性/渠道偏好 ④ **关键动作**:养虾人校准画像——"我的真实客户确实是这样吗?" | 分组实操+校准 |
+| 11:50-12:00 | **上午总结** | 各组1分钟分享:虾画的用户画像和你心中的用户像不像? | 快速分享 |
+
+**本环节交付物**:
+- ✅ 《TikTok品类洞察》— 视频热度/评论情感/话题趋势
+- ✅ 《竞品社媒画像》— TikTok+IG双平台分析
+- ✅ 《抖音品类洞察》— 国内社媒用户声音(⚠️ 实验性功能,见限制说明)
+- ✅ 《用户痛点清单》— Top10痛点+VOC优化建议
+- ✅ 《卖点植入方案》— 亮点→标题/bullet/A+建议
+- ✅ 《社媒趋势报告》— 跨平台热度+行动清单
+- ✅ 《用户画像手册》— 3-5个画像+购买行为+场景分布
+
+**调用技能**: `tiktok-category-voc` + `tiktok-brand-voc` + `instagram-brand-voc` + `douyin-general-search` + `douyin-video-comments` + `review-pain-point-extraction` + `review-highlight-extraction` + `social-trend-analysis` + `competitor-bsr-tracking` + `user-persona`
+
+---
+
+#### 🍽️ 午餐 12:00-13:00
+
+---
+
+#### 🌤️ Day2 下午 13:00-17:00「虾交作业·结营」
+
+**目标**: 虾整合两天所有数据,产出可以给老板看的完整VOC报告
+
+| 时间 | 环节 | 具体内容 | 参与方式 |
+|------|------|---------|---------|
+| 13:00-14:00 | **虾写提案** | ① 虾执行 `voc-proposal`(整合全部数据) ② 虾自动生成6章节提案:品类认知→品牌定位→竞品漏洞→用户需求→产品优化→落地行动 ③ 附带ROI估算 + 30天行动时间线 ④ **关键动作**:养虾人审阅每一章,标注"靠谱/需修正/看不懂" | 虾跑+养虾人审阅 |
+| 14:00-14:30 | **虾做报告** | ① 虾执行 `html-report-generator`(9屏幻灯片报告) ② 自动注入所有数据:市场全景/竞品对标/VOC洞察/品类矩阵/策略建议 ③ 产出一份可以直接演示的HTML报告 | 虾自动生成 |
+| 14:30-15:00 | ☕ 茶歇 + 养虾人最终校准 | 养虾人最后一次审阅虾的全部产出,做最终标注和修正 | |
+| 15:00-16:30 | **🎤 结营路演:虾的毕业答辩** | ① 每组10-15分钟上台展示虾的作业 ② 展示内容:品类认知→竞品分析→VOC洞察→用户画像→行动提案 ③ 其他组+教练点评:虾的分析有没有道理? ④ 养虾人点评:虾这两天"长进了多少"? | 路演+互评 |
+| 16:30-17:00 | **结营仪式** | ① 颁奖:最聪明的虾 / 最靠谱的虾 / 最有创意的虾 ② 教练总结:虾带回去之后怎么继续训练? ③ 后续支持:虾的"售后服务"——30天内可以找教练帮虾看病 ④ 合影留念 | 全体 |
+
+**本环节交付物**:
+- ✅ 《VOC产品优化提案》— 6章节 + ROI估算 + 30天行动时间线
+- ✅ 《可演示HTML报告》— 9屏幻灯片,浏览器直接打开
+- ✅ 结营证书(养虾合格证)
+
+---
+
+## 五、每个半天的交付内容总览
+
+| 时段 | 主题 | 核心交付物 | 解决什么问题 |
+|------|------|----------|------------|
+| **Day1 上午** | 教虾认品类 | 《品类认知校准表》 | "我的品类到底什么格局?增长还是衰退?" |
+| **Day1 下午** | 教虾认品牌+找竞品 | 《品牌校准卡》+《竞品档案卡》+《竞品对比矩阵》+《单品诊断》 | "我和竞品差在哪?定价策略对不对?" |
+| **Day1 晚** | 教虾抓评论 | 评论语料库+《情感分析》+《关键词地图》 | "用户真正在说什么?差评到底在骂什么?" |
+| **Day2 上午** | 教虾看社媒+画用户 | 《社媒洞察》+《痛点清单》+《用户画像》 | "社媒上的声音和电商评论一致吗?用户到底是谁?" |
+| **Day2 下午** | 虾交作业+结营 | 《VOC提案》+《HTML报告》+ 路演 | "怎么把分析变成行动?给老板看什么?" |
+
+---
+
+## 六、功能限制与明确标注
+
+### 🔴 当前无法实现的功能
+
+| 功能 | 限制说明 | 替代方案 |
+|------|---------|---------|
+| **实时数据监控仪表盘** | 当前为单次分析,不支持持续实时监控(需要后端定时任务和数据库) | 虾可以每周/每月手动跑一次,人工对比变化 |
+| **自动定期报告推送** | 不支持定时自动生成报告并推送邮件/企微 | 养虾人定期手动触发虾跑分析 |
+| **多语言评论分析** | 当前情感分析主要针对英文评论,中文/日文/德文评论分析精度较低 | 非英文站建议人工辅助校准 |
+| **Amazon广告数据接入** | 无法读取企业的Amazon广告后台实际数据(ACoS/花费/转化) | 虾基于公开数据做广告策略建议,实际投放数据需养虾人补充 |
+| **Shopify/独立站数据** | 仅支持Amazon电商数据,不支持Shopify/独立站数据采集 | 独立站数据需养虾人手动提供 |
+| **Twitter/YouTube/小红书** | 社媒数据仅覆盖TikTok、Instagram、抖音,不覆盖Twitter/YouTube/小红书 | 这些平台的VOC需人工补充 |
+| **供应链/工厂数据** | 虾不了解企业的供应链成本、库存、产能等内部数据 | 毛利估算使用行业平均值(15%佣金+$5FBA+30%采购),养虾人需校准 |
+| **法律/合规/专利分析** | 虾不做法律合规判断(专利侵权、FDA/FCC认证等) | 需企业自行咨询法律顾问 |
+| **中国电商平台** | 不支持天猫/京东/拼多多等国内电商平台数据 | 仅聚焦Amazon跨境电商场景 |
+
+### 🟡 实验性功能(可用但需注意)
+
+| 功能 | 说明 |
+|------|------|
+| **抖音数据采集** | 7个抖音技能已开发完成,但接口稳定性取决于上游平台,可能偶发超时或限流 |
+| **HTML报告自动生成** | 基本功能已通,但复杂数据场景下可能出现图表渲染不完整,需人工检查 |
+| **AI提案生成** | 6章节结构化输出稳定,但ROI估算基于行业假设值,不代表企业实际ROI |
+
+### 🟢 完全可用的核心功能
+
+| 功能 | 稳定性 |
+|------|--------|
+| Amazon产品/评论/关键词/销量数据采集 | ⭐⭐⭐⭐⭐ |
+| TikTok视频/评论/达人/话题数据采集 | ⭐⭐⭐⭐ |
+| Instagram用户/帖子数据采集 | ⭐⭐⭐⭐ |
+| CR5/HHI/价格带/健康度算法分析 | ⭐⭐⭐⭐⭐ |
+| 评论情感分析/痛点提取/亮点提取 | ⭐⭐⭐⭐⭐ |
+| 竞品发现/对比/定价分析 | ⭐⭐⭐⭐⭐ |
+| AI用户画像/提案生成 | ⭐⭐⭐⭐ |
+
+---
+
+## 七、参会企业须知
+
+### 7.1 参会准备清单
+
+| 准备项 | 说明 | 必要性 |
+|--------|------|--------|
+| **品牌名称** | 英文品牌名 | 必须 |
+| **品类关键词** | 2-3个核心品类英文关键词 | 必须 |
+| **核心ASIN** | 自家品牌3-5个代表性ASIN | 必须 |
+| **已知竞品** | 你认为的2-3个主要竞品品牌名/ASIN | 建议 |
+| **笔记本电脑** | 用于操作和查看分析结果 | 必须 |
+| **品类经验** | 你对自己品类的认知(不需要写出来,带在脑子里) | 必须 |
+
+### 7.2 最佳参会配置
+- **推荐**: 1位品牌/产品负责人(养虾人)+ 1位运营/助理(观察员,未来帮虾干活的人)
+- **最少**: 1位品牌负责人
+- **每组**: 独立分析自家品牌,不与其他组共享数据
+
+### 7.3 带走什么
+| 带走的东西 | 说明 |
+|-----------|------|
+| **一只训好的虾** | AI情报实习生,认识你的品类/品牌/竞品/用户 |
+| **7份分析文档** | 品类校准表/品牌校准卡/竞品档案/VOC分析/社媒洞察/用户画像/行动提案 |
+| **1份可演示报告** | 9屏HTML幻灯片,回去直接给老板看 |
+| **30天行动时间线** | 第1周Listing→第2周PPC→第3周社媒→第4周复盘 |
+| **30天售后支持** | 遇到问题可以找教练给虾"看病" |
+
+---
+
+## 八、API调用量与成本估算
+
+### 单组预估(两天全流程)
+
+| 接口类型 | 调用次数 | 说明 |
+|---------|---------|------|
+| Sorftime电商API | ~200-300次 | 产品/评论/关键词/销量 |
+| TikHub社媒API | ~50-80次 | TikTok+Instagram |
+| 抖音社媒API | ~20-40次 | 抖音搜索+评论+达人 |
+| AI分析Token | ~80K-120K tokens | 情感分析/画像/提案/报告 |
+| **单组总计** | **~300-450次API + 100K tokens** | |
+
+### 10组估算
+- API总调用量: ~3000-4500次
+- AI Token: ~1M tokens
+- 建议预留Buffer: ×1.3(应对重试和校准后重跑)
+
+---
+
+## 九、工作坊价值总结
+
+### 对企业的价值
+
+```
+┌─────────────────────────────────────────────────────┐
+│                                                     │
+│   传统做法           vs        虾工作坊做法           │
+│                                                     │
+│   招1个分析师         →    养1只AI虾(成本≈0)        │
+│   月薪1-2万           →    API成本几十块              │
+│   培训3个月才能干活    →    2天就能出活                │
+│   换个品类要重新学     →    换个关键词虾就能分析        │
+│   人会离职             →    虾不会跑                  │
+│                                                     │
+│   ✅ 核心:虾不替代人,虾是人的工具                    │
+│   ✅ 养虾人越懂品牌,虾的产出越准确                    │
+│   ✅ 虾干的是数据苦力活,人干的是判断和决策              │
+│                                                     │
+└─────────────────────────────────────────────────────┘
+```
+
+### 30天后的效果预期
+
+| 时间节点 | 虾能做什么 |
+|---------|----------|
+| **D7** | Listing关键词已优化,品类/竞品数据已建档 |
+| **D14** | PPC广告关键词策略已执行,首批社媒内容已发布 |
+| **D21** | 第一轮VOC复查完成,产品迭代方向已确定 |
+| **D30** | 全面复盘报告产出,虾已能独立执行周度分析 |
+
+---
+
+> 📋 **文档版本**: v1.0
+> 📅 **编写日期**: 2025年4月2日
+> 👤 **适用对象**: OPC社群宣发 + 内部审阅
+> ⚠️ **审阅重点**: 每个半天的交付内容是否可实现、时间分配是否合理、限制说明是否完整

+ 1008 - 0
docs/other/voc.md

@@ -0,0 +1,1008 @@
+VOC工作坊方案-两天一夜(环节安排版)
+
+活动时间: 2025 年 4 月 25 日 - 26 日(两天一夜)
+活动形式: 线下工作坊・企业组队参加
+核心定位: 不卷品牌专业知识,聚焦 "养虾・教虾・用虾"
+参会规模: 限 15 家企业,每家 1-2 名负责人,总人数 30 人以内(保证每组都有专属教练跟进)
+
+
+---
+一、工作坊核心理念
+
+1.1 我们不做什么
+
+- ❌ 不交付 "帮企业老板干更专业的方案"
+
+- ❌ 不卷品牌专业知识 —— 来的负责人比我们更懂自己的品牌
+
+- ❌ 不做一次性咨询报告,走了就用不上
+
+1.2 我们做什么
+
+- ✅ 养虾: 帮企业培养一个 "AI 情报实习生"(虾),让它认识企业的品类和产品
+
+- ✅ 教虾: 教这只虾学会用 AI 工具做 VOC 调研、竞品分析、用户洞察
+
+- ✅ 用虾: 虾当场产出一份可以给老板看的 VOC 报告,证明它能干活
+
+1.3 角色定义
+
+角色
+
+是谁
+
+职责
+
+虾(AI 情报实习生)
+
+AI Agent + 工作坊技能系统
+
+执行数据采集、分析、报告生成
+
+养虾人(企业负责人)
+
+企业品牌 / 运营 / 产品负责人
+
+提供品牌知识、校准分析结果、指导虾的方向
+
+教练组
+
+工作坊导师团队
+
+教会养虾人如何 "喂虾"、"训虾"、"验收虾的作业"
+
+核心隐喻: 企业带走的不是一份报告,而是一只 "懂自己、能干活" 的 AI 情报实习生。
+
+
+---
+二、工作坊解决的企业 VOC 痛点
+
+企业痛点
+
+工作坊怎么解决
+
+对应环节
+
+"我知道要做 VOC,但不知道从哪开始"
+
+虾自动跑品类全景分析,帮你画出品类地图
+
+Day1 上午
+
+"竞品分析全靠人肉扒数据,太慢了"
+
+虾 5 分钟自动筛出 3-5 个直接竞品 + 竞争格局
+
+Day1 下午
+
+"看了几百条评论也总结不出什么"
+
+虾批量采集 + AI 情感分析 + 痛点 / 亮点自动聚类
+
+Day1 晚
+
+"社媒上用户在说什么完全没概念"
+
+虾自动扫描 TikTok/Instagram/ 抖音评论热点
+
+Day2 上午
+
+"调研做了一堆但落不了地"
+
+虾生成 6 章节提案 + ROI 估算 + 30 天行动时间线
+
+Day2 下午
+
+"招个分析师太贵,实习生又不会"
+
+带走一只训好的 AI 虾,以后自己就能跑分析
+
+全程
+
+
+---
+三、AI 技能系统功能全览(排除一键成片)
+
+工作坊底层由 41 个 AI 技能 驱动,分为两层架构:
+
+3.1 数据采集层(23 个原子技能)
+
+电商数据采集(12 个)— Amazon / 跨境电商
+
+技能
+
+功能
+
+工作坊用途
+
+product-search
+
+关键词搜 Top100 产品
+
+品类格局分析入口
+
+product-detail-query
+
+产品完整信息(价格 / 评分 / BSR / 卖点)
+
+竞品档案建立
+
+asin-sales-volume
+
+批量获取产品销量
+
+市场规模计算
+
+product-reviews-query
+
+批量抓取用户评论
+
+VOC 核心数据源
+
+keyword-search
+
+关键词搜索量 / 竞争度
+
+品类热度判断
+
+keyword-search-trend
+
+关键词趋势曲线
+
+品类增长 / 衰退判断
+
+keyword-product-ranking
+
+关键词下产品排名
+
+竞品流量入口分析
+
+asin-reverse-keywords
+
+ASIN 反查关键词
+
+竞品关键词库构建
+
+category-tree
+
+品类类目定位
+
+品类边界确定
+
+category-products
+
+类目下全部产品
+
+品类完整画像
+
+similar-products
+
+发现相似竞品
+
+竞品扩展筛选
+
+product-monitor
+
+价格 / 排名变化追踪
+
+竞品动态监控
+
+海外社媒数据采集(11 个)— TikTok & Instagram
+
+技能
+
+功能
+
+工作坊用途
+
+tiktok-video-search
+
+品类相关 TikTok 视频搜索
+
+社媒 VOC 内容发现
+
+tiktok-video-detail
+
+爆款视频深度数据
+
+内容策略分析
+
+tiktok-video-comments
+
+TikTok 视频评论抓取
+
+社媒 VOC 核心数据
+
+tiktok-user-search
+
+品类达人 / 红人搜索
+
+KOL 资源发现
+
+tiktok-user-profile
+
+达人账号数据
+
+竞品社媒画像
+
+tiktok-user-posts
+
+达人内容列表
+
+竞品内容策略
+
+tiktok-hashtag-detail
+
+话题标签热度
+
+品类话题热度
+
+tiktok-hashtag-videos
+
+话题下热门视频
+
+趋势内容分析
+
+instagram-search
+
+竞品 IG 账号发现
+
+品牌社媒档案
+
+instagram-user-info
+
+IG 粉丝 / 帖子数据
+
+社媒影响力评估
+
+instagram-user-posts
+
+IG 内容分析
+
+竞品内容策略
+
+国内社媒数据采集(7 个)— 抖音
+
+技能
+
+功能
+
+工作坊用途
+
+douyin-general-search
+
+抖音综合搜索(视频 / 图文)
+
+国内品类内容趋势
+
+douyin-video-detail
+
+单视频完整数据
+
+爆款内容拆解
+
+douyin-video-comments
+
+视频评论采集
+
+国内 VOC 数据源
+
+douyin-comment-replies
+
+热评回复采集
+
+深层用户声音
+
+douyin-user-search
+
+抖音达人搜索
+
+国内 KOL 发现
+
+douyin-user-profile
+
+达人主页数据
+
+达人商业价值评估
+
+douyin-hashtag-search
+
+抖音话题搜索
+
+国内品类话题热度
+
+3.2 智能编排层(18 个高阶技能)
+
+竞品分析模块(4 个)
+
+技能
+
+功能
+
+交付物
+
+competitor-discovery
+
+自动发现筛选 3-5 家竞品 + CR5 竞争格局
+
+《竞品档案卡》
+
+competitor-product-comparison
+
+多维对比 + 5 维健康度仪表盘
+
+《竞品对比矩阵》
+
+competitor-pricing-analysis
+
+5 分位价格带 + 黄金带 + 毛利估算
+
+《定价策略分析》
+
+competitor-bsr-tracking
+
+BSR 追踪 + 增长路径 + 风险预警
+
+《竞品动态监控》
+
+评论 / VOC 分析模块(5 个)
+
+技能
+
+功能
+
+交付物
+
+review-batch-collection
+
+批量采集 + 去重 + 竞品 VOC 对比
+
+结构化评论语料库
+
+review-sentiment-analysis
+
+情感分类 + 情感词云
+
+《情感分析报告》
+
+review-pain-point-extraction
+
+痛点聚类 + VOC 优化建议
+
+《用户痛点清单》
+
+review-highlight-extraction
+
+亮点提取 + Listing 卖点建议
+
+《卖点植入方案》
+
+review-keyword-cloud
+
+关键词云 + 情感标签
+
+《关键词情感地图》
+
+社媒 VOC 分析模块(4 个)
+
+技能
+
+功能
+
+交付物
+
+tiktok-category-voc
+
+TikTok 品类视频 + 评论 + 话题热度
+
+《TikTok 品类洞察》
+
+tiktok-brand-voc
+
+竞品 TikTok 内容策略 + 粉丝反馈
+
+《竞品社媒画像》
+
+instagram-brand-voc
+
+竞品 IG 搜索 + 帖子 + 互动分析
+
+《IG 品牌分析》
+
+social-trend-analysis
+
+跨平台热度对比 + 行动清单
+
+《社媒趋势报告》
+
+综合分析模块(5 个)
+
+技能
+
+功能
+
+交付物
+
+category-landscape
+
+CR5/HHI 集中度 + 风险预警 + 行动清单
+
+《品类认知校准表》
+
+brand-profile
+
+六维品牌画像 + 机会 / 风险标签
+
+《品牌认知校准卡》
+
+product-deep-analysis
+
+6 维单品诊断 + AI 运营建议
+
+《单品深度诊断》
+
+user-persona
+
+AI 用户画像 + 购买行为分析
+
+《用户画像手册》
+
+voc-proposal
+
+6 章节提案 + ROI 估算 + 30 天时间线
+
+《VOC 优化提案》
+
+报告生成模块(1 个)
+
+技能
+
+功能
+
+交付物
+
+html-report-generator
+
+全数据注入 HTML 模板,9 屏幻灯片报告
+
+《可演示 HTML 报告》
+
+3.3 内置核心算法
+
+算法
+
+说明
+
+CR5/HHI 集中度
+
+Top5 品牌销量占比 + 市占率平方和 ×10000,垄断度分级
+
+5 维健康度评分
+
+定价 (0.2)+ 评分 (0.25)+ 流量 (0.2)+ 销售 (0.15)+ 增长 (0.2)
+
+5 分位价格带
+
+按 P20/P40/P60/P80 分 5 档,每档统计 SKU / 销量 / 评分
+
+黄金价格带
+
+bandScore=avgSales×0.5+avgRating×20+(skuCount>0?10:0)
+
+毛利估算
+
+15% 佣金 +$5FBA+30% 采购→grossMargin%+ 盈亏平衡销量
+
+6 维品牌画像
+
+定价 / 评分 / 流量 / 销售 / 增长 / 口碑 各 0-100 分
+
+情感短语规则
+
+regex 匹配多词情感短语,短语优先于单词
+
+VOC 驱动优化
+
+评分差距→转化影响估算→listing / 产品 / 售后三维建议
+
+ROI 估算
+
+每条建议估算投入 / 收益 / 回本周期
+
+
+---
+四、两天一夜完整环节安排(线下落地版)
+
+Day 1・4 月 25 日(周五)—— "认品类・认品牌・抓评论"
+
+
+---
+🌅 Day1 上午 08:30-12:00「教虾认品类」
+
+目标: 虾从零开始认识企业所在品类,产出《品类认知校准表》
+
+时间
+
+环节
+
+具体内容
+
+参与方式
+
+线下执行细节
+
+08:30-09:00
+
+签到暖场
+
+① 电子扫码签到,领取专属资料袋 ② 引导企业到对应小组岛台就座 ③ 暖场播放工作坊主题视频,各组提前破冰交流
+
+签到 + 自由交流
+
+签到台配备 2 名工作人员,提前打印好企业名牌,岛台按企业分组摆放,每个岛台预留充电插座
+
+09:00-09:30
+
+开营破冰
+
+① 工作坊理念介绍:你不是来听课的,你是来 "养虾" 的 ② 各组自我介绍:品牌名、品类、当前痛点 ③ 演示 "虾" 能做什么(3 分钟 Demo)
+
+全体
+
+主舞台配备双屏投影,一个放演示内容,一个放实时倒计时,保证环节不超时
+
+09:30-10:00
+
+喂虾第一餐:品类关键词
+
+① 养虾人告诉虾:你的品类叫什么?核心关键词是什么? ② 教练引导:如何选择准确的品类关键词 ③ 虾开始执行 category-landscape(品类全景分析)
+
+分组实操
+
+每组助教全程跟进,协助学员登录系统,指导关键词输入规范
+
+10:00-10:45
+
+虾的第一份作业:品类地图
+
+虾自动产出: ① 品类市场规模(月销量 / 月销售额) ② CR5/HHI 市场集中度→判断是垄断还是分散 ③ 价格带分布→黄金价格带在哪 ④ 搜索趋势→品类在增长还是衰退 ⑤ 风险预警(价格战 / 集中度 / 增长风险)
+
+虾跑数据 + 养虾人校准
+
+系统后台实时监控各组数据跑数状态,卡顿自动预警,助教第一时间介入
+
+10:45-11:00
+
+☕ 茶歇
+
+提供咖啡、茶、低糖点心、水果,补充能量
+
+自由休息
+
+茶歇区设置在会场侧边,不干扰场内讨论,配备垃圾桶和纸巾
+
+11:00-11:45
+
+养虾人校准:品类认知纠偏
+
+① 养虾人审阅虾的品类分析结果 ② 对照自己的行业经验:哪些数据对?哪些偏了? ③ 教练引导校准:教虾修正关键词 / 调整分析范围 ④ 关键动作:养虾人在校准表上签字确认
+
+养虾人主导
+
+每组岛台配备小型白板,方便学员标注校准点,校准表打印出来后贴到成果展示墙
+
+11:45-12:00
+
+上午总结
+
+各组 1 分钟分享:我的虾对品类的认知准确率有多少?
+
+快速分享
+
+手持无线麦传递,保证每组都能清晰发言,控制每组发言时间不超时
+
+本环节交付物:
+
+暂时无法在豆包文档外展示此内容
+暂时无法在豆包文档外展示此内容
+暂时无法在豆包文档外展示此内容
+暂时无法在豆包文档外展示此内容
+- ✅ 《品类认知校准表》— 包含 CR5/HHI、价格带、增长趋势、风险预警
+
+- ✅ 品类核心关键词库(已验证)
+
+- ✅ 养虾人对虾的品类认知评分
+调用技能: category-landscape → product-search × 2-3 + asin-sales-volume × 100 + keyword-search × 5-10 + keyword-search-trend × 5 + category-tree × 1
+
+
+---
+🍽️ 午餐 12:00-13:30
+
+💡 午餐安排:酒店自助午餐,按企业分组就座,教练巡场答疑,各组养虾人之间交流品类经验
+📌 细节:提前收集学员饮食禁忌,素食、清真餐单独标注,避免过敏食材
+
+
+---
+🌤️ Day1 下午 13:30-18:00「教虾认品牌・找竞品」
+
+目标: 虾认识自家品牌 + 自动找到竞品 + 完成竞品对比
+
+时间
+
+环节
+
+具体内容
+
+参与方式
+
+线下执行细节
+
+13:30-14:30
+
+喂虾第二餐:自家品牌
+
+① 养虾人告诉虾:你的品牌叫什么?核心 ASIN 是哪几个? ② 虾执行 brand-profile(品牌六维画像) ③ 虾产出:定价 / 评分 / 流量 / 销售 / 增长 / 口碑 6 维得分 ④ 关键动作:养虾人看虾对自己品牌的理解准不准,校准
+
+分组实操
+
+助教提醒学员使用提前准备好的自家 ASIN,避免现场查找浪费时间
+
+14:30-14:45
+
+☕ 茶歇
+
+
+
+
+
+同上午茶歇标准,补充点心和饮品
+
+14:45-15:30
+
+喂虾第三餐:自家爆款
+
+① 养虾人选 1 个核心 ASIN 让虾深度分析 ② 虾执行 product-deep-analysis(6 维单品诊断) ③ 虾产出:流量架构、定价策略、Listing 评估、VOC 痛点、广告策略 ④ 关键动作:养虾人看虾的诊断和自己的认知差距在哪
+
+分组实操
+
+引导学员把诊断结果的差异点记录下来,晚上的分享环节可以重点讨论
+
+15:30-16:00
+
+虾自己找竞品
+
+① 虾执行 competitor-discovery(竞品发现与筛选) ② 虾自动筛出 3-5 个直接竞品 + 竞争格局 CR5 ③ 关键动作:养虾人审核 —— 虾找的竞品对不对?漏了谁? ④ 养虾人可以告诉虾补充 / 替换竞品
+
+虾跑 + 养虾人审核
+
+系统支持一键替换竞品,助教指导学员操作,保证 10 分钟内完成审核
+
+16:00-17:00
+
+虾给竞品做体检
+
+① 虾执行 competitor-product-comparison(5 维对比仪表盘) ② 虾执行 competitor-pricing-analysis(5 分位价格带 + 黄金带 + 毛利估算) ③ 虾产出:竞品对比矩阵 + 定价策略分析 ④ 关键动作:养虾人在竞品卡上标注 "这个分析有道理 / 不靠谱"
+
+分组实操
+
+对比结果自动生成可视化图表,学员可以直接在系统上标注,也可以打印出来手写
+
+17:00-17:45
+
+养虾人给虾打分
+
+① 各组养虾人给虾打分:品牌认知准确率、竞品判断准确率 ② 教练引导:虾目前的 "智商水平" 大概相当于几个月的实习生? ③ 发现虾的短板→下一步重点训练方向
+
+互动讨论
+
+每组打分结果实时同步到后台,统计整体的虾的成长数据
+
+17:45-18:00
+
+下午总结
+
+各组 2 分钟分享:我的虾找到了哪些竞品?最让我意外的发现是什么?
+
+快速分享
+
+控制发言时间,保证所有组都能分享到核心发现
+
+本环节交付物:
+
+暂时无法在豆包文档外展示此内容
+暂时无法在豆包文档外展示此内容
+暂时无法在豆包文档外展示此内容
+暂时无法在豆包文档外展示此内容
+- ✅ 《品牌认知校准卡》— 品牌六维画像 + 四象限定位 + 机会 / 风险标签
+
+- ✅ 《单品深度诊断》— 流量 / 定价 / Listing/VOC/ 广告 6 维诊断
+
+- ✅ 《竞品档案卡》— 3-5 个竞品 + 竞争格局 CR5
+
+- ✅ 《竞品对比矩阵》— 5 维健康度 + 定价策略
+
+- ✅ 养虾人对虾的品牌认知评分
+调用技能: brand-profile + product-deep-analysis + competitor-discovery + competitor-product-comparison + competitor-pricing-analysis
+
+
+---
+🍽️ 晚餐 18:00-19:00
+
+💡 晚餐安排:围餐形式,促进跨企业交流,教练和学员同桌,轻松答疑
+📌 细节:提供酒水选项(红酒 / 软饮),放松氛围,结束后引导学员回房间稍作休息,19:00 准时开始晚间环节
+
+
+---
+🌙 Day1 晚 19:00-21:30「教虾抓评论・VOC 初体验」
+
+目标: 虾第一次 "下海捕虾"—— 批量采集用户评论,完成初步 VOC 分析
+
+时间
+
+环节
+
+具体内容
+
+参与方式
+
+线下执行细节
+
+19:00-19:30
+
+VOC 是什么?为什么重要?
+
+① 教练讲解:VOC = Voice of Customer = 用户的真实声音 ② 演示:从一条差评里能读出什么?(痛点 / 需求 / 改进方向) ③ 告诉养虾人:接下来你要教虾去 "听" 用户在说什么
+
+全体讲解
+
+晚间环节调暗会场灯光,营造专注的讨论氛围,避免太亮的光导致学员疲惫
+
+19:30-20:15
+
+虾下海捕评论
+
+① 养虾人指定 ASIN 列表(自家 + 竞品,共 5-8 个) ② 虾执行 review-batch-collection(批量评论采集) ③ 虾采集 300-500 条评论,自动去重清洗 ④ 虾产出:竞品 VOC 对比汇总(本店 vs 竞品均分 / 差评率)
+
+分组实操
+
+后台提前预留算力,保证晚间批量采集不卡顿,助教协助学员筛选 ASIN
+
+20:15-20:45
+
+虾学会看评论
+
+① 虾执行 review-sentiment-analysis(情感分类 + 词云) ② 虾执行 review-keyword-cloud(关键词 + 情感标签) ③ 虾产出:正面 / 负面 / 中性情感分布 + 关键词情感地图 ④ 关键动作:养虾人看词云→这些词你认识吗?和你的直觉一致吗?
+
+虾跑 + 养虾人校准
+
+词云图自动生成,学员可以直接保存到自己的报告里,助教指导解读情感标签
+
+20:45-21:15
+
+养虾人教虾读评论
+
+① 教练引导:挑出 3 条最有价值的差评,和养虾人一起分析 ② 养虾人角度:这个痛点我知道 / 我不知道 / 我以为解决了其实没有 ③ 在评论上标注:✅已知 / ⚡新发现 / ❌误判
+
+互动讨论
+
+每组助教引导讨论,避免跑题,把核心的新发现记录下来
+
+21:15-21:30
+
+晚间总结・今日收获
+
+① 各组分享:虾今天最大的发现是什么? ② 教练布置 "虾的 overnight 作业":虾在后台继续跑数据
+
+快速分享
+
+结束后提醒学员,后台会自动跑 overnight 数据,明天早上过来就能看到结果,同时提供宵夜点心,学员可以自由带走
+
+本环节交付物:
+
+暂时无法在豆包文档外展示此内容
+暂时无法在豆包文档外展示此内容
+暂时无法在豆包文档外展示此内容
+暂时无法在豆包文档外展示此内容
+- ✅ 结构化评论语料库(300-500 条清洗后评论)
+
+- ✅ 《情感分析报告》— 正面 / 负面 / 中性分布 + 情感词云
+
+- ✅ 《关键词情感地图》— 每个关键词带情感标签
+
+- ✅ 竞品 VOC 对比汇总(本店 vs 竞品差评率对比)
+调用技能: review-batch-collection + review-sentiment-analysis + review-keyword-cloud
+
+🌙 晚间自由安排:21:30 后学员可自由活动,酒店配备健身房、茶室,也可继续小组交流,工作人员 24 小时待命
+
+
+---
+Day 2・4 月 26 日(周六)—— "社媒 VOC・用户画像・提案生成"
+
+
+---
+🌅 Day2 上午 09:00-12:00「教虾看社媒・画用户」
+
+目标: 虾从社媒渠道采集 VOC + 竞品诊断 + 生成用户画像
+
+时间
+
+环节
+
+具体内容
+
+参与方式
+
+线下执行细节
+
+08:30-09:00
+
+早到签到
+
+学员陆续到场,提供早餐茶点:咖啡、包子、粥、水果
+
+自由暖场
+
+提前开门,让早到的学员可以先看 overnight 跑出来的数据
+
+09:00-09:15
+
+昨日回顾 + 今日预告
+
+回顾虾昨天学到了什么,今天虾要学会 "看社媒" 和 "画用户"
+
+全体
+
+快速回顾,不占用太多时间,进入正题
+
+09:15-10:00
+
+虾去 TikTok/Instagram 找声音
+
+① 虾执行 tiktok-category-voc(TikTok 品类视频 + 评论 + 话题) ② 虾执行 tiktok-brand-voc(竞品 TikTok 内容策略) ③ 虾执行 instagram-brand-voc(竞品 IG 搜索 + 帖子 + 互动) ④ 虾产出:竞品在 TikTok/IG 上怎么玩?用户在评论区说什么?
+
+分组实操
+
+海外社媒数据采集提前做了节点优化,保证国内访问速度,助教指导解读社媒热点
+
+10:00-10:30
+
+虾去抖音找国内声音
+
+① 虾执行 douyin-general-search(品类关键词搜索爆款内容) ② 虾执行 douyin-video-comments(爆款视频评论采集) ③ 虾产出:国内消费者在抖音上对这个品类的讨论热点 ④ 关键动作:养虾人对比海外社媒 vs 国内抖音的用户声音差异
+
+分组实操
+
+引导学员对比国内外用户的需求差异,挖掘差异化机会
+
+10:30-10:45
+
+☕ 茶歇
+
+
+
+
+
+同标准茶歇
+
+10:45-11:10
+
+虾做竞品 VOC 诊断
+
+① 虾执行 review-pain-point-extraction(竞品差评痛点 Top10) ② 虾执行 review-highlight-extraction(竞品好评亮点 + Listing 卖点建议) ③ 虾执行 social-trend-analysis(跨平台热度对比 + 行动清单) ④ 虾执行 competitor-bsr-tracking(BSR 追踪 + 增长路径 + 风险预警)
+
+虾跑数据
+
+数据自动整合,不用学员手动操作,节省时间
+
+11:10-11:50
+
+虾画用户画像
+
+① 虾执行 user-persona(综合电商 + 社媒 VOC 数据) ② 虾产出 3-5 个核心用户类型:人口特征 / 核心需求 / 决策因素 / 使用场景 / 痛点 / 触达渠道 ③ 虾产出购买行为分析:价格敏感度 / 季节性 / 渠道偏好 ④ 关键动作:养虾人校准画像 ——"我的真实客户确实是这样吗?"
+
+分组实操 + 校准
+
+画像可视化生成,学员可以直接调整用户标签,校准后自动更新到报告里
+
+11:50-12:00
+
+上午总结
+
+各组 1 分钟分享:虾画的用户画像和你心中的用户像不像?
+
+快速分享
+
+收集学员的校准反馈,优化系统的用户画像模型
+
+本环节交付物:
+
+暂时无法在豆包文档外展示此内容
+暂时无法在豆包文档外展示此内容
+暂时无法在豆包文档外展示此内容
+暂时无法在豆包文档外展示此内容
+- ✅ 《TikTok 品类洞察》— 视频热度 / 评论情感 / 话题趋势
+
+- ✅ 《竞品社媒画像》— TikTok+IG 双平台分析
+
+- ✅ 《抖音品类洞察》— 国内社媒用户声音(⚠️ 实验性功能,见限制说明)
+
+- ✅ 《用户痛点清单》— Top10 痛点 + VOC 优化建议
+
+- ✅ 《卖点植入方案》— 亮点→标题 /bullet/A + 建议
+
+- ✅ 《社媒趋势报告》— 跨平台热度 + 行动清单
+
+- ✅ 《用户画像手册》— 3-5 个画像 + 购买行为 + 场景分布
+调用技能: tiktok-category-voc + tiktok-brand-voc + instagram-brand-voc + douyin-general-search + douyin-video-comments + review-pain-point-extraction + review-highlight-extraction + social-trend-analysis + competitor-bsr-tracking + user-persona
+
+
+---
+🍽️ 午餐 12:00-13:00
+
+💡 午餐安排:自助午餐,结束后学员可以稍作休息,为下午的路演做准备
+
+
+---
+🌤️ Day2 下午 13:00-17:00「虾交作业・结营」
+
+目标: 虾整合两天所有数据,产出可以给老板看的完整 VOC 报告
+
+时间
+
+环节
+
+具体内容
+
+参与方式
+
+线下执行细节
+
+13:00-14:00
+
+虾写提案
+
+① 虾执行 voc-proposal(整合全部数据) ② 虾自动生成 6 章节提案:品类认知→品牌定位→竞品漏洞→用户需求→产品优化→落地行动 ③ 附带 ROI 估算 + 30 天行动时间线 ④ 关键动作:养虾人审阅每一章,标注 "靠谱 / 需修正 / 看不懂"
+
+虾跑 + 养虾人审阅
+
+系统自动整合两天的所有数据,不用学员手动拼接,10 分钟生成完整提案
+
+14:00-14:30
+
+虾做报告
+
+① 虾执行 html-report-generator(9 屏幻灯片报告) ② 自动注入所有数据:市场全景 / 竞品对标 / VOC 洞察 / 品类矩阵 / 策略建议 ③ 产出一份可以直接演示的 HTML 报告
+
+虾自动生成
+
+报告支持导出 PDF、PPT,学员可以直接带走,也可以在线编辑
+
+14:30-15:00
+
+☕ 茶歇 + 养虾人最终校准
+
+养虾人最后一次审阅虾的全部产出,做最终标注和修正,准备路演 PPT
+
+
+
+茶歇区提供打印服务,学员可以打印报告备用
+
+15:00-16:30
+
+🎤 结营路演:虾的毕业答辩
+
+① 每组 10-15 分钟上台展示虾的作业 ② 展示内容:品类认知→竞品分析→VOC 洞察→用户画像→行动提案 ③ 其他组 + 教练点评:虾的分析有没有道理? ④ 养虾人点评:虾这两天 "长进了多少"?
+
+路演 + 互评
+
+路演环节配备计时员,到点提醒,保证每组时间可控,互评环节引导大家给出建设性意见
+
+16:30-17:00
+
+结营仪式
+
+① 颁奖:最聪明的虾 / 最靠谱的虾 / 最有创意的虾 ② 教练总结:虾带回去之后怎么继续训练? ③ 后续支持:加入 "养虾人俱乐部",后续免费更新技能,教练群内答疑 ④ 颁发结业证书 & 专属 "AI 情报官" 认证牌
+
+全体结营
+
+颁奖环节准备定制奖杯和证书,拍照留念,所有活动照片后续会整理好发给学员

+ 1336 - 0
docs/tikhub-vs-chanmama-comparison.html

@@ -0,0 +1,1336 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+<meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>TikHub vs 蝉妈妈 · API 数据能力对比</title>
+<style>
+  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=Noto+Sans+SC:wght@300;400;500;600;700&display=swap');
+
+  :root {
+    --bg: #0a0a0f;
+    --bg-card: #111118;
+    --bg-hover: #1a1a24;
+    --border: #1e1e2e;
+    --border-light: #2a2a3a;
+    --text: #e8e8f0;
+    --text-secondary: #8888a0;
+    --text-muted: #555568;
+    --accent-tikhub: #6366f1;
+    --accent-tikhub-dim: rgba(99,102,241,0.12);
+    --accent-chanmama: #f59e0b;
+    --accent-chanmama-dim: rgba(245,158,11,0.12);
+    --accent-shared: #10b981;
+    --accent-shared-dim: rgba(16,185,129,0.12);
+    --gradient-tikhub: linear-gradient(135deg, #6366f1, #818cf8);
+    --gradient-chanmama: linear-gradient(135deg, #f59e0b, #fbbf24);
+    --gradient-shared: linear-gradient(135deg, #10b981, #34d399);
+  }
+
+  * { margin: 0; padding: 0; box-sizing: border-box; }
+
+  html {
+    scroll-behavior: smooth;
+    scrollbar-width: thin;
+    scrollbar-color: #2a2a3a #0a0a0f;
+  }
+
+  body {
+    font-family: 'Inter', 'Noto Sans SC', -apple-system, sans-serif;
+    background: var(--bg);
+    color: var(--text);
+    line-height: 1.7;
+    -webkit-font-smoothing: antialiased;
+    overflow-x: hidden;
+  }
+
+  /* ─── Scrollbar ─── */
+  ::-webkit-scrollbar { width: 6px; }
+  ::-webkit-scrollbar-track { background: var(--bg); }
+  ::-webkit-scrollbar-thumb { background: #2a2a3a; border-radius: 3px; }
+
+  /* ─── Hero ─── */
+  .hero {
+    position: relative;
+    min-height: 100vh;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    padding: 4rem 2rem;
+    overflow: hidden;
+  }
+
+  .hero::before {
+    content: '';
+    position: absolute;
+    top: -40%;
+    left: -20%;
+    width: 60%;
+    height: 80%;
+    background: radial-gradient(ellipse, rgba(99,102,241,0.06) 0%, transparent 70%);
+    pointer-events: none;
+  }
+
+  .hero::after {
+    content: '';
+    position: absolute;
+    top: -20%;
+    right: -20%;
+    width: 50%;
+    height: 70%;
+    background: radial-gradient(ellipse, rgba(245,158,11,0.04) 0%, transparent 70%);
+    pointer-events: none;
+  }
+
+  .hero-badge {
+    display: inline-flex;
+    align-items: center;
+    gap: 8px;
+    padding: 6px 16px;
+    border: 1px solid var(--border-light);
+    border-radius: 100px;
+    font-size: 0.75rem;
+    font-weight: 500;
+    color: var(--text-secondary);
+    letter-spacing: 0.08em;
+    text-transform: uppercase;
+    margin-bottom: 2rem;
+    backdrop-filter: blur(8px);
+    background: rgba(255,255,255,0.02);
+    animation: fadeInDown 0.8s ease;
+  }
+
+  .hero-badge .dot {
+    width: 6px;
+    height: 6px;
+    border-radius: 50%;
+    background: var(--accent-shared);
+    animation: pulse-dot 2s infinite;
+  }
+
+  @keyframes pulse-dot {
+    0%, 100% { opacity: 1; }
+    50% { opacity: 0.4; }
+  }
+
+  .hero h1 {
+    font-size: clamp(2.5rem, 6vw, 4.5rem);
+    font-weight: 800;
+    text-align: center;
+    letter-spacing: -0.03em;
+    line-height: 1.1;
+    margin-bottom: 1.5rem;
+    animation: fadeInUp 0.8s ease 0.1s both;
+  }
+
+  .hero h1 .tikhub { color: #818cf8; }
+  .hero h1 .vs { color: var(--text-muted); font-weight: 300; padding: 0 0.3em; font-size: 0.6em; vertical-align: middle; }
+  .hero h1 .chanmama { color: #fbbf24; }
+
+  .hero-desc {
+    font-size: 1.1rem;
+    color: var(--text-secondary);
+    text-align: center;
+    max-width: 680px;
+    line-height: 1.8;
+    margin-bottom: 3rem;
+    animation: fadeInUp 0.8s ease 0.2s both;
+  }
+
+  .hero-stats {
+    display: grid;
+    grid-template-columns: repeat(3, 1fr);
+    gap: 1px;
+    background: var(--border);
+    border: 1px solid var(--border);
+    border-radius: 16px;
+    overflow: hidden;
+    max-width: 700px;
+    width: 100%;
+    animation: fadeInUp 0.8s ease 0.3s both;
+  }
+
+  .hero-stat {
+    background: var(--bg-card);
+    padding: 2rem 1.5rem;
+    text-align: center;
+    transition: background 0.3s;
+  }
+
+  .hero-stat:hover { background: var(--bg-hover); }
+
+  .hero-stat .num {
+    font-size: 2.2rem;
+    font-weight: 700;
+    letter-spacing: -0.02em;
+    margin-bottom: 0.3rem;
+  }
+
+  .hero-stat:nth-child(1) .num { color: #818cf8; }
+  .hero-stat:nth-child(2) .num { color: #fbbf24; }
+  .hero-stat:nth-child(3) .num { color: #34d399; }
+
+  .hero-stat .label {
+    font-size: 0.78rem;
+    color: var(--text-muted);
+    letter-spacing: 0.04em;
+  }
+
+  .scroll-hint {
+    position: absolute;
+    bottom: 2rem;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    gap: 8px;
+    color: var(--text-muted);
+    font-size: 0.7rem;
+    letter-spacing: 0.1em;
+    text-transform: uppercase;
+    animation: fadeInUp 1s ease 0.6s both;
+  }
+
+  .scroll-hint .line {
+    width: 1px;
+    height: 40px;
+    background: linear-gradient(to bottom, var(--text-muted), transparent);
+    animation: scrollLine 2s infinite;
+  }
+
+  @keyframes scrollLine {
+    0% { opacity: 0; transform: scaleY(0); transform-origin: top; }
+    50% { opacity: 1; transform: scaleY(1); }
+    100% { opacity: 0; transform: scaleY(1); }
+  }
+
+  /* ─── Navigation ─── */
+  .nav {
+    position: sticky;
+    top: 0;
+    z-index: 100;
+    background: rgba(10,10,15,0.85);
+    backdrop-filter: blur(20px) saturate(1.2);
+    border-bottom: 1px solid var(--border);
+    padding: 0 2rem;
+    transition: box-shadow 0.3s;
+  }
+
+  .nav.scrolled { box-shadow: 0 4px 30px rgba(0,0,0,0.3); }
+
+  .nav-inner {
+    max-width: 1200px;
+    margin: 0 auto;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    gap: 0;
+    overflow-x: auto;
+    scrollbar-width: none;
+    -ms-overflow-style: none;
+  }
+
+  .nav-inner::-webkit-scrollbar { display: none; }
+
+  .nav-item {
+    position: relative;
+    padding: 1rem 1.5rem;
+    font-size: 0.82rem;
+    font-weight: 500;
+    color: var(--text-muted);
+    cursor: pointer;
+    white-space: nowrap;
+    transition: color 0.3s;
+    letter-spacing: 0.02em;
+  }
+
+  .nav-item:hover { color: var(--text-secondary); }
+  .nav-item.active { color: var(--text); }
+
+  .nav-item.active::after {
+    content: '';
+    position: absolute;
+    bottom: 0;
+    left: 1.5rem;
+    right: 1.5rem;
+    height: 2px;
+    background: var(--gradient-tikhub);
+    border-radius: 1px;
+  }
+
+  /* ─── Sections ─── */
+  .section {
+    max-width: 1200px;
+    margin: 0 auto;
+    padding: 6rem 2rem;
+    opacity: 0;
+    transform: translateY(30px);
+    transition: opacity 0.6s ease, transform 0.6s ease;
+  }
+
+  .section.visible {
+    opacity: 1;
+    transform: translateY(0);
+  }
+
+  .section-header {
+    margin-bottom: 3rem;
+  }
+
+  .section-label {
+    display: inline-flex;
+    align-items: center;
+    gap: 8px;
+    font-size: 0.72rem;
+    font-weight: 600;
+    letter-spacing: 0.12em;
+    text-transform: uppercase;
+    margin-bottom: 1rem;
+    padding: 5px 14px;
+    border-radius: 6px;
+  }
+
+  .section-label.tikhub { color: var(--accent-tikhub); background: var(--accent-tikhub-dim); }
+  .section-label.chanmama { color: var(--accent-chanmama); background: var(--accent-chanmama-dim); }
+  .section-label.shared { color: var(--accent-shared); background: var(--accent-shared-dim); }
+
+  .section-title {
+    font-size: clamp(1.8rem, 3.5vw, 2.6rem);
+    font-weight: 700;
+    letter-spacing: -0.02em;
+    line-height: 1.2;
+    margin-bottom: 0.8rem;
+  }
+
+  .section-desc {
+    font-size: 1rem;
+    color: var(--text-secondary);
+    max-width: 600px;
+    line-height: 1.8;
+  }
+
+  /* ─── Cards Grid ─── */
+  .cards {
+    display: grid;
+    grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
+    gap: 1px;
+    background: var(--border);
+    border: 1px solid var(--border);
+    border-radius: 16px;
+    overflow: hidden;
+  }
+
+  .card {
+    background: var(--bg-card);
+    padding: 2rem;
+    transition: background 0.3s;
+    cursor: default;
+  }
+
+  .card:hover { background: var(--bg-hover); }
+
+  .card-icon {
+    width: 36px;
+    height: 36px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    border-radius: 10px;
+    margin-bottom: 1.2rem;
+    font-size: 0.85rem;
+    font-weight: 700;
+    letter-spacing: 0.02em;
+  }
+
+  .card-icon.tikhub { background: var(--accent-tikhub-dim); color: var(--accent-tikhub); }
+  .card-icon.chanmama { background: var(--accent-chanmama-dim); color: var(--accent-chanmama); }
+  .card-icon.shared { background: var(--accent-shared-dim); color: var(--accent-shared); }
+
+  .card h3 {
+    font-size: 1rem;
+    font-weight: 600;
+    margin-bottom: 0.6rem;
+    letter-spacing: -0.01em;
+  }
+
+  .card p {
+    font-size: 0.85rem;
+    color: var(--text-secondary);
+    line-height: 1.7;
+  }
+
+  .card .tags {
+    display: flex;
+    flex-wrap: wrap;
+    gap: 6px;
+    margin-top: 1rem;
+  }
+
+  .card .tag {
+    font-size: 0.7rem;
+    padding: 3px 10px;
+    border-radius: 4px;
+    background: rgba(255,255,255,0.04);
+    color: var(--text-muted);
+    border: 1px solid var(--border);
+    letter-spacing: 0.02em;
+  }
+
+  /* ─── Comparison Table ─── */
+  .comparison-table {
+    width: 100%;
+    border-collapse: separate;
+    border-spacing: 0;
+    border: 1px solid var(--border);
+    border-radius: 16px;
+    overflow: hidden;
+    font-size: 0.88rem;
+  }
+
+  .comparison-table thead th {
+    background: var(--bg-card);
+    padding: 1.2rem 1.5rem;
+    text-align: left;
+    font-weight: 600;
+    font-size: 0.78rem;
+    letter-spacing: 0.06em;
+    text-transform: uppercase;
+    color: var(--text-muted);
+    border-bottom: 1px solid var(--border);
+  }
+
+  .comparison-table thead th:nth-child(2) { color: var(--accent-tikhub); }
+  .comparison-table thead th:nth-child(3) { color: var(--accent-chanmama); }
+
+  .comparison-table tbody td {
+    padding: 1rem 1.5rem;
+    border-bottom: 1px solid var(--border);
+    vertical-align: top;
+    transition: background 0.2s;
+  }
+
+  .comparison-table tbody tr:hover td { background: var(--bg-hover); }
+  .comparison-table tbody tr:last-child td { border-bottom: none; }
+
+  .comparison-table .dim-label {
+    font-weight: 600;
+    color: var(--text);
+  }
+
+  .comparison-table .check {
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+    width: 22px;
+    height: 22px;
+    border-radius: 6px;
+    font-size: 0.75rem;
+  }
+
+  .check.yes { background: rgba(16,185,129,0.15); color: #34d399; }
+  .check.no { background: rgba(255,255,255,0.03); color: var(--text-muted); }
+
+  .comparison-table .note {
+    font-size: 0.78rem;
+    color: var(--text-muted);
+    margin-top: 4px;
+    line-height: 1.6;
+  }
+
+  /* ─── Callout ─── */
+  .callout {
+    border: 1px solid var(--border);
+    border-radius: 16px;
+    padding: 2rem;
+    margin: 3rem 0;
+    background: var(--bg-card);
+    position: relative;
+    overflow: hidden;
+  }
+
+  .callout::before {
+    content: '';
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 3px;
+    height: 100%;
+  }
+
+  .callout.warning::before { background: var(--gradient-chanmama); }
+  .callout.info::before { background: var(--gradient-tikhub); }
+
+  .callout-title {
+    font-size: 0.92rem;
+    font-weight: 600;
+    margin-bottom: 0.5rem;
+  }
+
+  .callout-text {
+    font-size: 0.85rem;
+    color: var(--text-secondary);
+    line-height: 1.8;
+  }
+
+  /* ─── Scenario Section ─── */
+  .scenarios {
+    display: grid;
+    grid-template-columns: repeat(2, 1fr);
+    gap: 1.5rem;
+  }
+
+  .scenario-col {
+    border: 1px solid var(--border);
+    border-radius: 16px;
+    overflow: hidden;
+  }
+
+  .scenario-col-header {
+    padding: 1.5rem 2rem;
+    font-weight: 600;
+    font-size: 0.92rem;
+    border-bottom: 1px solid var(--border);
+    display: flex;
+    align-items: center;
+    gap: 10px;
+  }
+
+  .scenario-col:first-child .scenario-col-header {
+    background: var(--accent-tikhub-dim);
+    color: var(--accent-tikhub);
+  }
+
+  .scenario-col:last-child .scenario-col-header {
+    background: var(--accent-chanmama-dim);
+    color: var(--accent-chanmama);
+  }
+
+  .scenario-col-header .indicator {
+    width: 8px;
+    height: 8px;
+    border-radius: 50%;
+  }
+
+  .scenario-col:first-child .indicator { background: var(--accent-tikhub); }
+  .scenario-col:last-child .indicator { background: var(--accent-chanmama); }
+
+  .scenario-list {
+    list-style: none;
+    padding: 0.5rem 0;
+  }
+
+  .scenario-list li {
+    padding: 1rem 2rem;
+    font-size: 0.88rem;
+    color: var(--text-secondary);
+    border-bottom: 1px solid rgba(255,255,255,0.03);
+    display: flex;
+    align-items: flex-start;
+    gap: 12px;
+    transition: background 0.2s, color 0.2s;
+  }
+
+  .scenario-list li:hover {
+    background: var(--bg-hover);
+    color: var(--text);
+  }
+
+  .scenario-list li:last-child { border-bottom: none; }
+
+  .scenario-list li .bullet {
+    width: 5px;
+    height: 5px;
+    border-radius: 50%;
+    margin-top: 8px;
+    flex-shrink: 0;
+  }
+
+  .scenario-col:first-child .bullet { background: var(--accent-tikhub); }
+  .scenario-col:last-child .bullet { background: var(--accent-chanmama); }
+
+  /* ─── Complementary Table ─── */
+  .complement-grid {
+    display: grid;
+    grid-template-columns: 1fr;
+    gap: 1px;
+    background: var(--border);
+    border: 1px solid var(--border);
+    border-radius: 16px;
+    overflow: hidden;
+    margin-top: 3rem;
+  }
+
+  .complement-row {
+    display: grid;
+    grid-template-columns: 160px 1fr 1fr;
+    background: var(--bg-card);
+    transition: background 0.2s;
+  }
+
+  .complement-row:hover { background: var(--bg-hover); }
+
+  .complement-row.header {
+    background: rgba(255,255,255,0.02);
+  }
+
+  .complement-cell {
+    padding: 1rem 1.5rem;
+    font-size: 0.85rem;
+    border-right: 1px solid var(--border);
+    display: flex;
+    align-items: center;
+  }
+
+  .complement-cell:last-child { border-right: none; }
+
+  .complement-cell.label {
+    font-weight: 600;
+    color: var(--text);
+    font-size: 0.82rem;
+  }
+
+  .complement-row.header .complement-cell {
+    font-size: 0.72rem;
+    font-weight: 600;
+    letter-spacing: 0.08em;
+    text-transform: uppercase;
+    color: var(--text-muted);
+    padding: 0.8rem 1.5rem;
+  }
+
+  .complement-row.header .complement-cell:nth-child(2) { color: var(--accent-tikhub); }
+  .complement-row.header .complement-cell:nth-child(3) { color: var(--accent-chanmama); }
+
+  /* ─── Stats Bar ─── */
+  .stats-section {
+    display: grid;
+    grid-template-columns: repeat(2, 1fr);
+    gap: 1.5rem;
+    margin-top: 3rem;
+  }
+
+  .stat-block {
+    border: 1px solid var(--border);
+    border-radius: 16px;
+    padding: 2rem;
+    background: var(--bg-card);
+  }
+
+  .stat-block-title {
+    font-size: 0.72rem;
+    font-weight: 600;
+    letter-spacing: 0.1em;
+    text-transform: uppercase;
+    color: var(--text-muted);
+    margin-bottom: 1.5rem;
+  }
+
+  .stat-bar-group {
+    display: flex;
+    flex-direction: column;
+    gap: 1rem;
+  }
+
+  .stat-bar-item {
+    display: flex;
+    align-items: center;
+    gap: 1rem;
+    font-size: 0.82rem;
+  }
+
+  .stat-bar-label {
+    width: 120px;
+    flex-shrink: 0;
+    color: var(--text-secondary);
+    font-size: 0.78rem;
+  }
+
+  .stat-bar-track {
+    flex: 1;
+    height: 6px;
+    background: rgba(255,255,255,0.04);
+    border-radius: 3px;
+    overflow: hidden;
+  }
+
+  .stat-bar-fill {
+    height: 100%;
+    border-radius: 3px;
+    transition: width 1.2s cubic-bezier(0.16, 1, 0.3, 1);
+    width: 0;
+  }
+
+  .stat-bar-fill.tikhub { background: var(--gradient-tikhub); }
+  .stat-bar-fill.chanmama { background: var(--gradient-chanmama); }
+
+  .stat-bar-value {
+    font-size: 0.78rem;
+    font-weight: 600;
+    color: var(--text);
+    width: 40px;
+    text-align: right;
+  }
+
+  /* ─── Footer ─── */
+  .footer {
+    text-align: center;
+    padding: 4rem 2rem;
+    border-top: 1px solid var(--border);
+    color: var(--text-muted);
+    font-size: 0.78rem;
+  }
+
+  .footer p { margin-bottom: 0.3rem; }
+
+  /* ─── Animations ─── */
+  @keyframes fadeInUp {
+    from { opacity: 0; transform: translateY(20px); }
+    to { opacity: 1; transform: translateY(0); }
+  }
+
+  @keyframes fadeInDown {
+    from { opacity: 0; transform: translateY(-10px); }
+    to { opacity: 1; transform: translateY(0); }
+  }
+
+  /* ─── Responsive ─── */
+  @media (max-width: 768px) {
+    .cards { grid-template-columns: 1fr; }
+    .scenarios { grid-template-columns: 1fr; }
+    .stats-section { grid-template-columns: 1fr; }
+    .complement-row { grid-template-columns: 120px 1fr 1fr; }
+    .nav-item { padding: 1rem 1rem; font-size: 0.75rem; }
+    .section { padding: 4rem 1.2rem; }
+  }
+
+  /* ─── Divider ─── */
+  .divider {
+    height: 1px;
+    background: var(--border);
+    max-width: 1200px;
+    margin: 0 auto;
+  }
+</style>
+</head>
+<body>
+
+<!-- ━━━ Hero ━━━ -->
+<section class="hero">
+  <div class="hero-badge">
+    <span class="dot"></span>
+    <span>API Capability Comparison</span>
+  </div>
+  <h1>
+    <span class="tikhub">TikHub</span>
+    <span class="vs">vs</span>
+    <span class="chanmama">蝉妈妈</span>
+  </h1>
+  <p class="hero-desc">
+    两套截然不同的数据体系——原始数据爬取 vs 电商深度分析。<br>
+    以下从接口能力、数据维度、适用场景三个层面展开全景对比。
+  </p>
+  <div class="hero-stats">
+    <div class="hero-stat">
+      <div class="num">300+</div>
+      <div class="label">TikHub 接口总量</div>
+    </div>
+    <div class="hero-stat">
+      <div class="num">24</div>
+      <div class="label">蝉妈妈 数据类型</div>
+    </div>
+    <div class="hero-stat">
+      <div class="num">5</div>
+      <div class="label">核心重叠维度</div>
+    </div>
+  </div>
+  <div class="scroll-hint">
+    <span>Scroll</span>
+    <div class="line"></div>
+  </div>
+</section>
+
+<!-- ━━━ Nav ━━━ -->
+<nav class="nav" id="nav">
+  <div class="nav-inner">
+    <div class="nav-item active" data-target="tikhub-unique">TikHub 独有</div>
+    <div class="nav-item" data-target="chanmama-unique">蝉妈妈 独有</div>
+    <div class="nav-item" data-target="overlap">能力重叠</div>
+    <div class="nav-item" data-target="scenarios">适用场景</div>
+    <div class="nav-item" data-target="stats">接口统计</div>
+  </div>
+</nav>
+
+<!-- ━━━ TikHub Unique ━━━ -->
+<div class="divider"></div>
+<section class="section" id="tikhub-unique">
+  <div class="section-header">
+    <div class="section-label tikhub">TikHub Exclusive</div>
+    <h2 class="section-title">TikHub 独有能力</h2>
+    <p class="section-desc">以原始数据采集为核心,覆盖多平台内容、搜索、互动关系和实时直播等维度。</p>
+  </div>
+
+  <div class="cards">
+    <div class="card">
+      <div class="card-icon tikhub">01</div>
+      <h3>原始内容数据获取</h3>
+      <p>无水印视频下载、高清播放链接、弹幕原始数据、首页推荐流、相关作品推荐、分类频道内容。</p>
+      <div class="tags">
+        <span class="tag">视频 V1/V2/V3</span>
+        <span class="tag">弹幕数据</span>
+        <span class="tag">Home Feed</span>
+        <span class="tag">无水印下载</span>
+      </div>
+    </div>
+
+    <div class="card">
+      <div class="card-icon tikhub">02</div>
+      <h3>TikTok 国际版全量接口</h3>
+      <p>完整覆盖 TikTok 的 Web、App、Creator、Analytics、Ads、Shop、Interaction 七大模块。蝉妈妈仅覆盖抖音。</p>
+      <div class="tags">
+        <span class="tag">TikTok Web</span>
+        <span class="tag">TikTok App V3</span>
+        <span class="tag">Creator API</span>
+        <span class="tag">Analytics</span>
+        <span class="tag">Ads API</span>
+        <span class="tag">Shop API</span>
+      </div>
+    </div>
+
+    <div class="card">
+      <div class="card-icon tikhub">03</div>
+      <h3>多平台数据覆盖</h3>
+      <p>同时支持 Instagram、小红书、快手、B站、微信公众号、Sora2 等多个平台的数据获取。</p>
+      <div class="tags">
+        <span class="tag">Instagram</span>
+        <span class="tag">小红书</span>
+        <span class="tag">快手</span>
+        <span class="tag">B站</span>
+        <span class="tag">微信</span>
+      </div>
+    </div>
+
+    <div class="card">
+      <div class="card-icon tikhub">04</div>
+      <h3>深度搜索能力</h3>
+      <p>18+ 种搜索接口——综合、视频、用户、话题、图片、图文、直播、音乐、经验、讨论、学校、图像识别搜索。</p>
+      <div class="tags">
+        <span class="tag">综合搜索</span>
+        <span class="tag">图像识别搜索</span>
+        <span class="tag">多重搜索</span>
+        <span class="tag">关键词建议</span>
+      </div>
+    </div>
+
+    <div class="card">
+      <div class="card-icon tikhub">05</div>
+      <h3>评论原始数据</h3>
+      <p>获取完整评论文本、评论者信息、发布时间、点赞数、回复列表,支持 AI 评论关键词分析。</p>
+      <div class="tags">
+        <span class="tag">评论列表</span>
+        <span class="tag">评论回复</span>
+        <span class="tag">关键词分析</span>
+      </div>
+    </div>
+
+    <div class="card">
+      <div class="card-icon tikhub">06</div>
+      <h3>用户互动关系链</h3>
+      <p>获取完整的粉丝列表、关注列表、点赞列表、收藏夹内容、转发作品列表。</p>
+      <div class="tags">
+        <span class="tag">粉丝列表</span>
+        <span class="tag">关注列表</span>
+        <span class="tag">点赞/收藏</span>
+        <span class="tag">转发</span>
+      </div>
+    </div>
+
+    <div class="card">
+      <div class="card-icon tikhub">07</div>
+      <h3>直播实时数据</h3>
+      <p>实时弹幕流、WebSocket 连接参数、在线状态检测、礼物列表与排行、直播间商品挂车、每日榜单。</p>
+      <div class="tags">
+        <span class="tag">实时弹幕</span>
+        <span class="tag">在线检测</span>
+        <span class="tag">礼物排行</span>
+        <span class="tag">直播商品</span>
+      </div>
+    </div>
+
+    <div class="card">
+      <div class="card-icon tikhub">08</div>
+      <h3>热搜与趋势榜单</h3>
+      <p>抖音热搜榜、直播热搜榜、音乐榜、品牌热榜、TikTok 每日趋势与热门关键词。</p>
+      <div class="tags">
+        <span class="tag">热搜榜</span>
+        <span class="tag">音乐榜</span>
+        <span class="tag">品牌热榜</span>
+        <span class="tag">趋势词</span>
+      </div>
+    </div>
+
+    <div class="card">
+      <div class="card-icon tikhub">09</div>
+      <h3>广告与创作者分析</h3>
+      <p>TikTok Ads 广告搜索/详情/关键词洞察,Creator API 账号健康/违规/受众分析/视频统计/虚假流量检测。</p>
+      <div class="tags">
+        <span class="tag">Ads API</span>
+        <span class="tag">Creator API</span>
+        <span class="tag">Analytics</span>
+        <span class="tag">虚假流量</span>
+      </div>
+    </div>
+
+    <div class="card">
+      <div class="card-icon tikhub">10</div>
+      <h3>工具与自动化</h3>
+      <p>链接/ID 提取、短链接/二维码生成、加密解密 (XBogus/ABogus/msToken)、设备注册、Cookie 获取、SSO 登录、自动化交互(评论/点赞/关注)。</p>
+      <div class="tags">
+        <span class="tag">ID 提取</span>
+        <span class="tag">加密算法</span>
+        <span class="tag">设备注册</span>
+        <span class="tag">Interaction</span>
+      </div>
+    </div>
+  </div>
+</section>
+
+<!-- ━━━ ChanMama Unique ━━━ -->
+<div class="divider"></div>
+<section class="section" id="chanmama-unique">
+  <div class="section-header">
+    <div class="section-label chanmama">ChanMama Exclusive</div>
+    <h2 class="section-title">蝉妈妈独有能力</h2>
+    <p class="section-desc">以电商销售数据为核心壁垒,提供品牌、小店、达人、商品的全链路深度分析。</p>
+  </div>
+
+  <div class="callout warning">
+    <div class="callout-title">核心差异 — 销量与销售额数据</div>
+    <div class="callout-text">
+      TikHub 完全无法获取销量 (Sales Volume) 和销售额 (GMV) 数据。这是蝉妈妈最核心的数据壁垒,覆盖商品、品牌、小店、达人四个维度的每日/累计销售数据,并支持直播、视频、商品卡三大渠道拆分。
+    </div>
+  </div>
+
+  <div class="cards">
+    <div class="card">
+      <div class="card-icon chanmama">01</div>
+      <h3>品牌维度全链路分析</h3>
+      <p>品牌每日销售汇总、品牌关联达人/商品/小店/直播/视频记录、SPU 聚合销售、商品卡渠道销售。</p>
+      <div class="tags">
+        <span class="tag">品牌 GMV</span>
+        <span class="tag">关联达人</span>
+        <span class="tag">SPU 分析</span>
+        <span class="tag">渠道拆分</span>
+      </div>
+    </div>
+
+    <div class="card">
+      <div class="card-icon chanmama">02</div>
+      <h3>小店维度运营分析</h3>
+      <p>店铺每日销售汇总、关联达人记录、商品销售排行、带货直播与视频记录。</p>
+      <div class="tags">
+        <span class="tag">店铺 GMV</span>
+        <span class="tag">商品排行</span>
+        <span class="tag">达人矩阵</span>
+        <span class="tag">直播/视频</span>
+      </div>
+    </div>
+
+    <div class="card">
+      <div class="card-icon chanmama">03</div>
+      <h3>达人带货深度分析</h3>
+      <p>达人带货记录(商品+销量+佣金)、带货口碑分、带货水平评级、直播 GPM/UV 价值、流量结构、每日带货趋势。</p>
+      <div class="tags">
+        <span class="tag">带货口碑</span>
+        <span class="tag">GPM</span>
+        <span class="tag">UV 价值</span>
+        <span class="tag">佣金数据</span>
+      </div>
+    </div>
+
+    <div class="card">
+      <div class="card-icon chanmama">04</div>
+      <h3>商品全链路分析</h3>
+      <p>商品关联达人/直播/视频记录、商品卡独立销售数据、佣金比例、优惠券信息、每日销售趋势。</p>
+      <div class="tags">
+        <span class="tag">关联达人</span>
+        <span class="tag">直播讲解</span>
+        <span class="tag">视频带货</span>
+        <span class="tag">商品卡</span>
+      </div>
+    </div>
+
+    <div class="card">
+      <div class="card-icon chanmama">05</div>
+      <h3>受众画像分析</h3>
+      <p>性别、年龄、地区、城市等级分布,八大消费人群标签(资深中产、新锐白领、精致妈妈等)、消费偏好分析。</p>
+      <div class="tags">
+        <span class="tag">人群画像</span>
+        <span class="tag">城市等级</span>
+        <span class="tag">消费标签</span>
+        <span class="tag">年龄分布</span>
+      </div>
+    </div>
+
+    <div class="card">
+      <div class="card-icon chanmama">06</div>
+      <h3>三渠道销售拆分</h3>
+      <p>将所有销售数据拆分为直播渠道、视频渠道、商品卡渠道三大通路,分别统计销量/销售额/达人数/场次。</p>
+      <div class="tags">
+        <span class="tag">直播渠道</span>
+        <span class="tag">视频渠道</span>
+        <span class="tag">商品卡渠道</span>
+      </div>
+    </div>
+
+    <div class="card">
+      <div class="card-icon chanmama">07</div>
+      <h3>SPU 聚合分析</h3>
+      <p>将 SKU 级别商品聚合为 SPU 维度进行分析,获取 SPU 级别的销量/销售额趋势。</p>
+      <div class="tags">
+        <span class="tag">SKU→SPU</span>
+        <span class="tag">SPU 销售额</span>
+        <span class="tag">SPU 趋势</span>
+      </div>
+    </div>
+
+    <div class="card">
+      <div class="card-icon chanmama">08</div>
+      <h3>品类分类体系</h3>
+      <p>蝉妈妈自建品类 + 抖音官方品类双分类体系,支持品类层级映射关系和品类市场分析。</p>
+      <div class="tags">
+        <span class="tag">蝉妈妈品类</span>
+        <span class="tag">抖音品类</span>
+        <span class="tag">双分类映射</span>
+      </div>
+    </div>
+  </div>
+</section>
+
+<!-- ━━━ Overlap ━━━ -->
+<div class="divider"></div>
+<section class="section" id="overlap">
+  <div class="section-header">
+    <div class="section-label shared">Overlap Analysis</div>
+    <h2 class="section-title">能力重叠区域</h2>
+    <p class="section-desc">两者在用户信息、视频数据、商品信息、评价数据、直播间数据等方面存在重叠,但侧重点截然不同。</p>
+  </div>
+
+  <table class="comparison-table">
+    <thead>
+      <tr>
+        <th style="width:160px">数据维度</th>
+        <th>TikHub</th>
+        <th>蝉妈妈</th>
+        <th>差异说明</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td class="dim-label">用户/达人基础信息</td>
+        <td>
+          <span class="check yes">✓</span>
+          <div class="note">完整原始数据:昵称、头像、签名、粉丝数、关注数、获赞数、认证信息</div>
+        </td>
+        <td>
+          <span class="check yes">✓</span>
+          <div class="note">精简业务数据:昵称、抖音号、粉丝量级、MCN、认证、带货口碑</div>
+        </td>
+        <td class="note">TikHub 更全但偏原始;蝉妈妈增加了带货相关字段</td>
+      </tr>
+      <tr>
+        <td class="dim-label">视频基础数据</td>
+        <td>
+          <span class="check yes">✓</span>
+          <div class="note">完整元数据:标题、描述、播放链接、封面、互动数据、作者、音乐、话题标签</div>
+        </td>
+        <td>
+          <span class="check yes">✓</span>
+          <div class="note">简要信息 + 销售转化:视频标题、时长、互动数据、销量、销售额</div>
+        </td>
+        <td class="note">TikHub 有完整视频元数据;蝉妈妈有销售转化数据</td>
+      </tr>
+      <tr>
+        <td class="dim-label">商品基础信息</td>
+        <td>
+          <span class="check yes">✓</span>
+          <div class="note">商品详情、SKU 列表、价格、评价列表原文</div>
+        </td>
+        <td>
+          <span class="check yes">✓</span>
+          <div class="note">商品标题/ID/分类/价格/佣金/好评率 + 销量销售额</div>
+        </td>
+        <td class="note">TikHub 有 SKU 级别详情;蝉妈妈有佣金和销售数据</td>
+      </tr>
+      <tr>
+        <td class="dim-label">商品评价</td>
+        <td>
+          <span class="check yes">✓</span>
+          <div class="note">评价列表原文、逐条评论文本</div>
+        </td>
+        <td>
+          <span class="check yes">✓</span>
+          <div class="note">好评率数值(汇总指标)</div>
+        </td>
+        <td class="note">TikHub 有评论原文;蝉妈妈只有汇总评分</td>
+      </tr>
+      <tr>
+        <td class="dim-label">直播间数据</td>
+        <td>
+          <span class="check yes">✓</span>
+          <div class="note">直播流、弹幕、商品挂车、礼物、排行、在线检测</div>
+        </td>
+        <td>
+          <span class="check yes">✓</span>
+          <div class="note">直播标题/时间/观看人次/销量销售额/GPM/UV 价值</div>
+        </td>
+        <td class="note">TikHub 偏实时互动;蝉妈妈偏销售效率分析</td>
+      </tr>
+      <tr>
+        <td class="dim-label">话题/标签</td>
+        <td>
+          <span class="check yes">✓</span>
+          <div class="note">话题详情、作品列表、搜索</div>
+        </td>
+        <td>
+          <span class="check no">—</span>
+          <div class="note">无独立话题接口</div>
+        </td>
+        <td class="note">TikHub 独有</td>
+      </tr>
+      <tr>
+        <td class="dim-label">音乐数据</td>
+        <td>
+          <span class="check yes">✓</span>
+          <div class="note">音乐详情、视频列表、搜索、排行榜</div>
+        </td>
+        <td>
+          <span class="check no">—</span>
+        </td>
+        <td class="note">TikHub 独有</td>
+      </tr>
+    </tbody>
+  </table>
+</section>
+
+<!-- ━━━ Scenarios ━━━ -->
+<div class="divider"></div>
+<section class="section" id="scenarios">
+  <div class="section-header">
+    <div class="section-label shared">Use Cases</div>
+    <h2 class="section-title">适用场景</h2>
+    <p class="section-desc">两套 API 的能力互补而非替代,以下是各自最佳适用场景。</p>
+  </div>
+
+  <div class="scenarios">
+    <div class="scenario-col">
+      <div class="scenario-col-header">
+        <div class="indicator"></div>
+        适合 TikHub 的场景
+      </div>
+      <ul class="scenario-list">
+        <li><div class="bullet"></div>内容采集 — 批量获取视频、评论、用户信息等原始数据</li>
+        <li><div class="bullet"></div>多平台覆盖 — TikTok 国际版、Instagram、小红书等</li>
+        <li><div class="bullet"></div>舆情监控 — 评论采集与分析、弹幕实时监控</li>
+        <li><div class="bullet"></div>关键词搜索 — 多维度深度搜索(视频/用户/话题/图片等)</li>
+        <li><div class="bullet"></div>广告分析 — TikTok Ads 广告投放数据分析</li>
+        <li><div class="bullet"></div>自动化操作 — 自动评论、点赞、关注等</li>
+        <li><div class="bullet"></div>技术集成 — 获取原始 API 数据构建自己的分析系统</li>
+      </ul>
+    </div>
+
+    <div class="scenario-col">
+      <div class="scenario-col-header">
+        <div class="indicator"></div>
+        适合蝉妈妈的场景
+      </div>
+      <ul class="scenario-list">
+        <li><div class="bullet"></div>销售数据分析 — 商品/品牌/小店/达人的销量和 GMV</li>
+        <li><div class="bullet"></div>品牌竞品分析 — 品牌维度的全链路销售分析</li>
+        <li><div class="bullet"></div>店铺运营分析 — 小店销售、关联达人、商品表现</li>
+        <li><div class="bullet"></div>达人筛选 — 通过带货数据筛选合适的达人合作</li>
+        <li><div class="bullet"></div>趋势追踪 — 每日销售趋势、渠道拆分</li>
+        <li><div class="bullet"></div>受众画像 — 目标人群分析与消费标签</li>
+        <li><div class="bullet"></div>品类研究 — 品类层级体系和市场分析</li>
+      </ul>
+    </div>
+  </div>
+
+  <div class="complement-grid">
+    <div class="complement-row header">
+      <div class="complement-cell">业务需求</div>
+      <div class="complement-cell">TikHub 提供</div>
+      <div class="complement-cell">蝉妈妈 提供</div>
+    </div>
+    <div class="complement-row">
+      <div class="complement-cell label">竞品分析</div>
+      <div class="complement-cell">竞品视频内容、评论舆情</div>
+      <div class="complement-cell">竞品销量、市场份额</div>
+    </div>
+    <div class="complement-row">
+      <div class="complement-cell label">达人合作</div>
+      <div class="complement-cell">粉丝画像、内容风格</div>
+      <div class="complement-cell">带货数据、佣金、ROI</div>
+    </div>
+    <div class="complement-row">
+      <div class="complement-cell label">商品调研</div>
+      <div class="complement-cell">评价原文、SKU 详情</div>
+      <div class="complement-cell">销量趋势、渠道表现</div>
+    </div>
+    <div class="complement-row">
+      <div class="complement-cell label">市场洞察</div>
+      <div class="complement-cell">热搜趋势、话题热度</div>
+      <div class="complement-cell">品牌/品类销售数据</div>
+    </div>
+    <div class="complement-row">
+      <div class="complement-cell label">VOC 分析</div>
+      <div class="complement-cell">评论/弹幕原始文本</div>
+      <div class="complement-cell">受众画像、消费人群</div>
+    </div>
+  </div>
+</section>
+
+<!-- ━━━ Stats ━━━ -->
+<div class="divider"></div>
+<section class="section" id="stats">
+  <div class="section-header">
+    <div class="section-label shared">Statistics</div>
+    <h2 class="section-title">接口数量统计</h2>
+    <p class="section-desc">TikHub 按 API endpoint 计数;蝉妈妈按数据表类型计数。两者统计口径不同。</p>
+  </div>
+
+  <div class="stats-section">
+    <div class="stat-block">
+      <div class="stat-block-title">TikHub 各模块接口数</div>
+      <div class="stat-bar-group">
+        <div class="stat-bar-item">
+          <div class="stat-bar-label">TikTok App V3</div>
+          <div class="stat-bar-track"><div class="stat-bar-fill tikhub" data-width="93%"></div></div>
+          <div class="stat-bar-value">70+</div>
+        </div>
+        <div class="stat-bar-item">
+          <div class="stat-bar-label">抖音 Web</div>
+          <div class="stat-bar-track"><div class="stat-bar-fill tikhub" data-width="80%"></div></div>
+          <div class="stat-bar-value">60+</div>
+        </div>
+        <div class="stat-bar-item">
+          <div class="stat-bar-label">TikTok Web</div>
+          <div class="stat-bar-track"><div class="stat-bar-fill tikhub" data-width="67%"></div></div>
+          <div class="stat-bar-value">50+</div>
+        </div>
+        <div class="stat-bar-item">
+          <div class="stat-bar-label">抖音 App V3</div>
+          <div class="stat-bar-track"><div class="stat-bar-fill tikhub" data-width="53%"></div></div>
+          <div class="stat-bar-value">40+</div>
+        </div>
+        <div class="stat-bar-item">
+          <div class="stat-bar-label">TikTok Ads</div>
+          <div class="stat-bar-track"><div class="stat-bar-fill tikhub" data-width="40%"></div></div>
+          <div class="stat-bar-value">30+</div>
+        </div>
+        <div class="stat-bar-item">
+          <div class="stat-bar-label">抖音搜索</div>
+          <div class="stat-bar-track"><div class="stat-bar-fill tikhub" data-width="24%"></div></div>
+          <div class="stat-bar-value">18</div>
+        </div>
+        <div class="stat-bar-item">
+          <div class="stat-bar-label">TikTok Shop</div>
+          <div class="stat-bar-track"><div class="stat-bar-fill tikhub" data-width="20%"></div></div>
+          <div class="stat-bar-value">15</div>
+        </div>
+        <div class="stat-bar-item">
+          <div class="stat-bar-label">Creator API</div>
+          <div class="stat-bar-track"><div class="stat-bar-fill tikhub" data-width="19%"></div></div>
+          <div class="stat-bar-value">14</div>
+        </div>
+      </div>
+    </div>
+
+    <div class="stat-block">
+      <div class="stat-block-title">蝉妈妈各模块数据表</div>
+      <div class="stat-bar-group">
+        <div class="stat-bar-item">
+          <div class="stat-bar-label">品牌数据</div>
+          <div class="stat-bar-track"><div class="stat-bar-fill chanmama" data-width="100%"></div></div>
+          <div class="stat-bar-value">8</div>
+        </div>
+        <div class="stat-bar-item">
+          <div class="stat-bar-label">商品数据</div>
+          <div class="stat-bar-track"><div class="stat-bar-fill chanmama" data-width="75%"></div></div>
+          <div class="stat-bar-value">6</div>
+        </div>
+        <div class="stat-bar-item">
+          <div class="stat-bar-label">达人数据</div>
+          <div class="stat-bar-track"><div class="stat-bar-fill chanmama" data-width="63%"></div></div>
+          <div class="stat-bar-value">5</div>
+        </div>
+        <div class="stat-bar-item">
+          <div class="stat-bar-label">小店数据</div>
+          <div class="stat-bar-track"><div class="stat-bar-fill chanmama" data-width="63%"></div></div>
+          <div class="stat-bar-value">5</div>
+        </div>
+      </div>
+
+      <div class="callout info" style="margin-top: 2rem; padding: 1.2rem 1.5rem;">
+        <div class="callout-text">
+          蝉妈妈接口数少但每张数据表字段极其丰富(单表 30-80 个字段),且均为深度加工后的商业分析数据。TikHub 接口数量多但含大量工具类/辅助类接口。
+        </div>
+      </div>
+    </div>
+  </div>
+</section>
+
+<!-- ━━━ Footer ━━━ -->
+<footer class="footer">
+  <p>TikHub vs 蝉妈妈 API 数据能力对比分析</p>
+  <p style="margin-top: 4px;">基于 TikHub 官方文档 (docs.tikhub.io) 与蝉妈妈本地接口文档生成</p>
+</footer>
+
+<script>
+// ─── Intersection Observer for sections ───
+const sections = document.querySelectorAll('.section');
+const observer = new IntersectionObserver((entries) => {
+  entries.forEach(entry => {
+    if (entry.isIntersecting) {
+      entry.target.classList.add('visible');
+      // Animate stat bars
+      entry.target.querySelectorAll('.stat-bar-fill').forEach(bar => {
+        bar.style.width = bar.dataset.width;
+      });
+    }
+  });
+}, { threshold: 0.1 });
+
+sections.forEach(s => observer.observe(s));
+
+// ─── Sticky nav active state ───
+const nav = document.getElementById('nav');
+const navItems = document.querySelectorAll('.nav-item');
+
+window.addEventListener('scroll', () => {
+  // Add shadow when scrolled
+  nav.classList.toggle('scrolled', window.scrollY > 100);
+
+  // Update active nav item
+  let current = '';
+  sections.forEach(s => {
+    const top = s.offsetTop - 120;
+    if (window.scrollY >= top) current = s.id;
+  });
+
+  navItems.forEach(item => {
+    item.classList.toggle('active', item.dataset.target === current);
+  });
+});
+
+// ─── Nav click scroll ───
+navItems.forEach(item => {
+  item.addEventListener('click', () => {
+    const target = document.getElementById(item.dataset.target);
+    if (target) {
+      window.scrollTo({ top: target.offsetTop - 60, behavior: 'smooth' });
+    }
+  });
+});
+</script>
+</body>
+</html>

+ 244 - 0
docs/禅妈妈接口文档/品牌数据.md

@@ -0,0 +1,244 @@
+# 蝉妈妈/蝉魔方 定制数据服务 - 品牌数据(完整版)
+> 最近修改: 2025年12月11日
+
+---
+
+## 一、品牌每日销售汇总
+梳理品牌的基础信息,统计品牌每日的销售数据,用于了解品牌周期内的销售情况和趋势
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 品牌名称 | 文本 | Redmi/红米 | 品牌详情页-基础分析 | https://www.chanmama.com/brandRank/0884799849205.html |
+| 品牌中文名 | 文本 | 红米 |  |  |
+| 品牌英文名 | 文本 | Redmi |  |  |
+| 品牌ID | 数值 | 0884799849205 |  |  |
+| 品牌logo | 链接 | https://cdn-images.chanmama.com/douyin/brand/b70028145b04918ef43ccb7735fc894d.jpeg?source=https%3A%2F%2Fy.zdmimg.com%2F2F201911%2F08%2F5dc4c802d9a878528.jpg_d200.jpg |  |  |
+| 日期 | 日期 | 2024-07-17 |  |  |
+| 总销量 | 数值 | 1558946 |  |  |
+| 直播销量 | 数值 | 1216317 |  |  |
+| 视频销量 | 数值 | 21000 |  |  |
+| 商品卡销量 | 数值 | 321629 |  |  |
+| 总销售额(单位: ¥) | 数值 | 221928206.77 |  |  |
+| 直播销售额(单位: ¥) | 数值 | 178713418.08 |  |  |
+| 视频销售额(单位: ¥) | 数值 | 2163418.08 |  |  |
+| 商品卡销售额(单位: ¥) | 数值 | 40993418.08 |  |  |
+| 商品数 | 数值 | 17160 |  |  |
+| 关联达人数 | 数值 | 2391 |  |  |
+| 关联直播场次 | 数值 | 2311 |  |  |
+| 关联视频数 | 数值 | 49 |  |  |
+| 关联小店数 | 数值 | 123 |  |  |
+
+---
+
+## 二、品牌关联达人记录
+统计周期内品牌下所有有带货行为(直播+视频)的达人记录,用于分析当前品牌下带货达人的分布情况及带货效果
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 品牌名称 | 文本 | Redmi/红米 | 品牌详情页-带货达人 | https://www.chanmama.com/brandRank/0884799849205.html?activeTab=author |
+| 品牌中文名 | 文本 | 红米 |  |  |
+| 品牌英文名 | 文本 | Redmi |  |  |
+| 品牌ID | 数值 | 0884799849205 |  |  |
+| 品牌logo | 链接 | https://cdn-images.chanmama.com/douyin/brand/b70028145b04918ef43ccb7735fc894d.jpeg?source=https%3A%2F%2Fy.zdmimg.com%2F2F201911%2F08%2F5dc4c802d9a878528.jpg_d200.jpg |  |  |
+| 达人昵称 | 文本 | 与辉同行 |  |  |
+| 达人抖音号 | 文本 | 56697889278 |  |  |
+| 达人ID(已加密) | 数值 | b5kJkxaneyEZM8IUW4rgSci zja5Y1Yjo |  |  |
+| 粉丝数 | 数值 | 15337 |  |  |
+| 带货渠道 | type | 达人号/商家自营号/品牌自营号 |  |  |
+| 带货口碑分 | 数值 | 4.9 |  |  |
+| 推广商品数 | 数值 | 202 |  |  |
+| 关联直播场次 | 数值 | 23 |  |  |
+| 关联视频数 | 数值 | 49 |  |  |
+| 销量 | 数值 | 23606 |  |  |
+| 直播销量 | 数值 | 8269 |  |  |
+| 视频销量 | 数值 | 15337 |  |  |
+| 销售额(单位: ¥) | 数值 | 113418.08 |  |  |
+| 直播销售额(单位: ¥) | 数值 | 13418.08 |  |  |
+| 视频销售额(单位: ¥) | 数值 | 23418.08 |  |  |
+
+---
+
+## 三、品牌商品销售记录
+统计周期内品牌所有商品的销售情况,用于分析品牌的销售策略
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 品牌名称 | 文本 | Redmi/红米 | 品牌详情页-商品分析 | https://www.chanmama.com/brandRank/0884799849205.html?activeTab=promotion |
+| 品牌中文名 | 文本 | 红米 |  |  |
+| 品牌英文名 | 文本 | Redmi |  |  |
+| 品牌ID | 数值 | 0884799849205 |  |  |
+| 品牌logo | 链接 | https://cdn-images.chanmama.com/douyin/brand/b70028145b04918ef43ccb7735fc894d.jpeg?source=https%3A%2F%2Fy.zdmimg.com%2F2F201911%2F08%2F5dc4c802d9a878528.jpg_d200.jpg |  |  |
+| 商品标题 | 文本 | 【12期免息】HUAWEI Pura70 Pro 超聚光微距长焦华为手机官方旗舰店 |  |  |
+| 蝉妈妈商品链接 | 链接 | https://www.chanmama.com/promotionDetail/2U1yaAKteamgebI1FzaVQLPBF3WGBfDg |  |  |
+| 抖音商品链接 | 链接 | https://haohuo.jinritemai.com/ecommerce/trade/detail/index.html?id=3678249291455004723&origin_type=604 |  |  |
+| 商品图片 | 链接 | https://cdn-images.chanmama.com/douyin/product/fbf43b99d5139dc621ea13a273e24aa5.jpeg?source=https%3A%2F%2Fp26-item.ecombdimg.com%2Fimg%2Fecom-shop-material%2FtghyNdeS_m_5decb4eb5826573612de3f265e9e207d_sx_52903_www800-800~tplv-5mmsx3fupr-resize%3A1080%3A1080.jpg |  |  |
+| 蝉妈妈商品分类(最多五级) | 数组 | 一级分类: 3C数码<br>二级分类: 手机<br>三级分类: 智能机 |  |  |
+| 抖音商品分类(最多五级) | 数组 | 一级分类: 3C数码家电<br>二级分类: 手机<br>三级分类: 智能机 |  |  |
+| 商品来源-商品小店 | 文本 | 华为官方旗舰店 |  |  |
+| 商品价格(取周期内平均成交价,单位: ¥) | 数值 | 6499 |  |  |
+| 总销量 | 数值 | 42924 |  |  |
+| 占品牌销量比例 | 百分比 | 2.63% |  |  |
+| 直播销量 | 数值 | 8269 |  |  |
+| 视频销量 | 数值 | 15337 |  |  |
+| 商品卡销量 | 数值 | 1564 |  |  |
+| 总销售额(单位: ¥) | 数值 | 113418.08 |  |  |
+| 占品牌销售额比例 | 百分比 | 2.63% |  |  |
+| 直播销售额(单位: ¥) | 数值 | 13418.08 |  |  |
+| 视频销售额(单位: ¥) | 数值 | 23418.08 |  |  |
+| 商品卡销售额(单位: ¥) | 数值 | 33418.08 |  |  |
+| 关联达人数 | 数值 | 59 |  |  |
+| 关联直播场次 | 数值 | 23 |  |  |
+| 关联视频数 | 数值 | 49 |  |  |
+
+---
+
+## 四、品牌spu销售记录
+将品牌下所有商品按照类目聚合成不同的spu,统计周期内品牌所有spu的销售情况,用于分析品牌的销售策略
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 品牌名称 | 文本 | Redmi/红米 | 品牌详情页-商品分析 | https://www.chanmama.com/brandRank/0884799849205.html?activeTab=promotion |
+| 品牌中文名 | 文本 | 红米 |  |  |
+| 品牌英文名 | 文本 | Redmi |  |  |
+| 品牌ID | 数值 | 0884799849205 |  |  |
+| 品牌logo | 链接 | https://cdn-images.chanmama.com/douyin/brand/b70028145b04918ef43ccb7735fc894d.jpeg?source=https%3A%2F%2Fy.zdmimg.com%2F2F201911%2F08%2F5dc4c802d9a878528.jpg_d200.jpg |  |  |
+| spu标题 | 文本 | 新品手机 Redmi K70 红米手机 小米官方旗舰店 |  |  |
+| 蝉妈妈spu链接 | 链接 | https://www.chanmama.com/SPUDetail/ofgjMzJuUxQOjOVgHirbO_qUueCabjYX |  |  |
+| 商品图片 | 链接 | https://cdn-images.chanmama.com/douyin/spu/1531c7d75f63b054e6b7d9fec2ab7450.jpeg?source=https%3A%2F%2Fp3-item.ecombdimg.com%2Fimg%2Fecom-shop-material%2FVQWcPks_m_30c7f9dcd0d8efa517dda193d807ee15_sx_185295_www800-800~tplv-5mmsx3fupr- |  |  |
+| 蝉妈妈商品分类(最多五级) | 数组 | 一级分类: 3C数码<br>二级分类: 手机<br>三级分类: 智能机 |  |  |
+| 最新到手价 | 数值区间 | 1810-10999 |  |  |
+| 总销量 | 数值 | 23606 |  |  |
+| 直播销量 | 数值 | 8269 |  |  |
+| 视频销量 | 数值 | 15337 |  |  |
+| 商品卡销量 | 数值 | 1564 |  |  |
+| 总销售额(单位: ¥) | 数值 | 113418.08 |  |  |
+| 直播销售额(单位: ¥) | 数值 | 13418.08 |  |  |
+| 视频销售额(单位: ¥) | 数值 | 23418.08 |  |  |
+| 商品卡销售额(单位: ¥) | 数值 | 33418.08 |  |  |
+| 关联小店数 | 数值 | 59 |  |  |
+| 关联达人数 | 数值 | 78 |  |  |
+| 关联直播场次 | 数值 | 23 |  |  |
+| 关联视频数 | 数值 | 49 |  |  |
+
+---
+
+## 五、品牌关联小店记录
+统计周期内品牌商品所属小店的销售情况,用于分析品牌的铺货和渠道分销策略
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 品牌名称 | 文本 | Redmi/红米 | 品牌详情页-小店分析 | https://www.chanmama.com/brandRank/0884799849205.html?activeTab=tikshop |
+| 品牌中文名 | 文本 | 红米 |  |  |
+| 品牌英文名 | 文本 | Redmi |  |  |
+| 品牌ID | 数值 | 0884799849205 |  |  |
+| 品牌logo | 链接 | https://cdn-images.chanmama.com/douyin/brand/b70028145b04918ef43ccb7735fc894d.jpeg?source=https%3A%2F%2Fy.zdmimg.com%2F2F201911%2F08%2F5dc4c802d9a878528.jpg_d200.jpg |  |  |
+| 小店名称 | 文本 | 小米官方旗舰店 |  |  |
+| 小店ID(已加密) | 文本 | VQWcPks |  |  |
+| 小店链接 | 链接 | https://www.chanmama.com/tikShopDetail/VQWcPks |  |  |
+| 小店logo | 链接 | https://cdn-images.chanmama.com/cmmimages/shop/4a36d4d39ab15cb0478f084f4df0caa.jpeg?source=https%3A%2F%2Fp6-ecom-qualification-sign.ecombdimg.com%2Ftos-cn-i-tsivvw11p2g%2F932d1666e684400086902a7d32bb3687~tplv-6vegkygbk-s%3A750.image%63Flk3s%3Dc9156bde%26x-expires%3D1753290632%26x-signature%3DoD9DPVIZOSUHt4q6XF3NhyenwEs%253D |  |  |
+| 小店类别 | type | 旗舰店 |  |  |
+| 小店体验分 | 数值 | 4.90 |  |  |
+| 主要带货渠道 | type | 品牌自营号/商家自营号/达人号 |  |  |
+| 客单价 | 数值 | 104.59 |  |  |
+| 品牌商品数 | 数值 | 339 |  |  |
+| 品牌商品占比 | 百分比 | 100.00% |  |  |
+| 总销量 | 数值 | 42924 |  |  |
+| 占品牌销量比例 | 百分比 | 2.63% |  |  |
+| 直播销量 | 数值 | 8269 |  |  |
+| 视频销量 | 数值 | 15337 |  |  |
+| 商品卡销量 | 数值 | 1564 |  |  |
+| 总销售额(单位: ¥) | 数值 | 113418.08 |  |  |
+| 占品牌销售额比例 | 百分比 | 2.63% |  |  |
+| 直播销售额(单位: ¥) | 数值 | 13418.08 |  |  |
+| 视频销售额(单位: ¥) | 数值 | 23418.08 |  |  |
+| 商品卡销售额(单位: ¥) | 数值 | 33418.08 |  |  |
+| 关联达人数 | 数值 | 59 |  |  |
+| 关联直播场次 | 数值 | 23 |  |  |
+| 关联视频数 | 数值 | 49 |  |  |
+
+---
+
+## 六、品牌带货直播记录
+统计品牌周期内所有关联的带货直播场次,用于分析品牌商品的直播销售趋势及效果
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 品牌名称 | 文本 | Redmi/红米 | 品牌详情页-带货直播 | https://www.chanmama.com/brandRank/0884799849205.html?activeTab=live |
+| 品牌中文名 | 文本 | 红米 |  |  |
+| 品牌英文名 | 文本 | Redmi |  |  |
+| 品牌ID | 数值 | 0884799849205 |  |  |
+| 品牌logo | 链接 | https://cdn-images.chanmama.com/douyin/brand/b70028145b04918ef43ccb7735fc894d.jpeg?source=https%3A%2F%2Fy.zdmimg.com%2F2F201911%2F08%2F5dc4c802d9a878528.jpg_d200.jpg |  |  |
+| 直播间名称 | 文本 | 新人首播(有)新人很多(效) |  |  |
+| 开播时间 | 时间 | 2024-07-06 07:30 |  |  |
+| 下播时间 | 时间 | 2024-07-06 17:30 |  |  |
+| 直播时长(单位: 秒) | 数值 | 36000 |  |  |
+| 达人昵称 | 文本 | 与辉同行 |  |  |
+| 达人抖音号 | 文本 | 56697889278 |  |  |
+| 达人ID(已加密) | 数值 | b5kJkxaneyEZM8IUW4rgSci zja5Y1Yjo |  |  |
+| 粉丝数 | 数值 | 15337 |  |  |
+| 达人带货类型 | type | 品牌自营号/商家自营号/达人号 |  |  |
+| 观看人次 | 数值 | 2720423 |  |  |
+| 总商品数 | 数值 | 250 |  |  |
+| 品牌商品数 | 数值 | 200 |  |  |
+| 品牌销量 | 数值 | 6499 |  |  |
+| 品牌销售额 | 数值 | 24696.2 |  |  |
+
+---
+
+## 七、品牌带货视频记录
+统计周期内品牌所有商品的挂车视频,用于分析品牌的视频销售趋势及效果
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 品牌名称 | 文本 | Redmi/红米 | 品牌详情页-带货视频 | https://www.chanmama.com/brandRank/0235191305511.html?activeTab=aweme |
+| 品牌中文名 | 文本 | 红米 |  |  |
+| 品牌英文名 | 文本 | Redmi |  |  |
+| 品牌ID | 数值 | 0884799849205 |  |  |
+| 品牌logo | 链接 | https://cdn-images.chanmama.com/douyin/brand/b70028145b04918ef43ccb7735fc894d.jpeg?source=https%3A%2F%2Fy.zdmimg.com%2F2F201911%2F08%2F5dc4c802d9a878528.jpg_d200.jpg |  |  |
+| 视频标题 | 文本 | 父本与母本的优点相结合,生长出优秀的果实(孩子)。#董宇辉 #与辉同行 #董宇辉拥有暖评最多的评论区 |  |  |
+| 蝉妈妈视频链接 | 链接 | https://www.chanmama.com/awemeDetail/k9wJ3e8O6KJDiaGYZIuB6QZMD7zmnXA4 |  |  |
+| 抖音视频链接 | 链接 | https://www.douyin.com/video/7392138757266230539 |  |  |
+| 蝉妈妈商品链接 | 链接 | https://www.chanmama.com/promotionDetail/2U1yaAKteamgebI1FzaVQLPBF3WGBfDg |  |  |
+| 抖音商品链接 | 链接 | https://haohuo.jinritemai.com/ecommerce/trade/detail/index.html?id=3678249291455004723&origin_type=604 |  |  |
+| 商品图片 | 链接 | https://cdn-images.chanmama.com/douyin/product/fbf43b99d5139dc621ea13a273e24aa5.jpeg?source=https%3A%2F%2Fp26-item.ecombdimg.com%2Fimg%2Fecom-shop-material%2FtghyNdeS_m_5decb4eb5826573612de3f265e9e207d_sx_52903_www800-800~tplv-5mmsx3fupr-resize%3A1080%3A1080.jpg |  |  |
+| 蝉妈妈商品分类(最多五级) | 数组 | 一级分类: 3C数码<br>二级分类: 手机<br>三级分类: 智能机 |  |  |
+| 抖音商品分类(最多五级) | 数组 | 一级分类: 3C数码家电<br>二级分类: 手机<br>三级分类: 智能机 |  |  |
+| 达人昵称 | 文本 | 与辉同行 |  |  |
+| 达人抖音号 | 文本 | 56697889278 |  |  |
+| 达人ID(已加密) | 数值 | b5kJkxaneyEZM8IUW4rgSci zja5Y1Yjo |  |  |
+| 粉丝数 | 数值 | 15337 |  |  |
+| 视频发布时间 | 时间 | 2024-07-18 17:11:25 |  |  |
+| 销量 | 数值 | 6499 |  |  |
+| 销售额 | 数值 | 24696.2 |  |  |
+| 点赞数 | 数值 | 104292 |  |  |
+| 评论数 | 数值 | 5145 |  |  |
+| 转发数 | 数值 | 1827 |  |  |
+| 收藏数 | 数值 | 2055 |  |  |
+
+---
+
+## 八、品牌商品卡销售记录
+统计品牌在商品卡层面的每日销售数据,用于分析品牌商品卡的销售趋势及效果
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 品牌中文名 | 文本 | 红米 | 品牌详情页-商品卡分析 | https://www.chanmama.com/brandRank/0884799849205.html?activeTab=card |
+| 品牌英文名 | 文本 | Redmi |  |  |
+| 品牌ID | 数值 | 0884799849205 |  |  |
+| 品牌logo | 链接 | https://cdn-images.chanmama.com/douyin/brand/b70028145b04918ef43ccb7735fc894d.jpeg?source=https%3A%2F%2Fy.zdmimg.com%2F2F201911%2F08%2F5dc4c802d9a878528.jpg_d200.jpg |  |  |
+| 商品标题 | 文本 | 【12期免息】HUAWEI Pura70 Pro 超聚光微距长焦华为手机官方旗舰店 |  |  |
+| 蝉妈妈商品链接 | 链接 | https://www.chanmama.com/promotionDetail/2U1yaAKteamgebI1FzaVQLPBF3WGBfDg |  |  |
+| 抖音商品链接 | 链接 | https://haohuo.jinritemai.com/ecommerce/trade/detail/index.html?id=3678249291455004723&origin_type=604 |  |  |
+| 商品图片 | 链接 | https://cdn-images.chanmama.com/douyin/product/fbf43b99d5139dc621ea13a273e24aa5.jpeg?source=https%3A%2F%2Fp26-item.ecombdimg.com%2Fimg%2Fecom-shop-material%2FtghyNdeS_m_5decb4eb5826573612de3f265e9e207d_sx_52903_www800-800~tplv-5mmsx3fupr-resize%3A1080%3A1080.jpg |  |  |
+| 蝉妈妈商品分类(最多五级) | 数组 | 一级分类: 3C数码<br>二级分类: 手机<br>三级分类: 智能机 |  |  |
+| 抖音商品分类(最多五级) | 数组 | 一级分类: 3C数码家电<br>二级分类: 手机<br>三级分类: 智能机 |  |  |
+| 商品来源-商品小店 | 文本 | 华为官方旗舰店 |  |  |
+| 商品价格(取周期内平均成交价,单位: ¥) | 数值 | 6499 |  |  |
+| 商品卡销量 | 数值 | 1564 |  |  |
+| 销量占比 | 百分比 | 23.15% |  |  |
+| 商品卡销售额(单位: ¥) | 数值 | 313418.08 |  |  |
+| 销售额占比 | 百分比 | 23.15% |  |  |
+
+---
+
+需要我把这份**品牌数据MD**,和之前的**达人数据、商品数据MD**,合并成一份完整的「蝉妈妈全链路数据字段规范文档」,方便你直接用于数仓建设或BI报表吗?

+ 206 - 0
docs/禅妈妈接口文档/品类数据.md

@@ -0,0 +1,206 @@
+# 蝉妈妈/蝉魔方 定制数据服务 - 品类数据(完整版)
+> 最近修改: 2025年6月4日
+
+---
+
+## 一、品类基础信息
+用于快速掌握品类整体规模、增长态势和核心运营指标,为品类策略制定提供依据
+
+| 指标 | 类型 | 举例 |
+| :--- | :--- | :--- |
+| 品类名称 | 文本 | 茶饮料 |
+| 品类销量 | 数值 | 10W |
+| 品类销售额 | 数值 | 100W |
+| 品类销售额环比 | 数值 | 20% |
+| 品类销售额同比 | 数值 | 30% |
+| 关联商品数 | 数值 | 50 |
+| 关联小店数 | 数值 | 30 |
+| 关联品牌数 | 数值 | 20 |
+| 关联抖音号数 | 数值 | 100 |
+| 关联直播数 | 数值 | 200 |
+| 关联视频数 | 数值 | 300 |
+| 品类平均成交价 | 数值 | 10 |
+
+---
+
+## 二、品类每日销售数据
+按日维度拆解品类全渠道销售表现,精细化分析不同渠道、不同主体的贡献结构
+
+| 指标 | 类型 | 举例 |
+| :--- | :--- | :--- |
+| 品类名称 | 文本 | 茶饮料 |
+| 品类销量 | 数值 | 40W |
+| 品牌自营号销量 | 数值 | 10W |
+| 商家自营号销量 | 数值 | 10W |
+| 达人号销量 | 数值 | 10W |
+| 直播销量 | 数值 | 20W |
+| 视频销量 | 数值 | 10W |
+| 商品卡销量 | 数值 | 10W |
+| 品类销售额 | 数值 | 400W |
+| 品牌自营号销售额 | 数值 | 100W |
+| 商家自营号销售额 | 数值 | 100W |
+| 达人号销售额 | 数值 | 100W |
+| 直播销售额 | 数值 | 200W |
+| 视频销售额 | 数值 | 100W |
+| 商品卡销售额 | 数值 | 100W |
+| 关联商品数 | 数值 | 50 |
+| 关联小店数 | 数值 | 30 |
+| 关联品牌数 | 数值 | 20 |
+| 关联抖音号数 | 数值 | 100 |
+| 关联直播数 | 数值 | 200 |
+| 关联视频数 | 数值 | 300 |
+| 品类平均成交价 | 数值 | 10 |
+
+---
+
+## 三、品类TOP品牌
+定位品类内头部品牌,分析其市场份额、增长表现和运营资源,用于竞品对标和机会挖掘
+
+| 指标 | 类型 | 举例 |
+| :--- | :--- | :--- |
+| 品类名称 | 文本 | 茶饮料 |
+| 品牌名称 | 文本 | 农夫山泉 |
+| 品牌市场份额 | 数值 | 10% |
+| 品牌品类销量 | 数值 | 10W |
+| 品牌品类销售额 | 数值 | 100W |
+| 品牌品类销售额环比 | 数值 | 20% |
+| 品牌品类销售额同比 | 数值 | 30% |
+| 品牌品类商品数 | 数值 | 50 |
+| 品牌品类抖音号数 | 数值 | 100 |
+| 品牌品类直播数 | 数值 | 200 |
+| 品牌品类视频数 | 数值 | 300 |
+| 品牌品类平均成交价 | 数值 | 10 |
+
+---
+
+## 四、品类TOP店铺
+筛选品类内核心店铺,分析其销售结构、渠道分布和增长能力,用于渠道合作和铺货策略制定
+
+| 指标 | 类型 | 举例 |
+| :--- | :--- | :--- |
+| 品类名称 | 文本 | 茶饮料 |
+| 小店名称 | 文本 | 农夫山泉官方旗舰店 |
+| 小店体验分 | 文本 | 4.9 |
+| 小店品类销量 | 数值 | 10W |
+| 小店品类销售额 | 数值 | 100W |
+| 小店销售额带货渠道分布 | 数值 | 品牌自营号80%/商家自营号10%/达人合作号10% |
+| 小店品类销售额环比 | 数值 | 20% |
+| 小店品类销售额同比 | 数值 | 30% |
+| 小店品类商品数 | 数值 | 50 |
+| 小店品类抖音号数 | 数值 | 100 |
+| 小店品类直播数 | 数值 | 200 |
+| 小店品类视频数 | 数值 | 300 |
+| 小店品类平均成交价 | 数值 | 10 |
+
+---
+
+## 五、品类TOP商品
+挖掘品类内爆品,分析其销售表现、价格体系和渠道占比,用于选品策略和爆品打造
+
+| 指标 | 类型 | 举例 |
+| :--- | :--- | :--- |
+| 品类名称 | 文本 | 茶饮料 |
+| 商品名称 | 文本 | 农夫山泉无糖茶饮料 |
+| 商品首次发现时间 | 时间戳 | 2024年5月1日 |
+| 商品所属品牌 | 文本 | 农夫山泉 |
+| 商品所属小店 | 文本 | 农夫山泉官方旗舰店 |
+| 商品销量 | 数值 | 10W |
+| 商品销售额 | 数值 | 100W |
+| 关联抖音号数 | 数值 | 50 |
+| 关联直播数 | 数值 | 100 |
+| 关联视频数 | 数值 | 100 |
+| 商品最新到手价 | 数值 | 10 |
+| 商品吊牌价 | 数值 | 10 |
+| 商品平均成交价 | 数值 | 9 |
+| 商品折扣 | 数值 | 9 |
+| 直播/视频/商品卡销售占比 | 数值 | 80%/10%/10% |
+| 品牌自营号/商家自营号/达人合作号销售占比 | 数值 | 80%/10%/10% |
+
+---
+
+## 六、品类TOP单品(SPU)
+按SPU维度聚合商品销售数据,从单品维度分析品类核心爆品的生命周期和增长潜力
+
+| 指标 | 类型 | 举例 |
+| :--- | :--- | :--- |
+| 品类名称 | 文本 | 茶饮料 |
+| 单品SPU名称 | 文本 | 农夫山泉无糖茶饮料 |
+| 单品首次发现时间 | 时间戳 | 2024年5月1日 |
+| 商品所属品牌 | 文本 | 农夫山泉 |
+| 价格区间 | 数值 | 10-50 |
+| 同品链接数 | 数值 | 5 |
+| 商品销量 | 数值 | 10W |
+| 商品销售额 | 数值 | 100W |
+| 商品销售额环比 | 数值 | +30% |
+| 商品销售额同比 | 数值 | +20% |
+| 关联抖音号数 | 数值 | 50 |
+| 关联直播数 | 数值 | 100 |
+| 关联视频数 | 数值 | 100 |
+| 关联小店数 | 数值 | 10 |
+| 直播/视频/商品卡销售占比 | 数值 | 80%/10%/10% |
+| 品牌自营号/商家自营号/达人合作号销售占比 | 数值 | 80%/10%/10% |
+
+---
+
+## 七、品类TOP抖音号列表
+定位品类内高影响力带货账号,分析其带货能力和粉丝画像,用于达人合作和内容投放
+
+| 指标 | 类型 | 举例 |
+| :--- | :--- | :--- |
+| 品类名称 | 文本 | 茶饮料 |
+| 抖音号名称 | 文本 | 农夫山泉官方旗舰店账号 |
+| 抖音号ID | 数值 | 1234567 |
+| 抖音号粉丝数 | 数值 | 100W |
+| 带货口碑 | 数值 | 4.9 |
+| 抖音号类型 | 数值 | 品牌自营号 |
+| 带货商品数 | 数值 | 40 |
+| 平均成交价 | 数值 | 25 |
+| 销量 | 数值 | 10W |
+| 销售额 | 数值 | 250W |
+| 直播销售额 | 数值 | 200W |
+| 视频销售额 | 数值 | 50W |
+
+---
+
+## 八、品类TOP直播列表
+分析品类内高转化直播场次,拆解直播运营数据,用于直播策略优化和场次复用
+
+| 指标 | 类型 | 举例 |
+| :--- | :--- | :--- |
+| 品类名称 | 文本 | 茶饮料 |
+| 直播场次 | 文本 | 畅饮专场 |
+| 直播时长 | 时间戳 | 2小时 |
+| 开播时间 | 时间戳 | 2024/8/2 15:15 |
+| 关联抖音号名称 | 文本 | 农夫山泉官方旗舰店 |
+| 关联抖音号ID | 数值 | 1234567 |
+| 关联抖音号粉丝数 | 数值 | 100W |
+| 观看人次 | 数值 | 15W |
+| 直播总商品数 | 数值 | 100 |
+| 品类商品数 | 数值 | 40 |
+| 品类品牌数 | 数值 | 10 |
+| 品类销量 | 数值 | 10W |
+| 品类销售额 | 数值 | 250W |
+
+---
+
+## 九、品类TOP视频列表
+挖掘品类内高传播、高转化短视频,分析内容表现和带货效果,用于内容创作和投放
+
+| 指标 | 类型 | 举例 |
+| :--- | :--- | :--- |
+| 品类名称 | 文本 | 茶饮料 |
+| 视频名称 | 文本 | 茶饮料自在畅饮 |
+| 关联抖音号名称 | 文本 | 农夫山泉官方旗舰店 |
+| 关联抖音号ID | 数值 | 1234567 |
+| 关联抖音号粉丝数 | 数值 | 100W |
+| 视频点赞数 | 数值 | 100 |
+| 视频评论数 | 数值 | 50 |
+| 视频转发数 | 数值 | 50 |
+| 关联商品 | 文本 | 农夫山泉茶饮料 |
+| 关联品牌 | 文本 | 农夫山泉 |
+| 销量 | 数值 | 10W |
+| 销售额 | 数值 | 250W |
+
+---
+
+需要我把这份**品类数据MD**,和之前的**达人、商品、品牌、小店数据MD**,合并成一份完整的「蝉妈妈全链路数据字段规范总文档」,方便你直接用于数仓建模、BI报表开发或数据中台建设吗?

+ 172 - 0
docs/禅妈妈接口文档/商品数据.md

@@ -0,0 +1,172 @@
+# 蝉妈妈/蝉魔方 定制数据服务 - 商品数据(完整版)
+> 最近修改: 2025年2月25日
+
+---
+
+## 一、商品基础信息
+梳理商品的基础信息和受众数据,用于初步了解商品信息及受众的画像分析
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 商品标题 | 文本 | 欧克里里无边框支架苹果15手机壳iphone13/14promax超薄12硬壳11 | 商品详情页-头部 | https://www.chanmama.com/promotionRank/7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1.html |
+| 商品ID(已加密) | 文本 | 7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1 |  |  |
+| 蝉妈妈商品链接 | 链接 | https://www.chanmama.com/promotionDetail/7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1 |  |  |
+| 抖音商品链接 | 链接 | https://haohuo.jinritemai.com/ecommerce/trade/detail/index.html?id=3691681266916262270&origin_type=604 |  |  |
+| 商品图片 | 链接 | https://cdn-images.chanmama.com/douyin/product/302f38055f1aa42459e7ab5f6b804d24.jpeg?source=https%3A%2F%2Fp9-aio.ecombdimg.com%2Fimg%2Fecom-shop-material%2FnfSIlcgi_m_b6176cd68db32dfaf34c92b514796394_sx_233088_www1179-1179~tplv-dy-shrink%3A750%3A750.jpg&x-oss-process=image/resize,w_400 |  |  |
+| 蝉妈妈商品分类(最多五级) | 数组 | 一级分类: 3C数码<br>二级分类: 数码配件<br>三级分类: 手机配件<br>四级分类: 手机保护套/壳 |  |  |
+| 抖音商品分类(最多五级) | 数组 | 一级分类: 3C数码家电<br>二级分类: 3C数码配件<br>三级分类: 手机配件<br>四级分类: 手机保护套/壳 |  |  |
+| 最新到手价(单位: ¥) | 数值 | 4.80 |  |  |
+| 近30天成交价(单位: ¥) | 数值 | 4.15 |  |  |
+| 公开佣金 | 百分比 | 30.00% |  |  |
+| 好评率 | 百分比 | 86% |  |  |
+| 商品来源-商品小店 | 文本 | 华为官方旗舰店 |  |  |
+| 小店ID(已加密) | 文本 | nfSIlcgi |  |  |
+| 蝉妈妈小店链接 | 链接 | https://www.chanmama.com/tikShopDetail/nfSIlcgi |  |  |
+| 商品品牌 | 文本 | 欧克里里 |  |  |
+| 品牌ID | 数值 | 0477780336167 |  |  |
+| 蝉妈妈品牌链接 | 链接 | https://www.chanmama.com/promotionBrandDetail/0477780336167 |  |  |
+| 发货地 | 文本 | 广东省 |  |  |
+| 优惠券 | 文本 | 满2减1 |  |  |
+| 服务保障 | 文本 | 7天无理由退货 |  |  |
+| 受众画像-性别 | 数组 | 男性47%,女性53% | 商品详情页-受众分析 | https://www.chanmama.com/promotionRank/7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1.html?activeTab=fans |
+| 受众画像-年龄 | 数组 | 18-23岁18.72%,24-30岁31.35% |  |  |
+| 受众画像-地区-省 | 数组 | 广东14.46%,山东7.68% |  |  |
+| 受众画像-地区-市 | 数组 | 深圳3.19%,广州2.69% |  |  |
+
+---
+
+## 二、商品每日销售汇总
+统计商品每日销售数据,用于分析商品的销售概况及趋势
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 商品标题 | 文本 | 欧克里里无边框支架苹果15手机壳iphone13/14promax超薄12硬壳11 | 商品详情页-基础分析 | https://www.chanmama.com/promotionRank/7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1.html |
+| 商品ID(已加密) | 文本 | 7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1 |  |  |
+| 蝉妈妈商品链接 | 链接 | https://www.chanmama.com/promotionDetail/7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1 |  |  |
+| 抖音商品链接 | 链接 | https://haohuo.jinritemai.com/ecommerce/trade/detail/index.html?id=3691681266916262270&origin_type=604 |  |  |
+| 商品图片 | 链接 | https://cdn-images.chanmama.com/douyin/product/302f38055f1aa42459e7ab5f6b804d24.jpeg?source=https%3A%2F%2Fp9-aio.ecombdimg.com%2Fimg%2Fecom-shop-material%2FnfSIlcgi_m_b6176cd68db32dfaf34c92b514796394_sx_233088_www1179-1179~tplv-dy-shrink%3A750%3A750.jpg&x-oss-process=image/resize,w_400 |  |  |
+| 蝉妈妈商品分类(最多五级) | 数组 | 一级分类: 3C数码<br>二级分类: 数码配件<br>三级分类: 手机配件<br>四级分类: 手机保护套/壳 |  |  |
+| 抖音商品分类(最多五级) | 数组 | 一级分类: 3C数码家电<br>二级分类: 3C数码配件<br>三级分类: 手机配件<br>四级分类: 手机保护套/壳 |  |  |
+| 最新到手价(单位: ¥) | 数值 | 4.80 |  |  |
+| 日期 | 日期 | 2024-07-17 |  |  |
+| 总销量 | 数值 | 23606 |  |  |
+| 直播销量 | 数值 | 8269 |  |  |
+| 视频销量 | 数值 | 15337 |  |  |
+| 商品卡销量 | 数值 | 1564 |  |  |
+| 总销售额(单位: ¥) | 数值 | 113418.08 |  |  |
+| 直播销售额(单位: ¥) | 数值 | 13418.08 |  |  |
+| 视频销售额(单位: ¥) | 数值 | 23418.08 |  |  |
+| 商品卡销售额(单位: ¥) | 数值 | 33418.08 |  |  |
+| 关联达人数 | 数值 | 59 |  |  |
+| 关联直播场次 | 数值 | 23 |  |  |
+| 关联视频数 | 数值 | 49 |  |  |
+
+---
+
+## 三、商品关联达人记录
+统计商品周期内所有有带货行为(直播+视频)的达人记录,用于分析当前商品带货达人的分布情况及带货效果
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 商品标题 | 文本 | 欧克里里无边框支架苹果15手机壳iphone13/14promax超薄12硬壳11 | 商品详情页-达人分析 | https://www.chanmama.com/promotionRank/7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1.html?activeTab=author |
+| 商品ID(已加密) | 文本 | 7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1 |  |  |
+| 蝉妈妈商品链接 | 链接 | https://www.chanmama.com/promotionDetail/7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1 |  |  |
+| 抖音商品链接 | 链接 | https://haohuo.jinritemai.com/ecommerce/trade/detail/index.html?id=3691681266916262270&origin_type=604 |  |  |
+| 商品图片 | 链接 | https://cdn-images.chanmama.com/douyin/product/302f38055f1aa42459e7ab5f6b804d24.jpeg?source=https%3A%2F%2Fp9-aio.ecombdimg.com%2Fimg%2Fecom-shop-material%2FnfSIlcgi_m_b6176cd68db32dfaf34c92b514796394_sx_233088_www1179-1179~tplv-dy-shrink%3A750%3A750.jpg&x-oss-process=image/resize,w_400 |  |  |
+| 蝉妈妈商品分类(最多五级) | 数组 | 一级分类: 3C数码<br>二级分类: 数码配件<br>三级分类: 手机配件<br>四级分类: 手机保护套/壳 |  |  |
+| 抖音商品分类(最多五级) | 数组 | 一级分类: 3C数码家电<br>二级分类: 3C数码配件<br>三级分类: 手机配件<br>四级分类: 手机保护套/壳 |  |  |
+| 最新到手价(单位: ¥) | 数值 | 4.80 |  |  |
+| 达人昵称 | 文本 | 与辉同行 |  |  |
+| 达人抖音号 | 文本 | 56697889278 |  |  |
+| 达人ID(已加密) | 数值 | b5kJkxaneyEZM8IUW4rgSci zja5Y1Yjo |  |  |
+| 粉丝数 | 数值 | 15337 |  |  |
+| 达人分类 | type | 科技 |  |  |
+| 带货口碑分 | 数值 | 4.9 |  |  |
+| 商品销量 | 数值 | 23606 |  |  |
+| 直播销量 | 数值 | 8269 |  |  |
+| 视频销量 | 数值 | 15337 |  |  |
+| 商品销售额(单位: ¥) | 数值 | 113418.08 |  |  |
+| 直播销售额(单位: ¥) | 数值 | 13418.08 |  |  |
+| 视频销售额(单位: ¥) | 数值 | 23418.08 |  |  |
+| 关联直播场次 | 数值 | 23 |  |  |
+| 关联视频数 | 数值 | 49 |  |  |
+
+---
+
+## 四、商品关联直播记录
+统计商品周期内所有带货直播场次,用于分析商品的直播销售趋势及效果
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 商品标题 | 文本 | 欧克里里无边框支架苹果15手机壳iphone13/14promax超薄12硬壳11 | 商品详情页-直播分析 | https://www.chanmama.com/promotionRank/7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1.html?activeTab=live |
+| 商品ID(已加密) | 文本 | 7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1 |  |  |
+| 蝉妈妈商品链接 | 链接 | https://www.chanmama.com/promotionDetail/7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1 |  |  |
+| 抖音商品链接 | 链接 | https://haohuo.jinritemai.com/ecommerce/trade/detail/index.html?id=3691681266916262270&origin_type=604 |  |  |
+| 商品图片 | 链接 | https://cdn-images.chanmama.com/douyin/product/302f38055f1aa42459e7ab5f6b804d24.jpeg?source=https%3A%2F%2Fp9-aio.ecombdimg.com%2Fimg%2Fecom-shop-material%2FnfSIlcgi_m_b6176cd68db32dfaf34c92b514796394_sx_233088_www1179-1179~tplv-dy-shrink%3A750%3A750.jpg&x-oss-process=image/resize,w_400 |  |  |
+| 蝉妈妈商品分类(最多五级) | 数组 | 一级分类: 3C数码<br>二级分类: 数码配件<br>三级分类: 手机配件<br>四级分类: 手机保护套/壳 |  |  |
+| 抖音商品分类(最多五级) | 数组 | 一级分类: 3C数码家电<br>二级分类: 3C数码配件<br>三级分类: 手机配件<br>四级分类: 手机保护套/壳 |  |  |
+| 最新到手价(单位: ¥) | 数值 | 4.80 |  |  |
+| 直播间名称 | 文本 | 新人首播(有)新人很多(效) |  |  |
+| 开播时间 | 时间 | 2024-07-06 07:30 |  |  |
+| 下播时间 | 时间 | 2024-07-06 17:30 |  |  |
+| 达人昵称 | 文本 | 与辉同行 |  |  |
+| 达人抖音号 | 文本 | 56697889278 |  |  |
+| 达人ID(已加密) | 数值 | b5kJkxaneyEZM8IUW4rgSci zja5Y1Yjo |  |  |
+| 粉丝数 | 数值 | 15337 |  |  |
+| 讲解时长(单位: 秒) | 数值 | 272 |  |  |
+| 直播间商品价格(单位: ¥) | 数值 | 3.8 |  |  |
+| 销量 | 数值 | 6499 |  |  |
+| 销售额 | 数值 | 24696.2 |  |  |
+
+---
+
+## 五、商品关联视频记录
+统计商品周期内所有挂车视频,用于分析商品的视频销售趋势及效果
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 商品标题 | 文本 | 欧克里里无边框支架苹果15手机壳iphone13/14promax超薄12硬壳11 | 商品详情页-视频分析 | https://www.chanmama.com/promotionRank/7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1.html?activeTab=aweme |
+| 商品ID(已加密) | 文本 | 7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1 |  |  |
+| 蝉妈妈商品链接 | 链接 | https://www.chanmama.com/promotionDetail/7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1 |  |  |
+| 抖音商品链接 | 链接 | https://haohuo.jinritemai.com/ecommerce/trade/detail/index.html?id=3691681266916262270&origin_type=604 |  |  |
+| 商品图片 | 链接 | https://cdn-images.chanmama.com/douyin/product/302f38055f1aa42459e7ab5f6b804d24.jpeg?source=https%3A%2F%2Fp9-aio.ecombdimg.com%2Fimg%2Fecom-shop-material%2FnfSIlcgi_m_b6176cd68db32dfaf34c92b514796394_sx_233088_www1179-1179~tplv-dy-shrink%3A750%3A750.jpg&x-oss-process=image/resize,w_400 |  |  |
+| 蝉妈妈商品分类(最多五级) | 数组 | 一级分类: 3C数码<br>二级分类: 数码配件<br>三级分类: 手机配件<br>四级分类: 手机保护套/壳 |  |  |
+| 抖音商品分类(最多五级) | 数组 | 一级分类: 3C数码家电<br>二级分类: 3C数码配件<br>三级分类: 手机配件<br>四级分类: 手机保护套/壳 |  |  |
+| 最新到手价(单位: ¥) | 数值 | 4.80 |  |  |
+| 视频标题 | 文本 | 父本与母本的优点相结合,生长出优秀的果实(孩子)。#董宇辉 #与辉同行 #董宇辉拥有暖评最多的评论区 |  |  |
+| 蝉妈妈视频链接 | 链接 | https://www.chanmama.com/awemeDetail/k9wJ3e8O6KJDiaGYZIuB6QZMD7zmnXA4 |  |  |
+| 抖音视频链接 | 链接 | https://www.douyin.com/video/7392138757266230539 |  |  |
+| 达人昵称 | 文本 | 与辉同行 |  |  |
+| 达人抖音号 | 文本 | 56697889278 |  |  |
+| 达人ID(已加密) | 数值 | b5kJkxaneyEZM8IUW4rgSci zja5Y1Yjo |  |  |
+| 粉丝数 | 数值 | 15337 |  |  |
+| 视频发布时间 | 时间 | 2024-07-18 17:11:25 |  |  |
+| 销量 | 数值 | 6499 |  |  |
+| 销售额 | 数值 | 24696.2 |  |  |
+| 点赞数 | 数值 | 104292 |  |  |
+| 评论数 | 数值 | 5145 |  |  |
+| 转发数 | 数值 | 1827 |  |  |
+| 收藏数 | 数值 | 2055 |  |  |
+
+---
+
+## 六、商品卡销售记录
+统计商品卡每日销售数据,用于分析商品卡的销售趋势及效果
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 商品标题 | 文本 | 欧克里里无边框支架苹果15手机壳iphone13/14promax超薄12硬壳11 | 商品详情页-商品卡分析 | https://www.chanmama.com/promotionRank/7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1.html?activeTab=card |
+| 商品ID(已加密) | 文本 | 7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1 |  |  |
+| 蝉妈妈商品链接 | 链接 | https://www.chanmama.com/promotionDetail/7Gs8auZCjLM0vj1Qz0u3Rd6vdvpEiNv1 |  |  |
+| 抖音商品链接 | 链接 | https://haohuo.jinritemai.com/ecommerce/trade/detail/index.html?id=3691681266916262270&origin_type=604 |  |  |
+| 商品图片 | 链接 | https://cdn-images.chanmama.com/douyin/product/302f38055f1aa42459e7ab5f6b804d24.jpeg?source=https%3A%2F%2Fp9-aio.ecombdimg.com%2Fimg%2Fecom-shop-material%2FnfSIlcgi_m_b6176cd68db32dfaf34c92b514796394_sx_233088_www1179-1179~tplv-dy-shrink%3A750%3A750.jpg&x-oss-process=image/resize,w_400 |  |  |
+| 蝉妈妈商品分类(最多五级) | 数组 | 一级分类: 3C数码<br>二级分类: 数码配件<br>三级分类: 手机配件<br>四级分类: 手机保护套/壳 |  |  |
+| 抖音商品分类(最多五级) | 数组 | 一级分类: 3C数码家电<br>二级分类: 3C数码配件<br>三级分类: 手机配件<br>四级分类: 手机保护套/壳 |  |  |
+| 最新到手价(单位: ¥) | 数值 | 4.80 |  |  |
+| 日期 | 日期 | 2024-07-17 |  |  |
+| 商品卡销量 | 数值 | 1564 |  |  |
+| 商品卡销售额(单位: ¥) | 数值 | 313418.08 |  |  |
+
+---
+
+需要我把这份完整的商品数据MD,和之前的达人数据MD**合并成一份统一的蝉妈妈数据字段规范文档**,方便你直接用于项目吗?

+ 142 - 0
docs/禅妈妈接口文档/小店数据.md

@@ -0,0 +1,142 @@
+# 蝉妈妈/蝉魔方 定制数据服务 - 小店数据(完整版)
+> 最近修改: 2024年9月13日
+
+---
+
+## 一、小店每日销售汇总
+梳理小店的基础信息,统计小店每日的销售数据,用于了解小店周期内的销售情况和趋势
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 小店名称 | 文本 | 韩束美妆旗舰店 | 小店详情页-基础分析 | https://sv-test.cds8.cn/tikShopRank/KTRLUdhG.html |
+| 小店ID(已加密) | 数值 | KTRLUdhG |  |  |
+| 小店logo | 链接 | https://cdn-images.chanmama.com/cmmimages/shop/6ecc9fbb6885ade04552181d9de12958.jpeg?source=https%3A%2F%2Fp3-ecom-qualification-sign.ecombdimg.com%2Ftos-cn-i-6vegkygbk%2F930d5ac83c2c4e6dad8122d9cef9bbb3~tplv-6vegkygbk-s%3A750.image%3Flk3s%3Dc9156bde%26x-expires%3D1757748479%26x-signature%3DiYeaEIIFazGw06BKQEqCUEMcz4A%253D |  |  |
+| 日期 | 日期 | 2024-07-17 |  |  |
+| 总销量 | 数值 | 1558946 |  |  |
+| 直播销量 | 数值 | 1216317 |  |  |
+| 视频销量 | 数值 | 21000 |  |  |
+| 商品卡销量 | 数值 | 321629 |  |  |
+| 总销售额(单位: ¥) | 数值 | 221928206.77 |  |  |
+| 直播销售额(单位: ¥) | 数值 | 178713418.08 |  |  |
+| 视频销售额(单位: ¥) | 数值 | 2163418.08 |  |  |
+| 商品卡销售额(单位: ¥) | 数值 | 40993418.08 |  |  |
+| 客单价 | 数值 | 360.26 |  |  |
+| 商品数 | 数值 | 17160 |  |  |
+| 关联达人数 | 数值 | 2391 |  |  |
+| 关联直播场次 | 数值 | 2311 |  |  |
+| 关联视频数 | 数值 | 49 |  |  |
+
+---
+
+## 二、小店关联达人记录
+统计周期内小店所有有带货行为(直播+视频)的达人记录,用于分析当前小店带货达人的分布情况及带货效果
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 小店名称 | 文本 | 韩束美妆旗舰店 | 小店详情页-达人分析 | https://www.chanmama.com/tikShopRank/KTRLUdhG.html?activeTab=author |
+| 小店ID(已加密) | 数值 | KTRLUdhG |  |  |
+| 小店logo | 链接 | https://cdn-images.chanmama.com/cmmimages/shop/6ecc9fbb6885ade04552181d9de12958.jpeg?source=https%3A%2F%2Fp3-ecom-qualification-sign.ecombdimg.com%2Ftos-cn-i-6vegkygbk%2F930d5ac83c2c4e6dad8122d9cef9bbb3~tplv-6vegkygbk-s%3A750.image%3Flk3s%3Dc9156bde%26x-expires%3D1757748479%26x-signature%3DiYeaEIIFazGw06BKQEqCUEMcz4A%253D |  |  |
+| 达人抖音号 | 文本 | 56697889278 |  |  |
+| 达人ID(已加密) | 数值 | b5kJkxaneyEZM8IUW4rgSci zja5Y1Yjo |  |  |
+| 粉丝数 | 数值 | 15337 |  |  |
+| 带货渠道 | type | 达人号/商家自营号/品牌自营号 |  |  |
+| 带货口碑分 | 数值 | 4.9 |  |  |
+| 推广商品数 | 数值 | 202 |  |  |
+| 关联直播场次 | 数值 | 23 |  |  |
+| 关联视频数 | 数值 | 49 |  |  |
+| 销量 | 数值 | 23606 |  |  |
+| 直播销量 | 数值 | 8269 |  |  |
+| 视频销量 | 数值 | 15337 |  |  |
+| 销售额(单位: ¥) | 数值 | 113418.08 |  |  |
+| 直播销售额(单位: ¥) | 数值 | 13418.08 |  |  |
+| 视频销售额(单位: ¥) | 数值 | 23418.08 |  |  |
+
+---
+
+## 三、小店商品销售记录
+统计周期内小店所有商品的销售情况,用于分析小店的销售策略
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 小店名称 | 文本 | 韩束美妆旗舰店 | 小店详情页-商品分析 | https://www.chanmama.com/tikShopRank/KTRLUdhG.html?activeTab=promotion |
+| 小店ID(已加密) | 数值 | KTRLUdhG |  |  |
+| 小店logo | 链接 | https://cdn-images.chanmama.com/cmmimages/shop/6ecc9fbb6885ade04552181d9de12958.jpeg?source=https%3A%2F%2Fp3-ecom-qualification-sign.ecombdimg.com%2Ftos-cn-i-6vegkygbk%2F930d5ac83c2c4e6dad8122d9cef9bbb3~tplv-6vegkygbk-s%3A750.image%3Flk3s%3Dc9156bde%26x-expires%3D1757748479%26x-signature%3DiYeaEIIFazGw06BKQEqCUEMcz4A%253D |  |  |
+| 商品标题 | 文本 | 【12期免息】HUAWEI Pura70 Pro 超聚光微距长焦华为手机官方旗舰店 |  |  |
+| 蝉妈妈商品链接 | 链接 | https://www.chanmama.com/promotionDetail/2U1yaAKteamgebI1FzaVQLPBF3WGBfDg |  |  |
+| 抖音商品链接 | 链接 | https://haohuo.jinritemai.com/ecommerce/trade/detail/index.html?id=3678249291455004723&origin_type=604 |  |  |
+| 商品图片 | 链接 | https://cdn-images.chanmama.com/douyin/product/fbf43b99d5139dc621ea13a273e24aa5.jpeg?source=https%3A%2F%2Fp26-item.ecombdimg.com%2Fimg%2Fecom-shop-material%2FtghyNdeS_m_5decb4eb5826573612de3f265e9e207d_sx_52903_www800-800~tplv-5mmsx3fupr-resize%3A1080%3A1080.jpg |  |  |
+| 蝉妈妈商品分类(最多五级) | 数组 | 一级分类: 3C数码<br>二级分类: 手机<br>三级分类: 智能机 |  |  |
+| 抖音商品分类(最多五级) | 数组 | 一级分类: 3C数码家电<br>二级分类: 手机<br>三级分类: 智能机 |  |  |
+| 商品价格(取周期内平均成交价,单位: ¥) | 数值 | 6499 |  |  |
+| 总销量 | 数值 | 42924 |  |  |
+| 占小店销量比例 | 百分比 | 2.63% |  |  |
+| 直播销量 | 数值 | 8269 |  |  |
+| 视频销量 | 数值 | 15337 |  |  |
+| 商品卡销量 | 数值 | 1564 |  |  |
+| 总销售额(单位: ¥) | 数值 | 113418.08 |  |  |
+| 占小店销售额比例 | 百分比 | 2.63% |  |  |
+| 直播销售额(单位: ¥) | 数值 | 13418.08 |  |  |
+| 视频销售额(单位: ¥) | 数值 | 23418.08 |  |  |
+| 商品卡销售额(单位: ¥) | 数值 | 33418.08 |  |  |
+| 关联达人数 | 数值 | 59 |  |  |
+| 关联直播场次 | 数值 | 23 |  |  |
+| 关联视频数 | 数值 | 49 |  |  |
+
+---
+
+## 四、小店带货直播记录
+统计小店周期内所有关联的带货直播场次,用于分析小店商品的直播销售趋势及效果
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 小店名称 | 文本 | 韩束美妆旗舰店 | 小店详情页-带货直播 | https://www.chanmama.com/tikShopRank/KTRLUdhG.html?activeTab=live |
+| 小店ID(已加密) | 数值 | KTRLUdhG |  |  |
+| 小店logo | 链接 | https://cdn-images.chanmama.com/cmmimages/shop/6ecc9fbb6885ade04552181d9de12958.jpeg?source=https%3A%2F%2Fp3-ecom-qualification-sign.ecombdimg.com%2Ftos-cn-i-6vegkygbk%2F930d5ac83c2c4e6dad8122d9cef9bbb3~tplv-6vegkygbk-s%3A750.image%3Flk3s%3Dc9156bde%26x-expires%3D1757748479%26x-signature%3DiYeaEIIFazGw06BKQEqCUEMcz4A%253D |  |  |
+| 直播间名称 | 文本 | 新人首播(有)新人很多(效) |  |  |
+| 开播时间 | 时间 | 2024-07-06 07:30 |  |  |
+| 下播时间 | 时间 | 2024-07-06 17:30 |  |  |
+| 直播时长(单位: 秒) | 数值 | 36000 |  |  |
+| 达人昵称 | 文本 | 与辉同行 |  |  |
+| 达人抖音号 | 文本 | 56697889278 |  |  |
+| 达人ID(已加密) | 数值 | b5kJkxaneyEZM8IUW4rgSci zja5Y1Yjo |  |  |
+| 达人带货类型 | type | 品牌自营号/商家自营号/达人号 |  |  |
+| 观看人次 | 数值 | 2720423 |  |  |
+| 总商品数 | 数值 | 250 |  |  |
+| 小店商品数 | 数值 | 200 |  |  |
+| 小店销量 | 数值 | 6499 |  |  |
+| 小店销售额 | 数值 | 24696.2 |  |  |
+
+---
+
+## 五、小店带货视频记录
+统计周期内小店所有商品的挂车视频,用于分析小店的视频销售趋势及效果
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 小店名称 | 文本 | 韩束美妆旗舰店 | 小店详情页-带货视频 | https://www.chanmama.com/tikShopRank/KTRLUdhG.html?activeTab=aweme |
+| 小店ID(已加密) | 数值 | KTRLUdhG |  |  |
+| 小店logo | 链接 | https://cdn-images.chanmama.com/cmmimages/shop/6ecc9fbb6885ade04552181d9de12958.jpeg?source=https%3A%2F%2Fp3-ecom-qualification-sign.ecombdimg.com%2Ftos-cn-i-6vegkygbk%2F930d5ac83c2c4e6dad8122d9cef9bbb3~tplv-6vegkygbk-s%3A750.image%3Flk3s%3Dc9156bde%26x-expires%3D1757748479%26x-signature%3DiYeaEIIFazGw06BKQEqCUEMcz4A%253D |  |  |
+| 视频标题 | 文本 | 父本与母本的优点相结合,生长出优秀的果实(孩子)。#董宇辉 #与辉同行 #董宇辉拥有暖评最多的评论区 |  |  |
+| 蝉妈妈视频链接 | 链接 | https://www.chanmama.com/awemeDetail/k9wJ3e8O6KJDiaGYZIuB6QZMD7zmnXA4 |  |  |
+| 抖音视频链接 | 链接 | https://www.douyin.com/video/7392138757266230539 |  |  |
+| 商品标题 | 文本 | 【12期免息】HUAWEI Pura70 Pro 超聚光微距长焦华为手机官方旗舰店 |  |  |
+| 蝉妈妈商品链接 | 链接 | https://www.chanmama.com/promotionDetail/2U1yaAKteamgebI1FzaVQLPBF3WGBfDg |  |  |
+| 抖音商品链接 | 链接 | https://haohuo.jinritemai.com/ecommerce/trade/detail/index.html?id=3678249291455004723&origin_type=604 |  |  |
+| 商品图片 | 链接 | https://cdn-images.chanmama.com/douyin/product/fbf43b99d5139dc621ea13a273e24aa5.jpeg?source=https%3A%2F%2Fp26-item.ecombdimg.com%2Fimg%2Fecom-shop-material%2FtghyNdeS_m_5decb4eb5826573612de3f265e9e207d_sx_52903_www800-800~tplv-5mmsx3fupr-resize%3A1080%3A1080.jpg |  |  |
+| 蝉妈妈商品分类(最多五级) | 数组 | 一级分类: 3C数码<br>二级分类: 手机<br>三级分类: 智能机 |  |  |
+| 抖音商品分类(最多五级) | 数组 | 一级分类: 3C数码家电<br>二级分类: 手机<br>三级分类: 智能机 |  |  |
+| 达人昵称 | 文本 | 与辉同行 |  |  |
+| 达人抖音号 | 文本 | 56697889278 |  |  |
+| 达人ID(已加密) | 数值 | b5kJkxaneyEZM8IUW4rgSci zja5Y1Yjo |  |  |
+| 粉丝数 | 数值 | 15337 |  |  |
+| 视频发布时间 | 时间 | 2024-07-18 17:11:25 |  |  |
+| 销量 | 数值 | 6499 |  |  |
+| 销售额 | 数值 | 24696.2 |  |  |
+| 点赞数 | 数值 | 104292 |  |  |
+| 评论数 | 数值 | 5145 |  |  |
+| 转发数 | 数值 | 1827 |  |  |
+| 收藏数 | 数值 | 2055 |  |  |
+
+---
+
+需要我把这份**小店数据MD**,和之前的**达人、商品、品牌数据MD**,合并成一份完整的「蝉妈妈全链路数据字段规范总文档」,方便你直接用于数仓建模或BI系统开发吗?

+ 134 - 0
docs/禅妈妈接口文档/达人数据.md

@@ -0,0 +1,134 @@
+# 蝉妈妈/蝉魔方 定制数据服务 - 达人数据
+> 最近修改: 2月6日 14:10
+> 修改人:Tagore、陈庆潘(蝉妈妈智库),2月6日修改
+
+---
+
+## 一、达人基础信息
+统计达人的基础信息和粉丝画像数据,用于分析达人的基础属性
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 达人昵称 | 文本 | 与辉同行 | 达人详情页-头部 | https://www.chanmama.com/bloggerRank/b5kJkxaneyEZM8IUW4rgSci zja5Y1Yjo.html |
+| 达人抖音号 | 文本 | 56697889278 |  |  |
+| 达人ID(已加密) | 数值 | b5kJkxaneyEZM8IUW4rgSci zja5Y1Yjo |  |  |
+| 性别 | 文本 | 男 |  |  |
+| 年龄 | 数值 | 31 |  |  |
+| 地区 | 文本 | 福建省厦门市 |  |  |
+| 达人类型 | type | 随拍 |  |  |
+| MCN机构 | 文本 | 百家星耀 |  |  |
+| 认证信息 | 文本 | 蓝标: 与辉同行(北京)科技有限公司 |  |  |
+| 粉丝总数 | 数值 | 2,075.1w |  |  |
+| 粉丝团人数 | 数值 | 121.1w |  |  |
+| 粉丝量级 | type | 头部达人、肩部达人 |  |  |
+| 带货口碑 | 数值 | 4.6 |  |  |
+| 带货水平 | type | 中腰部达人、尾部达人 |  |  |
+| 粉丝画像-性别 | 数组 | 男性47%,女性53% | 达人详情-粉丝分析:<br>1、包含粉丝画像、视频观众画像、直播观众画像三种类型数据<br>2、画像的内容包含:<br>1) 性别分布;<br>2) 年龄分布;<br>3) 地区分布 (分省、市);<br>4) 八大消费人群分布;<br>5) 城市等级分布; | https://www.chanmama.com/bloggerRank/moxwgs3DGqgmtEJmypA6uO36IYqefoe-.html?activeTab=fans |
+| 粉丝画像-年龄 | 数组 | 18-23岁18.72%,24-30岁31.35% |  |  |
+| 粉丝画像-地区-省 | 数组 | 广东14.46%,山东7.68% |  |  |
+| 粉丝画像-地区-市 | 数组 | 深圳3.19%,广州2.69% |  |  |
+| 粉丝画像-八大消费人群 | 数组 | GenZ17.67%,小镇青年17.5% |  |  |
+| 粉丝画像-城市等级 | 数组 | 一线10.75%,新一线19.25% |  |  |
+
+---
+
+## 二、达人直播记录
+统计周期内达人所有直播场次的互动及带货数据,用于分析达人直播的互动能力及带货能力
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 达人昵称 | 文本 | 与辉同行 | 达人详情-直播分析 | https://www.chanmama.com/bloggerRank/b5kJkxaneyEZM8IUW4rgSci zja5Y1Yjo.html?activeTab=live |
+| 达人抖音号 | 文本 | 56697889278 |  |  |
+| 达人ID(已加密) | 数值 | b5kJkxaneyEZM8IUW4rgSci zja5Y1Yjo |  |  |
+| 直播标题 | 文本 | 安踏毒刺男款跑步鞋舒适轻便减震时尚休闲网面~ |  |  |
+| 蝉妈妈直播链接 | 链接 | https://www.chanmama.com/liveDetail/B-ohP6slqyfnFuSTomO744RuzA28f1ut |  |  |
+| 开播时间 | 时间 | 2024-07-06 07:30 |  |  |
+| 下播时间 | 时间 | 2024-07-06 17:30 |  |  |
+| 直播时长 | 文本 | 5小时9分钟59秒 |  |  |
+| 观看人次 | 数值 | 12186 |  |  |
+| 直播曝光量(单位: 人次) | 数值 | 95651 |  |  |
+| 直播流量结构 | 数组 | 短视频引流21.1%,关注35.62% |  |  |
+| 人气峰值(单位: 人数) | 数值 | 27 |  |  |
+| 平均在线人数 | 数值 | 18 |  |  |
+| 平均停留时长(单位: 秒) | 数值 | 28 |  |  |
+| UV价值 | 数值 | 0.7 |  |  |
+| 点赞数 | 数值 | 6489 |  |  |
+| 涨粉数 | 数值 | 36 |  |  |
+| 涨粉率 | 百分比 | 0.30% |  |  |
+| 新增粉丝团人数 | 数值 | 6 |  |  |
+| 商品数 | 数值 | 89 |  |  |
+| 销量 | 数值 | 39 |  |  |
+| 销售额(单位: ¥) | 数值 | 8502.9 |  |  |
+| 客单价 | 数值 | 218.03 |  |  |
+
+---
+
+## 三、达人视频记录
+统计周期内达人所有发布视频的互动及带货数据,用于分析达人视频吸引用户参与互动的能力及带货能力
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 达人昵称 | 文本 | 与辉同行 | 达人详情-视频分析 | https://www.chanmama.com/bloggerRank/b5kJkxaneyEZM8IUW4rgSci zja5Y1Yjo.html?activeTab=aweme |
+| 达人抖音号 | 文本 | 56697889278 |  |  |
+| 达人ID(已加密) | 数值 | b5kJkxaneyEZM8IUW4rgSci zja5Y1Yjo |  |  |
+| 视频标题 | 文本 | 父本与母本的优点相结合,生长出优秀的果实(孩子),才是完整的评论区 |  |  |
+| 蝉妈妈视频链接 | 链接 | https://www.chanmama.com/awemeDetail/k9wJ3e8O6KJDiaGYZIuB6QZMD7zmnXA4 |  |  |
+| 抖音视频链接 | 链接 | https://www.douyin.com/video/7392138757266230539 |  |  |
+| 关联商品 | 文本 | 【三晋出版社】新版家庭藏书: 刘禹锡集+陆游集(套装2册) |  |  |
+| 视频时长(单位: 秒) | 数值 | 15 |  |  |
+| 视频发布时间 | 时间 | 2024-07-18 17:11:25 |  |  |
+| 销量 | 数值 | 5536 |  |  |
+| 销售额(单位: ¥) | 数值 | 136185.6 |  |  |
+| 点赞数 | 数值 | 104292 |  |  |
+| 评论数 | 数值 | 5145 |  |  |
+| 转发数 | 数值 | 1827 |  |  |
+| 收藏数 | 数值 | 2055 |  |  |
+
+---
+
+## 四、达人带货记录
+统计周期内达人全部有带货行为(直播+视频带货)商品的销售情况,用于分析达人的带货能力
+
+| 指标 | 类型 | 举例 | 页面路径 | 参考链接 |
+| :--- | :--- | :--- | :--- | :--- |
+| 达人昵称 | 文本 | 与辉同行 | 达人详情-带货分析 | https://www.chanmama.com/bloggerRank/b5kJkxaneyEZM8IUW4rgSci zja5Y1Yjo.html?activeTab=promotion |
+| 达人抖音号 | 文本 | 56697889278 |  |  |
+| 达人ID(已加密) | 数值 | b5kJkxaneyEZM8IUW4rgSci zja5Y1Yjo |  |  |
+| 商品标题 | 文本 | 【12期免息】HUAWEI Pura70 Pro 超聚光微距长焦华为手机官方旗舰店 |  |  |
+| 蝉妈妈商品链接 | 链接 | https://www.chanmama.com/promotionDetail/2U1yaAKteamgebI1FzaVQLPBF3WGBfDg |  |  |
+| 抖音商品链接 | 链接 | https://haohuo.jinritemai.com/ecommerce/trade/detail/index.html?id=3678249291455004723&origin_type=604 |  |  |
+| 商品图片 | 链接 | https://cdn-images.chanmama.com/douyin/product/fbf43b99d5139dc621ea13a273e24aa5.jpeg?source=https%3A%2F%2Fp26-item.ecmbdimg.com%2Fimg%2Fecom-shop-material%2FtghyNdeS_m_5decb4eb5826573612de3f265e9e207d_sx_52903_www800-800~tplv-5mmsx3fupr-resize%3A1080%3A1080.jpg |  |  |
+| 蝉妈妈商品分类(最多五级) | 数组 | 一级分类: 3C数码<br>二级分类: 手机<br>三级分类: 智能机 |  |  |
+| 抖音商品分类(最多五级) | 数组 | 一级分类: 3C数码家电<br>二级分类: 手机<br>三级分类: 智能机 |  |  |
+| 商品来源-商品小店 | 文本 | 华为官方旗舰店 |  |  |
+| 品牌 | 文本 | HUAWEI/华为 |  |  |
+| 商品价格(取周期内平均成交价,单位: ¥) | 数值 | 6499 |  |  |
+| 佣金比例 | 百分比 | 5.00% |  |  |
+| 销量 | 数值 | 2924 |  |  |
+| 销售额(单位: ¥) | 数值 | 19003076 |  |  |
+| 关联视频 | 数值 | 15 |  |  |
+| 关联直播 | 数值 | 19 |  |  |
+
+---
+
+## 五、达人每日带货数据
+统计周期内达人每日带货数据,用于分析达人的带货能力
+
+| 指标 | 类型 | 举例 |
+| :--- | :--- | :--- |
+| 达人昵称 | 文本 | 与辉同行 |
+| 达人抖音号 | 文本 | 56697889278 |
+| 达人ID(已加密) | 数值 | b5kJkxaneyEZM8IUW4rgSci zja5Y1Yjo |
+| 销量 | 数值 | 2924 |
+| 直播销量 | 数值 | 1924 |
+| 视频销量 | 数值 | 1000 |
+| 销售额(单位: ¥) | 数值 | 19003076 |
+| 直播销售额(单位: ¥) | 数值 | 10000000 |
+| 视频销售额(单位: ¥) | 数值 | 9003076 |
+| 关联商品数 | 数值 | 253 |
+| 关联视频 | 数值 | 15 |
+| 关联直播 | 数值 | 19 |
+
+---
+
+需要我帮你把这份MD文档**优化成可直接导入飞书多维表格/数据库的字段格式**,或者补充数据字典、字段说明吗?

+ 47 - 1
douyin/douyin-comment-replies/api-config.json

@@ -100,5 +100,51 @@
     "maxAttempts": 3,
     "delay": 1500,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
douyin/douyin-general-search/api-config.json

@@ -184,5 +184,51 @@
     "maxAttempts": 3,
     "delay": 1500,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
douyin/douyin-hashtag-search/api-config.json

@@ -142,5 +142,51 @@
     "maxAttempts": 3,
     "delay": 1500,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
douyin/douyin-user-profile/api-config.json

@@ -81,5 +81,51 @@
     "maxAttempts": 3,
     "delay": 1500,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
douyin/douyin-user-search/api-config.json

@@ -104,5 +104,51 @@
     "maxAttempts": 3,
     "delay": 1500,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
douyin/douyin-video-comments/api-config.json

@@ -109,5 +109,51 @@
     "maxAttempts": 3,
     "delay": 1500,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
douyin/douyin-video-detail/api-config.json

@@ -82,5 +82,51 @@
     "maxAttempts": 3,
     "delay": 1500,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 110 - 18
payment/apig-pay.html

@@ -624,41 +624,78 @@ document.addEventListener('DOMContentLoaded', () => {
     showError('缺少 authid 参数,请通过正确链接访问本页面。');
     return;
   }
+  // Show loading state
+  const titleEl = document.getElementById('apiTitle');
+  if (titleEl) titleEl.textContent = '加载中...';
   loadApig();
 });
 
 // ─── Load APIG Info ───
 async function loadApig() {
   try {
-    // Try getApig endpoint first (works when authId is an APIGAuth objectId)
+    // 1. Try getApig REST endpoint (works when authId is an APIGAuth objectId)
     const resp = await postJSON(API_BASE + '/api/apig/getApig', { authid: authId });
     if (resp.code === 200 && resp.data) {
       apig = resp.data;
+      applyTestTier();
       renderApigInfo();
       renderTiers();
       return;
     }
-    // Fallback: query APIG class directly via Parse (when authId is APIG objectId)
-    console.log('getApig returned no data, trying Parse direct query...');
-    const parseResp = await fetch(API_BASE + '/parse/classes/APIG/' + authId, {
-      headers: { 'X-Parse-Application-Id': APP_ID }
-    }).then(r => r.json());
-    if (parseResp && parseResp.objectId) {
-      apig = parseResp;
-      // Add test tier if ?test=1 in URL
-      if (params.get('test') === '1' && apig.priceStep) {
-        apig.priceStep.unshift({ count: 1, price: 0.01 });
+
+    // 2. Fallback: use cloud function to query APIG by objectId
+    // Cloud function IDs: getApigInfo=t012qy4XVe, getApigAuth=H7X7y9Wfc0
+    // Note: FmodeParse SDK uses internal dispatch; direct REST call needs actual function name
+    console.log('getApig returned no data, trying cloud function...');
+    const cfFuncName = params.get('cfName') || 'getApigInfo';
+    const cfResp = await parseCloudCall(cfFuncName, {
+      apigId: authId
+    }).catch(e => { console.warn('cloud function error:', e); return null; });
+    console.log('Cloud function response:', cfResp);
+    if (cfResp && cfResp.result) {
+      const cfData = cfResp.result.data || cfResp.result;
+      if (cfData && cfData.objectId) {
+        apig = cfData;
+        applyTestTier();
+        renderApigInfo();
+        renderTiers();
+        return;
       }
+    }
+
+    // 3. Fallback: accept APIG data from URL params (OpenClaw can pass these)
+    const urlTitle = params.get('title');
+    const urlPrices = params.get('prices');
+    const urlCounts = params.get('counts');
+    if (urlTitle && urlPrices && urlCounts) {
+      console.log('Using APIG data from URL params');
+      const prices = urlPrices.split(',').map(Number);
+      const counts = urlCounts.split(',').map(Number);
+      apig = {
+        objectId: authId,
+        title: urlTitle,
+        content: params.get('desc') || '',
+        count: parseInt(params.get('balance') || '0'),
+        priceStep: prices.map((p, i) => ({ price: p, count: counts[i] || 0 }))
+      };
+      applyTestTier();
       renderApigInfo();
       renderTiers();
       return;
     }
-    showError('无法加载接口信息,请检查 authid 参数。');
+
+    showError('无法加载接口信息。请确认 authid 对应有效的 APIGAuth 记录,或通过 URL 参数传入套餐数据。');
   } catch (e) {
     showError('网络错误: ' + e.message);
   }
 }
 
+function applyTestTier() {
+  if (params.get('test') === '1' && apig.priceStep) {
+    apig.priceStep.unshift({ count: 1, price: 0.01 });
+  }
+}
+
 function renderApigInfo() {
   const titleEl = document.getElementById('apiTitle');
   titleEl.innerHTML = apig.title + '<span class="badge">HTTPS</span>';
@@ -837,11 +874,13 @@ async function doRecharge() {
   showSuccess();
   try {
     const tier = apig.priceStep[selectedIndex];
-    // Build recharge body — use order data if available
-    const apigAuthId = order?.detail?.apigAuth?.objectId || authId;
+    // Build recharge body
+    // authid = APIGAuth objectId (T0iOotHcDX)
+    // apigid = APIG objectId from order or from getApig response
+    const apigObjId = apig.objectId || authId;
     const body = {
       authid: authId,
-      apigid: apigAuthId,
+      apigid: apigObjId,
       oldCount: apig.count || 0,
       count: tier.count,
       orderid: order ? order.objectId : ''
@@ -865,11 +904,34 @@ async function doRecharge() {
     clearTimeout(timer);
     const result = await resp.json().catch(() => null);
     console.log('saveRecharge response:', result);
+    // Refresh balance display
+    await refreshBalance();
   } catch (e) {
     console.warn('Recharge call failed (non-critical):', e.message);
   }
 }
 
+async function refreshBalance() {
+  try {
+    const resp = await postJSON(API_BASE + '/api/apig/getApig', { authid: authId });
+    if (resp.code === 200 && resp.data && resp.data.count != null) {
+      apig.count = resp.data.count;
+      const detail = document.getElementById('successDetail');
+      if (detail) {
+        const tier = apig.priceStep[selectedIndex];
+        const unitLabel = (apig.objectId === 'MYM5zJBKgw' || apig.objectId === 'FQtTgjcqIZ') ? 'token' : '次';
+        detail.innerHTML =
+          '已充值 <strong style="color:var(--neon);">' + apig.title + '</strong> 接口<br>' +
+          '获得 <strong style="color:var(--success);">' + tier.count + ' ' + unitLabel + '</strong>,有效期 730 天<br>' +
+          '<span style="color:var(--text-dim);margin-top:8px;display:inline-block;">当前余额: <strong style="color:var(--neon);">' + apig.count + ' ' + unitLabel + '</strong></span>';
+      }
+      console.log('Balance refreshed:', apig.count);
+    }
+  } catch(e) {
+    console.warn('Balance refresh failed:', e.message);
+  }
+}
+
 function showSuccess() {
   document.getElementById('qrModal').classList.remove('show');
   document.getElementById('mainContent').querySelector('.api-info-card').style.display = 'none';
@@ -890,6 +952,11 @@ function showSuccess() {
 async function renderQR(url) {
   const wrapper = document.getElementById('qrWrapper');
   const canvas = document.getElementById('qrCanvas');
+  // Clear previous QR (img fallback)
+  wrapper.querySelectorAll('img').forEach(i => i.remove());
+  canvas.style.display = '';
+  canvas.width = 200;
+  canvas.height = 200;
   // Try canvas-based QRCode lib first
   if (typeof QRCode !== 'undefined' && QRCode && QRCode.toCanvas) {
     try {
@@ -917,13 +984,18 @@ async function renderQR(url) {
 }
 
 function handleDone() {
+  // Notify parent window (OpenClaw integration)
+  try {
+    const msg = { type: 'apig-payment-done', authid: authId, user: userId };
+    if (window.opener) window.opener.postMessage(msg, '*');
+    if (window.parent !== window) window.parent.postMessage(msg, '*');
+  } catch(e) { console.warn('postMessage failed:', e); }
   // Try to close window (works if opened via window.open)
-  // Otherwise reload to allow another purchase
   try { window.close(); } catch(e) {}
   setTimeout(() => {
     // If still here, window.close didn't work — reload page
     window.location.reload();
-  }, 300);
+  }, 500);
 }
 
 function cancelPayment() {
@@ -934,11 +1006,13 @@ function cancelPayment() {
 // ─── Helpers ───
 function showError(msg) {
   const el = document.getElementById('errorBar');
+  if (!el) { console.error('errorBar not found:', msg); return; }
   el.textContent = msg;
   el.classList.add('show');
 }
 function hideError() {
-  document.getElementById('errorBar').classList.remove('show');
+  const el = document.getElementById('errorBar');
+  if (el) el.classList.remove('show');
 }
 
 async function postJSON(url, data) {
@@ -949,6 +1023,24 @@ async function postJSON(url, data) {
   });
   return resp.json();
 }
+
+async function parseCloudCall(funcId, params) {
+  const url = PARSE_BASE + '/' + funcId;
+  const body = Object.assign({ _ApplicationId: APP_ID }, params);
+  const resp = await fetch(url, {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json',
+      'X-Parse-Application-Id': APP_ID
+    },
+    body: JSON.stringify(body)
+  });
+  if (!resp.ok) {
+    console.warn('Cloud function ' + funcId + ' returned ' + resp.status);
+    return null;
+  }
+  return resp.json();
+}
 </script>
 </body>
 </html>

+ 48 - 2
review-analysis/review-batch-collection/api-config.json

@@ -47,7 +47,7 @@
         "endpoint": "/api/ProductReviewsQuery",
         "method": "POST",
         "forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
-        "headers": { "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7" },
+        "headers": { "Authorization": "Bearer {{vocToken}}" },
         "requestBody": {
           "ASIN": "${asin}",
           "Star": "${star || ''}",
@@ -190,5 +190,51 @@
     "maxAttempts": 3,
     "delay": 2000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
review-analysis/review-highlight-extraction/api-config.json

@@ -148,5 +148,51 @@
     "maxAttempts": 2,
     "delay": 1000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 48 - 2
review-analysis/review-keyword-cloud/api-config.json

@@ -59,7 +59,7 @@
         "endpoint": "/api/ASINRequestKeyword",
         "method": "POST",
         "forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
-        "headers": { "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7" },
+        "headers": { "Authorization": "Bearer {{vocToken}}" },
         "requestBody": { "ASIN": "${asin}" },
         "queryParams": { "domain": "${domain}" }
       },
@@ -132,5 +132,51 @@
     "maxAttempts": 2,
     "delay": 2000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
review-analysis/review-pain-point-extraction/api-config.json

@@ -170,5 +170,51 @@
     "maxAttempts": 2,
     "delay": 1000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
review-analysis/review-sentiment-analysis/api-config.json

@@ -168,5 +168,51 @@
     "maxAttempts": 2,
     "delay": 1000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
social-media/instagram-search/api-config.json

@@ -138,5 +138,51 @@
     "maxAttempts": 3,
     "delay": 1500,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
social-media/instagram-user-info/api-config.json

@@ -138,5 +138,51 @@
     "maxAttempts": 3,
     "delay": 1500,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
social-media/instagram-user-posts/api-config.json

@@ -158,5 +158,51 @@
     "maxAttempts": 3,
     "delay": 1500,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
social-media/tiktok-hashtag-detail/api-config.json

@@ -100,5 +100,51 @@
     "maxAttempts": 3,
     "delay": 1500,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
social-media/tiktok-hashtag-videos/api-config.json

@@ -144,5 +144,51 @@
     "maxAttempts": 3,
     "delay": 1500,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
social-media/tiktok-user-posts/api-config.json

@@ -141,5 +141,51 @@
     "maxAttempts": 3,
     "delay": 1500,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
social-media/tiktok-user-profile/api-config.json

@@ -147,5 +147,51 @@
     "maxAttempts": 3,
     "delay": 1500,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
social-media/tiktok-user-search/api-config.json

@@ -137,5 +137,51 @@
     "maxAttempts": 3,
     "delay": 1500,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
social-media/tiktok-video-comments/api-config.json

@@ -146,5 +146,51 @@
     "maxAttempts": 3,
     "delay": 1500,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
social-media/tiktok-video-detail/api-config.json

@@ -140,5 +140,51 @@
     "maxAttempts": 3,
     "delay": 1500,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
social-media/tiktok-video-search/api-config.json

@@ -191,5 +191,51 @@
     "maxAttempts": 3,
     "delay": 1500,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
social-voc/instagram-brand-voc/api-config.json

@@ -113,5 +113,51 @@
     "maxAttempts": 2,
     "delay": 2000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
social-voc/social-trend-analysis/api-config.json

@@ -172,5 +172,51 @@
     "maxAttempts": 2,
     "delay": 1000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
social-voc/tiktok-brand-voc/api-config.json

@@ -141,5 +141,51 @@
     "maxAttempts": 2,
     "delay": 2000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
social-voc/tiktok-category-voc/api-config.json

@@ -152,5 +152,51 @@
     "maxAttempts": 2,
     "delay": 2000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 50 - 4
synthesis/brand-profile/api-config.json

@@ -44,7 +44,7 @@
         "endpoint": "/api/ProductRequest",
         "method": "POST",
         "forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
-        "headers": { "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7" },
+        "headers": { "Authorization": "Bearer {{vocToken}}" },
         "requestBody": { "ASIN": "${asin}", "Trend": 1, "QueryTrendStartDt": "", "QueryTrendEndDt": "" },
         "queryParams": { "domain": "${domain}" }
       },
@@ -73,7 +73,7 @@
         "endpoint": "/api/ProductReviewsQuery",
         "method": "POST",
         "forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
-        "headers": { "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7" },
+        "headers": { "Authorization": "Bearer {{vocToken}}" },
         "requestBody": { "ASIN": "${asin}", "PageIndex": "1" },
         "queryParams": { "domain": "${domain}" }
       },
@@ -88,7 +88,7 @@
         "endpoint": "/api/ProductQuery",
         "method": "POST",
         "forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
-        "headers": { "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7" },
+        "headers": { "Authorization": "Bearer {{vocToken}}" },
         "requestBody": { "Page": 1, "Query": "1", "QueryType": "7", "Pattern": "${categoryKeyword}" },
         "queryParams": { "domain": "${domain}" }
       },
@@ -182,5 +182,51 @@
     "maxAttempts": 2,
     "delay": 2000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 48 - 2
synthesis/category-landscape/api-config.json

@@ -35,7 +35,7 @@
         "endpoint": "/api/ProductQuery",
         "method": "POST",
         "forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
-        "headers": { "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7" },
+        "headers": { "Authorization": "Bearer {{vocToken}}" },
         "requestBody": { "Page": 1, "Query": "1", "QueryType": "7", "Pattern": "${keyword}" },
         "queryParams": { "domain": "${domain}" }
       },
@@ -225,5 +225,51 @@
     "maxAttempts": 2,
     "delay": 2000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
synthesis/html-report-generator/api-config.json

@@ -163,5 +163,51 @@
     "maxAttempts": 2,
     "delay": 3000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 51 - 5
synthesis/product-deep-analysis/api-config.json

@@ -40,7 +40,7 @@
         "endpoint": "/api/ProductRequest",
         "method": "POST",
         "forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
-        "headers": { "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7" },
+        "headers": { "Authorization": "Bearer {{vocToken}}" },
         "requestBody": { "ASIN": "${asin}", "Trend": 1, "QueryTrendStartDt": "", "QueryTrendEndDt": "" },
         "queryParams": { "domain": "${domain}" }
       },
@@ -69,7 +69,7 @@
         "endpoint": "/api/ASINRequestKeyword",
         "method": "POST",
         "forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
-        "headers": { "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7" },
+        "headers": { "Authorization": "Bearer {{vocToken}}" },
         "requestBody": { "ASIN": "${asin}" },
         "queryParams": { "domain": "${domain}" }
       },
@@ -83,7 +83,7 @@
         "endpoint": "/api/MonitorQuery",
         "method": "POST",
         "forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
-        "headers": { "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7" },
+        "headers": { "Authorization": "Bearer {{vocToken}}" },
         "requestBody": { "ASIN": "${asin}" },
         "queryParams": { "domain": "${domain}" }
       },
@@ -99,7 +99,7 @@
         "endpoint": "/api/ProductReviewsQuery",
         "method": "POST",
         "forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
-        "headers": { "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7" },
+        "headers": { "Authorization": "Bearer {{vocToken}}" },
         "requestBody": { "ASIN": "${asin}", "PageIndex": "${pageIndex}" },
         "queryParams": { "domain": "${domain}" }
       },
@@ -423,5 +423,51 @@
     "maxAttempts": 2,
     "delay": 3000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
synthesis/user-persona/api-config.json

@@ -206,5 +206,51 @@
     "maxAttempts": 2,
     "delay": 1000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 47 - 1
synthesis/voc-proposal/api-config.json

@@ -231,5 +231,51 @@
     "maxAttempts": 2,
     "delay": 3000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 116 - 0
video-creation/quickly-video-create/SKILL.md

@@ -0,0 +1,116 @@
+---
+name: quickly-video-create
+description: 基于图片/视频素材一键生成短视频。传入素材URL列表和关键词,返回task_id,通过quickly-video-query轮询获取视频下载链接。
+version: 1.1.0
+---
+
+# 一键成片 — 任务创建 (Quickly Video Create)
+
+## 技能目的
+将用户提供的图片/视频素材提交给 Quickly AI,异步生成短视频。返回 `task_id` 供下游轮询。
+
+## 调用链(Workflow)
+
+```
+前置: 用户提供产品图片/视频素材
+  ↓
+Step 1: 素材预处理(格式转换 + 上传国内CDN)
+  ↓
+Step 2: quickly-video-create(material_list, tags) → task_id
+  ↓
+Step 3: quickly-video-query(task_id) → 轮询结果(每15秒,最多40次)
+  ↓
+Step 4: 返回 videoUrl / coverUrl 给用户
+  ↓
+可选: quickly-video-library → 查看历史视频库
+```
+
+## 输入参数
+
+| 参数 | 类型 | 必填 | 说明 |
+|------|------|------|------|
+| material_list | array | ✅ | 素材列表,每项 `{ type: 'pic'\|'video', value: '公网URL' }`,建议 5~15 个 |
+| tags | string | ✅ | 逗号分隔关键词,描述视频主题,如 `推拉门,极简风格,铝合金` |
+| proportion | string | ✅ | 视频比例: `9:16`(竖屏) / `3:4`(竖屏宽) / `1:1`(方形) |
+| video_duration | object | ✅ | 时长范围 `{ min: 10, max: 20 }`,min: 5/10/15/20/25,max: 10/15/20/25/30 |
+| pre_id | string | ✅ | 预定视频ID,纯数字 `Date.now().toString()`,多个用逗号分隔 |
+| compose_number | integer | ❌ | 生成数量,默认1,最大50 |
+| ai_voice | 0\|1 | ❌ | AI 配音,默认1 |
+| ai_bgm | 0\|1 | ❌ | AI 背景音乐,默认1 |
+| ai_flower | 0\|1 | ❌ | AI 特效,默认1 |
+| ai_subtitle | 0\|1 | ❌ | AI 字幕,默认0 |
+| original_voice | 0\|1 | ❌ | 保留原始音频,默认0 |
+
+> 以下参数已预置,Agent 无需传入:`account_id`、`callback_url`、`appKey`、`appSecret`
+
+## 执行流程
+
+1. **素材预处理**(Agent 负责)
+   - 确认图片格式为 `jpg/jpeg/png/gif`,视频为 `mp4/webm`
+   - Quickly 不支持的格式(webp/heic/bmp/mov)→ 下载后转换并重新上传CDN
+   - URL 含非 ASCII 字符 → 下载后重新上传 CDN 获取干净 URL
+   - 确保 URL 在国内可达(使用 `file-cloud.fmode.cn` 或 `file-cloud-qn.fmode.cn`)
+   - **建议**:用 Canvas/System.Drawing 重编码为 baseline JPEG (quality=0.9)
+
+2. **生成签名**
+   ```
+   timestamp = Date.now().toString()
+   sign = MD5(timestamp + '#' + appSecret).toLowerCase()   // 32位小写hex
+   ```
+
+3. **提交任务**(通过中转服务)
+   ```
+   POST https://server.fmode.cn/api/functions/cut/onemerge
+   Content-Type: application/json
+   Body: { "action": "relay", "relayData": "<JSON string>" }
+   ```
+   > ⚠️ **HTTP body 必须以 UTF-8 编码发送**(tags 含中文,非 UTF-8 会导致静默失败)
+
+4. **获取 task_id** → 传入 `quickly-video-query` 轮询
+
+5. **轮询结果** → 调用 `quickly-video-query(task_id)`,每15秒一次,最多40次(约10分钟)
+
+6. **返回视频** → 将 videoUrl / coverUrl 返回给用户
+
+## 调用的底层 Skill
+- `quickly-video-query` — 轮询视频生成结果(Step 5)
+- `quickly-video-library` — 可选,查看历史视频库
+
+## 返回格式
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "task_id": "2039371716671352832"
+  },
+  "request_id": "abc123"
+}
+```
+
+## 核心业务场景
+- 商家「一键成片」:选择产品图片 → AI 自动生成短视频 → 发布到抖音/快手
+- 批量视频生成:多组素材 + 不同关键词 → 批量提交,轮询获取结果
+- 内容营销辅助:产品实景图 → 自动配音配乐 → 9:16 竖屏视频
+
+## 素材要求速查
+
+| 条件 | 要求 | 不满足时的处理 |
+|------|------|---------------|
+| 格式 | jpg/jpeg/png/gif (图片), mp4/webm (视频) | 转换后重新上传 CDN |
+| URL 编码 | 纯 ASCII,无中文字符 | 重新上传 CDN 获取新 URL |
+| 可达性 | 国内 CDN 可直接访问 | 下载后上传到国内 CDN |
+| 图片质量 | 800~2000px,内容相关,清晰 | 重编码为 baseline JPEG |
+| 数量 | 建议 5~15 个素材 | 最少 1 个,效果随数量提升 |
+
+## 注意事项
+
+1. **🔴 UTF-8 编码**:HTTP body 必须 UTF-8。Node.js/Python 默认支持;PowerShell 需 `[System.Text.Encoding]::UTF8.GetBytes()` 显式转换
+2. **签名不解码**:appKey 和 appSecret 均为原始字符串,不做 base64 解码
+3. **静默失败**:API 返回 task_id 不代表一定生成视频,需通过 query 轮询确认
+4. **国内 CDN**:素材 URL 必须国内可达,境外 CDN 会导致静默失败
+
+## 依赖
+- Quickly 开放平台账号(appKey/appSecret,已预置)
+- `server.fmode.cn` 云函数中转(CORS + 回调接收)
+- 国内公网可访问 CDN(如七牛 `file-cloud.fmode.cn`)

+ 248 - 0
video-creation/quickly-video-create/api-config.json

@@ -0,0 +1,248 @@
+{
+  "name": "quickly-video-create",
+  "displayName": "一键成片 - 创建生成任务",
+  "description": "调用 Quickly 开放平台,基于图片/视频素材一键生成短视频。传入素材URL列表和关键词,返回 task_id,通过 quickly-video-query 轮询获取视频下载链接。",
+  "category": "video-creation",
+  "version": "1.0.0",
+  "endpoint": {
+    "method": "POST",
+    "url": "https://server.fmode.cn/api/functions/cut/onemerge",
+    "headers": {
+      "Content-Type": "application/json"
+    }
+  },
+  "parameters": {
+    "type": "object",
+    "required": ["material_list", "tags", "proportion", "video_duration", "pre_id"],
+    "properties": {
+      "material_list": {
+        "type": "array",
+        "description": "素材列表,每项包含 type(pic|video)和 value(公网可访问URL)。图片支持 jpg/jpeg/png/gif,视频支持 mp4/webm。webp/非ASCII URL 需先转换,见 materialFormatRules。",
+        "items": {
+          "type": "object",
+          "required": ["type", "value"],
+          "properties": {
+            "type": {
+              "type": "string",
+              "enum": ["pic", "video"],
+              "description": "素材类型:pic=图片,video=视频"
+            },
+            "value": {
+              "type": "string",
+              "description": "素材的公网可访问URL,必须为纯ASCII字符,格式为 jpg/jpeg/png/gif(图片)或 mp4/webm(视频)"
+            }
+          }
+        },
+        "minItems": 1,
+        "maxItems": 50,
+        "recommended": "建议 5~15 个素材,效果最佳"
+      },
+      "tags": {
+        "type": "string",
+        "description": "逗号分隔的关键词,描述视频主题内容,由调用方根据业务场景自行提供",
+        "example": "推拉门,极简风格,铝合金,隔音"
+      },
+      "proportion": {
+        "type": "string",
+        "enum": ["9:16", "3:4", "1:1"],
+        "description": "视频比例:9:16=竖屏(1080×1920,抖音/快手主流),3:4=竖屏宽(900×1200),1:1=方形(1080×1080)",
+        "default": "9:16"
+      },
+      "video_duration": {
+        "type": "object",
+        "description": "视频时长范围(秒)",
+        "required": ["min", "max"],
+        "properties": {
+          "min": {
+            "type": "integer",
+            "enum": [5, 10, 15, 20, 25],
+            "description": "最短时长(秒)",
+            "default": 10
+          },
+          "max": {
+            "type": "integer",
+            "enum": [10, 15, 20, 25, 30],
+            "description": "最长时长(秒)",
+            "default": 20
+          }
+        }
+      },
+      "pre_id": {
+        "type": "string",
+        "description": "预定视频ID,纯数字格式,多个视频用逗号分隔(如 '1711234567890' 或 '1711234567890,1711234567891')。使用 Date.now() 生成基础ID,每个视频递增1。",
+        "example": "1711234567890"
+      },
+      "compose_number": {
+        "type": "integer",
+        "description": "生成视频数量,1~50",
+        "default": 1,
+        "minimum": 1,
+        "maximum": 50
+      },
+      "ai_voice": {
+        "type": "integer",
+        "enum": [0, 1],
+        "description": "是否开启 AI 配音(0=关闭,1=开启)",
+        "default": 1
+      },
+      "ai_bgm": {
+        "type": "integer",
+        "enum": [0, 1],
+        "description": "是否开启 AI 背景音乐(0=关闭,1=开启)",
+        "default": 1
+      },
+      "ai_flower": {
+        "type": "integer",
+        "enum": [0, 1],
+        "description": "是否开启 AI 特效转场(0=关闭,1=开启)",
+        "default": 1
+      },
+      "ai_subtitle": {
+        "type": "integer",
+        "enum": [0, 1],
+        "description": "是否开启 AI 字幕(0=关闭,1=开启)",
+        "default": 0
+      },
+      "original_voice": {
+        "type": "integer",
+        "enum": [0, 1],
+        "description": "是否保留视频素材原始音频(0=关闭,1=开启)",
+        "default": 0
+      }
+    }
+  },
+  "materialFormatRules": {
+    "supportedImageFormats": ["jpg", "jpeg", "png", "gif"],
+    "supportedVideoFormats": ["mp4", "webm"],
+    "unsupportedImageFormats": ["webp", "heic", "bmp", "tiff"],
+    "unsupportedVideoFormats": ["mov", "avi", "mkv", "flv", "wmv"],
+    "conversionRules": [
+      {
+        "trigger": "图片格式为 webp 或不在支持列表中",
+        "solution": "通过浏览器 Canvas API 加载图片 → 导出为 JPEG (quality=0.9) → 上传至公网可访问的 CDN → 使用返回的新 URL",
+        "uploadPrefix": "ai-video/converted/"
+      },
+      {
+        "trigger": "URL 含非ASCII字符(中文文件名、特殊符号等)",
+        "solution": "decodeURIComponent(url) 检测到非ASCII字符后,重新下载并上传 CDN 获取干净 URL",
+        "uploadPrefix": "ai-video/image/"
+      },
+      {
+        "trigger": "本地上传文件",
+        "solution": "直接上传 CDN,图片前缀 ai-video/image/,视频前缀 ai-video/video/"
+      },
+      {
+        "trigger": "视频格式不支持(mov/avi等)",
+        "solution": "跳过该素材,提示用户转换为 mp4 后重新上传"
+      }
+    ],
+    "cdnUpload": {
+      "note": "所有素材需上传至国内可达的公网 CDN(如七牛、阿里云OSS),确保返回纯 ASCII URL。Quickly 服务器在国内,无法访问境外CDN,否则任务静默失败。"
+    }
+  },
+  "requestTransform": {
+    "description": "通过 server.fmode.cn 中转:将业务参数包装为 relay 请求,中转服务负责签名并调用 Quickly API",
+    "body": {
+      "action": "relay",
+      "relayData": "JSON.stringify({ apiPath: '/v2/video/vlog/create', apiBody: {业务参数}, appKey: '{{appKey}}', timestamp: '{{timestamp}}', sign: 'MD5(timestamp#appSecret)' })"
+    },
+    "signGeneration": {
+      "step1": "timestamp = Date.now().toString()",
+      "step2": "signStr = timestamp + '#' + appSecret  // 直接使用原始字符串,不做base64解码",
+      "step3": "sign = MD5(signStr).toLowerCase() [32位小写]"
+    }
+  },
+  "response": {
+    "type": "object",
+    "description": "Quickly API 返回结果",
+    "properties": {
+      "code": {
+        "type": "integer",
+        "description": "0 或 200 表示成功,其他值表示错误"
+      },
+      "message": {
+        "type": "string",
+        "description": "响应描述信息"
+      },
+      "data": {
+        "type": "object",
+        "properties": {
+          "task_id": {
+            "type": "string",
+            "description": "任务ID,传入 quickly-video-query 进行轮询查询"
+          }
+        }
+      },
+      "request_id": {
+        "type": "string",
+        "description": "请求唯一ID,用于联系 Quickly 客服排查问题"
+      }
+    }
+  },
+  "pollingConfig": {
+    "description": "获取 task_id 后调用 quickly-video-query 轮询视频生成结果",
+    "interval": 15000,
+    "maxAttempts": 40
+  },
+  "usageExamples": [
+    {
+      "name": "图片素材生成竖屏短视频(9:16)",
+      "description": "传入图片和视频素材,生成9:16竖屏短视频,适合抖音/快手发布",
+      "input": {
+        "material_list": [
+          { "type": "pic", "value": "https://cdn.example.com/images/img1.jpg" },
+          { "type": "pic", "value": "https://cdn.example.com/images/img2.jpg" },
+          { "type": "pic", "value": "https://cdn.example.com/images/img3.jpg" },
+          { "type": "video", "value": "https://cdn.example.com/videos/clip1.mp4" }
+        ],
+        "tags": "推拉门,极简风格,铝合金,隔音,全屋定制",
+        "proportion": "9:16",
+        "video_duration": { "min": 10, "max": 20 },
+        "pre_id": "1711234567890",
+        "compose_number": 3,
+        "ai_voice": 1,
+        "ai_bgm": 1,
+        "ai_flower": 1,
+        "ai_subtitle": 0
+      },
+      "expectedOutput": {
+        "code": 0,
+        "data": { "task_id": "987654321" }
+      }
+    },
+    {
+      "name": "图片素材生成方形视频(1:1)",
+      "description": "生成1:1方形视频,适合朋友圈/公众号发布",
+      "input": {
+        "material_list": [
+          { "type": "pic", "value": "https://cdn.example.com/images/img1.jpg" },
+          { "type": "pic", "value": "https://cdn.example.com/images/img2.jpg" }
+        ],
+        "tags": "全屋定制,整体家装,收纳设计",
+        "proportion": "1:1",
+        "video_duration": { "min": 10, "max": 15 },
+        "pre_id": "1711234567900",
+        "compose_number": 1,
+        "ai_voice": 1,
+        "ai_bgm": 1,
+        "ai_subtitle": 1
+      }
+    }
+  ],
+  "errorHandling": {
+    "apiErrors": [
+      { "code": "非0/200", "action": "抛出错误,提示用户检查素材格式和网络" },
+      { "code": "素材URL不可访问", "action": "Quickly API 会在回调中返回 error_msg,前端需处理 success=false 的回调" }
+    ],
+    "materialErrors": [
+      { "condition": "所有素材转换失败", "action": "中止生成,提示'没有可用的素材,请添加 JPG/PNG 图片或 MP4 视频后重试'" },
+      { "condition": "有效素材列表为空", "action": "提前退出,不调用API" }
+    ]
+  },
+  "timeout": 30000,
+  "retry": {
+    "maxAttempts": 2,
+    "delay": 2000,
+    "backoffMultiplier": 2
+  }
+}

+ 88 - 0
video-creation/quickly-video-library/SKILL.md

@@ -0,0 +1,88 @@
+---
+name: quickly-video-library
+description: 查询一键成片历史视频列表,支持按taskId、日期筛选和分页,并可记录视频下载次数
+version: 1.1.0
+---
+
+# 一键成片 — 视频库管理 (Quickly Video Library)
+
+## 技能目的
+查询历史生成的短视频列表,支持分页、按任务/日期筛选,并记录视频下载次数。可独立使用,也可作为一键成片工作流的可选下游。
+
+## 调用链(Workflow)
+
+```
+独立使用: quickly-video-library(list) → 浏览全部历史视频
+  ↓
+工作流下游: quickly-video-create → quickly-video-query → quickly-video-library(taskId) → 查看本次生成的视频
+  ↓
+用户保存视频后: quickly-video-library(recordDownload, videoId) → 下载计数+1
+```
+
+## 输入参数
+
+### action: list(分页查询)
+
+| 参数 | 类型 | 必填 | 说明 |
+|------|------|------|------|
+| page | integer | ❌ | 页码,从1开始,默认1 |
+| pageSize | integer | ❌ | 每页条数,默认20 |
+| taskId | string | ❌ | 按任务ID筛选(不传则查全部) |
+| dateStart | string | ❌ | 开始日期 ISO 8601,如 `2026-03-01T00:00:00.000Z` |
+| dateEnd | string | ❌ | 结束日期 ISO 8601 |
+
+### action: recordDownload(记录下载)
+
+| 参数 | 类型 | 必填 | 说明 |
+|------|------|------|------|
+| videoId | string | ✅ | 视频 objectId(优先)或 preId |
+
+## 执行流程
+
+1. **浏览视频库**:调用 `list` 获取分页视频列表
+   ```
+   POST https://server.fmode.cn/api/functions
+   Content-Type: application/json
+   Body: { "id": "sWvRr8RvPT", "_ApplicationId": "ncloudmaster", "action": "list", "page": 1, "pageSize": 20 }
+   ```
+2. **按任务筛选**:传入 `taskId` 查看某次生成任务的所有视频
+3. **按日期筛选**:传入 `dateStart` + `dateEnd` 查看某时间段内的视频
+4. **记录下载**:用户保存视频后调用 `recordDownload`,全局下载计数+1
+
+## 调用的底层 Skill
+- 无(本 Skill 为独立查询,不依赖其他 Skill)
+- 被 `quickly-video-create` 工作流可选调用
+
+## 返回格式
+```json
+{
+  "code": 200,
+  "success": true,
+  "total": 15,
+  "data": [
+    {
+      "objectId": "xBtdUG9gTv",
+      "taskId": "2039371716671352832",
+      "preId": "1775059079891",
+      "coverUrl": "https://img.kuaizi.co/video/.../cover.jpg",
+      "videoUrl": "https://img.kuaizi.co/video/.../video.mp4",
+      "videoName": "客厅隔断推拉门新选择",
+      "videoDuration": 15.2,
+      "downloadCount": 3,
+      "createdAt": "2026-04-01T15:59:20.241Z"
+    }
+  ]
+}
+```
+
+## 核心业务场景
+- 商家浏览历史生成视频,选择满意的下载发布
+- Agent 工作流:生成视频后引导用户查看视频库
+- 运营统计:按日期范围查看视频生成量和下载次数
+
+## 注意事项
+- 移动端保存视频必须使用原始视频 URL(非 blob URL),否则微信长按无法触发保存
+- 支持 Web Share API 时优先调用 `navigator.share()`;不支持时显示长按保存引导
+
+## 依赖
+- Parse 云函数 `sWvRr8RvPT`(部署在 `server.fmode.cn`)

+ 183 - 0
video-creation/quickly-video-library/api-config.json

@@ -0,0 +1,183 @@
+{
+  "name": "quickly-video-library",
+  "displayName": "一键成片 - 视频库管理",
+  "description": "查询一键成片历史视频列表,支持按 taskId、日期筛选和分页,并可记录视频下载次数。",
+  "category": "video-creation",
+  "version": "1.0.0",
+  "endpoint": {
+    "method": "POST",
+    "url": "https://server.fmode.cn/api/functions",
+    "headers": {
+      "Content-Type": "application/json"
+    }
+  },
+  "actions": {
+    "list": {
+      "description": "分页查询视频库(主操作)",
+      "parameters": {
+        "type": "object",
+        "required": [],
+        "properties": {
+          "page": {
+            "type": "integer",
+            "description": "页码,从1开始",
+            "default": 1,
+            "minimum": 1
+          },
+          "pageSize": {
+            "type": "integer",
+            "description": "每页条数",
+            "default": 20,
+            "minimum": 1,
+            "maximum": 100
+          },
+          "taskId": {
+            "type": "string",
+            "description": "按任务ID筛选,不传则查全部"
+          },
+          "dateStart": {
+            "type": "string",
+            "description": "开始日期 ISO 8601,如 '2026-03-01T00:00:00.000Z'"
+          },
+          "dateEnd": {
+            "type": "string",
+            "description": "结束日期 ISO 8601,如 '2026-03-31T23:59:59.000Z'"
+          }
+        }
+      }
+    },
+    "recordDownload": {
+      "description": "记录视频下载次数(用户保存视频后调用)",
+      "parameters": {
+        "videoId": {
+          "type": "string",
+          "required": true,
+          "description": "视频 objectId(优先)或 preId"
+        }
+      }
+    }
+  },
+  "requestTransform": {
+    "description": "根据 action 构建 Parse 云函数调用参数",
+    "list": {
+      "body": {
+        "id": "sWvRr8RvPT",
+        "_ApplicationId": "ncloudmaster",
+        "action": "list",
+        "page": "{{page}}",
+        "pageSize": "{{pageSize}}",
+        "taskId": "{{taskId}}",
+        "dateStart": "{{dateStart}}",
+        "dateEnd": "{{dateEnd}}"
+      }
+    },
+    "recordDownload": {
+      "body": {
+        "id": "sWvRr8RvPT",
+        "_ApplicationId": "ncloudmaster",
+        "action": "recordDownload",
+        "videoId": "{{videoId}}"
+      }
+    }
+  },
+  "response": {
+    "type": "object",
+    "description": "视频库查询结果",
+    "properties": {
+      "code": {
+        "type": "integer",
+        "description": "200 = 成功"
+      },
+      "success": {
+        "type": "boolean"
+      },
+      "total": {
+        "type": "integer",
+        "description": "符合筛选条件的总视频数"
+      },
+      "data": {
+        "type": "array",
+        "description": "当前页视频列表",
+        "items": {
+          "type": "object",
+          "properties": {
+            "objectId": { "type": "string", "description": "视频记录唯一ID" },
+            "taskId": { "type": "string", "description": "生成任务ID" },
+            "preId": { "type": "string", "description": "预定视频ID" },
+            "coverUrl": { "type": "string", "description": "封面图URL" },
+            "videoUrl": { "type": "string", "description": "视频播放URL(mp4)" },
+            "videoName": { "type": "string", "description": "视频名称" },
+            "videoDuration": { "type": "number", "description": "时长(秒)" },
+            "downloadCount": { "type": "integer", "description": "全局下载次数(所有用户累计)" },
+            "createdAt": { "type": "string", "description": "生成时间 ISO 8601" }
+          }
+        }
+      }
+    }
+  },
+  "mobileDownloadStrategy": {
+    "description": "移动端保存视频到相册的策略",
+    "steps": [
+      {
+        "priority": 1,
+        "condition": "navigator.share && navigator.canShare({ files: [videoFile] })",
+        "action": "调用 navigator.share() 分享视频文件",
+        "onSuccess": "标记 actuallySaved=true,显示'视频已保存'",
+        "onCancel": "AbortError 时 actuallySaved=false,不标记已保存"
+      },
+      {
+        "priority": 2,
+        "condition": "Share API 不可用(微信/UC/QQ浏览器等)",
+        "action": "显示保存引导弹窗,播放原始视频URL(非blob URL)",
+        "videoAttributes": ["controls", "autoplay", "playsinline", "webkit-playsinline", "x5-video-player-type=h5", "preload=auto"],
+        "tip": "长按上方视频,选择「保存视频」即可保存到手机相册",
+        "onClose": "关闭弹窗时标记已保存,调用 recordDownload",
+        "warning": "必须使用原始HTTP视频URL,不能用 blob URL,否则微信长按无法触发保存"
+      }
+    ]
+  },
+  "usageExamples": [
+    {
+      "name": "查询所有视频(首页加载)",
+      "input": {
+        "action": "list",
+        "page": 1,
+        "pageSize": 20
+      },
+      "description": "加载视频库第一页"
+    },
+    {
+      "name": "按任务ID查询视频",
+      "input": {
+        "action": "list",
+        "taskId": "987654321"
+      },
+      "description": "查询指定任务生成的所有视频"
+    },
+    {
+      "name": "按日期筛选(近7天)",
+      "input": {
+        "action": "list",
+        "page": 1,
+        "pageSize": 20,
+        "dateStart": "2026-03-24T00:00:00.000Z",
+        "dateEnd": "2026-03-31T23:59:59.000Z"
+      },
+      "description": "查询近7天的视频"
+    },
+    {
+      "name": "记录视频下载",
+      "input": {
+        "action": "recordDownload",
+        "videoId": "abc123objectId"
+      },
+      "description": "用户保存视频后调用,全局下载计数+1"
+    }
+  ],
+  "timeout": 15000,
+  "retry": {
+    "maxAttempts": 3,
+    "delay": 1000,
+    "backoffMultiplier": 2
+  }
+}

+ 86 - 0
video-creation/quickly-video-query/SKILL.md

@@ -0,0 +1,86 @@
+---
+name: quickly-video-query
+description: 轮询查询一键成片任务的视频生成结果,返回视频URL/封面URL/时长列表
+version: 1.1.0
+---
+
+# 一键成片 — 结果查询 (Quickly Video Query)
+
+## 技能目的
+轮询查询 `quickly-video-create` 提交的视频生成任务结果。Quickly AI 异步生成视频(通常 2~5 分钟),本 Skill 通过云函数定时查询直至获取结果。
+
+## 调用链(Workflow)
+
+```
+前置: quickly-video-create(materials) → task_id
+  ↓
+本步: quickly-video-query(task_id) → 轮询(每15秒×最多40次)
+  ↓
+成功: 返回 videoUrl / coverUrl / videoDuration 给用户
+失败: 超时10分钟无结果 → 提示用户检查素材
+  ↓
+可选: quickly-video-library → 查看历史视频库
+```
+
+## 输入参数
+
+| 参数 | 类型 | 必填 | 说明 |
+|------|------|------|------|
+| taskId | string | ✅ | `quickly-video-create` 返回的 `data.task_id` |
+
+## 执行流程
+
+1. 接收上游 `quickly-video-create` 返回的 `task_id`
+2. 调用云函数查询视频结果:
+   ```
+   POST https://server.fmode.cn/api/functions
+   Content-Type: application/json
+   Body: { "id": "sWvRr8RvPT", "_ApplicationId": "ncloudmaster", "action": "query", "taskId": "<task_id>" }
+   ```
+3. 判断结果:
+   - `data` **非空** → 视频生成完成,返回结果
+   - `data` **为空数组** → 仍在生成,等待15秒后重复步骤2
+4. 达到40次仍无结果 → 判定为生成失败,提示用户
+
+## 轮询策略
+
+| 参数 | 值 |
+|------|-----|
+| 轮询间隔 | 15 秒 |
+| 最大次数 | 40 次(约10分钟) |
+| 成功条件 | `data.length > 0` |
+| 超时处理 | 提示用户检查素材质量和URL可达性 |
+
+## 调用的底层 Skill
+- 无(本 Skill 为原子级查询,被 `quickly-video-create` 在 Step 5 调用)
+
+## 返回格式
+```json
+{
+  "code": 200,
+  "success": true,
+  "data": [
+    {
+      "objectId": "xBtdUG9gTv",
+      "taskId": "2039371716671352832",
+      "preId": "1775059079891",
+      "coverUrl": "https://img.kuaizi.co/video/.../cover.jpg",
+      "videoUrl": "https://img.kuaizi.co/video/.../video.mp4",
+      "videoName": "客厅隔断推拉门新选择",
+      "videoDuration": 15.2,
+      "status": "success",
+      "createdAt": "2026-04-01T15:59:20.241Z"
+    }
+  ]
+}
+```
+
+> ℹ️ 云函数只返回 `status='success'` 的记录。空数组 = 仍在生成或生成失败。
+
+## 核心业务场景
+- 商家「一键成片」等待视频生成(前端轮询 + 加载动画)
+- Agent 工作流:create 后自动轮询,获取视频 URL 后返回给用户
+- 批量任务监控:多个 task_id 并行轮询
+
+## 依赖
+- Parse 云函数 `sWvRr8RvPT`(部署在 `server.fmode.cn`)

+ 129 - 0
video-creation/quickly-video-query/api-config.json

@@ -0,0 +1,129 @@
+{
+  "name": "quickly-video-query",
+  "displayName": "一键成片 - 查询生成结果",
+  "description": "通过 Parse 云函数查询 Quickly 一键成片任务的视频生成结果。用于轮询等待 AI 视频生成完成,返回视频URL/封面URL/时长列表。",
+  "category": "video-creation",
+  "version": "1.0.0",
+  "endpoint": {
+    "method": "POST",
+    "url": "https://server.fmode.cn/api/functions",
+    "headers": {
+      "Content-Type": "application/json"
+    }
+  },
+  "parameters": {
+    "type": "object",
+    "required": ["taskId"],
+    "properties": {
+      "taskId": {
+        "type": "string",
+        "description": "quickly-video-create 返回的 task_id,用于查询对应任务的视频生成结果"
+      }
+    }
+  },
+  "requestTransform": {
+    "description": "通过 Parse 云函数查询,固定传入云函数ID和action",
+    "body": {
+      "id": "sWvRr8RvPT",
+      "_ApplicationId": "ncloudmaster",
+      "action": "query",
+      "taskId": "{{taskId}}"
+    }
+  },
+  "response": {
+    "type": "object",
+    "description": "视频生成结果",
+    "properties": {
+      "code": {
+        "type": "integer",
+        "description": "200 = 成功"
+      },
+      "success": {
+        "type": "boolean",
+        "description": "true = 数据有效"
+      },
+      "data": {
+        "type": "array",
+        "description": "视频结果列表,生成中时为空数组",
+        "items": {
+          "type": "object",
+          "properties": {
+            "objectId": {
+              "type": "string",
+              "description": "视频记录唯一ID(用于 recordDownload 接口)"
+            },
+            "taskId": {
+              "type": "string",
+              "description": "对应的任务ID"
+            },
+            "preId": {
+              "type": "string",
+              "description": "预定视频ID(对应创建任务时传入的 pre_id)"
+            },
+            "coverUrl": {
+              "type": "string",
+              "description": "视频封面图URL"
+            },
+            "videoUrl": {
+              "type": "string",
+              "description": "视频播放/下载URL(mp4格式)"
+            },
+            "videoName": {
+              "type": "string",
+              "description": "视频名称"
+            },
+            "videoDuration": {
+              "type": "number",
+              "description": "视频时长(秒)"
+            },
+            "status": {
+              "type": "string",
+              "description": "始终为 success(云函数 query 只返回 status='success' 的记录)"
+            },
+            "createdAt": {
+              "type": "string",
+              "description": "视频生成时间(ISO 8601)"
+            }
+          }
+        }
+      }
+    }
+  },
+  "pollingConfig": {
+    "interval": 15000,
+    "maxAttempts": 40,
+    "successCondition": "data.length > 0",
+    "stillPendingCondition": "data.length === 0 (cloud function only returns status='success' records; empty = still processing or failed)",
+    "timeoutAction": "轮询超时40次仍无结果,通常表示生成失败(素材URL不可达、格式不支持、Quickly 服务异常等)"
+  },
+  "usageExamples": [
+    {
+      "name": "查询视频生成结果",
+      "input": {
+        "taskId": "987654321"
+      },
+      "description": "轮询查询任务 987654321 的视频生成结果",
+      "expectedOutput": {
+        "code": 200,
+        "success": true,
+        "data": [
+          {
+            "objectId": "abc123",
+            "taskId": "987654321",
+            "preId": "1711234567890",
+            "coverUrl": "https://cdn.kuaizi.co/covers/xxx.jpg",
+            "videoUrl": "https://cdn.kuaizi.co/videos/xxx.mp4",
+            "videoName": "推拉门_极简风格",
+            "videoDuration": 15,
+            "status": "success"
+          }
+        ]
+      }
+    }
+  ],
+  "timeout": 15000,
+  "retry": {
+    "maxAttempts": 1,
+    "delay": 0
+  }
+}

+ 48 - 2
voc/asin-reverse-keywords/api-config.json

@@ -9,7 +9,7 @@
     "url": "https://server.fmode.cn/api/voc-ecom/forward",
     "headers": {
       "Content-Type": "application/json",
-    "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7"
+    "Authorization": "Bearer {{vocToken}}"
     }
   },
   "parameters": {
@@ -92,5 +92,51 @@
     "maxAttempts": 3,
     "delay": 1000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 48 - 2
voc/asin-sales-volume/api-config.json

@@ -9,7 +9,7 @@
     "url": "https://server.fmode.cn/api/voc-ecom/forward",
     "headers": {
       "Content-Type": "application/json",
-    "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7"
+    "Authorization": "Bearer {{vocToken}}"
     }
   },
   "parameters": {
@@ -94,5 +94,51 @@
     "maxAttempts": 3,
     "delay": 1000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 48 - 2
voc/category-products/api-config.json

@@ -9,7 +9,7 @@
     "url": "https://server.fmode.cn/api/voc-ecom/forward",
     "headers": {
       "Content-Type": "application/json",
-    "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7"
+    "Authorization": "Bearer {{vocToken}}"
     }
   },
   "parameters": {
@@ -106,5 +106,51 @@
     "maxAttempts": 3,
     "delay": 1000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 48 - 2
voc/category-tree/api-config.json

@@ -9,7 +9,7 @@
     "url": "https://server.fmode.cn/api/voc-ecom/forward",
     "headers": {
       "Content-Type": "application/json",
-    "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7"
+    "Authorization": "Bearer {{vocToken}}"
     }
   },
   "parameters": {
@@ -78,5 +78,51 @@
     "maxAttempts": 3,
     "delay": 1000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 48 - 2
voc/keyword-product-ranking/api-config.json

@@ -9,7 +9,7 @@
     "url": "https://server.fmode.cn/api/voc-ecom/forward",
     "headers": {
       "Content-Type": "application/json",
-    "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7"
+    "Authorization": "Bearer {{vocToken}}"
     }
   },
   "parameters": {
@@ -103,5 +103,51 @@
     "maxAttempts": 3,
     "delay": 1000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 48 - 2
voc/keyword-search-trend/api-config.json

@@ -9,7 +9,7 @@
     "url": "https://server.fmode.cn/api/voc-ecom/forward",
     "headers": {
       "Content-Type": "application/json",
-    "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7"
+    "Authorization": "Bearer {{vocToken}}"
     }
   },
   "parameters": {
@@ -92,5 +92,51 @@
     "maxAttempts": 3,
     "delay": 1000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 48 - 2
voc/keyword-search/api-config.json

@@ -9,7 +9,7 @@
     "url": "https://server.fmode.cn/api/voc-ecom/forward",
     "headers": {
       "Content-Type": "application/json",
-    "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7"
+    "Authorization": "Bearer {{vocToken}}"
     }
   },
   "parameters": {
@@ -99,5 +99,51 @@
     "maxAttempts": 3,
     "delay": 1000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 48 - 2
voc/product-detail-query/api-config.json

@@ -9,7 +9,7 @@
     "url": "https://server.fmode.cn/api/voc-ecom/forward",
     "headers": {
       "Content-Type": "application/json",
-    "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7"
+    "Authorization": "Bearer {{vocToken}}"
     }
   },
   "parameters": {
@@ -216,5 +216,51 @@
     "maxAttempts": 3,
     "delay": 1000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 48 - 2
voc/product-monitor/api-config.json

@@ -9,7 +9,7 @@
     "url": "https://server.fmode.cn/api/voc-ecom/forward",
     "headers": {
       "Content-Type": "application/json",
-    "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7"
+    "Authorization": "Bearer {{vocToken}}"
     }
   },
   "parameters": {
@@ -91,5 +91,51 @@
     "maxAttempts": 3,
     "delay": 1000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 48 - 2
voc/product-reviews-query/api-config.json

@@ -9,7 +9,7 @@
     "url": "https://server.fmode.cn/api/voc-ecom/forward",
     "headers": {
       "Content-Type": "application/json",
-    "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7"
+    "Authorization": "Bearer {{vocToken}}"
     }
   },
   "parameters": {
@@ -211,5 +211,51 @@
     "maxAttempts": 3,
     "delay": 1000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 48 - 2
voc/product-search/api-config.json

@@ -9,7 +9,7 @@
     "url": "https://server.fmode.cn/api/voc-ecom/forward",
     "headers": {
       "Content-Type": "application/json",
-    "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7"
+    "Authorization": "Bearer {{vocToken}}"
     }
   },
   "parameters": {
@@ -132,5 +132,51 @@
     "maxAttempts": 3,
     "delay": 1000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

+ 48 - 2
voc/similar-products/api-config.json

@@ -9,7 +9,7 @@
     "url": "https://server.fmode.cn/api/voc-ecom/forward",
     "headers": {
       "Content-Type": "application/json",
-    "Authorization": "Bearer r:858b3ee92314d5447d1fc3cdc10462d7"
+    "Authorization": "Bearer {{vocToken}}"
     }
   },
   "parameters": {
@@ -83,5 +83,51 @@
     "maxAttempts": 3,
     "delay": 1000,
     "backoffMultiplier": 2
+  },
+  "tokenConfig": {
+    "type": "bearer",
+    "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
   }
-}
+}

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini