重試策略

設計目標

  • 以單次 HTTP 請求為單位進行重試,而非整個多步驟流程。
  • 只重試當前步驟,保持執行順序。
  • 避免重複執行非冪等操作。

預設值

  • 嘗試次數:3
  • 最大延遲上限:30000 ms
  • 抖動(Jitter):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,
      },
    },
  },
}

備註

  • 重試以單次請求為單位(訊息傳送、媒體上傳、表情回應、投票、貼圖)。
  • 複合流程不會重試已完成的步驟。