intercity-bus-booking

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Intercity Bus Booking (Tmoney 시외버스)

城际巴士预订(Tmoney 시외버스)

Overview

概述

Use this skill for Korean 시외버스 timetable lookup and reservation assistance via the official Tmoney intercity bus site. Prefer HTTP/API-first flows for route lookup, timetable search, fare/seat-stage entry, and checkout-entry handoff.
Keep 시외버스 separate from 고속버스. Tmoney terminal codes and POST flows are different from KOBUS 고속버스. Use
express-bus-booking
for KOBUS routes.
本技能可通过官方Tmoney城际巴士网站协助查询韩国城际巴士时刻表并进行预订。优先采用HTTP/API优先流程进行路线查询、时刻表搜索、票价/座位阶段录入以及结账入口交接。
请将城际巴士(시외버스)与高速巴士(고속버스)区分开。Tmoney的终端代码和POST流程与KOBUS高速巴士不同。KOBUS路线请使用
express-bus-booking
技能。

When to Use

使用场景

  • The user asks for
    시외버스 예매
    ,
    시외버스 시간표
    ,
    시외버스 예약
    , or a known 시외버스 route.
  • The user names 티머니/Tmoney/시외버스 통합예매.
  • The task is to present timetable candidates, check remaining seats/fares, or assist up to the official card-information page.
Do not use this for:
  • 고속버스/KOBUS routes — use
    express-bus-booking
    .
  • Final card submission or payment unless the user explicitly confirms the exact action.
  • Browser automation as the first option when HTTP endpoints are available.
  • 用户询问
    시외버스 예매
    (城际巴士预订)、
    시외버스 시간표
    (城际巴士时刻表)、
    시외버스 예약
    (城际巴士预约),或已知的城际巴士路线。
  • 用户提及티머니/Tmoney/시외버스 통합예매(城际巴士综合预订)。
  • 需要展示时刻表候选、查询剩余座位/票价,或协助引导至官方卡片信息页面的任务。
请勿用于以下场景:
  • 高速巴士/KOBUS路线——请使用
    express-bus-booking
    技能。
  • 最终卡片提交或支付,除非用户明确确认具体操作。
  • 在HTTP端点可用时,将浏览器自动化作为首选方案。

Core Principles

核心原则

  • Use official Tmoney 시외버스 surfaces:
    https://intercitybus.tmoney.co.kr
    .
  • Use cookies, referers, and a normal browser User-Agent.
  • Default scope is lookup and assisted manual checkout: timetable, fare/seat stage, selected-seat temporary hold, and official card-information page handoff.
  • Do not submit card fields, final payment, or irreversible reservation steps without explicit confirmation.
  • If a test or user-abandoned hold is created, use the official cancellation/back flow when available.
  • 使用官方Tmoney城际巴士平台:
    https://intercitybus.tmoney.co.kr
  • 使用Cookie、Referer及常规浏览器用户代理(User-Agent)。
  • 默认范围为查询和协助手动结账:时刻表、票价/座位阶段、选定座位临时保留,以及官方卡片信息页面交接。
  • 若无明确确认,请勿提交卡片字段、完成最终支付或执行不可逆的预订步骤。
  • 若创建了测试或用户放弃的座位保留,在可用情况下请使用官方取消/返回流程。

Known HTTP Flow

已知HTTP流程

See
references/tmoney-intercity-http-flow.md
for session-proven endpoint details and parameter examples.
会话验证的端点详情及参数示例请参见
references/tmoney-intercity-http-flow.md

1. Start a Session

1. 启动会话

Fetch a landing or booking-entry page with cookies enabled:
text
GET https://intercitybus.tmoney.co.kr/
GET https://intercitybus.tmoney.co.kr/otck/trmlInfEnty.do
启用Cookie后获取首页或预订入口页面:
text
GET https://intercitybus.tmoney.co.kr/
GET https://intercitybus.tmoney.co.kr/otck/trmlInfEnty.do

2. Query Timetable

2. 查询时刻表

text
POST /otck/readAlcnList.do
Typical fields include:
text
depr_Trml_Cd=0511601
arvl_Trml_Cd=2482701
depr_Trml_Nm=동서울
arvl_Trml_Nm=속초
ig=1
im=0
ic=0
iv=0
depr_Dt=YYYYMMDD
depr_Time=000000
bef_Aft_Dvs=D
req_Rec_Num=10
bef_Aft_Dvs
and
req_Rec_Num
are required hidden fields from the browser JavaScript
readAlcnListEntry(...)
. If they are omitted, Tmoney can return a generic error page with no schedules.
Parse schedule buttons/rows. The next-stage parameters are often embedded in
readSasFeeInf(...)
onclick arguments.
text
POST /otck/readAlcnList.do
典型字段包括:
text
depr_Trml_Cd=0511601
arvl_Trml_Cd=2482701
depr_Trml_Nm=동서울
arvl_Trml_Nm=속초
ig=1
im=0
ic=0
iv=0
depr_Dt=YYYYMMDD
depr_Time=000000
bef_Aft_Dvs=D
req_Rec_Num=10
bef_Aft_Dvs
req_Rec_Num
是浏览器JavaScript
readAlcnListEntry(...)
中的必填隐藏字段。若省略这些字段,Tmoney可能返回无时刻表的通用错误页面。
解析时刻表按钮/行数据。下一阶段的参数通常嵌入在
readSasFeeInf(...)
的onclick参数中。

3. Enter Fare / Seat-Count Stage

3. 进入票价/座位数量阶段

text
POST /otck/readSatsFee.do
Send selected values from
readSasFeeInf(...)
plus passenger counts and original search fields. The response should include
form#readPcpySats
and hidden values such as:
text
rot_Id
alcn_Sqno
depr_Trml_Cd
arvl_Trml_Cd
depr_Time
igFee
imFee
icFee
total
text
POST /otck/readSatsFee.do
发送
readSasFeeInf(...)
中的选定值,加上乘客数量及原始搜索字段。响应应包含
form#readPcpySats
及如下隐藏值:
text
rot_Id
alcn_Sqno
depr_Trml_Cd
arvl_Trml_Cd
depr_Time
igFee
imFee
icFee
total

4. Temporary Hold and Card-Information Entry

4. 临时保留座位与卡片信息录入

text
POST /otck/readPcpySats.do
Submit the
readPcpySats
hidden fields plus selected seat/count fields, commonly including:
text
pcpy_Num
sats_No
bus_Tck_Knd_Cd
cty_Bus_Dc_Knd_Cd
dcrt_Dvs_Cd
rtrp_Depr_Dt
A successful response lands on the official
카드정보 입력
page and includes a temporary seat hold identifier such as
sats_Pcpy_Id
.
text
POST /otck/readPcpySats.do
提交
readPcpySats
隐藏字段及选定的座位/数量字段,通常包括:
text
pcpy_Num
sats_No
bus_Tck_Knd_Cd
cty_Bus_Dc_Knd_Cd
dcrt_Dvs_Cd
rtrp_Depr_Dt
成功响应会跳转到官方
카드정보 입력
(输入卡片信息)页面,并包含临时座位保留标识(如
sats_Pcpy_Id
)。

Timetable Helper

时刻表辅助工具

For read-only timetable lookup, use the bundled helper before attempting browser automation:
bash
python3 intercity-bus-booking/scripts/intercity_bus_search.py \
  --depart-code 0511601 \
  --arrive-code 2482701 \
  --depart-name 동서울 \
  --arrive-name 속초 \
  --date 20260520
The helper starts a cookie-backed session, posts the browser-required timetable fields, parses
readSasFeeInf(...)
, and prints JSON with departure time, company, class, fares, and remaining/total seats. By default it is read-only. With
--hold-seat <seatNo>
or
--hold-first-seat
, it enters
readSatsFee.do
, posts
readPcpySats.do
, and saves the official Tmoney card-information HTML page plus cancel/back fields. It still never submits card data or final payment.
对于只读式时刻表查询,在尝试浏览器自动化前请使用内置辅助工具:
bash
python3 intercity-bus-booking/scripts/intercity_bus_search.py \
  --depart-code 0511601 \
  --arrive-code 2482701 \
  --depart-name 동서울 \
  --arrive-name 속초 \
  --date 20260520
该辅助工具启动一个带Cookie的会话,提交浏览器所需的时刻表字段,解析
readSasFeeInf(...)
,并以JSON格式打印出发时间、运营公司、等级、票价及剩余/总座位数。默认情况下为只读模式。若使用
--hold-seat <seatNo>
--hold-first-seat
参数,它会进入
readSatsFee.do
,提交
readPcpySats.do
,并保存官方Tmoney卡片信息HTML页面及取消/返回字段。但它仍不会提交卡片数据或完成最终支付。

Temporary Hold Helper

临时座位保留辅助工具

To create a temporary hold and save the official card-information page:
bash
python3 intercity-bus-booking/scripts/intercity_bus_search.py \
  --depart-code 0511601 \
  --arrive-code 2482701 \
  --depart-name 동서울 \
  --arrive-name 속초 \
  --date 20260520 \
  --select-index 1 \
  --hold-first-seat \
  --output-dir /tmp/tmoney-hold
Success requires
hold.success=true
, a
sats_Pcpy_Id
, and the saved page containing
카드정보 입력
. The saved cancel fields can be posted back to
/otck/readSatsFee.do
with
pcpyCanc=C
to abandon the hold. Live probes did not expose an exact countdown on the card-information page; treat the hold as short-lived and have the user complete payment immediately.
如需创建临时座位保留并保存官方卡片信息页面:
bash
python3 intercity-bus-booking/scripts/intercity_bus_search.py \
  --depart-code 0511601 \
  --arrive-code 2482701 \
  --depart-name 동서울 \
  --arrive-name 속초 \
  --date 20260520 \
  --select-index 1 \
  --hold-first-seat \
  --output-dir /tmp/tmoney-hold
成功执行需满足
hold.success=true
、存在
sats_Pcpy_Id
,且保存的页面包含
카드정보 입력
(输入卡片信息)。保存的取消字段可通过POST请求发送至
/otck/readSatsFee.do
并携带
pcpyCanc=C
参数以取消座位保留。实际测试中未在卡片信息页面发现明确的倒计时,请将座位保留视为短期有效,提醒用户立即完成支付。

Checkout-Entry Link Helper

结账入口链接辅助工具

A helper-served HTML page can auto-submit a POST form directly to:
text
https://intercitybus.tmoney.co.kr/otck/readPcpySats.do
This creates the hold in the user's browser/session and opens the official Tmoney card-information page. The user should manually finish payment on the official page.
For Discord/mobile, provide helper links as normal text links rather than fenced code blocks so the user can tap them.
辅助工具生成的HTML页面可自动提交POST表单至:
text
https://intercitybus.tmoney.co.kr/otck/readPcpySats.do
这会在用户浏览器/会话中创建座位保留,并打开官方Tmoney卡片信息页面。用户需在官方页面手动完成支付。
对于Discord/移动端,辅助链接请以普通文本链接形式提供,而非代码块,以便用户点击。

Mobile and In-App Browser Notes

移动端与内嵌浏览器注意事项

Tmoney 시외버스 is more mobile-tolerant than KOBUS in the tested flow: an iPhone Safari-style mobile User-Agent returned the official
카드정보 입력
page with
sats_Pcpy_Id
present.
However, in-app browser User-Agents can behave differently or fail if the same seat/hold payload is replayed. If a Discord/Android in-app test returns a generic error such as
발행을 실패하였습니다
, do not assume route lookup is broken. Recreate a fresh hold payload, retry once in an external browser, and cancel stale holds.
在测试流程中,Tmoney城际巴士比KOBUS更适配移动端:iPhone Safari风格的移动端用户代理可返回包含
sats_Pcpy_Id
的官方
카드정보 입력
(输入卡片信息)页面。
但内嵌浏览器的用户代理可能表现不同,若重复提交相同座位/保留负载可能会失败。若Discord/Android内嵌浏览器返回
발행을 실패하였습니다
(发行失败)等通用错误,请勿认为路线查询功能损坏。重新生成新的座位阶段负载,在外部浏览器重试一次,并取消过期的座位保留。

Suggested Output Format

建议输出格式

Keep candidate lists concise:
text
시외버스 동서울 → 속초 / 2026-05-09
1. 06:05 우등 / 금강고속 / 잔여 8석 / 성인 21,300원
2. ...
When a checkout-entry helper is created, say that it opens the official Tmoney card-information page and that payment remains manual.
候选列表请保持简洁:
text
시외버스 동서울 → 속초 / 2026-05-09
1. 06:05 우등 / 금강고속 / 잔여 8석 / 성인 21,300원
2. ...
当创建结账入口辅助工具时,请说明该工具会打开官方Tmoney卡片信息页面,且支付仍需手动完成。

Common Pitfalls

常见陷阱

  1. Mixing terminal code systems. Tmoney 시외버스 codes are not KOBUS codes.
  2. Assuming checkout-entry equals final payment.
    readPcpySats.do
    can open the card-information page, but final payment remains a separate manual step.
  3. Omitting hidden timetable fields.
    readAlcnList.do
    needs
    bef_Aft_Dvs=D
    and
    req_Rec_Num=10
    ; without them it may return a generic
    errorCont
    page of about 13 KB instead of schedule rows.
  4. Replaying stale hold payloads. A repeated POST for the same route/seat can fail or create confusing results. Generate a fresh seat-stage payload for real use.
  5. Skipping cancellation/back flow. Use the official cancellation/back form (
    pcpyCanc=C
    via
    readSatsFee.do
    when available) for abandoned holds.
  6. Overusing browser automation. Use browser only for endpoint discovery or visual verification after HTTP probing.
  1. 混淆终端代码体系:Tmoney城际巴士的代码与KOBUS的代码不同。
  2. 将结账入口等同于最终支付
    readPcpySats.do
    可打开卡片信息页面,但最终支付仍是独立的手动步骤。
  3. 遗漏时刻表隐藏字段
    readAlcnList.do
    需要
    bef_Aft_Dvs=D
    req_Rec_Num=10
    ;若缺少这些字段,可能返回约13KB的通用
    errorCont
    页面而非时刻表行数据。
  4. 重复使用过期保留负载:重复提交相同路线/座位的POST请求可能失败或产生混淆结果。实际使用时请生成新的座位阶段负载。
  5. 跳过取消/返回流程:对于已放弃的座位保留,在可用情况下请使用官方取消/返回表单(通过
    readSatsFee.do
    提交
    pcpyCanc=C
    参数)。
  6. 过度使用浏览器自动化:仅在端点发现或HTTP探测后的视觉验证时使用浏览器。

Verification Checklist

验证清单

  • Route/terminal codes were resolved from Tmoney 시외버스, not guessed or copied from KOBUS.
  • Timetable POST included
    bef_Aft_Dvs=D
    and
    req_Rec_Num=10
    .
  • Timetable response was parsed for schedule rows/buttons and next-stage parameters.
  • Fare/seat-stage response contains
    form#readPcpySats
    and expected hidden fields.
  • Checkout-entry response contains
    카드정보 입력
    and a hold identifier such as
    sats_Pcpy_Id
    before reporting success.
  • Stale/test holds were released through the official cancellation/back flow where possible.
  • Payment/card submission was left to the user unless explicitly confirmed.
  • Mobile links are provided as tappable text links on Discord/mobile platforms.
  • 路线/终端代码来自Tmoney城际巴士,而非猜测或复制自KOBUS。
  • 时刻表POST请求包含
    bef_Aft_Dvs=D
    req_Rec_Num=10
  • 已解析时刻表响应中的时刻表行/按钮及下一阶段参数。
  • 票价/座位阶段响应包含
    form#readPcpySats
    及预期的隐藏字段。
  • 结账入口响应包含
    카드정보 입력
    (输入卡片信息)及
    sats_Pcpy_Id
    等保留标识后,才报告成功。
  • 已通过官方取消/返回流程释放过期/测试用的座位保留(若可行)。
  • 支付/卡片提交交由用户完成,除非得到明确确认。
  • 在Discord/移动端平台提供可点击的文本链接作为移动端链接。