重试策略

设计目标

  • 按单个 HTTP 请求重试,而非按整个多步流程。
  • 只重试当前步骤,保持执行顺序。
  • 避免对非幂等操作产生重复执行。

默认值

  • 尝试次数:3
  • 最大延迟上限:30000 ms
  • 抖动:0.1(10%)
  • 各服务商默认值:
    • Telegram 最小延迟:400 ms
    • Discord 最小延迟:500 ms

行为

Discord

  • 仅在限速错误(HTTP 429)时重试。
  • 优先使用 Discord 返回的 retry_after,否则采用指数退避。

Telegram

  • 在瞬时错误时重试(429、超时、连接重置/关闭、暂时不可用)。
  • 优先使用 retry_after,否则采用指数退避。
  • Markdown 解析错误不会重试,而是回退为纯文本发送。

配置

~/.openclaw/openclaw.json 中按服务商设置重试策略:

{
  channels: {
    telegram: {
      retry: {
        attempts: 3,
        minDelayMs: 400,
        maxDelayMs: 30000,
        jitter: 0.1,
      },
    },
    discord: {
      retry: {
        attempts: 3,
        minDelayMs: 500,
        maxDelayMs: 30000,
        jitter: 0.1,
      },
    },
  },
}

补充说明

  • 重试针对单个请求(消息发送、媒体上传、表态、投票、贴纸)。
  • 组合流程中已完成的步骤不会重试。