  "tokenConfig": {
    "type": "bearer",
    "configFile": "~/.openclaw/voc-credentials.json",
    "tokenField": "vocToken",
    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
    "resolutionOrder": ["configFile", "currentToken"],
    "onMissing": {
      "action": "showPaymentQR",
      "qrCodeUrl": "",
      "paymentCheckEndpoint": "",
      "pollingIntervalMs": 3000,
      "pollingTimeoutMs": 300000,
      "onPaymentSuccess": "retrySkillWithNewToken",
      "title": "扫码开通 VOC-AI 数据服务",
      "message": "请扫描下方二维码完成支付，支付成功后将自动获取 Token 并继续执行。"
    },
    "onBalanceInsufficient": {
      "action": "showPaymentQR",
      "qrCodeUrl": "",
      "paymentCheckEndpoint": "",
      "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"
    }
  }
