Messages and delivery
นโยบายการลองใหม่
เป้าหมาย
- ลองใหม่ต่อคำขอ HTTP หนึ่งรายการ ไม่ใช่ต่อโฟลว์หลายขั้นตอนหนึ่งชุด
- รักษาลำดับโดยลองใหม่เฉพาะขั้นตอนปัจจุบันเท่านั้น
- หลีกเลี่ยงการทำซ้ำการดำเนินการที่ไม่ใช่แบบ idempotent
ค่าเริ่มต้น
- จำนวนครั้งที่พยายาม: 3
- เพดานค่าหน่วงสูงสุด: 30000 ms
- ค่าหน่วงสุ่ม: 0.1 (10 เปอร์เซ็นต์)
- ค่าเริ่มต้นของผู้ให้บริการ:
- ค่าหน่วงต่ำสุดของ Telegram: 400 ms
- ค่าหน่วงต่ำสุดของ Discord: 500 ms
ลักษณะการทำงาน
ผู้ให้บริการโมเดล
- OpenClaw ให้ SDK ของผู้ให้บริการจัดการการลองใหม่ระยะสั้นตามปกติ
- สำหรับ SDK ที่ใช้ Stainless เช่น Anthropic และ OpenAI การตอบกลับที่ลองใหม่ได้
(
408,409,429และ5xx) อาจมีretry-after-msหรือretry-afterเมื่อเวลารอนั้นนานกว่า 60 วินาที OpenClaw จะแทรกx-should-retry: falseเพื่อให้ SDK แสดงข้อผิดพลาดทันที และการสลับโมเดลเมื่อทำงานล้มเหลว สามารถหมุนไปยังโปรไฟล์การรับรองตัวตนอื่นหรือโมเดลสำรองได้ - แทนที่เพดานด้วย
OPENCLAW_SDK_RETRY_MAX_WAIT_SECONDS=<seconds>ตั้งค่าเป็น0,false,off,noneหรือdisabledเพื่อให้ SDK เคารพการพักแบบRetry-Afterที่ยาวภายในตัวเอง
Discord
- ลองใหม่เมื่อเกิดข้อผิดพลาดจากการจำกัดอัตรา (HTTP 429), คำขอหมดเวลา, การตอบกลับ HTTP 5xx และความล้มเหลวชั่วคราวของการส่งข้อมูล เช่น การค้นหา DNS ล้มเหลว, การเชื่อมต่อถูกรีเซ็ต, ซ็อกเก็ตปิด และการดึงข้อมูลล้มเหลว
- ใช้
retry_afterของ Discord เมื่อมีให้ใช้ มิฉะนั้นจะใช้ exponential backoff
Telegram
- ลองใหม่เมื่อเกิดข้อผิดพลาดชั่วคราว (429, หมดเวลา, เชื่อมต่อ/รีเซ็ต/ปิด, ไม่พร้อมใช้งานชั่วคราว)
- ใช้
retry_afterเมื่อมีให้ใช้ มิฉะนั้นจะใช้ exponential backoff - ข้อผิดพลาดในการแยกวิเคราะห์ 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,
},
},
},
}
หมายเหตุ
- การลองใหม่มีผลต่อแต่ละคำขอ (ส่งข้อความ, อัปโหลดสื่อ, การแสดงความรู้สึก, โพล, สติกเกอร์)
- โฟลว์ประกอบจะไม่ลองใหม่ในขั้นตอนที่เสร็จสมบูรณ์แล้ว