Retry và xử lý thất bại
Automation trên màn hình sống thất bại liên tục và bình thường: hiệu ứng còn đang chạy, một cuộc gọi mạng chậm, một hộp thoại hiện muộn. Flow coi mọi trục trặc là sập đổ thì vô dụng. Flow retry mọi thứ mãi mãi còn tệ hơn.
Trang này giải thích ba công cụ xử lý thất bại, và — quan trọng hơn — khi nào mỗi công cụ là lựa chọn sai.
Mục đích
Đọc xong trang này, bạn nhìn một bước đang hỏng và nói được nó cần cái nào:
- Timeout dài hơn — thứ đó sẽ đến, chỉ là muộn hơn.
- Edge failure — màn hình đang ở trạng thái khác, đi đường khác.
- Retry policy — thao tác thực sự hỏng và lặp lại có thể thành.
Chọn sai là lý do flow trở nên chậm, chập chờn, hoặc cả hai.
Retry là thuộc tính của node, không phải một node
Không có node "Retry". Retry là policy gắn vào node, cấu hình trong Properties panel.
{
"maxAttempts": 3,
"retryOn": ["failure", "timeout"],
"backoffMs": 500,
"backoffMultiplier": 1.5,
"captureScreenshotPerAttempt": true
}
Từng thiết lập
| Thiết lập | Kiểu | Khoảng | Mặc định | Ý nghĩa |
|---|---|---|---|---|
maxAttempts | integer | 1–20 | — | Tổng số lần thử kể cả lần đầu |
retryOn | list | failure, timeout | — | Kết quả nào retry được |
backoffMs | integer | 0–60000 | — | Chờ trước lần thử kế |
backoffMultiplier | number | 1–10 | — | Nhân khoảng chờ mỗi lần |
captureScreenshotPerAttempt | boolean | — | false | Lưu ảnh chụp mỗi lần thử |
maxAttempts: 3 nghĩa là ba lần thử tổng cộng, không phải một cộng ba.
Với backoffMs: 500 và backoffMultiplier: 1.5, các khoảng chờ là 500 ms, rồi 750 ms, rồi 1125 ms.
Thứ không bao giờ được retry
retryOn chỉ chứa được duy nhất failure và timeout. Schema từ chối mọi thứ khác, có lý do:
fatalkhông bao giờ retry. Nó nghĩa là lỗi cấu hình hoặc hệ thống — biểu thức hỏng, vùng không hợp lệ, thiết bị mất kết nối. Lặp lại sinh đúng lỗi đó.successkhông bao giờ retry, kể cả phát hiện báo "không thấy" (mang statussuccess).cancelledkhông bao giờ retry. Người dùng đã dừng lần chạy.
Gắn retry policy vào Find Image để "tìm kỹ hơn" không làm gì cả.
Find Image không thấy template trả status success với route failure. Retry chỉ nổ trên status failure hoặc timeout. Policy không bao giờ kích hoạt.
Muốn tìm kỹ hơn, nâng timeoutMs — node vốn đã chụp lại và so lại mỗi chu kỳ poll. Đó chính là vòng retry của phát hiện.
Vòng đời một lần thử
Hai quy tắc rút ra từ sơ đồ:
- Lỗi tham số xảy ra trước retry. Một
{{biến}}hỏng làfatalvà không bao giờ retry. - Output mapping chạy đúng một lần, trên kết quả lần thử cuối. Node retry ba lần ghi biến một lần.
Timeout và backoff
timeoutMstrên node là timeout mỗi lần thử, không phải cả node. Node timeout 5 giây, 3 lần thử có thể tốn 15 giây thử cộng backoff.- Backoff không nằm trong timeout một lần thử.
- Backoff có tính vào
maxRuntimeDurationMscủa flow.
Ba công cụ, và khi nào đúng công cụ
1. Nâng timeout
Dùng khi thứ bạn chờ sẽ xuất hiện, chỉ là không biết chính xác lúc nào.
Node phát hiện poll: chụp khung hình, so khớp, ngủ một chu kỳ, lặp cho đến timeout. Timeout dài hơn nghĩa là nhiều lần thử hơn.
Nút Claim hiện sau hiệu ứng 2 giây. →
Find Image,timeoutMs: 4000,pollIntervalMs: 250.
2. Nối edge failure
Dùng khi "không có đó" nghĩa là màn hình đang ở trạng thái hợp lệ khác và bạn muốn làm việc khác.
Có ngày có popup thưởng, có ngày không. →
Find Imagepopup, Success → đóng, Failure → đi tiếp.
Đây là rẽ nhánh, không phải xử lý lỗi. Nó là công cụ phổ biến nhất và bị bỏ quên nhất trong ba.