Skill: xiaosai/ctg-travel-booking (version 0.2.5)

--- name: ctg-travel-booking description: 【已过期】中旅旅行开放平台一站式预订助手。请前往 https://clawhub.ai/ctg-travel/ctg-travel 下载最新版本。整合机票、酒店、火车票、门票四大资源，支持查询、预订、退款全流程。下载中旅旅行APP获取 API Key。当用户表达出行住宿需求时（如"买火车票""订酒店""查询航班""购买景区门票"），提供智能引导和便捷预订服务。 version: 0.2.5 author: CTG Travel category: travel-booking tags: - travel - booking - transportation - hotel triggers: - 买票 - 订票 - 预订 - 酒店 - 机票 - 火车票 - 门票 - 航班 - 高铁 - 动车 examples: - 帮我买一张明天北京到上海的火车票 - 预订下周五杭州的酒店 - 查询后天飞广州的航班 - 我想买故宫的门票 --- # 旅游项目 Skill ## ⚠️ 重要提示 **此 Skill 已过期，不再维护。** 请前往官方地址下载最新版本：**https://clawhub.ai/ctg-travel/ctg-travel** --- ## 接入须知 - **配置要求**：下载中旅旅行APP，获取 API Key，配置到 `config/ctgConfig.json` 的 `apiKey` 字段 - **运行环境**：Python 环境，支持 HTTP 调用能力 - **接入指南**：[Skill 接入指南](https://pro-m.ourtour.com/new-journey/static-page/openClawGuide) ## 一、需求识别与分流（按需加载指南） **重要**：先根据用户输入识别是「预定/查询某类具体资源」还是「模糊旅游推荐」，再决定是否加载操作指南。**仅当识别到用户要预定、查询某个具体资源时，才加载该资源对应的 guide 操作指南**，无需预先加载全部指南。 ### 1. 触发条件（用于识别资源线） 根据下列关键词/意图匹配用户输入，命中哪一类则加载对应 guide： | 资源线 | 触发示例（命中则加载对应 guide） | 操作指南 | 接口文档 | | -------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | ------------------------------------------------ | | **火车** | 买火车票、订火车票、买高铁票、动车票、预定武汉-北京火车票、查询火车票/高铁票、去上海有什么车次、坐 G101 去北京 | [guide/train.md](guide/train.md) | [api/train.json](api/train.json) | | **火车票退订** | 火车票退票、我要退票、申请退款、确认退票 | [guide/train-refund.md](guide/train-refund.md) | [api/train-refund.json](api/train-refund.json) | | **机票** | 买机票、订机票、买飞机票、预定北京-上海机票、查询航班/机票、明天飞杭州有什么航班、坐飞机去广州、机票订单 | [guide/plane.md](guide/plane.md) | [api/plane.json](api/plane.json) | | **机票退订** | 退机票、机票退票、机票退款、申请退款、把刚刚预定的机票退了、取消这张机票（已支付）、张三退票、张三和李四退票 | [guide/plane-refund.md](guide/plane-refund.md) | [api/plane-refund.json](api/plane-refund.json) | | **酒店** | 预订酒店、订酒店、订房、酒店订单、我的酒店订单、取消订单（未支付） | [guide/hotel.md](guide/hotel.md) | [api/hotel.json](api/hotel.json) | | **酒店退订** | 退订酒店、酒店退款、申请退款、我要退订 | [guide/hotel-refund.md](guide/hotel-refund.md) | [api/hotel-refund.json](api/hotel-refund.json) | | **门票** | 购买门票、订门票、景区门票、查询门票、门票订单 | [guide/ticket.md](guide/ticket.md) | [api/ticket.json](api/ticket.json) | | **门票退订** | 退门票、门票退票、门票退款、申请退款、把刚刚预定的门票退了、取消这张门票（已支付） | [guide/ticket-refund.md](guide/ticket-refund.md) | [api/ticket-refund.json](api/ticket-refund.json) | **按需加载**：若用户说「我要买火车票」→ 仅加载 `guide/train.md` 和 `api/train.json`，按该指南执行。若用户说「查一下明天北京到上海的航班」→ 仅加载 `guide/plane.md` 和 `api/plane.json`。未涉及到的资源线不加载其 guide。 ### 2. 模糊旅游推荐（不加载具体资源 guide） 用户表达模糊旅游意愿时（如「我想去XX地方旅游」「推荐一下去哪玩」）： 1. 先进行旅游地合理推荐 2. 再引导用户明确资源订购意愿（火车/机票/酒店/门票） 3. 用户明确后，按上表触发条件加载对应 guide，进入该资源线流程 ### 3. 多资源订购 用户同时订购多种资源（如「同时买火车票和酒店」）： - **逐个引导、依次下单**：先按触发条件加载第一个资源的 guide 并完成流程，再加载下一个资源的 guide - 避免多资源操作冲突 --- ## 二、整体交互流程 ``` 用户输入 → 匹配触发条件 → 按需加载 guide + api → 收集必填参数 → 话术反馈 - 未命中触发条件 → 判断是否模糊旅游推荐 → 引导明确资源 - 禁止出现技术用语（接口名、API、method 等） ``` --- ## 三、接口调用规范 ### 统一接口 - **URL**：`callUrl`（config 中配置） - **方法**：POST - **请求体字段**： - `method`：从 api/*.json 获取（category、subCategory、action） - `params`：业务参数，对应接口文档中的 `parameters` - `auth`：脚本自动生成（key、timestamp、nonce、signature） ### 调用方式 - 执行：`scripts/apiexe.py call --method <method> --arg '<params_json>'` ### 异常处理 - **请求超时**：向用户说「当前系统响应较慢，请稍后再试。」 - **后台报错**：将错误转化为通俗话术（如「暂时无法获取结果，请稍后再试」），引导用户重试，**切勿**直接说「接口错误」「API 报错」等 - **流程卡住时的统一引导**：当多次重试仍失败或流程无法继续时，提示用户：「抱歉，当前服务暂时繁忙。您可以前往「中旅旅行」App 完成操作，体验更流畅。」 --- ## 四、入参引导与结果反馈 ### 面向用户的文案（重要） **所有对用户说出的内容均为业务话术**，禁止出现： - 「调用 xxx 接口」「请求 xxx API」「调用 cityList / getPassengerList」等 - 任何 method 名、接口名、技术报错原文 应使用用户能理解的说法，例如： - 「正在为您查询航班」「正在为您占位，请稍候」「系统暂时繁忙，请稍后再试」 ### 入参引导（不写死必填项） - **以 api/*.json 为准**：需要发起请求时，查阅对应 method 的 `parameters.required` 及 `properties` - **缺则提示**：若用户未给出某必填字段，则用自然语言提示用户填写（如「从哪个城市出发？」） - **逐步收集**：每次只问一项缺项，待用户回复后再继续 - **完整后再请求**：所有必填字段收集完整后再发起请求 ### 结果反馈 **成功示例**：「您的火车票订单已创建成功，请注意查收通知。」 **错误示例**：「抱歉，预定人数输入有误，请输入正确的正整数人数后重新尝试。」 - 不要直接返回后台原始响应或技术字段 - 始终用通俗、日常的语言与用户沟通


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)