srt-booking

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

SRT Booking

SRT Booking

What this skill does

技能功能

SRTrain
위에서 SRT 좌석을 조회하고, 조건이 맞으면 예약과 취소까지 진행한다.
基于
SRTrain
库查询SRT座位,符合条件时可完成预订和取消操作。

When to use

适用场景

  • "수서에서 부산 가는 SRT 찾아줘"
  • "내일 오전 SRT 빈자리 있으면 잡아줘"
  • "예약 내역 확인해줘"
  • "이 SRT 예약 취소해줘"
  • "帮我查询水西到釜山的SRT"
  • "如果明天上午的SRT有余票帮我预订"
  • "帮我查看预订记录"
  • "取消这个SRT预订"

When not to use

不适用场景

  • 결제까지 자동으로 끝내야 하는 경우
  • 비밀번호를 채팅창에 직접 보내려는 경우
  • SRT가 아니라 KTX/Korail 예매인 경우
  • 需要自动完成支付的场景
  • 想要直接在聊天窗口发送密码的场景
  • 预订KTX/Korail其他车票而非SRT的场景

Prerequisites

前置要求

  • Python 3.10+
  • python3 -m pip install SRTrain
  • sops
    and
    age
    installed
  • common setup reviewed in
    ../k-skill-setup/SKILL.md
  • secret policy reviewed in
    ../docs/security-and-secrets.md
  • Python 3.10+
  • python3 -m pip install SRTrain
  • 安装
    sops
    age
  • 已阅读
    ../k-skill-setup/SKILL.md
    中的通用配置说明
  • 已阅读
    ../docs/security-and-secrets.md
    中的密钥政策说明

Required secrets

所需密钥

  • KSKILL_SRT_ID
  • KSKILL_SRT_PASSWORD
평문 비밀번호는 금지한다. 항상
sops exec-env ...
패턴을 사용한다.
  • KSKILL_SRT_ID
  • KSKILL_SRT_PASSWORD
禁止使用明文密码,必须始终使用
sops exec-env ...
模式。

Inputs

输入参数

  • 출발역
  • 도착역
  • 날짜:
    YYYYMMDD
  • 희망 시작 시각:
    HHMMSS
  • 인원 수와 승객 유형
  • 좌석 선호: 일반실 / 특실
  • 出发站
  • 到达站
  • 日期:
    YYYYMMDD
    格式
  • 期望出发时间:
    HHMMSS
    格式
  • 人数及乘客类型
  • 座位偏好: 普通座 / 特等座

Workflow

工作流程

0. Install the package globally when missing

0. 依赖缺失时优先全局安装包

python3 -c 'import SRT'
가 실패하면 다른 구현으로 우회하지 말고 전역 Python 패키지 설치를 먼저 시도한다.
bash
python3 -m pip install SRTrain
如果
python3 -c 'import SRT'
运行失败,不要改用其他实现,优先尝试安装全局Python包。
bash
python3 -m pip install SRTrain

1. Validate secrets path and stop for secure registration when missing

1. 校验密钥路径,缺失时引导用户安全配置后终止

비밀번호를 직접 받지 않는다. 필요한 경우 encrypted secrets file 경로와 변수 이름만 확인한다.
KSKILL_SRT_ID
,
KSKILL_SRT_PASSWORD
,
~/.config/k-skill/secrets.env
,
~/.config/k-skill/age/keys.txt
중 하나라도 없으면 다음 식으로 안내하고 멈춘다.
text
이 작업에는 KSKILL_SRT_ID, KSKILL_SRT_PASSWORD 가 필요합니다.
값을 채팅창에 붙여 넣지 말고 ~/.config/k-skill/secrets.env.plain 에 직접 채운 뒤
sops 로 ~/.config/k-skill/secrets.env 로 암호화해 주세요.
암호화가 끝나면 plaintext 파일은 지우고 bash scripts/check-setup.sh 로 다시 확인해 주세요.
시크릿이 없다는 이유로 웹사이트를 직접 긁거나 다른 비공식 경로를 찾지 않는다.
不直接索要密码,必要时仅确认加密密钥文件路径和变量名。
如果
KSKILL_SRT_ID
KSKILL_SRT_PASSWORD
~/.config/k-skill/secrets.env
~/.config/k-skill/age/keys.txt
中任意一项缺失,按照下方提示引导用户后终止操作。
text
本操作需要KSKILL_SRT_ID、KSKILL_SRT_PASSWORD两个密钥。
请不要将值直接粘贴到聊天窗口,手动填写到~/.config/k-skill/secrets.env.plain文件中,
再通过sops加密为~/.config/k-skill/secrets.env。
加密完成后删除明文文件,运行bash scripts/check-setup.sh重新校验即可。
不得因缺少密钥就直接爬取网站或寻找其他非官方路径。

2. Search first

2. 优先查询车次

먼저 조회해서 후보를 요약한다.
bash
SOPS_AGE_KEY_FILE="$HOME/.config/k-skill/age/keys.txt" \
sops exec-env "$HOME/.config/k-skill/secrets.env" 'python3 - <<'"'"'PY'"'"'
import os
from SRT import SRT

srt = SRT(os.environ["KSKILL_SRT_ID"], os.environ["KSKILL_SRT_PASSWORD"])
trains = srt.search_train("수서", "부산", "20260328", "080000", time_limit="120000")

for idx, train in enumerate(trains[:5], start=1):
    print(idx, train)
PY
'
先查询并汇总可选车次。
bash
SOPS_AGE_KEY_FILE="$HOME/.config/k-skill/age/keys.txt" \
sops exec-env "$HOME/.config/k-skill/secrets.env" 'python3 - <<'"'"'PY'"'"'
import os
from SRT import SRT

srt = SRT(os.environ["KSKILL_SRT_ID"], os.environ["KSKILL_SRT_PASSWORD"])
trains = srt.search_train("수서", "부산", "20260328", "080000", time_limit="120000")

for idx, train in enumerate(trains[:5], start=1):
    print(idx, train)
PY
'

3. Summarize options before side effects

3. 执行副作用操作前先汇总可选方案

예약 전에는 항상 아래를 짧게 정리한다.
  • 출발/도착 시각
  • 일반실/특실 가능 여부
  • 예상 운임
预订前必须先简要整理以下信息:
  • 出发/到达时间
  • 普通座/特等座余票情况
  • 预估票价

4. Reserve only after the train is fixed

4. 确认车次后再执行预订

예약은 부작용이 있으므로 정확한 열차를 고른 뒤에만 진행한다.
bash
SOPS_AGE_KEY_FILE="$HOME/.config/k-skill/age/keys.txt" \
sops exec-env "$HOME/.config/k-skill/secrets.env" '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
'
预订操作存在副作用,必须确认选定准确车次后再执行。
bash
SOPS_AGE_KEY_FILE="$HOME/.config/k-skill/age/keys.txt" \
sops exec-env "$HOME/.config/k-skill/secrets.env" '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
'

5. Inspect or cancel

5. 查询或取消预订

예약 확인이나 취소도 같은 credential path를 유지한다. 취소 전에는 대상 예약을 다시 식별한다.
bash
SOPS_AGE_KEY_FILE="$HOME/.config/k-skill/age/keys.txt" \
sops exec-env "$HOME/.config/k-skill/secrets.env" '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
'
预订查询和取消操作也使用相同的凭证路径,取消前需再次确认目标预订记录。
bash
SOPS_AGE_KEY_FILE="$HOME/.config/k-skill/age/keys.txt" \
sops exec-env "$HOME/.config/k-skill/secrets.env" '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
'

Done when

完成标准

  • 조회 요청이면 후보 열차가 정리되어 있다
  • 예약 요청이면 예약 결과, 운임, 구입기한이 확인되어 있다
  • 취소 요청이면 어떤 예약을 취소했는지 명확하다
  • 若为查询请求:已整理好候选车次信息
  • 若为预订请求:已确认预订结果、票价、购票期限
  • 若为取消请求:已明确告知取消的预订记录

Failure modes

异常处理

  • 로그인 오류: 계정 정보나 SRT site policy 변경 가능성 확인
  • 매진: 다른 시간대나 좌석 타입으로 재조회
  • 네트워크 오류: 짧게 재시도하되 aggressive polling은 피하기
  • 登录错误:确认是否为账号信息有误或SRT官网政策变更
  • 车票售罄:更换其他时间段或座位类型重新查询
  • 网络错误:短暂重试即可,避免频繁轮询

Notes

注意事项

  • SRTrain
    은 SRT 전용 라이브러리라서 스킬 의도가 더 선명하다
  • 결제 완료까지는 자동화하지 않는다
  • 자동 재시도 루프는 계정 보호 차원에서 짧고 보수적으로 유지한다
  • SRTrain
    是SRT专用库,功能定位清晰
  • 不自动完成支付流程
  • 为保护账号安全,自动重试逻辑保持短周期、保守的策略