|
|
@@ -1,4 +1,4 @@
|
|
|
-{
|
|
|
+{
|
|
|
"name": "product-deep-analysis",
|
|
|
"displayName": "单品深度诊断",
|
|
|
"description": "针对单个ASIN进行多维度深度分析:流量架构透视、定价策略、Listing优化、VOC痛点、广告策略、市场机会,并由AI生成核心诊断和运营建议",
|
|
|
@@ -27,7 +27,9 @@
|
|
|
},
|
|
|
"competitorAsins": {
|
|
|
"type": "array",
|
|
|
- "items": { "type": "string" },
|
|
|
+ "items": {
|
|
|
+ "type": "string"
|
|
|
+ },
|
|
|
"default": [],
|
|
|
"description": "可选的竞品ASIN列表,用于对比分析"
|
|
|
}
|
|
|
@@ -40,9 +42,18 @@
|
|
|
"endpoint": "/api/ProductRequest",
|
|
|
"method": "POST",
|
|
|
"forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
|
|
|
- "headers": { "Authorization": "Bearer {{vocToken}}" },
|
|
|
- "requestBody": { "ASIN": "${asin}", "Trend": 1, "QueryTrendStartDt": "", "QueryTrendEndDt": "" },
|
|
|
- "queryParams": { "domain": "${domain}" }
|
|
|
+ "headers": {
|
|
|
+ "Authorization": "Bearer {{vocToken}}"
|
|
|
+ },
|
|
|
+ "requestBody": {
|
|
|
+ "ASIN": "${asin}",
|
|
|
+ "Trend": 1,
|
|
|
+ "QueryTrendStartDt": "",
|
|
|
+ "QueryTrendEndDt": ""
|
|
|
+ },
|
|
|
+ "queryParams": {
|
|
|
+ "domain": "${domain}"
|
|
|
+ }
|
|
|
},
|
|
|
"output": "productDetail",
|
|
|
"responseExtract": {
|
|
|
@@ -69,9 +80,15 @@
|
|
|
"endpoint": "/api/ASINRequestKeyword",
|
|
|
"method": "POST",
|
|
|
"forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
|
|
|
- "headers": { "Authorization": "Bearer {{vocToken}}" },
|
|
|
- "requestBody": { "ASIN": "${asin}" },
|
|
|
- "queryParams": { "domain": "${domain}" }
|
|
|
+ "headers": {
|
|
|
+ "Authorization": "Bearer {{vocToken}}"
|
|
|
+ },
|
|
|
+ "requestBody": {
|
|
|
+ "ASIN": "${asin}"
|
|
|
+ },
|
|
|
+ "queryParams": {
|
|
|
+ "domain": "${domain}"
|
|
|
+ }
|
|
|
},
|
|
|
"output": "asinKeywords",
|
|
|
"responseExtract": "Array<{ Keyword, KeywordCNName, SearchVolume, SearchRank, SPR, TitleDensity, ProductCount, ShareClickRate, ShareConversionRate, CPC, GrowthRate, Season, Top3Brand, Top3Asin, WordCount }>"
|
|
|
@@ -83,9 +100,15 @@
|
|
|
"endpoint": "/api/MonitorQuery",
|
|
|
"method": "POST",
|
|
|
"forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
|
|
|
- "headers": { "Authorization": "Bearer {{vocToken}}" },
|
|
|
- "requestBody": { "ASIN": "${asin}" },
|
|
|
- "queryParams": { "domain": "${domain}" }
|
|
|
+ "headers": {
|
|
|
+ "Authorization": "Bearer {{vocToken}}"
|
|
|
+ },
|
|
|
+ "requestBody": {
|
|
|
+ "ASIN": "${asin}"
|
|
|
+ },
|
|
|
+ "queryParams": {
|
|
|
+ "domain": "${domain}"
|
|
|
+ }
|
|
|
},
|
|
|
"output": "monitorData",
|
|
|
"responseExtract": "{ PriceHistory, RankHistory, RatingHistory, ReviewCountHistory, SellerCount }"
|
|
|
@@ -94,14 +117,26 @@
|
|
|
"step": 4,
|
|
|
"name": "采集评论(可选)",
|
|
|
"condition": "includeReviews == true",
|
|
|
- "loop": { "from": 1, "to": "${reviewPages}", "var": "pageIndex", "delay": 400 },
|
|
|
+ "loop": {
|
|
|
+ "from": 1,
|
|
|
+ "to": "${reviewPages}",
|
|
|
+ "var": "pageIndex",
|
|
|
+ "delay": 400
|
|
|
+ },
|
|
|
"api": {
|
|
|
"endpoint": "/api/ProductReviewsQuery",
|
|
|
"method": "POST",
|
|
|
"forwardUrl": "https://server.fmode.cn/api/voc-ecom/forward",
|
|
|
- "headers": { "Authorization": "Bearer {{vocToken}}" },
|
|
|
- "requestBody": { "ASIN": "${asin}", "PageIndex": "${pageIndex}" },
|
|
|
- "queryParams": { "domain": "${domain}" }
|
|
|
+ "headers": {
|
|
|
+ "Authorization": "Bearer {{vocToken}}"
|
|
|
+ },
|
|
|
+ "requestBody": {
|
|
|
+ "ASIN": "${asin}",
|
|
|
+ "PageIndex": "${pageIndex}"
|
|
|
+ },
|
|
|
+ "queryParams": {
|
|
|
+ "domain": "${domain}"
|
|
|
+ }
|
|
|
},
|
|
|
"output": "reviews",
|
|
|
"responseExtract": "Array<{ Star, Title, Content, ReviewsDate, ReviewedCountry, IsVP, Helpful, ConsumerName, Asin, AsinProperty }>"
|
|
|
@@ -285,29 +320,59 @@
|
|
|
"type": "object",
|
|
|
"description": "产品基本信息摘要",
|
|
|
"properties": {
|
|
|
- "asin": { "type": "string" },
|
|
|
- "title": { "type": "string" },
|
|
|
- "brand": { "type": "string" },
|
|
|
- "price": { "type": "number", "description": "美元" },
|
|
|
- "rating": { "type": "number" },
|
|
|
- "monthlySales": { "type": "integer" },
|
|
|
- "bsr": { "type": "integer" },
|
|
|
- "category": { "type": "string" }
|
|
|
+ "asin": {
|
|
|
+ "type": "string"
|
|
|
+ },
|
|
|
+ "title": {
|
|
|
+ "type": "string"
|
|
|
+ },
|
|
|
+ "brand": {
|
|
|
+ "type": "string"
|
|
|
+ },
|
|
|
+ "price": {
|
|
|
+ "type": "number",
|
|
|
+ "description": "美元"
|
|
|
+ },
|
|
|
+ "rating": {
|
|
|
+ "type": "number"
|
|
|
+ },
|
|
|
+ "monthlySales": {
|
|
|
+ "type": "integer"
|
|
|
+ },
|
|
|
+ "bsr": {
|
|
|
+ "type": "integer"
|
|
|
+ },
|
|
|
+ "category": {
|
|
|
+ "type": "string"
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
"overallScore": {
|
|
|
"type": "object",
|
|
|
"description": "综合健康评分",
|
|
|
"properties": {
|
|
|
- "score": { "type": "integer", "description": "0-100" },
|
|
|
- "verdict": { "type": "string" },
|
|
|
+ "score": {
|
|
|
+ "type": "integer",
|
|
|
+ "description": "0-100"
|
|
|
+ },
|
|
|
+ "verdict": {
|
|
|
+ "type": "string"
|
|
|
+ },
|
|
|
"breakdown": {
|
|
|
"type": "object",
|
|
|
"properties": {
|
|
|
- "keyword": { "type": "integer" },
|
|
|
- "pricing": { "type": "integer" },
|
|
|
- "rating": { "type": "integer" },
|
|
|
- "review": { "type": "integer" }
|
|
|
+ "keyword": {
|
|
|
+ "type": "integer"
|
|
|
+ },
|
|
|
+ "pricing": {
|
|
|
+ "type": "integer"
|
|
|
+ },
|
|
|
+ "rating": {
|
|
|
+ "type": "integer"
|
|
|
+ },
|
|
|
+ "review": {
|
|
|
+ "type": "integer"
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -322,15 +387,48 @@
|
|
|
"items": {
|
|
|
"type": "object",
|
|
|
"properties": {
|
|
|
- "keyword": { "type": "string" },
|
|
|
- "keywordCN": { "type": "string" },
|
|
|
- "trafficShare": { "type": "number", "description": "流量占比%" },
|
|
|
- "searchVolume": { "type": "integer", "description": "月搜索量" },
|
|
|
- "searchRank": { "type": "integer", "description": "自然排名" },
|
|
|
- "competitionLevel": { "type": "string", "enum": ["low", "medium", "high"] },
|
|
|
- "valueScore": { "type": "integer", "description": "0-100" },
|
|
|
- "diagnosis": { "type": "string", "description": "竞争分析诊断文本" },
|
|
|
- "priority": { "type": "string", "enum": ["core", "secondary", "longtail"] }
|
|
|
+ "keyword": {
|
|
|
+ "type": "string"
|
|
|
+ },
|
|
|
+ "keywordCN": {
|
|
|
+ "type": "string"
|
|
|
+ },
|
|
|
+ "trafficShare": {
|
|
|
+ "type": "number",
|
|
|
+ "description": "流量占比%"
|
|
|
+ },
|
|
|
+ "searchVolume": {
|
|
|
+ "type": "integer",
|
|
|
+ "description": "月搜索量"
|
|
|
+ },
|
|
|
+ "searchRank": {
|
|
|
+ "type": "integer",
|
|
|
+ "description": "自然排名"
|
|
|
+ },
|
|
|
+ "competitionLevel": {
|
|
|
+ "type": "string",
|
|
|
+ "enum": [
|
|
|
+ "low",
|
|
|
+ "medium",
|
|
|
+ "high"
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ "valueScore": {
|
|
|
+ "type": "integer",
|
|
|
+ "description": "0-100"
|
|
|
+ },
|
|
|
+ "diagnosis": {
|
|
|
+ "type": "string",
|
|
|
+ "description": "竞争分析诊断文本"
|
|
|
+ },
|
|
|
+ "priority": {
|
|
|
+ "type": "string",
|
|
|
+ "enum": [
|
|
|
+ "core",
|
|
|
+ "secondary",
|
|
|
+ "longtail"
|
|
|
+ ]
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
@@ -338,9 +436,18 @@
|
|
|
"type": "object",
|
|
|
"description": "流量结构摘要",
|
|
|
"properties": {
|
|
|
- "organicPct": { "type": "number", "description": "自然流量占比" },
|
|
|
- "adPct": { "type": "number", "description": "广告流量占比" },
|
|
|
- "topKeywordConcentration": { "type": "number", "description": "Top5关键词流量集中度" }
|
|
|
+ "organicPct": {
|
|
|
+ "type": "number",
|
|
|
+ "description": "自然流量占比"
|
|
|
+ },
|
|
|
+ "adPct": {
|
|
|
+ "type": "number",
|
|
|
+ "description": "广告流量占比"
|
|
|
+ },
|
|
|
+ "topKeywordConcentration": {
|
|
|
+ "type": "number",
|
|
|
+ "description": "Top5关键词流量集中度"
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -349,22 +456,62 @@
|
|
|
"type": "object",
|
|
|
"description": "定价策略分析",
|
|
|
"properties": {
|
|
|
- "currentPrice": { "type": "number" },
|
|
|
- "optimalPrice": { "type": "number" },
|
|
|
- "recommendedRange": { "type": "object", "properties": { "min": { "type": "number" }, "max": { "type": "number" } } },
|
|
|
- "currentPosition": { "type": "string", "enum": ["below", "within", "above"] },
|
|
|
- "bandName": { "type": "string" },
|
|
|
- "goldenBand": { "type": "string", "description": "量利平衡最优带名称" },
|
|
|
- "priceStrategy": { "type": "string" },
|
|
|
+ "currentPrice": {
|
|
|
+ "type": "number"
|
|
|
+ },
|
|
|
+ "optimalPrice": {
|
|
|
+ "type": "number"
|
|
|
+ },
|
|
|
+ "recommendedRange": {
|
|
|
+ "type": "object",
|
|
|
+ "properties": {
|
|
|
+ "min": {
|
|
|
+ "type": "number"
|
|
|
+ },
|
|
|
+ "max": {
|
|
|
+ "type": "number"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ "currentPosition": {
|
|
|
+ "type": "string",
|
|
|
+ "enum": [
|
|
|
+ "below",
|
|
|
+ "within",
|
|
|
+ "above"
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ "bandName": {
|
|
|
+ "type": "string"
|
|
|
+ },
|
|
|
+ "goldenBand": {
|
|
|
+ "type": "string",
|
|
|
+ "description": "量利平衡最优带名称"
|
|
|
+ },
|
|
|
+ "priceStrategy": {
|
|
|
+ "type": "string"
|
|
|
+ },
|
|
|
"marginEstimate": {
|
|
|
"type": "object",
|
|
|
"properties": {
|
|
|
- "currentMargin": { "type": "number", "description": "当前毛利率%" },
|
|
|
- "suggestedMargin": { "type": "number" },
|
|
|
- "breakEvenSales": { "type": "integer" }
|
|
|
+ "currentMargin": {
|
|
|
+ "type": "number",
|
|
|
+ "description": "当前毛利率%"
|
|
|
+ },
|
|
|
+ "suggestedMargin": {
|
|
|
+ "type": "number"
|
|
|
+ },
|
|
|
+ "breakEvenSales": {
|
|
|
+ "type": "integer"
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
- "promotionAdvice": { "type": "array", "items": { "type": "string" } }
|
|
|
+ "promotionAdvice": {
|
|
|
+ "type": "array",
|
|
|
+ "items": {
|
|
|
+ "type": "string"
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
"listingAnalysis": {
|
|
|
@@ -373,12 +520,42 @@
|
|
|
"items": {
|
|
|
"type": "object",
|
|
|
"properties": {
|
|
|
- "dimension": { "type": "string", "enum": ["title", "bullet", "searchTerm", "image", "a+content"] },
|
|
|
- "currentScore": { "type": "integer" },
|
|
|
- "potentialScore": { "type": "integer" },
|
|
|
- "tips": { "type": "array", "items": { "type": "string" } },
|
|
|
- "keywordsToAdd": { "type": "array", "items": { "type": "string" } },
|
|
|
- "priority": { "type": "string", "enum": ["high", "medium", "low"] }
|
|
|
+ "dimension": {
|
|
|
+ "type": "string",
|
|
|
+ "enum": [
|
|
|
+ "title",
|
|
|
+ "bullet",
|
|
|
+ "searchTerm",
|
|
|
+ "image",
|
|
|
+ "a+content"
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ "currentScore": {
|
|
|
+ "type": "integer"
|
|
|
+ },
|
|
|
+ "potentialScore": {
|
|
|
+ "type": "integer"
|
|
|
+ },
|
|
|
+ "tips": {
|
|
|
+ "type": "array",
|
|
|
+ "items": {
|
|
|
+ "type": "string"
|
|
|
+ }
|
|
|
+ },
|
|
|
+ "keywordsToAdd": {
|
|
|
+ "type": "array",
|
|
|
+ "items": {
|
|
|
+ "type": "string"
|
|
|
+ }
|
|
|
+ },
|
|
|
+ "priority": {
|
|
|
+ "type": "string",
|
|
|
+ "enum": [
|
|
|
+ "high",
|
|
|
+ "medium",
|
|
|
+ "low"
|
|
|
+ ]
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
@@ -388,11 +565,27 @@
|
|
|
"items": {
|
|
|
"type": "object",
|
|
|
"properties": {
|
|
|
- "painPoint": { "type": "string" },
|
|
|
- "severity": { "type": "integer", "description": "0-100" },
|
|
|
- "frequency": { "type": "integer" },
|
|
|
- "suggestion": { "type": "string" },
|
|
|
- "expectedImpact": { "type": "string", "enum": ["high", "medium", "low"] }
|
|
|
+ "painPoint": {
|
|
|
+ "type": "string"
|
|
|
+ },
|
|
|
+ "severity": {
|
|
|
+ "type": "integer",
|
|
|
+ "description": "0-100"
|
|
|
+ },
|
|
|
+ "frequency": {
|
|
|
+ "type": "integer"
|
|
|
+ },
|
|
|
+ "suggestion": {
|
|
|
+ "type": "string"
|
|
|
+ },
|
|
|
+ "expectedImpact": {
|
|
|
+ "type": "string",
|
|
|
+ "enum": [
|
|
|
+ "high",
|
|
|
+ "medium",
|
|
|
+ "low"
|
|
|
+ ]
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
@@ -402,13 +595,37 @@
|
|
|
"items": {
|
|
|
"type": "object",
|
|
|
"properties": {
|
|
|
- "keyword": { "type": "string" },
|
|
|
- "matchType": { "type": "string", "enum": ["exact", "phrase", "broad"] },
|
|
|
- "suggestedBid": { "type": "number" },
|
|
|
- "expectedAcos": { "type": "number" },
|
|
|
- "dailyBudget": { "type": "number" },
|
|
|
- "priority": { "type": "string", "enum": ["high", "medium", "low"] },
|
|
|
- "reason": { "type": "string" }
|
|
|
+ "keyword": {
|
|
|
+ "type": "string"
|
|
|
+ },
|
|
|
+ "matchType": {
|
|
|
+ "type": "string",
|
|
|
+ "enum": [
|
|
|
+ "exact",
|
|
|
+ "phrase",
|
|
|
+ "broad"
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ "suggestedBid": {
|
|
|
+ "type": "number"
|
|
|
+ },
|
|
|
+ "expectedAcos": {
|
|
|
+ "type": "number"
|
|
|
+ },
|
|
|
+ "dailyBudget": {
|
|
|
+ "type": "number"
|
|
|
+ },
|
|
|
+ "priority": {
|
|
|
+ "type": "string",
|
|
|
+ "enum": [
|
|
|
+ "high",
|
|
|
+ "medium",
|
|
|
+ "low"
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ "reason": {
|
|
|
+ "type": "string"
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
@@ -428,46 +645,121 @@
|
|
|
"type": "bearer",
|
|
|
"configFile": "~/.openclaw/voc-credentials.json",
|
|
|
"tokenField": "vocToken",
|
|
|
- "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
|
|
|
- "resolutionOrder": ["configFile", "currentToken"],
|
|
|
+ "resolutionOrder": [
|
|
|
+ "configFile"
|
|
|
+ ],
|
|
|
+ "apigId": "7HwdQZk55B",
|
|
|
+ "paymentUrlResolution": {
|
|
|
+ "description": "动态构建充值URL:在已存在 session token 时查出用户 objectId,拼接到专属充值页面",
|
|
|
+ "steps": [
|
|
|
+ "1. 从 voc-credentials.json 获取当前 session token",
|
|
|
+ "2. 调用 GET https://server.fmode.cn/parse/users/me (Header: X-Parse-Application-Id: ncloudmaster, X-Parse-Session-Token: {token})获取用户 objectId",
|
|
|
+ "3. 拼接充值URL: https://app.fmode.cn/dev/apig-pay/?user={objectId}&apigid=7HwdQZk55B&fun_id=HOkkX72PMF",
|
|
|
+ "4. 将该URL展示给用户,引导扫码支付"
|
|
|
+ ],
|
|
|
+ "userResolveEndpoint": "https://server.fmode.cn/parse/users/me",
|
|
|
+ "userResolveHeaders": {
|
|
|
+ "X-Parse-Application-Id": "ncloudmaster",
|
|
|
+ "X-Parse-Session-Token": "{vocToken}"
|
|
|
+ },
|
|
|
+ "paymentBaseUrl": "https://app.fmode.cn/dev/apig-pay/",
|
|
|
+ "paymentParams": {
|
|
|
+ "user": "{resolvedUserId}",
|
|
|
+ "apigid": "7HwdQZk55B",
|
|
|
+ "fun_id": "HOkkX72PMF"
|
|
|
+ },
|
|
|
+ "balanceCheckEndpoint": "https://server.fmode.cn/api/apig/getApig"
|
|
|
+ },
|
|
|
"onMissing": {
|
|
|
"action": "showPaymentQR",
|
|
|
- "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
|
|
|
- "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
|
|
|
- "pollingIntervalMs": 3000,
|
|
|
- "pollingTimeoutMs": 300000,
|
|
|
- "onPaymentSuccess": "retrySkillWithNewToken",
|
|
|
+ "qrCodeUrl": "https://app.fmode.cn/dev/apig-pay/?apigid=7HwdQZk55B&fun_id=HOkkX72PMF",
|
|
|
"title": "扫码开通 VOC-AI 数据服务",
|
|
|
- "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
|
|
|
+ "message": "此 Skill 需要有效的 API Token。请先打开充值页面完成登录和充值;当用户提供 session token 后,请由 OpenClaw 运行 node scripts/tools/set-voc-token.js <session-token> 写入 ~/.openclaw/voc-credentials.json 的 vocToken 字段,再重试当前 Skill。",
|
|
|
+ "tokenSetupCommandTemplate": "node scripts/tools/set-voc-token.js {sessionToken}",
|
|
|
+ "tokenSetupInstructions": "当用户完成登录和充值后,如果用户把 session token 发给你,请直接运行 node scripts/tools/set-voc-token.js <session-token> 写入 ~/.openclaw/voc-credentials.json,然后重试当前 Skill。"
|
|
|
},
|
|
|
"onBalanceInsufficient": {
|
|
|
- "action": "showPaymentQR",
|
|
|
- "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
|
|
|
- "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
|
|
|
- "pollingIntervalMs": 3000,
|
|
|
- "pollingTimeoutMs": 300000,
|
|
|
- "onPaymentSuccess": "retrySkillWithNewToken",
|
|
|
+ "action": "resolveUserThenShowPayment",
|
|
|
"title": "VOC-AI Token 余额不足,请扫码充值",
|
|
|
- "message": "当前 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"] }
|
|
|
+ {
|
|
|
+ "responseField": "code",
|
|
|
+ "operator": "in",
|
|
|
+ "value": [
|
|
|
+ -2,
|
|
|
+ -3,
|
|
|
+ -10,
|
|
|
+ 402,
|
|
|
+ 429
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "responseField": "msg",
|
|
|
+ "operator": "contains",
|
|
|
+ "value": [
|
|
|
+ "余额不足",
|
|
|
+ "insufficient",
|
|
|
+ "balance",
|
|
|
+ "quota",
|
|
|
+ "没有开通",
|
|
|
+ "权限或余额"
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "responseField": "mess",
|
|
|
+ "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"] }
|
|
|
+ {
|
|
|
+ "responseField": "code",
|
|
|
+ "operator": "in",
|
|
|
+ "value": [
|
|
|
+ 401,
|
|
|
+ 403
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "responseField": "msg",
|
|
|
+ "operator": "contains",
|
|
|
+ "value": [
|
|
|
+ "unauthorized",
|
|
|
+ "token",
|
|
|
+ "invalid",
|
|
|
+ "auth"
|
|
|
+ ]
|
|
|
+ }
|
|
|
],
|
|
|
"matchMode": "any",
|
|
|
"trigger": "tokenConfig.onMissing"
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
+}
|