name: error_retry
description: try_catch + wait + retry 模式：外部 API 偶發掛掉時自動重試

flow:
  - "input >> ON_SUCCESS >> try_call"
  - "try_call >> ON_SUCCESS >> done"
  - "try_call >> ON_FAIL >> wait_a_bit"
  - "wait_a_bit >> ON_SUCCESS >> retry_call"
  - "retry_call >> ON_SUCCESS >> done"
  - "retry_call >> ON_FAIL >> final_fail_notify"

config:
  try_call:
    component: http_request
    url: "{{input.target_url}}"
    method: POST
    body_json:
      payload: "{{input.payload}}"

  wait_a_bit:
    component: wait
    seconds: 5

  # 第二次嘗試。生產環境通常 retry 2-3 次配指數 backoff
  retry_call:
    component: http_request
    url: "{{input.target_url}}"
    method: POST
    body_json:
      payload: "{{input.payload}}"
      _retry: 1

  done:
    component: comp_passthrough
    # 純記錄成功，下游若需要可繼續鏈

  final_fail_notify:
    component: telegram_send
    chat_id: "{{secret.LEO_TELEGRAM_CHAT_ID}}"
    text: |
      ⚠️ workflow {{input.workflow_name}} 兩次重試都失敗
      target: {{input.target_url}}
      last error: {{retry_call.error}}
