AI机票预订助手
AI机票助手 - 实现国内航班搜索、舱位查询、预订下单、机票改期、机票退票。适用于用户询问航班、查询机票价格、提交机票订单、改期航班、退票时使用。
安装 / 下载方式
TotalClaw CLI推荐
totalclaw install clawskills:ryan-zry~search-flightcURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/clawskills%3Aryan-zry~search-flight/file -o search-flight.mdGit 仓库获取源码
git clone https://github.com/openclaw/skills/commit/dd5a15f6cba95fd81eb6c23dc74ee4b3cdba837b# AI机票助手 当用户询问航班搜索、舱位查询、机票预订、机票改期或机票退票时,使用此 skill 调用AI机票服务。 ## 运行环境要求 本 skill 通过 **python3** 执行 HTTP POST 请求调用AI机票服务。**运行环境必须提供 python3**。 ## 隐私与个人信息(PII)说明 预订功能会将用户提供的**个人信息**(乘客姓名、手机号、证件号等)通过 HTTP POST 发送至AI机票服务,以完成机票预订。使用本 skill 即表示用户知晓并同意上述 PII 被发送到外部服务。请勿在日志或回复中暴露用户个人信息。 ## 可用工具 **重要**:下方示例中的参数均为占位,调用时需**根据用户当前需求**填入实际值(城市、日期、航班号、乘机人、联系方式等),勿直接照抄示例值。 ## 适用场景 - 按出发/到达城市、日期搜索航班列表 - 查看指定航班的舱位价格详情 - 用户确认后创建机票预订订单 - 查询已创建订单的详细信息 - 用户确认后改期或退票已创建订单的航班 ## 鉴权流程(必须先完成) **重要**:使用任何功能前,用户必须先完成鉴权流程。鉴权成功后获得的 apiKey 会自动保存在用户主目录的 `~/.fbt_auth.json` 文件中,新会话会自动沿用。 ### 鉴权步骤 1. **发送验证码**:用户提供手机号,系统发送验证码到手机 2. **验证并获取 apiKey**:用户输入验证码,验证成功后获得 apiKey 3. **自动注入**:后续所有 API 调用会自动携带 apiKey ### 鉴权命令 #### 1. 发送验证码 ```bash python3 scripts/auth.py send <phone> ``` **示例**: ```bash python3 scripts/auth.py send 13800138000 ``` #### 2. 验证并获取 apiKey ```bash python3 scripts/auth.py verify <phone> <code> ``` **示例**: ```bash python3 scripts/auth.py verify 13800138000 123456 ``` #### 3. 查看鉴权状态 ```bash python3 scripts/auth.py status ``` ### 鉴权检查规则 - 在执行任何航班查询、预订、改期、退票操作前,必须先检查鉴权状态 - 如果未鉴权或 apiKey 已过期,必须引导用户完成鉴权流程 - 鉴权成功后,所有 API 调用会自动携带 apiKey,无需手动传递 ### 1. 航班搜索 (searchFlight) **功能**:查询国内航班列表 **必填参数**: - `start_code`: 出发城市名称(如 北京、上海、广州) - `end_code`: 到达城市名称 - `date`: 出发日期(格式 YYYY-MM-DD) **触发词**:某地到某地航班、查机票、搜航班、机票价格 **执行命令**: ```bash python3 scripts/search_flights.py <start_code> <end_code> <date> ``` **示例**: ```bash python3 scripts/search_flights.py 北京 上海 2026-03-15 ``` **返回结果**:航班列表(航班号、航空公司、起降时间、机型、机场、最低价等) **上下文检查规则**: - 如果用户在当前或之前的消息中已经提供了某个参数,则**无需再次询问**该参数 - 只向用户询问**尚未提供**的参数 - 如果所有参数都已提供,直接发起请求 **展示要求**: - 必须使用代码块包裹脚本输出的表格 - 必须展示完整表格 - 参考"输出格式要求"章节的标准格式 ### 2. 舱位详情查询 (searchPrice) **功能**:查询特定航班的详细价格信息 **必填参数**: - `start_code`: 出发机场三字码(从 searchFlight 响应结果中获取) - `end_code`: 到达机场三字码(从 searchFlight 响应结果中获取) - `date`: 出发日期(格式 YYYY-MM-DD) - `flight_no`: 航班号 **触发词**:查看航班详情、这个航班的舱位价格 **执行命令**: ```bash python3 scripts/search_price.py <start_code> <end_code> <date> <flight_no> ``` **示例**: ```bash python3 scripts/search_price.py PEK PVG 2026-03-15 CA1501 ``` **返回结果**:该航班的各舱位价格、折扣、退改签规则等详细信息,并将舱位信息保存到 `/tmp/flight_seat_items.json` 供下单使用 **使用场景**:用户先使用航班搜索查询航班列表,从返回的航班列表中选择某个航班后,使用此功能查询该航班的详细价格信息 **展示要求**: - 必须使用代码块包裹脚本输出的表格 - 必须展示完整表格 - 参考"输出格式要求"章节的标准格式 ### 3. 退改规则和行李额查询 (searchGuestRule) **功能**:查询指定舱位的详细退改签规则和行李额 **必填参数**: - `seat_index`: 舱位编号(从舱位详情查询结果中选择,如 1、2、3) **触发词**:退改规则、退票规则、改签规则、这个舱位的退改政策、行李额、客规 **执行命令**: ```bash python3 scripts/search_guest_rule.py <seat_index> ``` **示例**: ```bash python3 scripts/search_guest_rule.py 1 ``` **返回结果**:该舱位的退票、改签、行李额等详细规则说明 **重要说明**: - 此功能为**可选流程**,仅在用户明确询问退改规则时调用 - `seat_index` 必须来自最近一次舱位详情查询的结果 - 舱位信息从 `/tmp/flight_seat_items.json` 文件中读取 - 如果文件不存在或舱位编号无效,会提示用户先执行舱位详情查询 ### 4. 机票下单 (createOrder) **功能**:创建机票订单 **必填参数**: - `seat_index`: 舱位编号(从上一步舱位详情查询结果中选择,如 1、2、3) - `passenger_name`: 乘客姓名 - `passenger_phone`: 乘客手机号 - `passenger_id`: 乘客证件号 **触发词**:订这个、预订、下单 **执行命令**: ```bash python3 scripts/create_order.py <seat_index> <passenger_name> <passenger_phone> <passenger_id> ``` **示例**: ```bash python3 scripts/create_order.py 1 "张三" "13800138000" "110101199001011234" ``` **返回结果**:订单号、支付链接、订单详情链接等 **重要说明**: - `seat_index` 必须来自最近一次舱位详情查询的结果 - 舱位信息从 `/tmp/flight_seat_items.json` 文件中读取 - 如果文件不存在或舱位编号无效,会提示用户先执行舱位详情查询 - **必须向用户索取**乘客姓名、手机号和证件号,不可使用默认值或跳过 ### 5. 订单详情查询 (orderDetail) **功能**:查询已创建订单的详细信息 **必填参数**: - `order_id`: 订单号(从下单接口返回的订单号中获取) **触发词**:订单详情、查看订单、查询订单、订单状态 **执行命令**: ```bash python3 scripts/order_detail.py <order_id> ``` **示例**: ```bash python3 scripts/order_detail.py 69a677bee4b0252bd532e35c ``` **返回结果**:订单的详细信息,包括航班信息、乘客信息、支付状态等 **重要说明**: - 订单号可以从下单接口的返回结果中获取 - 此功能可用于查询订单的实时状态和详细信息 ### 6. 取消订单 (cancelOrder) **功能**:取消待支付状态的订单 **必填参数**: - `order_id`: 订单号(从下单接口返回的订单号中获取) **触发词**:取消订单、不要了、取消这个订单 **执行命令**: ```bash python3 scripts/cancel_order.py <order_id> ``` **示例**: ```bash python3 scripts/cancel_order.py 69a677bee4b0252bd532e35c ``` **返回结果**:取消成功或失败 **重要说明**: - 此功能仅适用于待支付状态的订单 - 订单号可以从下单接口的返回结果中获取 - 已支付或已出票的订单无法通过此接口取消,需要使用退票功能 ### 7. 改期航班搜索 (endorseSearchFlight) **功能**:查询可改期的航班列表 **必填参数**: - `order_id`: 订单号(从订单详情或下单接口返回的订单号中获取) - `dep_date`: 改期日期(格式 YYYY-MM-DD,需要向用户索取) **触发词**:改期、改签、换航班、查改期航班 **执行命令**: ```bash python3 scripts/endorse_search_flight.py <order_id> <dep_date> ``` **示例**: ```bash python3 scripts/endorse_search_flight.py 69a677bee4b0252bd532e35c 2026-03-20 ``` **返回结果**:可改期的航班列表(航班号、航空公司、起降时间、机场、最低价等) **重要说明**: - 订单号可以从订单详情接口获取 - 改期日期需要向用户索取 - 此接口会自动从订单详情中提取 flight_no(从 segmentInfo.flight_no 获取)和 ticket_ids(从 passengerList[0].productId 获取) - 返回的航班列表格式与航班搜索接口一致,方便用户选择 **展示要求**: - 必须使用代码块包裹脚本输出的表格 - 必须展示完整表格 - 参考"输出格式要求"章节的标准格式 ### 8. 改期舱位详情查询 (endorseSearchPrice) **功能**:查询指定改期航班的舱位价格详情(改期费、机票差价费等) **必填参数**: - `order_id`: 订单号(从订单详情或下单接口返回的订单号中获取) - `dep_date`: 改期日期(格式 YYYY-MM-DD,与改期航班搜索时使用的日期一致) - `flight_no`: 航班号(从改期航班搜索结果中选择) **触发词**:查看改期价格、这个航班的改期费、改期舱位详情 **执行命令**: ```bash python3 scripts/endorse_search_price.py <order_id> <dep_date> <flight_no> ``` **示例**: ```bash python3 scripts/endorse_search_price.py 69a677bee4b0252bd532e35c 2026-03-20 HU7603 ``` **返回结果**:该航班的各舱位改期费、机票差价费、预估总改期费等详细信息,并将舱位信息保存到 `/tmp/endorse_seat_items.json` 供改期下单使用 **重要说明**: - 此接口必须在改期航班搜索之后调用 - flight_no 必须来自改期航班搜索返回的航班列表,需要用户选择 - 此接口会自动从订单详情中提取 ticket_ids(从 passengerList[0].productId 获取) - 展示的改期费用信息包括:改期费、机票差价费、预估总改期费 - 舱位信息会保存到临时文件供后续改期下单使用 **展示要求**: - 必须使用代码块包裹脚本输出的表格 - 必须展示完整表格 - 参考"输出格式要求"章节的标准格式 ### 9. 提交改期申请 (endorseApply) **功能**:提交改期申请,创建改期订单 **必填参数**: - `seat_index`: 舱位编号(从改期舱位详情查询结果中选择,如 1、2、3) - `order_id`: 原订单号(从订单详情或下单接口返回的订单号中获取) **触发词**:确认改期、提交改期申请、改期下单 **执行命令**: ```bash python3 scripts/endorse_apply.py <seat_index> <order_id> ``` **示例**: ```bash python3 scripts/endorse_apply.py 1 69a677bee4b0252bd532e35c ``` **返回结果**:改期单订单号、支付链接、订单详情链接等 **重要说明**: - `seat_index` 必须来自最近一次改期舱位详情查询的结果 - 舱位信息从 `/tmp/endorse_seat_items.json` 文件中读取 - 如果文件不存在或舱位编号无效,会提示用户先执行改期舱位详情查询 - 改期申请成功后会返回新的改期单订单号,需要用户完成支付 ### 10. 预估退票费查询 (refundFeeDetail) **功能**:查询退票费用详情 **必填参数**: - `order_id`: 订单号(从订单详情或下单接口返回的订单号中获取) **触发词**:查询退票费、退票费用、预估退票费 **执行命令**: ```bash python3 scripts/refund_fee_detail.py <order_id> ``` **示例**: ```bash python3 scripts/refund_fee_detail.py 69a677bee4b0252bd532e35c ``` **返回结果**:预估退票费(单票) **重要说明**: - 此接口用于在退票前预估退票费用 - 用户需要确认退票费用后才能提交退票申请 - 返回的 refund_amount 需要在提交退票申请时使用 ### 11. 提交退票申请 (refundApply) **功能**:提交退票申请 **必填参数**: - `order_id`: 订单号(从订单详情或下单接口返回的订单号中获取) - `refund_amount`: 预估退票费(从预估退票费查询接口返回的 refund_amount 获取) **触发词**:确认退票、提交退票申请、退票 **执行命令**: ```bash python3 scripts/refund_apply.py <order_id> <refund_amount> ``` **示例**: ```bash python3 scripts/refund_apply.py 69a677bee4b0252bd532e35c 808 ``` **返回结果**:退票申请结果、退票单号 **重要说明**: - 此接口必须在预估退票费查询之后调用 - refund_amount 必须来自预估退票费查询接口返回的 refund_amount - product_ids 会自动从订单详情中获取(从 passengerList 中提取 productId) - 退票申请提交后需要等待审核 ## 完整流程示例 **用户**:3月15号北京到上海的航班 **AI 执行**: 1. 检查上下文,发现用户已提供出发城市(北京)、到达城市(上海)、日期(3月15号) 2. 调用 `search_flights.py 北京 上海 2026-03-15` 3. 展示航班列表 **用户**:看一下 CA1501 这个航班的舱位 **AI 执行**: 1. 从上一轮结果确认航班号 CA1501,连同城市和日期 2. 调用 `search_price.py PEK PVG 2026-03-15 CA1501` 3. 展示舱位列表(价格、退改签规则等) 4. 提示用户可选择舱位编号进行预订 **用户**:第1个舱位的退改规则是什么?(可选步骤) **AI 执行**: 1. 调用 `search_guest_rule.py 1` 2. 展示该舱位的详细退改签规则 **用户**:订第1个,乘客张三 13800138000 110101199001011234 **AI 执行**: 1. 从用户输入提取:seat_index=1、passenger_name=张三、passenger_phone=13800138000、passenger_id=110101199001011234 2. 调用 `create_order.py 1 "张三" "13800138000" "110101199001011234"` 3. 展示订单号、支付链接等信息 4. 提醒用户完成支付 **用户**:查看订单详情 **AI 执行**: 1. 从上一轮结果获取订单号(如:69a677bee4b0252bd532e35c) 2. 如果用户没有提供手机号,向用户索要创建订单时使用的乘机人手机号 3. 调用 `order_detail.py 69a677bee4b0252bd532e35c 13800138000` 4. 展示订单的详细信息 **用户**:取消订单 **AI 执行**: 1. 从上一轮结果获取订单号和手机号 2. 调用 `cancel_order.py 69a677bee4b0252bd532e35c 13800138000` 3. 展示取消订单成功或失败的信息 **用户**:我想改期到3月20号 **AI 执行**: 1. 从上一轮订单详情中获取订单号和手机号 2. 向用户确认改期日期(3月20号,格式化为 2026-03-20) 3. 调用 `