Vtrip B2B · 商品分销
本 Skill 面向租户侧 选品 → 选客户 → 预下单 → 正式下单。全程使用 OpenSSO 换出的旅行社员工宿主 JWT;不做代登。商品搜索走 /api/v1/products/page;类目以 GET /api/v1/products/categories 为准(含日游、邮轮等)。
| 步骤 | 能力 | 接口 |
|---|---|---|
| 0 类目 | 查可售类目中文名 | GET /api/v1/products/categories |
| 1 选品 | 按类目 / 名称 / 地区查可售商品;详情 / 日历价 | POST /api/v1/products/page 等 |
| 2 选客户 | 客户组织列表 / 分页,记下 orgId |
GET/POST /api/customer-orgs* |
| 3 预下单 | 价库存校验,取得 preOrderKey |
POST /api/user/orders/pre |
| 4 正式下单 | preOrderKey + 客户 orgId 创建订单 |
POST /api/op/orders/create-for-customer |
本 Skill 归属 vtrip_claw。body 不传 tenantId。不要用 Supply Token。
何时使用
- 「查达古冰川门票」「卖日游」「按地区筛上架酒店」
- 「给某某客户下单这张票」「先预下单再创单」
不要用于:
| 场景 | 改用 |
|---|---|
| 商品上架/改价库存等主数据维护、销售区域、平台行程导入、运营订单核对 | vtrip-b2b-data-modeling |
| 整段行程推荐与报价 | vtrip-b2b-iti-quotation |
| 路书展示 | ../ai-trip/vtrip-roadbook(渠道 ai_trip,不在本目录) |
对话路由
- 打开后台订单列表(用户先报日期)→
--action order-link --create-date+--order-kind(行程/标品/日游/游轮)。不要先搜商品。 - 选品 → 类目不清先
--action categories;再--action page(--category-name用接口中文名 + 建议--status 1)。门票等看列表售价;邮轮用get读价格属性矩阵,不要用--action prices当报价。 - 选客户 →
--action customer-list或customer-page;确认客户名称。 - 预下单 → 门票等:
--action pre(CLI 或--payload-file)。邮轮:禁止手写/搜索猜 DTO;先--action cruise-build ... --out-file,再pre --payload-file。 - 正式下单 →
--action create:客户 + preOrderKey +--order-amount(元)+ 联系人;邮轮另加同船期--start-date --end-date --stock。
接口里商品价为分,创单 orderAmount 为元。对人一律说元。详见 references/conversation-flow.md。
选品类目(categoryName)与订单页类型(--order-kind)不是同一套:日游/邮轮商品走 page;打开某天「日游/游轮订单」走 order-link。口语「游轮」在选品时对应类目 邮轮。
凭证
与 vtrip-b2b-data-modeling 同源客户 ApiKey:
| 用途 | 环境变量(优先) | 兼容变量 |
|---|---|---|
| 客户 ApiKey | VTRIP_OPEN_API_KEY |
VTRIP_API_KEY |
| OpenSSO secret | VTRIP_OPEN_SSO_SECRET_KEY |
VTRIP_B2B_SSO_SECRET |
| 已有宿主 JWT | VTRIP_B2B_HOST_TOKEN |
VTRIP_B2B_AUTH_TOKEN |
| 配置 | 环境变量 | 如何取值 |
|---|---|---|
| 开放平台 / 宿主 API / OP 前台 | 可覆盖:VTRIP_OPEN_PLATFORM_BASE_URL、VTRIP_B2B_HOST_API_BASE_URL、VTRIP_OP_WEB_BASE_URL |
未覆盖时按 ApiKey 前缀:vt_live → 生产(open.visiotrip.com.cn / ata-api / ataop);vt_test → 预发(open.vtrip.top:8443 / dev-ata-api / dev-ataop)。resolve 返回的 api_base、换票 hostApiBaseUrl 再覆盖业务请求基址。 |
优先级:Host Token → secretKey → ApiKey(secrets/resolve → /api/open/sso/token)。业务请求只带宿主 Bearer。详见 references/configure-credentials.md。
调用
# 0. 类目(以宿主返回为准)
node scripts/product-sell.js --action categories
# 1. 选品(--category-name 用类目接口返回的中文名,如 门票 / 日游 / 邮轮)
node scripts/product-sell.js \
--action page \
--category-name "日游" \
--status 1 \
--page-no 1 \
--page-size 20
# 详情 / 日历价(可选;邮轮请用 get 读矩阵,不要用 prices 当报价)
node scripts/product-sell.js --action get --id "<索引ID>"
node scripts/product-sell.js --action prices --id "<索引ID>" \
--start-date "2026-09-01" --end-date "2026-09-30"
# 2. 选客户
node scripts/product-sell.js --action customer-list
node scripts/product-sell.js --action customer-page --keyword "测试" --status 1
# 3. 预下单(取得 preOrderKey)
node scripts/product-sell.js --action pre \
--product-item-id "109158" \
--sku-id "7020260913000001" \
--use-date "2026-09-20" \
--unit-price-fen "12000" \
--qty 1 \
--ticket-type-name "成人票"
# 或复杂报价:--payload-file ./tmp-pre.json ({ "payload": "<字符串>" } 或 SINGLE_ITEM 对象)
# 4. 正式下单
node scripts/product-sell.js --action create \
--org-id "<客户OrgId>" \
--pre-order-key "<preOrderKey>" \
--order-amount "120" \
--contact-name "张三" \
--contact-phone "13800000000"
# 打开后台订单列表(下单日 + 类型)
node scripts/product-sell.js --action order-link --create-date "2026-09-14" --order-kind "行程"
常用参数
| action | 关键参数 |
|---|---|
categories |
无 |
page |
--category-name(宿主类目中文名)、--keyword、--regions、--status |
customer-page |
--keyword、--status |
pre |
--product-item-id --sku-id --use-date --unit-price-fen,或 --payload-file(邮轮必须用 cruise-build 产出的文件) |
cruise-build |
--id --category --spec --quantity --start-date --end-date;可选 --guest individual\|team\|vip --stock --out-file |
create |
--org-id --pre-order-key --order-amount --contact-name --contact-phone;邮轮另加 --start-date --end-date --stock |
order-link |
--create-date(下单日)--order-kind(行程/标品/日游/游轮) |
node scripts/product-sell.js --action order-link --create-date "2026-09-14" --order-kind "行程"
输出处理
成功时输出 PRODUCT_SELL_RESULT_START / END 包围的 JSON:status、action、markdown、data。
对用户最终回复必须用脚本 markdown(或同等结构):一句话结论 + 中文表 + 下一步。禁止把脚本 JSON、英文字段名、TTL、分当作正文。内部编号只可作表末列。
- 只依据接口/
data事实;禁止编造商品、价格、订单号、跳转链接。 - 对人金额用元;创单
jumpUrl与order-link的链接必须原样可点,禁止截断或脱敏。 - 失败用人话说明(没查到 / 凭证失效),不要丢
BAD_ARGS。按 references/error-handling.md 处理。
硬性规则
- 渠道
vtrip_claw;body 不传tenantId。 - 只调宿主 OpenSSO + products(含
/categories)/ customer-orgs / orders/pre / create-for-customer;订单列表跳转仅本地拼 OP Bridge,不另调订单列表接口;不做代登;不用旧 Agent BFF 搜索 path。不要翻 OP 前端推断类目。 - 类目以
GET /api/v1/products/categories为准,含日游、邮轮等;口语「游轮」选品用「邮轮」。--order-kind的日游/游轮只用于打开订单页。邮轮选品时dimensionValue是航线(上水/下水),scenicSpot是船名(如美维凯越、总统七号);对人只说航线/船名。邮轮取价见 references/api.md「邮轮取价」。 - 预下单
payload必须是 JSON 字符串。可单卖:kind=SINGLE_ITEM。邮轮:必须cruise-build→pre --payload-file(OP 代客同构kind=CRUISE);禁止搜索源码猜字段、禁止单品 CLI 冒充;单价来自价格矩阵。 - 正式下单必须带客户
orgId+quotationCacheKey。邮轮创单还须与 payload 相同的startDate、endDate、stock。 - 邮轮效率铁律:不要翻 modeling / 后台 / 历史对话找 DTO;一次
cruise-build即可。详见 references/api.md「邮轮下单」与examples/cruise-*.json。 - 品牌:湖南视旅科技有限公司 · Vtrip B2B 分销。
参考
- references/api.md
- references/configure-credentials.md
- references/conversation-flow.md
- references/error-handling.md