资讯动态

k-skill 的 intercity-bus-booking 技能解析:基于 Tmoney 시외버스 官方 HTTP 流程的城际巴士查询与座位暂持指南

发布时间:2026/9/18 3:17:03 来源:尧图企业网站定制
k-skill 的 intercity-bus-booking 技能解析基于 Tmoney 시외버스 官方 HTTP 流程的城际巴士查询与座位暂持指南【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill本篇文章围绕 k-skill 仓库中intercity-bus-booking技能的组装指令快照packages/k-skill-cli/test/snapshots/intercity-bus-booking.generic.md展开系统讲解如何在 generic 运行时下通过 Tmoney 城际巴士官网시외버스 통합예매的 HTTP/API 优先流程完成线路时刻查询、票价/人数阶段进入、临时座位暂持以及官方卡信息页交接。读完本文你将掌握该技能完整的四段式 HTTP 调用链、必备隐藏字段、内置 Python 助手的全部参数与退出码语义以及移动端/应用内浏览器的踩坑与规避方案。一、技能定位与文档背景intercity-bus-booking是 k-skill 仓库中面向韩国城际巴士시외버스的旅行类技能。其元数据定义在 skill.json声明了三个能力画像profilesvault凭据托管、browser浏览器、action:booking预订类动作并标注category: travel、locale: ko-KR、phase: v1。本文章所依据的关联文档是 CLI 测试套件的“组装指令快照”assembled instructions snapshot。k-skill CLI 会按当前运行环境generic 或 dolshoi把技能的运行时规则与核心指令拼接成一份完整的可执行说明而 cli.test.js 中名为 “assembled instructions match committed snapshots” 的测试用例正是通过比对实时拼接结果与仓库内提交的快照如intercity-bus-booking.generic.md与intercity-bus-booking.dolshoi.md来保证指令版本的一致性。因此本文所剖析的内容既是技能真实下发给 Agent 的行为准则也是被自动化测试锁定的稳定契约。1.1 什么时候使用该技能按快照中的 “When to Use” 定义当用户提出以下诉求时应启用本技能请求시외버스 예매、시외버스 시간표、시외버스 예약或已知的 시외버스 线路用户点名 티머니 / Tmoney / 시외버스 통합예매任务是给出时刻候选、查询余票/票价或协助推进到官方卡信息输入页。同时快照明确了三个“不要用”场景고속버스 / KOBUS 线路——应改用express-bus-booking两者终端代码与 POST 流程完全不同未经用户明确确认的最终刷卡提交或支付在存在可用 HTTP 端点时把浏览器自动化作为第一选择。1.2 核心原则只在官方表面做事快照的 “Core Principles” 划定了行为边界只使用官方 Tmoney 시외버스 表面https://intercitybus.tmoney.co.kr请求必须携带 cookie、referer 与常规浏览器 User-Agent默认范围是“查询 辅助人工结账”时刻表、票价/人数阶段、所选座位的临时暂持以及官方卡信息页交接未经明确确认不提交卡字段、不完成最终支付、不执行不可逆的预订步骤若产生了测试或用户放弃的暂持单应尽可能走官方取消/返回流程释放。二、四段式官方 HTTP 流程该技能的核心技术骨架是 Tmoney 시외버스 官网的四个 HTTP 步骤会话级验证记录保存在 tmoney-intercity-http-flow.md2026-05-08 验证、2026-05-13 复验目标即“尽量不依赖浏览器自动化”。快照原文要求通过npx -y nomadamas/k-skill0 read intercity-bus-booking references/tmoney-intercity-http-flow.md读取该探针笔记。步骤 1启动会话先以启用 cookie 的方式抓取落地页或订票入口页建立会话上下文GET https://intercitybus.tmoney.co.kr/ GET https://intercitybus.tmoney.co.kr/otck/trmlInfEnty.do步骤 2查询时刻表POST /otck/readAlcnList.doPOST /otck/readAlcnList.do典型字段如下探针使用的实测线路为 동서울(0511601) → 속초(2482701)depr_Trml_Cd0511601 arvl_Trml_Cd2482701 depr_Trml_Nm동서울 arvl_Trml_Nm속초 ig1 im0 ic0 iv0 depr_DtYYYYMMDD depr_Time000000 bef_Aft_DvsD req_Rec_Num10其中字段含义为ig/im/ic/iv分别对应成人、学生、儿童、军警veterans人数depr_Dt为 YYYYMMDD 格式日期depr_Time为 HHMMSS 格式。bef_Aft_Dvs与req_Rec_Num是浏览器端 JavaScriptreadAlcnListEntry(...)在提交#onewayInfo表单前强制附加的隐藏字段缺一不可——探针实测缺失这两个字段时Tmoney 会返回一个不含任何readSasFeeInf(...)时刻行的通用错误页errorCont约 13,770 字节。下一步阶段的参数通常内嵌在返回的排班按钮readSasFeeInf(...)的 onclick 参数中。探针记录了一个典型参数前缀示例readSasFeeInf(RT201603150047276,1,20260509,1,0511601,2482701,동서울,속초,060500,C004,IDP,금강고속,우등,1,0,0,8,28, ...)可见其中依次包含 rot_Id、序列号、日期、班次序号、出发/到达代码与名称、发车时刻、车辆代码、等级代码、公司名、等级名、乘车人数以及余票数8和总座位数28。步骤 3进入票价 / 人数阶段POST /otck/readSatsFee.doPOST /otck/readSatsFee.do提交从readSasFeeInf(...)取出的选中值、乘客人数以及原始搜索字段。成功响应应包含form#readPcpySats表单及隐藏字段rot_Id alcn_Sqno depr_Trml_Cd arvl_Trml_Cd depr_Time igFee imFee icFee total探针观测到的实测响应JSON 化的隐藏字段为{ rot_Id: RT201603150047276, alcn_Sqno: 1, depr_Trml_Cd: 0511601, arvl_Trml_Cd: 2482701, depr_Time: 060500, igFee: 21300, imFee: 17000, icFee: 10700, total: 21300 }即成人票 21,300 韩元、学生票 17,000 韩元、儿童票 10,700 韩元总价 21,300 韩元与所选班次06:05 금강고속 우등对应。步骤 4临时暂持与卡信息输入POST /otck/readPcpySats.doPOST /otck/readPcpySats.do提交readPcpySats隐藏字段外加所选座位/人数字段常见字段包括pcpy_Num sats_No bus_Tck_Knd_Cd cty_Bus_Dc_Knd_Cd dcrt_Dvs_Cd rtrp_Depr_Dt成功响应会落到官方카드정보 입력卡信息输入页并包含临时座位暂持标识sats_Pcpy_Id。2026-05-13 复验中readPcpySats.do返回了카드정보 입력与sats_Pcpy_IdSP...随后把返回的取消/返回字段带上pcpyCancC回 POST 到/otck/readSatsFee.do可回到选座页且后续时刻查询仍显示 24/28 座——证明取消/返回流程确实释放了暂持。取消 / 返回流程对/otck/readSatsFee.do的 POST 中带上pcpyCancC与暂持字段即可回到选座页并释放临时暂持。这是处理测试单或用户放弃暂持的官方通道。三、内置 Python 助手intercity_bus_search.py快照要求只读时刻表查询应优先使用捆绑助手bundled helper而不是直接上浏览器自动化。助手源码位于 intercity_bus_search.py统一通过 CLI 执行不要假设仓库相对路径或已安装技能相对路径npx -y nomadamas/k-skill0 exec intercity-bus-booking scripts/intercity_bus_search.py -- args3.1 只读时刻表查询npx -y nomadamas/k-skill0 exec intercity-bus-booking scripts/intercity_bus_search.py -- \ --depart-code 0511601 \ --arrive-code 2482701 \ --depart-name 동서울 \ --arrive-name 속초 \ --date 20260520助手的执行链路与源码对应为build_opener()创建带 cookie jar 与免验证 SSL 上下文的 opener → GETtrmlInfEnty.do建立会话 → POST 完整时刻表字段含必填的bef_Aft_DvsD与req_Rec_Num10→ 用正则ROW_RE匹配tr中的readSasFeeInf(...)参数、TD_WRAP_RE抽取单元格文本构建Schedule数据类 → 输出 JSON。3.2 完整参数表对照源码main()中的argparse定义助手支持的参数如下参数必填默认值说明--depart-code是—出发站 Tmoney 终端代码--arrive-code是—到达站 Tmoney 终端代码--depart-name是—出发站名称韩文--arrive-name是—到达站名称韩文--date是—出行日期格式YYYYMMDD--time否000000发车时刻格式HHMMSS--adults否1成人人数字段ig--students否0学生人数字段im--children否0儿童人数字段ic--veterans否0军警人数字段iv--timeout否20单次 HTTP 超时秒--limit否20输出的班次条目上限--select-index否1暂持时选择的班次序号1 起始--hold-seat否—暂持指定座位号并保存官方卡信息页--hold-first-seat否关闭对选中班次暂持第一个可选座位--output-dir否临时目录保存暂持/卡页文件的目录助手的 JSON 输出包含route线路与日期、count命中班次数、items班次数组含发车时间、公司、等级、成人/儿童/学生票价、余票与总座位。默认模式只读不会产生任何外部副作用。3.3 临时暂持模式要创建临时暂持并保存官方卡信息页npx -y nomadamas/k-skill0 exec 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_seat()依次为POST/otck/readSatsFee.do进入选座阶段 → 用SEAT_RE从li中提取可选座位排除disabled→ 提取form#readPcpySats的隐藏字段 → 追加pcpy_Num1、sats_No、rtrp_Depr_Dt空、bus_Tck_Knd_Cd取ig_Knd_Cd缺省IG00、cty_Bus_Dc_Knd_CdZ、dcrt_Dvs_Cd0注释指出这是镜像/js/tckmrs/readSatsInfo.js中pcpySats()的普通成人暂持逻辑→ POST/otck/readPcpySats.do→ 统计카드정보 입력、sats_Pcpy_Id、이미 발매된 좌석、발행을 실패、errorCont等标记的出现次数 → 提取sats_Pcpy_Id判定成功 → 把卡信息 HTML 保存为tmoney-intercity-card-info.html把取消字段保存为tmoney-intercity-cancel-fields.txt。判定成功的条件是解析出sats_Pcpy_Id、响应包含카드정보 입력、且未出现errorCont。助手退出码也有语义无班次时返回 2暂持失败返回 3成功返回 0。快照强调成功必须同时满足hold.successtrue、存在sats_Pcpy_Id、保存的页面包含카드정보 입력。需要注意两点限制暂持模式目前仅支持纯成人载荷——源码在参数校验处明确--students/--children/--veterans任一非零即报错混合乘客人数只能走搜索模式实测中卡信息页未暴露精确的倒计时/过期文案因此应把暂持视为短生命期立即引导用户完成支付对放弃的暂持单用保存的取消字段回 POSTpcpyCancC释放。四、Checkout-Entry Link Helper 与移动端注意事项4.1 结账入口链接助手还可生成一个自动提交的 HTML 页面将 POST 表单直接发往官方端点https://intercitybus.tmoney.co.kr/otck/readPcpySats.do该页面在用户自己的浏览器/会话中创建暂持并打开官方 Tmoney 卡信息页最终支付必须由用户在官方页面上手动完成。在 Discord / 移动端分发时应把助手链接作为普通文本链接而非围栏代码块提供以便用户直接点按。4.2 移动端与应用内浏览器实测中 Tmoney 시외버스 比 KOBUS 更“宽容”移动端使用 iPhone Safari 风格移动 User-Agent 时返回了带sats_Pcpy_Id的官方카드정보 입력页HTTP 200。但应用内浏览器in-app browser的 User-Agent 行为可能不同尤其是同一座位/暂持载荷被重复回放时。若 Discord/Android 应用内测试返回발행을 실패하였습니다这类通用错误不要断定线路查询坏了——正确做法是重新生成一份全新的暂持载荷在外部浏览器重试一次并取消过期的暂持单。五、建议输出格式快照要求候选列表保持简洁可直接被用户读取시외버스 동서울 → 속초 / 2026-05-09 1. 06:05 우등 / 금강고속 / 잔여 8석 / 성인 21,300원 2. ...生成结账入口助手后必须说明它会打开官方 Tmoney 卡信息页、且支付仍需手动完成避免用户误解为已可在线支付。六、常见陷阱清单快照总结了六个高频失误可对照排查混用终端代码体系Tmoney 시외버스 代码不是 KOBUS 代码必须从 Tmoney 시외버스 解析不能猜或照抄把结账入口当作最终支付readPcpySats.do能打开卡信息页但最终支付是独立的手动步骤遗漏隐藏时刻表字段readAlcnList.do必须带bef_Aft_DvsD与req_Rec_Num10否则可能返回约 13 KB 的通用errorCont页而非班次行回放过期暂持载荷对同一线路/座位重复 POST 会失败或产生混乱结果真实使用必须生成新的选座阶段载荷跳过取消/返回流程对放弃的暂持单应使用官方取消/返回表单可用时以pcpyCancC经readSatsFee.do释放过度使用浏览器自动化浏览器只应用于端点发现或 HTTP 探测后的可视化验证。七、验证清单Verification Checklist快照以勾选清单形式定义了成功交付的标准亦是开发者复现与测试该技能的验收依据线路/终端代码从 Tmoney 시외버스 解析而非猜测或从 KOBUS 复制时刻表 POST 包含bef_Aft_DvsD与req_Rec_Num10时刻表响应已解析出班次行/按钮及下一阶段参数票价/人数阶段响应包含form#readPcpySats及预期隐藏字段在报告成功前结账入口响应包含카드정보 입력与暂持标识如sats_Pcpy_Id过期的/测试暂持单已尽可能通过官方取消/返回流程释放除非用户明确确认支付/刷卡提交留给用户完成在 Discord/移动端以可点按的文本链接形式提供移动链接。八、相关资源与延伸阅读在仓库中可进一步深入的材料均已确认存在技能主指令源文件instruction.md本快照正文的原始来源技能元数据skill.jsonHTTP 探针笔记tmoney-intercity-http-flow.md助手完整实现intercity_bus_search.py组装指令快照与快照测试packages/k-skill-cli/test/snapshots/intercity-bus-booking.generic.md、intercity-bus-booking.dolshoi.md及 cli.test.js同类但面向 KOBUS 고속버스 的对照技能express-bus-booking/含references/、scripts/与对应快照。需要说明的是本技能的合法边界与免责声明位于 DISCLAIMER.md韩文含韩国最高法院判例与法定限制引用任何自动化采集均须限于个人、非组织性查询禁止批量爬取、数据库构建或绕过访问控制。【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价