下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/daze--1688-publish-helper.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @daze/1688-publish-helper。阅读全文 (展开查看完整说明)
概述
1688发品助手
识别用户输入的商品链接,调用 MCP 工具进行一键上货。
MCP 服务配置
本技能依赖以下 MCP 服务,运行时必须从 sTokens.json 获取鉴权 Token:
| 配置项 | 说明 |
|---|---|
| 鉴权方式 | HTTP Header 携带 sToken,值取自 sTokens.json 中对应账号的 sToken 字段,通过 --account 参数指定账号名称,由 call_mcp.py 自动从 sTokens.json 查找对应 sToken |
配置读取方式
约束:调用方 agent 必须在执行任何 MCP 调用前,先确认使用哪个账号,通过 --account <userName> 参数指定账号名称,call_mcp.py 会自动从 sTokens.json 查找对应账号的 sToken
若 sTokens.json 不存在或数组为空(无任何已授权账号),则停止后续流程。在向用户输出内容前,必须先检查当前技能 reference/image 目录下是否存在 auth.png;若不存在,则先从 https://dazezb.oss-cn-zhangjiakou.aliyuncs.com/tools/skillManager/image/auth.png 下载并保存到 reference/image/auth.png,然后再继续输出。完成检查或下载后,仅输出以下两行内容给用户:不要输出 --- 分隔符,不要添加任何额外的解释、叙述或前言文字(包括"授权 Token 为空"等说明),不要输出多余空行或分割线,第二行必须使用 MEDIA: 前缀 + 绝对路径输出图片,格式如下:
您尚未授权,请前往 商机助理工具-首页-skill技能中心-复制token 复制授权。
MEDIA:<auth.png 的绝对路径>
等待用户输入授权 Token,用户输入后进入 sToken 保存流程。
授权失效处理
当 MCP 接口返回授权失效错误(msg 包含"Skill授权已失效"相关错误信息)时,停止后续流程。在向用户输出内容前,必须先检查当前技能 reference/image 目录下是否存在 auth.png;若不存在,则先从 https://dazezb.oss-cn-zhangjiakou.aliyuncs.com/tools/skillManager/image/auth.png 下载并保存到 reference/image/auth.png,然后再继续输出。完成检查或下载后,仅输出以下两行内容给用户:不要输出 --- 分隔符,不要添加任何额外的解释、叙述或前言文字,不要输出多余空行或分割线,第二行必须使用 MEDIA: 前缀 + 绝对路径输出图片,格式如下:
授权已失效,请前往 商机助理工具-首页-skill技能中心-复制token 重新复制授权。
MEDIA:<auth.png 的绝对路径>
等待用户输入新的授权 Token,用户输入后进入 sToken 保存流程。
sToken 保存流程
当满足以下任一条件时,触发 sToken 保存流程:
- 技能安装 URL 中包含 sToken(即安装地址格式为
~/cli/{id}/{sToken},且sToken符合格式校验规则) - 用户在授权提示后直接输入了 Token
- 用户输入中包含关键词「保存授权」或「修改授权」,并提供了 Token
sToken 格式校验
| 规则 | 说明 |
|---|---|
| 前缀 | 必须以 st 开头 |
| 后续字符 | st 后跟恰好 32 位字母数字字符(a-z、A-Z、0-9) |
| 总长度 | 34 位 |
| 正则校验 | ^st[a-zA-Z0-9]{32}$ |
示例:st66666666666666666666666666666666
处理步骤
- 从用户输入中提取符合正则
^st[a-zA-Z0-9]{32}$格式的字符串 - 校验结果处理:
| 情况 | 处理方式 |
|---|---|
| 未提取到符合格式的 Token | 提示用户:"授权 Token 格式不正确,请重新输入(格式:st + 32 位字母数字字符)" |
| 格式正确 | 使用提取到的 sToken 调用 MCP 工具 get_skill_login_info 获取用户信息,继续步骤 3 |
- 调用
get_skill_login_info获取用户信息:
python scripts/call_mcp.py call get_skill_login_info --stoken <提取到的sToken>调用时需将提取到的 sToken 通过
--stoken参数传入作为鉴权 Token。
返回结果格式:
{
"code": 200,
"msg": "",
"result": {
"userId": "",
"userName": ""
}
}| 情况 | 处理方式 |
|---|---|
code == 200 | 获取到 result.userName,继续步骤 4 保存到 sTokens.json |
code != 200 | 将 msg 作为错误信息提示用户,终止流程 |
- 将 sToken 保存到
sTokens.json:
sTokens.json 文件格式:
[
{
"userName": "",
"sToken": ""
}
]保存逻辑:
- 读取
sTokens.json文件,若文件不存在则创建,初始内容为[] - 判断
userName是否已存在于数组中:- 已存在:更新该条目的
sToken为新值 - 不存在:在数组末尾新增一条
{"userName": "<userName>", "sToken": "<sToken>"}
- 已存在:更新该条目的
- 写入
sTokens.json文件 - 提示用户:"授权成功!"
跨平台调用说明
⚠️ 重要:call_mcp.py 脚本的 Python 路径
在 Windows 系统上,python3 命令可能不存在。请使用以下方式之一执行脚本:
# 方式 1:使用 python(Windows 推荐)
python scripts/call_mcp.py ...
# 方式 2:使用完整路径(如果 python 也不在 PATH 中)
C:ProgramDataanaconda3python.exe scripts/call_mcp.py ...
# 方式 3:在 exec 中先 cd 再用 & 符号调用(PowerShell)
Set-Location "技能目录" ; & "python" scripts/call_mcp.py ...⚠️ 重要:PowerShell 下 JSON 参数传递问题
PowerShell 对引号和花括号有特殊处理,导致 --params 传入的 JSON 字符串被破坏。在 PowerShell 环境下,必须使用以下方式传递 JSON 参数:
# ✅ 推荐方式 1:使用 --params-file 从文件读取参数
# 先将参数写入 JSON 文件,再通过 --params-file 指定
python scripts/call_mcp.py call get_copy_rule_config --account <userName> --params-file params.json
# ✅ 推荐方式 2:使用 --params @file.json 语法
python scripts/call_mcp.py call get_copy_rule_config --account <userName> --params @params.json
# ❌ 避免方式:直接在 PowerShell 中传递 JSON 字符串(引号会被破坏)
python scripts/call_mcp.py call get_copy_rule_config --account <userName> --params '{"rule":{...}}' # 不可靠参数文件的写入方式:agent 应先将 JSON 参数写入一个临时文件(如 _mcp_params.json),再通过 --params-file 或 --params @文件路径 引用。
⚠️ 重要:MCP 接口参数格式
所有 MCP 工具调用的参数必须通过 --params 传入,格式为 JSON 字符串。注意以下工具的参数结构:
get_copy_rule_config需要传入{"rule":{"mergeDefaultConfig":true,"copyConfigType":2}}save_copy_rule_config需要传入{"rule":{"copyConfigType":2,"copyWay":...,"status":...,"sendGoodsAddressId":...,"freightTemplateId":...,"productSingerPriceType":...}}copy_by_agent需要传入{"rule":{"copyConfigType":2,"copyProductInfos":[...]}}url_identify需要传入{"rule":{"productUrls":["..."]}}get_send_goods_addresses、get_skill_login_info无需参数get_freight_templates需要传入{"rule":{"addressId":"<发货地址id>"}}
触发条件
场景一:一键上货
用户输入文本同时满足以下条件时触发一键上货流程:
- 包含关键词之一:
复制、上货、发布
示例触发语句:
- "上货这个链接"
- "复制这些商品"
- "发布到店铺"
场景二:查看登录账号
用户输入文本包含关键词「查看登录账号」时,触发查看登录信息流程。
场景三:授权 / 修改授权
用户输入文本满足以下任一条件时,触发「sToken 保存流程」:
- 包含关键词:
修改授权 - 包含关键词:
修改账号
场景四:安装时携带 sToken
技能安装 URL 格式为 ~/cli/{id}/{sToken} 时,若 URL 中的 sToken 符合格式校验规则(^st[a-zA-Z0-9]{32}$),则自动触发「sToken 保存流程」,无需用户手动输入 Token。
工作流程
场景:查看登录账号
- 读取
sTokens.json文件,判断账号数量:
| 情况 | 处理方式 |
|---|---|
sTokens.json 文件不存在或数组为空 | 按上方「配置读取方式」中的未授权提示处理,终止流程 |
| 账号数量为 1 | 直接使用该账号的 sToken,进入步骤 3 |
| 账号数量大于 1 | 展示所有账号供用户选择,进入步骤 2 |
- 展示账号列表供用户选择:
请选择要查看的账号:
1. <sTokens[0].userName>
2. <sTokens[1].userName>
...输入验证:用户必须输入选项编号(1-N)或完整的用户名。若输入非选项值,提示用户:"输入无效,请输入选项编号或用户名",并重新展示选项供用户选择。
用户选择账号后,使用该账号的 userName 进入步骤 3。
- 使用所选账号调用 MCP 工具
get_skill_login_info(无需参数):
python scripts/call_mcp.py call get_skill_login_info --account <userName>MCP 接口返回结果格式
{
"code": 200,
"msg": "",
"result": {
"userId": "",
"userName": ""
}
}| 情况 | 处理方式 |
|---|---|
code == 200 | 展示:当前登录账号:<result.userName> |
code != 200 | 将 msg 作为错误信息提示用户,终止流程 |
第一步:识别用户输入中的链接
收到用户消息后:
- 使用正则表达式从用户输入文本中提取所有 URL 链接
- 判断是否提取到链接:
| 情况 | 处理方式 |
|---|---|
| 提取到一个或多个链接 | 进入第二步,调用 MCP 接口 |
| 未提取到任何链接 | 提示用户:"请提供需要上货的商品链接,支持同时输入多个链接。" |
链接匹配规则:匹配 http:// 或 https:// 开头的完整 URL。
第二步:调用商品链接识别 MCP 接口
将参数写入临时文件 _mcp_params.json:
{"rule":{"productUrls":["<URL1>","<URL2>"]}}然后调用 MCP 工具 url_identify:
python scripts/call_mcp.py call url_identify --account <userName> --params-file _mcp_params.jsonMCP 接口返回结果格式
{
"Code": 200,
"Msg": "",
"Result": {
"SuccessProductInfos": [
{
"Url": "",
"ProductId": "",
"OfferSource": 0,
"CopyProductParam": null
}
],
"FailProductUrls": [
""
]
}
}接口调用状态判断
首先根据返回的 Code 字段判断接口是否调用成功:
| 情况 | 处理方式 |
|---|---|
Code == 200 | 调用成功,进入下方「结果展示与分支处理」 |
Code != 200 | 调用失败,直接将 Msg 字段作为错误信息提示用户,终止流程 |
结果展示与分支处理
解析 Result 后,按以下规则展示并决定后续流程:
- 提取
Result.SuccessProductInfos[*].Url作为正确链接列表 - 提取
Result.FailProductUrls作为错误链接列表 - 按以下格式展示给用户(任一列表为空时仍需展示对应标题,下方留空或注明无):
正确链接:
<SuccessProductInfos[0].Url>
<SuccessProductInfos[1].Url>
...
错误链接:
<FailProductUrls[0]>
<FailProductUrls[1]>
...- 分支判断:
| 情况 | 处理方式 |
|---|---|
SuccessProductInfos 为空(无任何成功链接) | 在展示结果后,提示用户:"未识别到有效的商品链接,请重新输入正确的商品链接。"。等待用户重新输入后,从「第一步:识别用户输入中的链接」开始重新执行整个流程 |
SuccessProductInfos 不为空(存在至少一个成功链接) | 展示结果后,进入「第二步(续):选择上货账号」 |
第二步(续):选择上货账号
仅当第二步中 SuccessProductInfos 不为空时才执行本步。读取 sTokens.json 文件,判断账号数量:
- 若
sTokens.json文件不存在或数组为空,则停止后续流程,提示用户:"您尚未授权,请前往 商机助理工具-首页-skill技能中心-AI一键上货 复制授权。",等待用户输入授权 Token,进入 sToken 保存流程 - 根据账号数量处理:
| 情况 | 处理方式 |
|---|---|
| 账号数量为 1 | 直接使用该账号的 sToken,进入「第三步:获取上货设置」 |
| 账号数量大于 1 | 展示所有账号供用户多选,格式如下: |
检测到多个授权账号,请选择要使用的账号(可多选,输入多个编号用逗号分隔,如 1,3):
1. <sTokens[0].userName>
2. <sTokens[1].userName>
...输入验证:用户必须输入选项编号(1-N,多个用逗号分隔)或完整的用户名(多个用逗号分隔)。若输入非选项值,提示用户:"输入无效,请输入选项编号(1-N)或用户名,多个用逗号分隔",并重新展示选项供用户选择。
用户选择账号后,按用户选择的顺序,依次使用每个账号的 userName 通过 --account 参数指定,对每个账号分别执行「第三步:获取上货设置」至「第六步:执行一键上货」的完整流程。具体规则:
- 每个账号独立执行完整的上货流程(第三步 → 第六步),一个账号的上货流程完成后再开始下一个账号
- 各账号的上货设置可能不同,需分别调用
get_copy_rule_config获取各自的上货模板 - 若某个账号的上货流程中出现错误,提示用户该账号的错误信息,然后继续执行下一个账号的流程
- 所有账号执行完毕后,汇总展示各账号的执行结果
第三步:获取上货设置
仅当第二步中 SuccessProductInfos 不为空时才执行本步。将参数写入临时文件 _mcp_params.json:
{"rule":{"mergeDefaultConfig":true,"copyConfigType":2}}然后调用 MCP 工具 get_copy_rule_config:
python scripts/call_mcp.py call get_copy_rule_config --account <userName> --params-file _mcp_params.jsonMCP 接口返回结果格式
{
"code": 200,
"msg": "",
"result": {
"产品类型": {
"name": ""
},
"上架设置": {
"name": ""
},
"发货地址": {
"id": "",
"name": ""
},
"运费设置": {
"id": "",
"name": "",
"Type": ""
},
"价格类型": {
"name": ""
}
}
}各设置项均为对象格式,展示时仅展示
name字段的值,id和Type等字段用于内部逻辑判断。
接口调用状态判断
| 情况 | 处理方式 |
|---|---|
code == 200 | 调用成功,进入下方「设置展示与空值检测」 |
code != 200 | 调用失败,直接将 msg 字段作为错误信息提示用户,终止流程 |
设置展示与空值检测
result 包含 5 个固定设置项:产品类型、上架设置、发货地址、运费设置、价格类型,每项均为对象格式。
展示当前设置给用户(仅展示 name 字段):
当前上货模板设置:
- 产品类型:<result.产品类型.name 或"未设置">
- 上架设置:<result.上架设置.name 或"未设置">
- 发货地址:<result.发货地址.name 或"未设置">
- 运费设置:<result.运费设置.name 或"未设置">
- 价格类型:<result.价格类型.name 或"未设置">检测各项是否为空(对象的 name 字段为空字符串、null 或对象本身为 null / 不存在视为空值):
| 情况 | 处理方式 |
|---|---|
| 所有 5 项均不为空 | 展示设置后,向用户询问:"确认使用该模板一键上货?(是 / 否)",等待用户确认。用户回复「是」/「确认」/「确定」/「yes」等肯定语义时,进入「第六步:执行一键上货」;用户回复「否」/「取消」/「no」等否定语义时,提示:"好的,请选择需要修改的设置项:",进入「第四步:补充空值设置」,此时所有 5 项均展示供用户选择修改(已有值的项也允许重新选择) |
| 存在至少一项为空 | 进入「第四步:补充空值设置」,逐项引导用户填写 |
第四步:设置上货模板
根据进入本步的场景不同,处理方式如下:
| 进入场景 | 处理方式 |
|---|---|
| 第三步检测到空值项 | 仅对值为空的设置项依次提示用户选择,顺序固定为:产品类型 → 上架设置 → 发货地址 → 运费设置 → 价格类型 |
| 第三步用户回复"否"拒绝模板 | 展示所有 5 个设置项供用户选择修改,用户可选择修改任意项或跳过 |
记录用户每一步的选择,等待用户完成所有需要设置的项后,进入「第五步:保存上货设置」。
产品类型
提示用户选择:
请选择产品类型:
1. 发布为现货品
2. 发布为工厂品
3. 跳过(保持原设置)输入验证:用户必须输入选项编号(1、2、3)或选项名称(发布为现货品、发布为工厂品、跳过)。若输入非选项值,提示用户:"输入无效,请输入选项编号(1-3)或选项名称",并重新展示选项供用户选择。
| 选择 | 保存参数 |
|---|---|
| 发布为现货品 | copyWay = 0 |
| 发布为工厂品 | copyWay = 1 |
上架设置
提示用户选择:
请选择上架设置:
1. 销售中
2. 草稿箱
3. 待上架
4. 跳过(保持原设置)输入验证:用户必须输入选项编号(1、2、3、4)或选项名称(销售中、草稿箱、待上架、跳过)。若输入非选项值,提示用户:"输入无效,请输入选项编号(1-4)或选项名称",并重新展示选项供用户选择。
| 选择 | 保存参数 |
|---|---|
| 销售中 | status = 2 |
| 草稿箱 | status = 13 |
| 待上架 | status = 7 |
发货地址
调用 MCP 工具 get_send_goods_addresses 获取发货地址列表(无需参数):
python scripts/call_mcp.py call get_send_goods_addresses --account <userName>返回结果格式:
{
"code": 200,
"msg": "",
"result": [
{
"id": 0,
"fullAddress": ""
}
]
}| 情况 | 处理方式 |
|---|---|
code == 200 | 展示所有 fullAddress 供用户选择 |
code != 200 | 将 msg 作为错误信息提示用户,终止流程 |
展示格式:
请选择发货地址:
1. <fullAddress[0]>
2. <fullAddress[1]>
...
N. 跳过(保持原设置)输入验证:用户必须输入选项编号(1-N)或完整的地址名称。若输入非选项值,提示用户:"输入无效,请输入选项编号(1-N)或选项名称",并重新展示选项供用户选择。
保存参数:sendGoodsAddressId = 用户所选 fullAddress 对应的 id
⚠️ 发货地址变更与运费指导模板联动:当用户变更了发货地址(即新选择的地址
id与get_copy_rule_config返回的result.发货地址.id不同),且当前运费设置为指导模板类型(result.运费设置.Type == "3"),则提示用户:"发货地址已变更,当前运费指导模板可能不再适用,请重新选择运费模板。",然后重新进入运费设置流程(需使用新的发货地址id调用get_freight_templates)。
运费设置
⚠️ 前置条件:选择运费模板类选项前,必须已有发货地址(
result.发货地址.id不为空)。若发货地址id为空,提示用户:"请先选择发货地址后再设置运费。",跳过运费设置,等待用户完成发货地址选择后再回到运费设置。
将参数写入临时文件 _mcp_params.json:
{"rule":{"addressId":"<发货地址id>"}}然后调用 MCP 工具 get_freight_templates:
python scripts/call_mcp.py call get_freight_templates --account <userName> --params-file _mcp_params.json返回结果格式:
{
"code": 200,
"msg": "",
"result": {
"freightTemplates": [
{
"id": 0,
"name": "",
"type": ""
}
],
"isGuideFreightTemplates": true
}
}| 情况 | 处理方式 |
|---|---|
code == 200 | 根据 isGuideFreightTemplates 决定运费设置选项(见下方) |
code != 200 | 将 msg 作为错误信息提示用户,终止流程 |
根据 result.isGuideFreightTemplates 的值决定运费设置选项:
当 isGuideFreightTemplates == true 时,提示用户选择:
请选择运费设置:
1. 运费指导模板
2. 使用运费模板
3. 使用运费说明
4. 卖家承担运费
5. 跳过(保持原设置)输入验证:用户必须输入选项编号(1-5)或选项名称(运费指导模板、使用运费模板、使用运费说明、卖家承担运费、跳过)。若输入非选项值,提示用户:"输入无效,请输入选项编号(1-5)或选项名称",并重新展示选项供用户选择。
| 选择 | 处理方式 |
|---|---|
| 运费指导模板 | 从 freightTemplates 中筛选 type == "3" 的数据展示供用户选择(见下方「运费模板选择流程」) |
| 使用运费模板 | 从 freightTemplates 中筛选 type == "2" 的数据展示供用户选择(见下方「运费模板选择流程」) |
| 使用运费说明 | freightTemplateId = -1001 |
| 卖家承担运费 | freightTemplateId = 1 |
当 isGuideFreightTemplates == false 时,提示用户选择:
请选择运费设置:
1. 使用运费模板
2. 使用运费说明
3. 卖家承担运费
4. 跳过(保持原设置)输入验证:用户必须输入选项编号(1-4)或选项名称(使用运费模板、使用运费说明、卖家承担运费、跳过)。若输入非选项值,提示用户:"输入无效,请输入选项编号(1-4)或选项名称",并重新展示选项供用户选择。
| 选择 | 处理方式 |
|---|---|
| 使用运费模板 | 从 freightTemplates 中筛选 type == "2" 的数据展示供用户选择(见下方「运费模板选择流程」) |
| 使用运费说明 | freightTemplateId = -1001 |
| 卖家承担运费 | freightTemplateId = 1 |
运费模板选择流程
当用户选择「运费指导模板」或「使用运费模板」时,根据选择类型从 freightTemplates 中筛选对应 type 的数据:
| 用户选择 | 筛选条件 |
|---|---|
| 运费指导模板 | freightTemplates 中 type == "3" 的项 |
| 使用运费模板 | freightTemplates 中 type == "2" 的项 |
若筛选后无数据,提示用户:"当前没有可用的运费模板,请选择其他运费设置方式。",重新展示运费设置选项。
若筛选后有数据,展示格式:
请选择运费模板:
1. <筛选后freightTemplates[0].name>
2. <筛选后freightTemplates[1].name>
...输入验证:用户必须输入选项编号(1-N)或完整的模板名称。若输入非选项值,提示用户:"输入无效,请输入选项编号(1-N)或选项名称",并重新展示选项供用户选择。
保存参数:freightTemplateId = 用户所选 name 对应的 id
记录用户选择的运费模板类型:当用户选择「运费指导模板」时,标记当前运费设置为指导模板类型(
type == "3"),用于后续发货地址变更时的判断。
价格类型
提示用户选择:
请选择价格类型:
1. 原价
2. 促销价
3. 跳过(保持原设置)输入验证:用户必须输入选项编号(1、2、3)或选项名称(原价、促销价、跳过)。若输入非选项值,提示用户:"输入无效,请输入选项编号(1-3)或选项名称",并重新展示选项供用户选择。
| 选择 | 保存参数 |
|---|---|
| 原价 | productSingerPriceType = 1 |
| 促销价 | productSingerPriceType = 2 |
选择价格类型后,提示用户输入价格计算公式:
请输入价格乘数(例如:1.5 表示价格乘以1.5):
直接输入乘数,或输入「跳过」不设置价格计算输入验证:用户必须输入有效数字(正数,支持小数)或「跳过」。若输入非数字且非「跳过」,提示用户:"输入无效,请输入有效数字或「跳过」",并重新提示输入。
解析用户输入的乘数,生成 priceOperations 数组。规则:
- 输入必须为数字
- 仅支持乘法运算
| 运算符 | PriceOperationType |
|---|---|
* | Multiplication |
示例:用户输入 1.5,解析结果:
[
{"PriceOperationType": "Multiplication", "PriceOperationNum": 1.5}
]若用户选择「跳过」,则不传入 priceOperations 参数。
第五步:保存上货设置
等用户完成所有空值项的选择后,将参数写入临时文件 _mcp_params.json:
{"rule":{"copyConfigType":2,"copyWay":0,"status":2,"sendGoodsAddressId":123,"freightTemplateId":456,"productSingerPriceType":1,"priceOperations":[{"PriceOperationType":"Multiplication","PriceOperationNum":1.5},{"PriceOperationType":"Addition","PriceOperationNum":2}]}}然后调用 MCP 工具 save_copy_rule_config:
python scripts/call_mcp.py call save_copy_rule_config --account <userName> --params-file _mcp_params.json| 参数 | 说明 | 传入条件 | ||
|---|---|---|---|---|
copyConfigType | 配置类型,固定值 2 | 始终传入 | ||
copyWay | 产品类型 | 用户在第四步选择了产品类型时传入 | ||
status | 上架设置 | 用户在第四步选择了上架设置时传入 | ||
sendGoodsAddressId | 发货地址 ID | 用户在第四步选择了发货地址时传入 | ||
freightTemplateId | 运费模板 ID | 用户在第四步选择了运费设置时传入 | ||
productSingerPriceType | 价格类型 | 用户在第四步选择了价格类型时传入 | ||
priceOperations | 价格计算公式 | 用户在第四步输入了价格计算公式时传入,格式:`[{"PriceOperationType":"Multiplication | Addition | Subtraction","PriceOperationNum":数字}]` |
返回结果格式:
{
"code": 200,
"msg": "",
"result": null
}| 情况 | 处理方式 |
|---|---|
code == 200 | 保存成功,重新执行「第三步:获取上货设置」 |
code != 200 | 保存失败,将 msg 作为错误信息提示用户,终止流程 |
第六步:执行一键上货
仅当第三步中所有 5 项设置均不为空,且用户在第三步确认环节回复「是」之后才执行本步。将参数写入临时文件 _mcp_params.json:
{"rule":{"copyConfigType":2,"copyProductInfos":[{"productId":"<ProductId>","offerSource":<OfferSource>,"copyProductParam":<CopyProductParam>}]}}然后调用 MCP 工具 copy_by_agent:
python scripts/call_mcp.py call copy_by_agent --account <userName> --params-file _mcp_params.json参数从第二步返回的 Result.SuccessProductInfos 中逐项取値,构建 copyProductInfos 数组:
| 参数 | 来源字段 |
|---|---|
copyConfigType | 配置类型,固定值 2 |
productId | SuccessProductInfos[*].ProductId |
offerSource | SuccessProductInfos[*].OfferSource |
copyProductParam | SuccessProductInfos[*].CopyProductParam(为 null 时传 {}) |
接口返回结果格式
{
"code": 200,
"msg": "",
"result": ""
}result 为任务 ID。
| 情况 | 处理方式 |
|---|---|
code == 200 | 调用 MCP 工具 get_skill_login_info(使用当前账号的 --account 参数)获取 result.copyRecordUrl,提示用户:"一键上货任务已提交,可打开 [上货记录](copyRecordUrl) 进行查看进度";若 get_skill_login_info 调用失败或 copyRecordUrl 为空,则仅提示:"一键上货任务已提交。" |
code != 200 | 将 msg 作为错误信息提示用户,终止流程 |
输出格式
未检测到链接时
未检测到商品链接,请提供上货的商品链接,支持同时输入多个链接。检测到链接并调用成功时
## 1688发品助手
**识别到 X 个商品链接:**
1. <URL1>
2. <URL2>
...
**处理结果:**
正确链接:
<SuccessProductInfos[*].Url>
错误链接:
<FailProductUrls[*]>全部链接识别失败时
错误链接:
<FailProductUrls[*]>
未识别到有效的商品链接,请重新输入正确的商品链接。设置含空值时(第四步逐项提示示例)
当前上货模板设置:
- 产品类型:未设置
- 上架设置:销售中
- 发货地址:未设置
- 运费设置:未设置
- 价格类型:未设置
检测到以下设置项未设置,请依次完成填写:
请选择产品类型:
1. 发布为现货品
2. 发布为工厂品
3. 跳过(保持原设置)用户拒绝模板时(第四步修改设置示例)
当前上货模板设置:
- 产品类型:现货品
- 上架设置:销售中
- 发货地址:杭州市...
- 运费设置:运费指导模板
- 价格类型:原价
好的,请选择需要修改的设置项:
请选择产品类型:
1. 发布为现货品
2. 发布为工厂品
3. 跳过(保持原设置)一键上货任务下发成功时
一键上货任务已提交,可打开 [上货记录](copyRecordUrl) 进行查看进度查看登录账号成功时
当前登录账号:<result.userName>MCP 接口调用失败时(Code != 200 或 code != 200)
<返回的 Msg / msg 内容>注意事项
- 查看登录账号场景:用户输入包含「查看登录账号」时,先读取
sTokens.json判断账号数量,多个账号时询问用户选择哪个账号,使用所选账号的userName通过--account参数调用get_skill_login_info获取登录信息,code == 200时展示当前登录账号:userName,否则展示msg错误信息 - 一键上货场景:满足关键词条件(包含"复制/上货/发布")触发
- 授权场景:用户输入包含「保存授权」或「修改授权」时,触发 sToken 保存流程
- 安装场景:技能安装 URL 中包含 sToken 时(格式
~/cli/{id}/{sToken}),自动触发 sToken 保存流程,无需用户手动输入 - sToken 保存流程:格式校验通过后,先调用
get_skill_login_info获取userName,再保存到sTokens.json(userName已存在则更新sToken,不存在则新增) - 用户输入中可能包含多个链接,需全部提取
- 调用 MCP 接口前必须确认使用哪个账号,通过
--account <userName>参数指定,call_mcp.py自动从sTokens.json查找对应账号的 sToken - 所有 MCP 接口均需先校验
Code/code字段:等于200才继续后续流程,否则将Msg/msg作为错误信息提示用户并终止 - 仅当
SuccessProductInfos中存在至少一个成功链接时,才进入第二步(续);否则提示用户重新输入,并在用户重新输入后从第一步重新执行 - 链接识别成功后,需读取
sTokens.json判断账号数量:仅 1 个账号时直接使用其sToken;多个账号时展示列表供用户多选;无账号时提示用户授权 - 多账号选择支持多选,用户可输入多个编号(逗号分隔)选择多个账号,选择多个账号时依次对每个账号独立执行完整的上货流程(第三步至第六步),一个账号完成后再执行下一个;某账号出错时提示错误并继续执行剩余账号
get_copy_rule_config返回的result为包含 5 个固定键的字典:产品类型、上架设置、发货地址、运费设置、价格类型,每项均为对象格式,展示时仅展示name字段get_copy_rule_config返回的运费设置对象包含Type字段,Type == "3"表示运费指导模板,Type == "2"表示普通运费模板get_copy_rule_config返回的发货地址对象包含id字段,用于调用get_freight_templates时传入addressId参数- 空值检测后,仅对值为空的设置项依次提示用户选择,非空项保持原值不变;当用户在第三步回复"否"拒绝模板时,所有 5 项均展示供用户选择修改,用户可选择"跳过"保持原设置
save_copy_rule_config参数为增量传入,仅传入用户实际选择的项;保存成功后重新执行第三步(获取上货设置)- 第三步所有设置项均不为空时,必须向用户展示当前上货模板设置并询问"确认使用该模板一键上货?(是 / 否)",仅在用户回复"是"等肯定语义后才进入第六步执行一键上货;用户回复"否"等否定语义时,提示"好的,请选择需要修改的设置项:",进入第四步修改上货模板设置,此时所有 5 项均展示供用户选择修改
copy_by_agent的copyProductInfos数组由第二步SuccessProductInfos逐项映射,CopyProductParam为null时传{}- 一键上货成功后(
code == 200),使用当前账号的--account参数调用get_skill_login_info获取result.copyRecordUrl,展示提示"一键上货任务已提交,可打开 [上货记录](copyRecordUrl) 进行查看进度";若获取失败或字段为空则仅提示"一键上货任务已提交。";失败则展示msg错误信息 - 发货地址通过
get_send_goods_addresses获取,展示fullAddress,保存对应id - 选择「运费指导模板」或「使用运费模板」时需调用
get_freight_templates,根据isGuideFreightTemplates决定是否展示「运费指导模板」选项 get_freight_templates返回的freightTemplates中每项包含type字段:type == "3"为运费指导模板,type == "2"为普通运费模板;选择「运费指导模板」时仅展示type == "3"的数据,选择「使用运费模板」时仅展示type == "2"的数据- 选择运费模板类选项前,发货地址
id不能为空,否则提示用户先选择发货地址 - 选择「使用运费说明」时
freightTemplateId = -1001,「卖家承担运费」时freightTemplateId = 1 - 发货地址变更联动:当发货地址变更(新
id与原id不同)且当前运费设置为指导模板类型(result.运费设置.Type == "3")时,提示用户重新选择运费模板 - 输入验证:所有设置项(产品类型、上架设置、发货地址、运费设置、运费模板、价格类型、价格乘数)均只允许选择提供的选项或输入有效值,用户输入非选项值时提示"输入无效"并重新展示选项,不允许自由输入非选项内容