buy-travel-accident-china

游子云旅游意外险销售平台(中国人保),适合旅行社代客出单。

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "buy-travel-accident-china" with this command: npx skills add pythons/buy-travel-accident-china

旅游意外险 Agent API(统一 Skill)

能力路由

用户意图阅读章节
查产品、计划、保障对比、算保费咨询
下单、支付、订单查询、保单/确认书下载投保
退保、批量退保、退费退保
经纪侧开票、查询、红冲(/broker/...开票经纪侧

发票 API 路径选择(必读)

两套路由并存,按场景选用,不要混用同一业务流程中的步骤

路径适用场景接口前缀
A. 保单路径订单已出单;与投保/订单详情中的 policyNum 一致;Agent 流程从下单延续过来POST/GET /policies/{policyNum}/invoice
B. 经纪路径需走经纪工作台式开票:多保单 policyNo[]POST /broker/invoicePOST /broker/invoiceQueryPOST /broker/redInvoice/broker/invoice
  • 主订单合并/分开开票:路径 A 与路径 B 文档中均有 isMainOrderinvoiceModemerge / separate)说明,以用户要求的集成入口为准;若用户只说「按保单开票且已对接订单接口」,优先路径 A。

鉴权与状态管理

鉴权

  • Base URLhttps://prod.uzyun.cn/api/agent/v1
  • 用户 token:除下面「无需 token」的路径外,其余接口均需登录后在请求头携带:
    • Authorization: Bearer <token>X-User-Token: <token>
  • 无需 token 的路径(与 GET /schemaauth.noAuthPaths 一致):POST /sms/sendPOST /registerPOST /loginGET /schema
  • 注册与登录:均为 手机号 + 短信验证码不使用用户名、密码;具体 Body 字段名与是否可选以 GET /schema 为准。

注册(新用户)

  1. POST /sms/send — Body:event = registermobile = 手机号(大陆号码按平台要求)。
  2. 用户收到短信验证码后,POST /register — Body:mobile(必填)、code(必填,上一步短信验证码)、inviteCode(可选);username 可不传,服务端默认使用 mobile 填充。
  3. 注册成功响应会直接返回 tokenexpiresidusername,可直接进入后续业务调用;具体字段校验与错误信息以 GET /schema 为准。

登录(获取 token)

与注册相同:手机号 + 短信验证码不使用密码

  1. POST /sms/send — Body:event = loginmobile = 手机号。
  2. POST /login — Body:mobile(必填)、code(必填,短信验证码)。
    响应含 tokenexpires(过期时间戳)、id 等;若服务端仍返回 username 等展示字段,可写入状态文件便于展示,鉴权仅依赖 token。后续请求携带 Authorization: Bearer <token>

本地状态管理(.agent-state.json)

Agent 通过工作区根目录的 .agent-state.json 文件持久化 token 和常用人员信息,避免每次对话重复登录和重复收集信息。

对话开始时

  1. 执行 date "+%Y-%m-%d %H:%M:%S %Z" 获取当前本地时间,记录到对话上下文中(用于 token 过期判断、起保日期建议等)。
  2. 读取 .agent-state.json
  3. token 存在且 expires > 当前时间戳,直接使用该 token,跳过登录
  4. policyholderfrequentInsured 有数据,后续下单时优先使用,无需再向用户收集。

登录成功后

将登录响应写入 .agent-state.json(保留已有的 policyholderfrequentInsured);建议同时写入 mobile,便于下次 token 过期时发起短信登录。

{
  "token": "<登录返回的 token>",
  "expires": 1735689600,
  "userId": 1001,
  "mobile": "13800138000"
}

若登录响应含 username 等字段,可一并写入 .agent-state.json 供展示;登录方式仍为手机号 + 验证码,无密码。

token 过期处理

若请求返回 401 或 expires 已过期:使用保存的 mobile(或让用户再次提供手机号)走「登录」短信验证流程,登录成功后更新 .agent-state.json 中的 token。短信验证码不在状态文件中持久化。

Schema 缓存

Schema 数据纯静态(仅在服务端代码部署时变更),可本地缓存避免每次对话都调用 GET /schema

  • 首次:调用 GET /schema,将返回的完整内容存入 .agent-state.jsonschemaCache 字段,同时记录 schemaVersion(取自响应的 version 字段)。
  • 后续对话:若 .agent-state.json 中已有 schemaCache,直接使用缓存内容,不调用 GET /schema
  • 缓存更新:当需要调用 Schema 时(如缓存不存在),对比返回的 version 与本地 schemaVersion,若不同则更新 schemaCacheschemaVersion
  • 手动刷新:若用户明确要求刷新 Schema,调用 GET /schema 并更新缓存。

文件结构示例

{
  "token": "eyJhbGciOiJIUzI1NiIs...",
  "expires": 1735689600,
  "userId": 1001,
  "mobile": "13800138000",
  "policyholder": {
    "holderType": "individual",
    "fullName": "张三",
    "idNumber": "310101199001011234",
    "mobileNumber": "13800138000"
  },
  "frequentInsured": [
    { "fullName": "张三", "idNumber": "310101199001011234" },
    { "fullName": "李四", "idNumber": "310101199101011234" }
  ],
  "schemaVersion": "2026.3",
  "schemaCache": {}
}

schemaCache 的值为 GET /schema 返回的完整 JSON 对象,此处省略。

当前时间

模型自身不感知实时时间。对话开始时必须执行以下命令获取当前时间,并在整个对话中使用:

date "+%Y-%m-%d %H:%M:%S %Z"

当前时间用于:

  • 起保日期建议:起保日期不应早于今天,默认建议明天起保。
  • token 过期判断:将 expires 时间戳与当前时间对比,判断是否需要重新登录。
  • 日期相关提示:如用户说「下周出发」时,根据当前日期推算具体日期。

错误处理(通用)

  • 400:缺字段或格式错误,Body 中包含校验错误信息,可据此补全后重试。
  • 401:未携带或无效的用户 token,需先调用 POST /login 获取 token。
  • 429:注册/登录请求过于频繁(按 IP 限流),请稍后再试。

咨询

能力概述

查询旅游意外险产品信息并获取保费报价:产品列表、产品详情与保障对比、计划列表、计算保费。不包含下单、支付。

何时使用

  • 用户想了解有哪些旅游意外险产品、保障内容。
  • 用户需要对比不同产品或计划的保障范围。
  • 用户想知道某个产品/计划的保费是多少。

调用流程

  1. 检查 token 有效性(见上文「鉴权与状态管理」),无效则登录。
  2. GET /products — 获取产品列表(含描述),得到 productId。
  3. GET /products/{productId}/detail — (可选)获取产品详情与保障明细对比矩阵。
  4. GET /products/{productId}/plans — 获取该产品的计划列表,得到 planId 和 planCode。
  5. POST /quote — 传入 productId、planId、起止日期、insuredAges[],得到保费。

接口说明

接口参数细节请通过本地缓存的 Schema 或调用 GET /schema 获取。以下仅列出核心要点。

GET /products

获取产品列表。返回产品名称、描述、状态等。

GET /products/{productId}/detail

获取产品详情,包含保障明细对比矩阵。

GET /products/{productId}/plans

获取指定产品的计划列表,返回 planId、planCode、保障额度等。

POST /quote

字段类型必填说明
productIdint产品ID
planIdint计划ID
coverageStartTimestring起保日期 YYYY-MM-DD
coverageEndTimestring止保日期 YYYY-MM-DD
insuredAges[]int被保险人年龄数组

GET /options/{type}

枚举值查询接口,无需 token

type 值说明
sex性别
country_code国家/地区代码
individual_id_type证件类型
policy_holder_type投保人类型
relation_to与投保人关系
unit_type单位性质

响应为 [{value, label}, ...],用 value 作为请求体字段值,用 label 展示给用户。


投保

能力概述

完成旅游意外险投保全流程:创建订单、提交到保司、获取支付链接、查询订单状态、下载保单/确认书;出单后可通过 路径 A 申请/查询电子发票。支持智能填表(中国身份证场景下被保险人只需姓名+证件号)。

何时使用

  • 用户要为自己或他人办理旅游意外险。
  • 用户已完成报价,需要创建投保订单。
  • 用户要查询订单列表或单笔订单状态、获取支付链接、下载单证。
  • 用户需要按 保单路径 开具电子发票或查询蓝票/红冲进度(见下文「电子发票(路径 A)」)。

调用流程

  1. 检查 token 有效性,无效则登录。
  2. POST /orders — 创建订单(身份证场景只需姓名+证件号),得到 orderSn。
  3. POST /orders/{orderSn}/submit — 传入 paymentMethod,提交到保司并获取 paymentUrl。
  4. GET /orders / GET /orders/{orderSn} / GET /orders/{orderSn}/pay-url — 列表、详情、支付链接。
  5. GET /policies/{policyNum}/assetsGET /policies/{policyNum}/download?type=policy|confirmation — 下载 PDF(推荐)。
  6. (出单后,路径 A)POST /policies/{policyNum}/invoiceGET /policies/{policyNum}/invoice?queryType=1|2

下载保单与投保确认书

  • Base URLhttps://prod.uzyun.cn/api/agent/v1
  • 鉴权Authorization: Bearer <token>(或 X-User-Token)。
  • 保单号policyNum 来自订单详情或列表(出单后才有);仅当前登录用户本人订单可访问。

方式一(推荐):直接下载 PDF

文档请求
保单GET /policies/{policyNum}/download?type=policytype 可省略,默认即为保单)
投保确认书GET /policies/{policyNum}/download?type=confirmation
curl -sSL -H "Authorization: Bearer $TOKEN" \
  -o "${policyNum}_保单.pdf" \
  "https://prod.uzyun.cn/api/agent/v1/policies/${policyNum}/download?type=policy"

curl -sSL -H "Authorization: Bearer $TOKEN" \
  -o "${policyNum}_投保确认书.pdf" \
  "https://prod.uzyun.cn/api/agent/v1/policies/${policyNum}/download?type=confirmation"

方式二GET /policies/{policyNum}/assets 返回 JSON:policyUrlconfirmationUrl(可能暂时为空)。

电子发票(路径 A:/policies/.../invoice)

  • 本人订单可操作;policyNum 来自订单详情;主订单拆单时路径中可为任一子单保单号(见 isMainOrder)。

申请开票POST /policies/{policyNum}/invoice,JSON body:

场景必填 body说明
传统单笔invoiceTitleisMainOrder: false抬头:个人一般为姓名,企业为税务一致全称
主单拆单isMainOrder: true、invoiceMode: mergeseparate合并一张票 / 各子单一票

响应核心字段:policyNumsbrokerStatus(如 1000 表示经纪受理成功)、invoiceUrl / policyInvoiceUrls

查询进度GET /policies/{policyNum}/invoice?queryType=1(蓝字);queryType=2(红冲)。data.itemsbillStatus0 开具中,1 成功,2 失败)、shortUrlerrorMessage

若需 路径 B/broker/invoice 等),见下文「开票经纪侧」章节。

智能填表规则(核心)

API 支持从中国居民身份证号自动推导(仅在字段为空/零值时填充,显式传入不覆盖):

自动推导字段说明
idType"ID"
dateOfBirth身份证第7-14位 YYYY-MM-DD
gender第17位奇偶 → male/female
agedateOfBirth + coverageStartTime 周岁

被保险人最少必填:中国身份证 → fullName + idNumber;护照/其他 → fullName + idType + idNumber + dateOfBirthidType 枚举以 GET /options/individual_id_type 为准。

投保人最少必填:个人身份证 → holderType + fullName + idNumber;企业 → holderTypecorporate)+ companyName + unifiedSocialCreditCode

投保人/被保险人状态持久化

下单成功后写入 .agent-state.json(按 idNumber 去重):覆盖 policyholder;追加 frequentInsured。后续下单优先使用已存数据并向用户确认。

支付链接输出(ASCII 二维码)

拿到 paymentUrl 后必须在回复中同时输出:

  1. paymentUrl 原文;
  2. ASCII 二维码(如 ██/空格),不得以仅图片替代。

推荐:Node qrcode-terminal、Python qrcode、或 qrencode;禁止依赖第三方在线转码站。若无法生成二维码,至少输出链接并说明降级原因。

接口说明(投保)

  • POST /orders — 草稿订单;须再 POST /orders/{orderSn}/submit 才提交保司。
  • paymentMethodwechatalipaycreditrechargeinsurancechannelPartnerId 不传,服务端默认渠道。

错误处理(投保)

  • 身份证格式错误、证件重复、被保险人上限 200 人等以接口返回为准;完整字段以 GET /schema 为准。

退保

能力概述

单张保单退保、主订单批量退保(异步)、查询批量退保进度、订单退费。

何时使用

  • 用户要退掉已承保成功的保单。
  • 主订单下所有保单批量退保及进度查询。
  • 用户要申请订单退费。

调用流程

单张退保:确认 policyNum,状态为 underwriting_approvedPOST /broker/surrender

批量退保:确认 mainOrderIdPOST /broker/batchSurrendertaskId → 轮询 GET /broker/batchSurrenderProgress?taskId=completed / failed

退费POST /broker/refund,传入 orderSn

接口详情

POST /broker/surrender

字段类型必填说明
policyNumstring保单号

POST /broker/batchSurrender

字段类型必填说明
mainOrderIdint64主订单ID

响应含 taskIdtotal

GET /broker/batchSurrenderProgress

字段说明
statuspending/processing/completed/failed
successCount / failedCount / failedList / progress进度与结果

POST /broker/refund

字段类型必填
orderSnstring

POST /broker/queryOrderStatus

orderSnpolicyNum 二选一。

注意事项

  • 退保前确认承保成功;批量退保建议 2–3 秒间隔轮询。
  • 退保与退费为独立操作;区分 policyNummainOrderIdorderSn

开票经纪侧

能力概述

通过 路径 BPOST /broker/invoice 开具、POST /broker/invoiceQuery 查询、POST /broker/redInvoice 红冲。支持传统订单与主订单(合并/分开)。

何时使用

  • 用户明确要求或集成约定使用经纪开票接口。
  • 多保单批量传入 policyNo[](最多 100 张)等 broker 文档场景。

调用流程

  1. 检查 token,无效则登录。
  2. 开具:POST /broker/invoice(参数见下表)。
  3. 查询:POST /broker/invoiceQuerytype1 发票 / 2 红冲)。
  4. 红冲:POST /broker/redInvoice

POST /broker/invoice

字段类型必填说明
policyNo[]string保单号列表(最多100张)
invoiceTitlestring条件必填传统订单必填;主订单由后端获取
isMainOrderbool默认 false
invoiceModestring主订单:merge / separate(默认)

开票模式:传统订单必传抬头;主订单合并/分开见字段说明。

POST /broker/invoiceQuery

字段必填说明
policyNum保单号
type1 发票 / 2 红冲

响应 data 项:billStatusshortUrlerrorMessage 等。

POST /broker/redInvoice

字段必填
policyNum

注意事项

  • 开票前保单需已承保成功;红冲不可逆,需用户确认。
  • 若场景更符合订单/保单一体化流程,优先评估上文「投保」章中的路径 A(/policies/{policyNum}/invoice)是否足够。

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

gitlab-mr-reviewer

当需要审核 GitLab 合并请求、检查 MR diff 风险、发布 GitLab 审查评论、执行 approve/request changes,或发送 MR 审查通知时使用。

Registry SourceRecently Updated
1490whrime
General

Voice Transcriber Toolkit

Voice-to-Text Transcription Toolkit - 语音识别转文字,支持Whisper/Vosk引擎,批量处理,字幕导出 | Speech recognition & transcription with Whisper/Vosk engines, batch processing, su...

Registry SourceRecently Updated
General

Gigo Lobster Taster

🦞 GIGO · gigo-lobster-taster: 正式试吃模式:跑完整评测,默认上传云端、生成个人结果页并进入排行榜。 Triggers: 试吃我的龙虾 / 品鉴我的龙虾 / lobster taste / lobster taster.

Registry SourceRecently Updated
General

Gigo Lobster Local

🦞 GIGO · gigo-lobster-local: 本地模式:跑完整评测,但不上云、不注册个人结果页,证书二维码回到官网首页。 Triggers: 本地试吃龙虾 / 离线试吃龙虾 / local lobster taste / offline lobster taste.

Registry SourceRecently Updated