SKILL.md
唯讀
名稱
srt-booking
描述
韓國 SRT 車票查詢、預訂、查看與取消,使用 SRTrain 函式庫。當使用者詢問 SRT 座位空位、訂票、取消或售罄重試方案時使用。
SRT 訂票
這個技能的功能
在 SRTrain 之上加上 scripts/srt_booking.py 輔助工具,處理 SRT 查詢與各車廂座位號碼確認,預訂與取消則在重新確認固定列車/訂位後,透過 SRTrain 進行。
使用時機
- "幫我找水西到釜山的 SRT"
- "明天早上 SRT 有空位的話幫我訂"
- "確認 SRT 5 車廂空位"
- "幫我看 SRT 11A 座位是否空著"
- "優先顯示靠窗的 SRT 空位"
- "幫我確認訂位記錄"
- "取消這個 SRT 訂位"
不使用時機
- 需要自動完成付款的情況
- 想在聊天室直接傳送密碼的情況
- 不是 SRT 而是 KTX/Korail 訂票的情況
前置需求
- Python 3.10+
python3 -m pip install SRTrain
必要的環境變數
KSKILL_SRT_IDKSKILL_SRT_PASSWORD
憑證取得順序
- 如果環境變數已設定,直接使用。
- 如果代理程式正在使用自己的密碼庫(1Password CLI、Bitwarden CLI、macOS Keychain 等),可從中取出並注入為環境變數。
~/.config/k-skill/secrets.env(預設備援)— 純 dotenv 檔案,權限0600。- 如果都沒有,詢問使用者並儲存至 2 或 3。
儲存至預設路徑僅為備援,並非強制。
輸入
- 出發站
- 到達站
- 日期:
YYYYMMDD - 期望出發時間:
HHMMSS - 人數與乘客類型
- 座位偏好:一般車廂 / 特等車廂
- 座位詳細條件:車廂等級、車廂號碼、座位號碼、僅顯示空位、搜尋優先順序
工作流程
0. 若缺少套件,先全域安裝
如果 python3 -c 'import SRT' 失敗,不要繞道使用其他實作,應先嘗試安裝全域 Python 套件。
python3 -m pip install SRTrain
1. 確保憑證可用
確認 KSKILL_SRT_ID、KSKILL_SRT_PASSWORD 環境變數已設定。若無,則依上述憑證取得順序取得。
不要因為沒有密碼就直接爬取網站或尋找其他非官方途徑。
2. 先查詢
先使用輔助工具查詢並摘要候選班次。
python3 scripts/srt_booking.py search 水西 釜山 20260328 080000 --time-limit 120000 --limit 5
3. 在執行有副作用的操作前先摘要選項
預訂前,務必簡短整理以下資訊:
- 出發/抵達時間
- 一般車廂/特等車廂是否可訂
- 預估票價
4. 當使用者詢問詳細座位時,檢查詳細座位
search 的座位可用性是以列車為單位的旗標。當使用者詢問「剩餘座位號碼」、「各車廂座位」、「特定座位」、「靠窗/順向座位」、「預訂前確認座位」等具體座位時,應在預訂前呼叫 seats。
python3 scripts/srt_booking.py seats 水西 釜山 20260328 080000 --train-id <train_id>
若只想查看特定車廂的空位,可使用 --car-no 與 --available-only。
python3 scripts/srt_booking.py seats 水西 釜山 20260328 080000 --train-id <train_id> --car-no 5 --available-only
若要確認特定座位是否空著,可加上 --seat。
python3 scripts/srt_booking.py seats 水西 釜山 20260328 080000 --train-id <train_id> --car-no 5 --seat 11A
若未指定特定車廂,則從中間車廂開始搜尋。可使用 --car-priority center|low|high 改變車廂搜尋順序,使用 --seat-priority forward-window|window-forward|row-low 改變座位排序優先順序。
顯示詳細座位回應時,請優先摘要以下資訊:
- 各車廂的
available_seat_count - 剩餘座位號碼 (
available_seats) - 各座位的
direction、position - 若為特定座位查詢,則顯示
requested_seat_available
此功能不會選擇或佔用座位。實際預訂僅在下一步進行。
5. 僅在確定列車後才預訂
預訂有副作用,因此僅在選定確切列車後才進行。
python3 - <<'PY'
import os
from SRT import Adult, SRT, SeatType
srt = SRT(os.environ["KSKILL_SRT_ID"], os.environ["KSKILL_SRT_PASSWORD"])
trains = srt.search_train("水西", "釜山", "20260328", "080000", time_limit="120000")
reservation = srt.reserve(
trains[0],
passengers=[Adult(1)],
special_seat=SeatType.GENERAL_FIRST,
)
print(reservation)
PY
6. 查看或取消
取消前,需重新確認目標訂位。
python3 - <<'PY'
import os
from SRT import SRT
srt = SRT(os.environ["KSKILL_SRT_ID"], os.environ["KSKILL_SRT_PASSWORD"])
reservations = srt.get_reservations()
print(reservations)
PY
完成條件
- 若為查詢請求,候選列車已整理完畢
- 若為詳細座位確認,各車廂剩餘座位號碼或特定座位空位狀況已整理完畢
- 若為預訂請求,預訂結果、票價、付款期限已確認
- 若為取消請求,已明確指出取消的是哪個訂位
失敗模式
- 登入錯誤:確認帳號資訊或 SRT 網站政策是否變更
- 售罄:重新查詢其他時段或座位類型
- 座位選擇頁面格式變更:需更新輔助工具解析器
- 網路錯誤:短暫重試,但避免過度輪詢
備註
- 詳細座位確認是以唯讀方式讀取 SRT 網站的座位選擇頁面
SRTrain是 SRT 專用函式庫,使技能意圖更明確- 不自動化完成付款
- 為保護帳號,自動重試迴圈應保持簡短且保守






