xyfcli-order-guide

肥料订单下单与客户/供应商管理技能。使用 xyfcli CLI 执行:(1) 下单/订货/采购肥料;(2) 查询产品信息/价格/库存;(3) 查询客户/供应商/经销商信息;(4) 解析订货单图片。触发词:下单、订货、买肥料、查产品、查客户、供应商信息、产品列表、客户编码。

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 "xyfcli-order-guide" with this command: npx skills add mayafans/xyfcli-order-guide

交互式下单引导

核心原则

交互式三原则

  1. 提示完整清晰:每步提示和引导信息必须完整清晰,所有可选项、操作步骤、输入格式都要完整呈现,清晰完整的提示 = 高效率
  2. 用户输入精简:需要用户输入的流程尽可能精简,能自动查询的不追问
  3. 领导交代任务模式:用户一句话交代任务,OpenClaw 自动完成验证和下单,展示完整精确的结果

能力清单(明确告知用户)

你可以帮用户做这些事:

能力触发词/示例说明
🛒 快速下单"帮吉林市文英化肥经销有限责任公司下26吨Y14002510160020000,吉林新洋丰基地出发,汽运,统派车(客户付款),到吉林省吉林市蛟河市公安局乌林派出所八家子警务室,邱文英收,联系方式13394403131"一句话下单,自动验证
📦 查产品"看看有什么复合肥"、"查 45% 的产品"查询客户可购买的产品列表
👥 查客户"我有哪几个客户"、"查客户列表"查询你名下的所有客户
📍 查地址"牛建建的地址在哪"查询客户的收货地址
新增地址"给牛建建新增一个地址"新增客户收货地址
✏️ 修改地址"修改牛建建的地址"修改客户收货地址
🏭 查基地"这个产品从哪发货"查询产品的发货基地
👤 指定承运人"指定李四开车,京 A12345,电话 13900139000"下单时指定承运车主信息
🖼️ 图片下单(发送订货单图片)OCR 识别订货单并下单

首次引导时明确告知:

"我可以帮你:①快速下单 ②查产品/价格/库存 ③查客户列表 ④查/新增/修改地址 ⑤图片下单 ⑥查发货基地 ⑦下单时指定承运人信息。需要什么?"


工作流程

阶段 1:解析用户意图

用户输入 → 识别意图类型
    ├─ 下单类 → 提取:客户、销售业务员、产品列表(每个产品包含编码、名称、数量)、发货基地、承运人信息(承运人姓名,承运人车牌号,承运人联系方式)、收货信息(运输方式、提货方式、收货地址ID、收货人、收货人电话)
    ├─ 查询产品类 → 见 #如何查询产品 模块
    ├─ 查询客户类 → 直接调用 xyfcli shop getdealercode
    ├─ 查地址类 → 获取客户收货地址信息
    │    1. 先通过 getsalercode 获取当前销售员编码
    │    2. 再通过 getdealercode 查找客户,获取客户编码
    │    3. 最后通过 getdealeraddresses 获取该客户的地址列表
    ├─ 查询基地库存类 → 调用 getstock 查询库存和子公司信息
    └─ 图片类 → 调用 OCR 解析订货单

阶段 2:并行验证(下单前验证)

并行执行所有前置验证(客户、业务员、产品、基地、库存、地址等)

✓ 全部通过 → 阶段 3
✗ 有问题 → 一次性告知 + 提供解决方案

⚠️ 验证规则详见 关键约束 模块

阶段 3:汇总确认

验证结果 → 格式化展示(✓/✗标注) ↓ 用户确认 → xyfcli order place → 展示订单地址URL 用户取消 → 结束

输入模式与处理

模式 1:完整信息下单

触发:用户一句话包含所有必要信息

处理

  1. 解析关键信息(客户、销售业务员、产品、数量、发货基地、收货信息)
  2. 执行并行验证
  3. 展示完整确认信息
  4. 等待用户确认

示例

用户:"帮吉林市文英化肥经销有限责任公司下26吨Y14002510160020000,吉林新洋丰,汽运,统派车(客户付款),吉林省吉林市蛟河市公安局乌林派出所八家子警务室,邱文英,13394403131"

OpenClaw 自动验证并展示:
---
订单确认
---
客户:吉林市文英化肥经销有限责任公司 (J220000033) ✓
销售业务员:涂晓鹏 (EZB2019063) ✓
发货基地:吉林新洋丰 ✓
子公司:吉林新洋丰肥业有限公司
运输方式:汽运
提货方式:统派车(客户付款)
收货地址:吉林省吉林市蛟河市公安局乌林派出所八家子警务室 ✓
收货人:邱文英
收货人电话:13394403131
产品:Y14002510160020000 - 洋·高塔 51%(25-10-16)40KG 低氯 ✓
数量:26 吨
承运人信息:陈龙福 鄂 H08282 13872908039
---
确认下单?(回复"确认"或"取消")

模式 2:部分信息下单

触发:用户提供部分信息(缺少基地/地址等)

处理

  1. 验证已有信息
  2. 自动查询缺失信息的可选值
  3. 一次性展示所有缺失项及选项
  4. 用户补充后继续

示例

用户:"帮吉林市文英化肥经销有限责任公司下26吨Y14002510160020000"

OpenClaw:
"产品验证通过 ✓
请补充以下信息:

1. 发货基地(选择一个):
   [1] 吉林新洋丰
   [2] 长春配送中心

2. 运输方式(选择一个):
   [1] 汽运
   [2] 铁运
   [3] 船运
   [4] 集装箱运输

3. 提货方式(选择一个):
   [1] 自派车
   [2] 统派车(公司付款)
   [3] 统派车(客户付款)

4. 收货地址(选择一个):
     [1] 湖北省荆门市东宝区泉口街道馨梦缘公寓
     [2] 甘肃省天水市秦安县叶堡镇新阳村

     如果没有合适的地址,可以[3]新增地址

5. 收货人(默认使用地址中的联系人,如需修改请提供):
6. 收货人电话(默认使用地址中的电话,如需修改请提供):

7. 承运车主(可选,如需指定承运人请提供):
8. 车牌号(可选,与承运车主一起提供):
9. 车主电话(可选,与承运车主一起提供):

请按顺序回复,用逗号分隔。
例如:"1,1,2,1"(使用默认收货人和电话)或 "1,1,2,1,张三,13800138000"(指定收货人和电话)或 "1,1,2,1,张三,13800138000,李四,京 A12345,13900139000"(指定收货人、电话和承运人信息)"

如果客户没有已保存的地址:

✗ 该客户没有已保存的收货地址

请先到精准营销系统维护收货地址后再下单:
1. 登录精准营销系统
2. 进入客户管理 → 找到对应客户
3. 添加收货地址(省/市/区/详细地址/联系人/电话)
4. 维护完成后重新下单

精准营销系统地址:http://xxx.xxx.xxx

模式 3:搜索式下单

触发:用户需要浏览产品("看看能买什么肥料"、"复合肥有哪些")

处理

  1. 查询客户可购买的产品列表
  2. 格式化展示(编号 + 产品编码 + 名称)
  3. 用户选择后进入模式 1 或 2

示例

用户:"看看牛建建能买什么复合肥"

OpenClaw:
"找到 5 个复合肥产品:

[1] Y163U1305276020000 - 洋丰复合肥 45% 15-15-15
[2] Y163U1305276020001 - 洋丰复合肥 45% 16-16-16
[3] Y163U1305276020002 - 洋丰复合肥 40% 16-16-8
[4] Y163U1305276020003 - 洋丰复合肥 42% 18-12-12
[5] Y163U1305276020004 - 洋丰复合肥 38% 14-14-10

回复产品编号或编码,并告诉我数量。"

模式 4:订货单图片下单

触发:用户发送订货单/采购单图片

处理

  1. OCR 识别图片内容
  2. 提取关键信息(客户、销售业务员、产品列表、发货基地、收货信息等)
  3. 执行验证
  4. 展示识别结果和验证状态
  5. 用户确认后下单

示例

用户:(发送订货单图片)

OpenClaw:
"订货单识别结果:
---
客户:吉林市文英化肥经销有限责任公司 ✓
销售业务员:涂晓鹏 ✓
发货基地:吉林新洋丰
子公司:吉林新洋丰肥业有限公司
运输方式:汽运
提货方式:统派车(客户付款)
收货地址:吉林省吉林市蛟河市公安局乌林派出所八家子警务室
收货人:邱文英
收货人电话:13394403131
承运车主:(未指定)
车牌号:(未指定)
车主电话:(未指定)

产品列表:
| # | 产品编码 | 产品名称 | 数量 |
|---|----------|----------|------|
| 1 | Y14002510160020000 | 洋·高塔 51%(25-10-16)40KG 低氯 ✓ | 26 吨 |

---
以上信息是否正确?(确认/修改)"

模式 5:查询客户列表

触发:用户问"我有哪几个客户"、"查客户"、"客户列表"

处理

  1. 获取当前销售员编码
  2. 查询客户列表
  3. 格式化展示(表格形式,含余额)

示例

用户:"我有哪几个客户"

OpenClaw:
"你名下有 28 个客户:

| 编号 | 客户编码   | 客户名称       | 联系电话     | 地址     | 余额 (元)  |
|------|------------|----------------|--------------|----------|------------|
| 1    | J620522007 | 牛建建         | 18093818192  | 叶堡村   | 97044.01   |
| 2    | J620522010 | 甘谷县...      | 15693868887  | 磐安镇   | 383705.39  |
| 3    | J999000747 | 甘谷县...      | 13399386884  | 甘谷县...| 405057.93  |
...

要下单的话,直接告诉我:客户名称 + 产品 + 数量
例如:"帮牛建建下 5 吨 Y163U1305276020000""

如何查询产品

下单人提供描述信息后,通过xyfcli shop getproducturibydesc语义查询最接近语义描述的产品清单uri,然后通过xyfcli shop getproductdetailbyuri获取详细产品信息

如何查询基地库存和子公司

  1. 获取发货基地编码:通过 xyfcli shop getdeliverybase 获取产品可发货的基地列表
  2. 查询库存和子公司:调用 xyfcli shop getstock 查询产品在指定基地的库存信息和所属子公司名称

示例:

# 查询产品在指定基地的库存和子公司信息
xyfcli shop getstock -logincode "J620522007" -productcode "Y68000500000023100" -sendbase "10"

返回信息包含:

  • companyName: 子公司名称
  • companyCode: 子公司编码
  • productNum: 库存数量
  • productName: 产品名称
  • productCode: 产品编号

关键约束

单订单约束(重要)

⚠️ 一个订单只能有一组以下信息

  • 发货基地
  • 收货地址
  • 收货人
  • 运输方式
  • 提货方式
  • 承运车主(不同承运人不能是同一个单)

如果订单包含多组不同的以上信息,必须拆分成多个订单

示例

用户:帮牛建建下10吨Y163U1305276020000到湖北,再下5吨到甘肃

✗ 不能在一个订单中下单(两个不同的收货地址)

需要拆分为两个订单:
订单1:10吨 → 湖北省荆门市东宝区
订单2:5吨 → 甘肃省天水市秦安县

收货地址验证(重要)

⚠️ 必须验证:收货地址必须是客户已保存的地址(通过 getdealeraddresses 查询)

如果没有地址,可以:

  1. 使用 shop addaddress 新增地址
  2. 使用 shop editaddress 修改现有地址
# 获取客户已保存的地址列表
xyfcli shop getdealeraddresses "客户编码"

# 新增地址
xyfcli shop addaddress -dealercode "客户编码" -name "客户名称" -contact "联系人" -phone "电话" ...

地址不存在时的处理:

✗ 客户没有已保存的收货地址

我可以帮你新增地址,请提供:
- 联系人、联系电话、省市区、详细地址

或修改现有地址后重新下单。

⚠️ 现在可以直接通过 CLI 新增或修改地址,无需登录其他系统。

CLI 命令执行原则

⚠️ xyfcli order place命令的以下7个参数为必传项,必须全部提供:

  1. 客户编码(-dealer:客户在系统中的唯一标识
  2. 客户名称(-name:与客户编码对应的客户名称
  3. 业务员编码(-sales:负责该客户的业务员编码
  4. 商品编号(-products:商品编号列表,逗号分隔
  5. 发货基地编码(-base:产品发货基地
  6. 地址ID(-addr-id:系统中已保存的地址ID
  7. 商品数量(-q:商品数量列表,逗号分隔,与商品编号一一对应

可选参数能传尽传:执行 cli 命令时,可选参数如果收集到应该能传尽传。

可选参数(收集到就应该传入):

  • -transport - 运输方式:汽运/铁运/船运/集装箱(默认:汽运)
  • -pickup - 提货方式:自派车/统派车(公司付款)/统派车(客户付款)(默认:统派车(公司付款))
  • -receiver - 收货人姓名(不传则使用地址中的默认值)
  • -phone - 收货人电话(不传则使用地址中的默认值)
  • -vehicle - 承运车主
  • -plate - 车牌号
  • -vphone - 车主电话
  • -remark - 备注
  • -freight - 运费率(默认:0)

校验规则:

  • 所有7个必传参数必须提供,缺一不可
  • -q 数量必须与 -products 商品数量一一对应
  • -addr-id 必须精确匹配系统中已保存的地址

运输方式和提货方式约束

⚠️ 只能选择以下选项:

运输方式(只能选择以下选项,下单时自动映射为代码):

  • 汽运 → 01
  • 铁运 → 02
  • 船运 → 03
  • 集装箱运输 → 04

提货方式(只能选择以下选项,自动映射为代码):

  • 自派车 → Z001
  • 统派车(客户付款) → Z002
  • 统派车(公司付款) → Z003

其他选项无效,不接受自定义输入。

产品权限验证

⚠️ 必须验证:只有 getproductlist 接口能查到的产品才能下单

# 精确验证(验证客户是否有权购买此产品)
xyfcli shop getproductlist -dealercode "客户编码" -search "产品编码"

# 模糊查询(查询客户可购买的产品清单)
xyfcli shop getproductlist -dealercode "客户编码" -search "45% 复合肥 15-15-15"
# ↑ 只有在返回的产品清单中才能下单

产品基地库存验证

⚠️ 必须验证:只有库存大于下单数量的基地才能下单

# 查询产品基地库存
xyfcli shop getstock -logincode "客户编码" -productcode "产品编码" -sendbase "基地编码"

# 返回示例:
# {"stock": 100, "base_name": "新洋丰中磷", "subsidiary": "湖北新洋丰"}
# ↑ stock 必须 >= 下单数量才能选择该基地

错误处理原则

  1. 一次性告知:所有问题一次性列出,不要逐个追问
  2. 提供选项:出错时给出可选方案(如相似产品、其他基地)
  3. 清晰标注:用 ✓/✗ 标注验证状态

错误处理示例

场景 1:产品不可用

✗ 产品 Y163U1305276020000 对该客户不可用

该客户可购买的相似产品:
[1] Y163U1305276020001 - 洋丰复合肥 45% 16-16-16
[2] Y163U1305276020002 - 洋丰复合肥 40% 16-16-8

请选择替代产品或回复"取消"。

场景 2:客户不存在

✗ 未找到客户"牛建建"

可能的客户:
[1] 牛建建 (J620522007) - 湖北荆门
[2] 牛建军 (J620522008) - 湖北京山

请确认客户名称或编码。

场景 3:客户没有收货地址

✗ 客户"牛建建"没有已保存的收货地址

你可以选择:

[1] 我来帮你新增地址
[2] 使用其他客户的地址下单
[3] 取消下单

请回复选项编号。

如果用户选择新增地址

请提供以下信息(用逗号分隔):

1. 联系人:_________
2. 联系电话:_________
3. 省份名称(如:湖北省):_________
4. 城市名称(如:荆门市):_________
5. 区县名称(如:东宝区):_________
6. 详细地址:_________

例如:"牛一,13121007444,湖北省,荆门市,东宝区,泉口街道馨梦缘公寓"

场景 4:多个信息缺失

请补充以下信息(一次性回复):

[1] 发货基地:新洋丰中磷 / 武汉配送中心
[2] 收货地址:选择一个已保存的地址,或回复"新增地址"
[3] 数量:当前未指定
[4] 收货人:默认使用地址中的联系人(确认或提供新值)
[5] 收货人电话:默认使用地址中的电话(确认或提供新值)

注意:
- 地址ID必须精确传入,不支持模糊匹配
- 收货人和电话提单时必传,可从地址中提取默认值,需用户确认
- 运输方式只能为:汽运/铁运/船运/集装箱运输
- 提货方式只能为:自派车/统派车(公司付款)/统派车(客户付款)

场景 5:运输方式或提货方式无效

✗ 运输方式"水运"无效

请选择有效的运输方式:
[1] 汽运
[2] 铁运
[3] 船运
[4] 集装箱运输

提货方式只能为:自派车 或 统派车(公司付款)或统派车(客户付款)

输出格式规范

确认信息格式

---
订单确认
---
客户:{姓名} ({编码}) {状态}
销售业务员:{业务员姓名} ({业务员编号}) {状态}
发货基地:{基地名称} {状态}
子公司:{子公司名称}
运输方式:{运输方式}
提货方式:{提货方式}
收货地址:{收货地址} {状态}
收货人:{收货人}
收货人电话:{收货人电话}

产品列表:
| # | 产品编码 | 产品名称 | 数量 |
|---|----------|----------|------|
| 1 | {产品编码 1} | {产品名称 1} {状态} | {数量 1} |
| 2 | {产品编码 2} | {产品名称 2} {状态} | {数量 2} |

---
确认下单?(回复"确认"或"取消")

下单成功后展示:

---
下单成功
---
订单已提交成功!
订单地址:{订单URL}
---

状态标注

  • ✓ 验证通过
  • ✗ 验证失败(附带原因和解决方案)
  • (无标注)待确认/待补充

表格展示规范

客户列表

| 编号 | 客户编码   | 客户名称 | 联系电话    | 地址   | 余额 (元) |
|------|-----------|--------|------------|-------|----------|
| 1    | J620522007 | 牛建建 | 18093818192| 叶堡村 | 97044.01 |

产品列表

| 编号 | 产品编码           | 产品名称                  | 养分  | 规格 |
|------|-----------------|---------------------------|-------|------|
| 1    | Y163U1305276020000 | 洋丰复合肥 45% 15-15-15  | 45%   | 40KG |

CLI 命令参考

# 获取销售人员信息
xyfcli shop getsalercode

# 获取客户列表(核心命令)
xyfcli shop getdealercode "销售人员编码"

# 验证/搜索产品(支持精确验证和模糊查询)
# 精确验证:确认客户是否有权购买此产品
xyfcli shop getproductlist -dealercode "客户编码" -search "Y163U1305276020000"

# 模糊查询:查找客户可购买的相似产品
xyfcli shop getproductlist -dealercode "客户编码" -search "45% 复合肥"

# 获取发货基地
xyfcli shop getdeliverybase -productcode "产品编码" -dealercode "客户编号"

# 通过客户编码获取收货地址列表
xyfcli shop getdealeraddresses "客户编码"

# 新增客户地址
xyfcli shop addaddress -dealercode "J620522007" -name "牛建建" \
  -contact "牛一" -phone "13121007444" \
  -provincecode "420000" -provincename "湖北省" \
  -citycode "420800" -cityname "荆门市" \
  -countycode "420802" -countyname "东宝区" \
  -detail "泉口街道馨梦缘公寓" -addrtxt "湖北省荆门市东宝区"

# 修改客户地址
xyfcli shop editaddress -id 15098 -dealercode "J620522007" -name "牛建建" \
  -contact "牛二" -phone "13121007444" \
  -provincecode "420000" -provincename "湖北省" \
  -citycode "420800" -cityname "荆门市" \
  -countycode "420802" -countyname "东宝区" \
  -detail "泉口街道馨梦缘公寓" -addrtxt "湖北省荆门市东宝区"

# 查询基地库存和子公司信息
xyfcli shop getstock -logincode "客户编码" -productcode "产品编号" -sendbase "基地编码"

### 下单(单产品)
xyfcli order place -dealer "J620522007" -name "牛建建" -sales "EZB2019063" \
  -products "Y163U1305276020000" -q "10" -base "10" \
  -addr-id "123" -receiver "牛建建" -phone "18093818192"

### 下单(多产品) - 使用逗号分隔产品和数量

xyfcli order place -dealer "J620522007" -name "牛建建" -sales "EZB2019063" \
  -products "Y163U1305276020000,Y163U1305276020001" -q "10,5" -base "10" \
  -addr-id "123" -receiver "牛建建" -phone "18093818192" -transport "汽运" -pickup "统派车(客户付款)"


### 下单(含可选参数)

xyfcli order place -dealer "J620522007" -name "牛建建" -sales "EZB2019063" \
  -products "Y163U1305276020000" -q "26" -base "10" \
  -addr-id "123" -receiver "牛建建" -phone "18093818192" \
  -vehicle "张师傅" -plate "鄂H12345" -vphone "13800138000" \
  -remark "加急配送" -freight "1.5"



安装说明

安装 xyfcli CLI(仅首次安装时执行):

# 1. 安装
cd ~/.qclaw/workspace
uv tool install -e skills/xyfcli-order-guide/scripts/xyfcli

# 2. 配置
xyfcli config set --base-url http://127.0.0.1:8000 --token your_token_here

# 3. 验证
xyfcli --help

详细文档(按需加载)

文档用途加载时机
references/workflow_guide.md完整工作流程详解复杂订单/多产品订单
references/cli_quickref_chinese.mdCLI 命令完整参考需要非常规命令时
references/error_messages.md错误代码和处理方案验证失败/下单失败
references/image_processing.md订货单图片解析规则用户发送图片时

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.

Coding

Miaoji Asin Clinic Pro

亚马逊ASIN诊所Pro版,90天行动计划+竞品对标+季节性优化日历。 从合规度、广告度、评论度、视觉度、内容度五维升级为可执行的长期作战方案。 基础功能可使用 miaoji-asin-clinic 免费版。

Registry SourceRecently Updated
Coding

wechat-publish-pro

Pure Python tool to convert Markdown to styled HTML and publish articles to WeChat official account drafts with AI-based content refinement and theme support.

Registry SourceRecently Updated
Coding

Miaoji Asin Clinic

基于ASIN和品类,快速诊断亚马逊Listing五维健康指数并智能排序修复优先级,提供详细分析与个性化修复方案。

Registry SourceRecently Updated
Coding

Toonany

A Claude Code skill for creating AI-generated short dramas (漫剧) from novels and stories. Use when user mentions "漫剧创作", "小说转剧本", "分镜生成", "短剧制作", "故事线生成", "大纲...

Registry SourceRecently Updated