- name
- seap-shopping
- version
- 1.0.0
- trigger
- 用户触发购买、帮我买、预约购买等厂家
- description
- 用户在场/不在场购买skill
SEAP Shopping Skill
这是一个用于处理购物需求的 skill,支持用户在场购买和不在场预约购买两种场景。
触发条件
当用户对话中包含"买"字时,自动触发此 skill。
配置文件
配置文件位于 seap.config.json,包含以下配置项:
{
"authCode": "your_auth_code_here",
"addresses": [
{
"name": "收货人姓名",
"phone": "135xxxxxxxx",
"country": "CN",
"province": "广东省",
"city": "深圳市",
"district": "龙岗区",
"detail": "详细地址"
}
],
"autoPush": {
"enabled": true,
"channel": "webchat"
}
}- authCode: 用于调用云侧接口传输的凭证
- addresses: 收货地址列表,支持多个地址,每个地址包含姓名、电话、省市区及详细地址
- autoPush: 自动推送配置,启用购买结果自动通知
依赖工具
依赖 scripts/seap-cli.js 执行相关命令。技能可在普通环境中运行,无需acpx运行时。
命令行工具
seap-cli.js 主要命令
search- 搜索商品aipay- 执行购买(基于确认信息)
工作流程
执行命令进入skill目录
cd ~/.openclaw/workspace/skills/seap-shopping场景一:用户在场购买
- 用户发送对话,例如"我想买一瓶红酒"
- 提取用户意图关键词原文为"queryGoodsIntention",当前商品数量为"quantity"
- 执行命令:
node scripts/seap-cli search --sessionId=${openclaw当前sessionId} --intent=${queryGoodsIntention} --format md- ⚠️ 重要:将查询后的 markdown 通过对话信息返回所有商品数据并按顺序标号,供用户进行选择
- 必须显示搜索返回的全部商品,不得限制数量或只显示部分 - 确保用户能看到所有可选商品
- 用户对话确认指定序号商品后,读取
${openclaw当前sessionId}.json文件对应序号的商品,获取商品 "skuId",从mercInfo的id字段中获取"mercInfoId" - 地址确认对话:
- 系统自动从 seap.config.json 读取当前收货地址数据结构 - 通过 OpenClaw 消息功能向用户显示当前地址:"当前收货地址:[地址],是否确认?(回复确认/修改:新地址)" - 用户确认地址或提供新地址 - 如果用户修改地址,解析对应地址格式:'收货人姓名 收货人电话 国家 省份 市 区 详细地址',解析后按对应数据结构更新 seap.config.json 文件
- 购买确认:
- 生成确认文件 ${sessionId}_confirmed.json,包含商品和确认后的地址信息
- 执行购买命令:
node scripts/seap-cli aipay --sessionId=${openclaw当前sessionId} --skuId=${skuId} --quantity=${quantity} --mercInfoId=${mercInfoId}- 文件清理:
- 购买成功后:自动清理 ${sessionId}_confirmed.json 确认文件 - 保留 ${sessionId}.json 作为最终购买结果
- 将购买后的结果信息返回给用户进行提示,根据 success 区分"购买成功"或"购买失败"
场景二:用户不在场购买
- 用户发起预约购买:"三十分钟后帮我买一瓶红酒" 或 "1分钟后帮我买一瓶红酒"
提取用户意图关键词原文为"queryGoodsIntention",当前商品数量为"quantity"
- 搜索商品:
执行命令
node scripts/seap-cli search --sessionId=${sessionId} --intent=${queryGoodsIntention} --format md- ⚠️ 重要用户选择商品:将查询后的 markdown 通过对话信息返回所有商品数据并按顺序标号,供用户进行选择
- 必须显示搜索返回的全部商品,不得限制数量或只显示部分 - 确保用户能看到所有可选商品 - 系统显示带序号的商品列表
- 用户回复序号(如"1")选择商品,系统读取
${sessionId}.json文件获取对应商品信息,获取商品 "skuId",从mercInfo的id字段中获取"mercInfoId"
- 地址确认对话:
- 系统自动从 seap.config.json 读取当前收货地址数据结构 - 通过 OpenClaw 消息功能向用户显示当前地址:"当前收货地址:[地址],是否确认?(回复确认/修改:新地址)" - 用户确认地址或提供新地址 - 如果用户修改地址,解析对应地址格式:'收货人姓名 收货人电话 国家 省份 市 区 详细地址',解析后按对应数据结构更新 seap.config.json 文件
- 购买确认:
- 生成确认文件 ${sessionId}_confirmed.json,包含商品和确认后的地址信息
- 🔧 购买时间确认
# 步骤1:确认购买时间 系统解析用户原始时间表达式(如"1分钟后") 计算确切的执行时间戳
# 步骤2:发送确认消息 "⏰ 购买时间确认
您选择的商品:[商品名称] 预计购买时间:[时间表达式] (约[具体时间])
请确认是否继续预约购买: - 确认预约购买 - 或者修改购买时间 - 或者取消购买"
# 步骤3:等待用户确认 用户回复确认、修改时间或取消
# 步骤4:处理用户选择 - 确认:创建定时任务,系统将在指定时间自动购买 - 修改:重新开始预约流程 - 取消:清理临时文件,结束流程
- 🔧 创建定时购买任务
系统解析用户原始时间表达式(如"1分钟后")计算确切的执行时间戳,自动创建 OpenClaw cron 任务 任务配置: { "name": "预约购买 - [商品名称]", "schedule": { "kind": "at", "at": "[ISO格式的执行时间]" }, "payload": { "kind": "agentTurn", "message": "你正在执行一个定时购买任务。
任务信息: - 商品SKU: ${skuId} - 原始会话: ${原sessionKey}
请按以下步骤完成购买并推送结果:
1. 执行购买命令: node scripts/seap-cli aipay --sessionId=${原sessionKey} --skuId=${skuId} --quantity=${quantity} --mercInfoId=${mercInfoId} 2. 读取购买结果: 从 ${原sessionKey}.json 文件读取购买结果
3. 推送结果到原会话: 使用 sessions_send 将购买结果发送到原始会话
4. 清理临时文件(如果有)", "timeoutSeconds": 120 }, "sessionTarget": "current", "deleteAfterRun": true, "delivery": { "mode": "announce" } }
# ⚠️ 重要说明: # 1. delivery.mode 必须设置为 "announce" 或 "webhook" 以便推送结果 # 2. payload 中的 message 必须包含完整的结果推送逻辑 # 3. 必须使用 sessions_send 工具将结果推送到原会话
9.提示用户任务已创建 "✅ 预约购买任务已创建!
📦 商品信息 - 名称:[商品名称] - 价格:¥[价格] - SKU:[SKU]
📍 收货地址 [收货地址]
⏰ 执行时间 [时间表达式] (约[具体时间])
系统将在指定时间自动执行购买,并将结果通知您。"
10. **定时任务自动执行**
- 到达指定时间后,OpenClaw自动在当前会话中执行任务
- Agent在当前会话中执行购买命令(使用 aipay)
- Agent读取购买结果(从 ${sessionKey}.json)
11. **🔧 购买结果自动推送(Agent在当前会话中执行)**
由于使用 sessionTarget="current",购买结果会自动显示在当前会话
无需手动使用 sessions_send 推送结果
Agent只需执行购买命令,结果会自动呈现给用户
# 步骤1:定时任务触发购买
系统自动执行执行命令node scripts/seap-cli aipay --sessionId=${原sessionKey} --skuId=${skuId} --quantity=${quantity} --mercInfoId=${mercInfoId}
# 步骤2:生成完整购买结果
{
"sessionId": "${sessionId}",
"skuId": "[商品SKU]",
"productName": "[商品名称]",
"productPrice": [价格],
"orderId": "[生成的订单号]",
"success": [布尔值],
"address": "[收货地址]",
"executedAt": "[执行时间]",
"executionType": "scheduled"
}
# 步骤3:保存购买结果
更新 ${sessionId}.json 文件,包含完整的购买信息
# 步骤4:自动生成结果消息
生成用户友好的通知消息:
"✅ 预约购买任务已完成!
📦 **商品信息**
- 名称:[商品名称]
- 价格:¥[价格]
- SKU:[SKU]
📋 **订单信息**
- 订单号:[订单号]
- 状态:[成功/失败]
📍 **收货地址**
[收货地址]
⏰ **完成时间**
[完成时间]
💡 这是您的预约购买结果。"
# 步骤5:推送结果至原会话
使用 sessions_send 将结果发送到用户的原始会话
确保用户能够立即收到购买完成通知
# 步骤7:清理临时文件
购买完成后清理临时文件:
- 删除 ${sessionId}_task.json
- 删除 ${sessionId}_confirmed.json
- 保留 ${sessionId}.json 作为购买记录
#### 📊 **状态管理**
- **${sessionId}.json** - 保存搜索结果和最终购买结果
- **${sessionId}_confirmed.json** - 临时保存购买确认信息(执行后清理)
- **${sessionId}_cron.json** - 保存定时任务配置(执行后清理)
- **${sessionId}_task.json** - 保存预约购买任务配置(执行后清理)
#### ✅ **预期效果**
1. **无缝体验**:用户确认购买后,系统自动处理后续所有流程
2. **准时执行**:定时任务确保在指定时间自动执行购买
3. **实时通知**:购买完成后立即推送详细结果
4. **可靠管理**:完整的任务生命周期和错误处理机制