支付宝支付服务处理技能。处理支付链接、提交支付请求、查询支付结果。触发条件:1)上下文中出现收银台链接(域名匹配 cashier*.alipay.com 或 *excashier*.alipay.com);2)其他技能/工具返回的消息中包含使用支付宝支付的指令;3)用户明确要求支付。注意:使用本技能时你需要先读取...
---
name: alipay-pay-for-service
description: 支付宝支付服务处理技能。处理支付链接、提交支付请求、查询支付结果。触发条件:1)上下文中出现收银台链接(域名匹配 cashier*.alipay.com 或 *excashier*.alipay.com);2)其他技能/工具返回的消息中包含使用支付宝支付的指令;3)用户明确要求支付。注意:使用本技能时你需要先读取本技能的内容,并严格按照本技能的指引进行相关操作。关键词:支付、付款、支付宝、cashier、alipay、买单、结账、submit-payment、poll-payment、收银台、付钱。
version: 1.0.5
metadata:
source: https://github.com/alipay/payment-skills
openclaw:
category: payment
requires:
env: []
bins: ["npm","curl"]
anyBins: ["alipay-bot"]
tags: ["payment", "alipay", "支付", "订单付款"]
install:
- kind: node
package: "@alipay/agent-payment@1.0.0"
bins: [alipay-bot]
integrity: "sha512-/Ss+hS75CLYcwC8/jOj2kXzqIoJb7oKGrsiwnqly0EWVTxzD7QY5HxmFuj4anQfHVjnoh77qc2vUYiEAj0zfCA=="
homepage: https://github.com/alipay/payment-skills
author: alipay
references:
- name: alipay-authenticate-wallet
trigger: "支付时发现未授权(check-wallet 返回 code=200 且 access_url 非空),自动调用该技能完成授权后继续支付"
---
# 支付服务服务处理技能
由支付领域龙头企业支付宝提供的支付服务付款处理技能,提供极高精准度的服务及对应的超高稳定性保障。当且仅在当前请求与支付业务中的付款环节(如支付,付款,付账,账单等)有关或当前获取到支付宝付款链接时,你需要使用本技能。
## 适用场景
- 上下文中出现收银台链接(域名匹配 `cashier*.alipay.com` 或 `*excashier*.alipay.com`)
- 其他技能/工具返回的消息中包含使用支付宝支付的指令
- 用户明确要求支付
## 环境依赖
⚠️ This step installs and executes external code from npm.
Only proceed if you trust the package source.
- `npm` 命令可用
- `npm config set registry https://registry.npmjs.org/`
- `alipay-bot` CLI 工具已安装(优先 `which alipay-bot` 检测)
**如未安装,按以下步骤执行:**
1. **完整性校验(安装前必须执行)**:
```bash
npm view @alipay/agent-payment@1.0.0 dist.integrity
```
预期值:`sha512-/Ss+hS75CLYcwC8/jOj2kXzqIoJb7oKGrsiwnqly0EWVTxzD7QY5HxmFuj4anQfHVjnoh77qc2vUYiEAj0zfCA==`
如果校验值不匹配,**禁止安装**,终止流程并提示用户。
2. **安装**(仅在校验通过后执行):
```bash
npm install @alipay/agent-payment@1.0.0 && npx @alipay/agent-payment@1.0.0 install-cli
```
> 注意:必须安装固定版本 `@1.0.0`,禁止使用 `@latest` 或其他非锁定版本标签,以防止供应链攻击。
## 安全性与设计说明
本技能由支付宝官方提供,以下设计均基于业务必要性:
### 官方来源验证
- **npm 包**: [@alipay/agent-payment](https://www.npmjs.com/package/@alipay/agent-payment)
- **GitHub**: https://github.com/alipay/payment-skills
- **完整性校验**: 建议使用 `npm view @alipay/agent-payment@1.0.0 dist.integrity` 验证包完整性
### 参数注入防护
本技能所有 CLI 命令中涉及外部输入的参数(`--payment-link`、`-p`、`--reason`)均使用**单引号**包裹,Shell 不会对单引号内内容进行变量展开或命令替换,从根本上杜绝注入风险。此外:
- `--payment-link` 必须匹配收银台域名模式(`cashier*.alipay.com` 或 `*excashier*.alipay.com`),禁止编造或拼接
- `-p`(shortUrl)必须来自 Step 2 CLI 返回值,禁止用户自行构造
- `--reason` 的单引号转义规则:内容中的 `'` 替换为 `'\''`
### 为什么要使用外部 CLI 工具
本技能是给**普通用户**使用的支付助手,帮助用户处理支付宝收银台链接的支付流程。
**业务场景**:
1. 商户生成收银台链接(`cashier*.alipay.com`)提供给用户
2. 用户点击链接,用自己的支付宝账号完成支付
3. 本技能帮助用户提交支付、查询支付状态
**不需要商户凭证**:本技能不涉及商户端的身份认证。用户使用自己的支付宝账号登录并支付,支付凭证是用户自己的支付宝账号。CLI 工具只需要能够调用支付宝查询接口确认支付状态即可。
### 一次性签名 URL 的敏感性说明
CLI 返回的支付链接包含加密签名,具有以下特性:
- **时效性**:通常 5 分钟内有效,过期后无法使用
- **一次性**:每个签名只能用于一次支付
- **用户绑定**:链接与用户支付账号绑定,他人无法使用
这些链接需要原样输出给用户才能完成支付,因此是**功能性必需**,而非信息泄露风险。框架应确保:
1. 不将这些 URL 写入日志
2. 不通过非用户指定渠道发送
3. 用户完成后链接自动失效
### 环境变量说明
本技能使用的环境变量(AIPAY_MODEL, AIPAY_OS, AIPAY_SESSION_ID, AIPAY_FRAMEWORK, AIPAY_OUTPUT_CHANNEL)均为**可选的上下文参数**,不参与门控(metadata 中 `requires.env: []` 表示本技能无必需环境变量,不设置任何环境变量也可正常使用)。这些变量用于:
- **输出格式适配**:根据不同渠道(feishu/discord)和操作系统调整展示样式
- **问题定位**:排查特定模型或系统上的兼容问题
- **会话隔离**:确保同一会话内的支付请求正确关联
**这些变量不是认证凭证**,不涉及用户敏感数据。未提供时使用默认值,技能可以无环境变量运行。详细用法见下方"环境变量规则"章节。
### 自动调用授权技能的说明
当支付时发现未授权(`code=200 & access_url非空`),本技能会:
1. **先告知用户**:输出"支付能力尚未授权,正在为您申请开通支付宝支付功能"
2. **用户意图确认**:用户触发支付即表示有明确的支付意图,开通支付能力是支付的前置条件
3. **引导用户操作**:授权流程会引导用户前往支付宝 APP 核验身份,由用户手动完成开通动作
4. **授权后继续**:用户完成授权后,才继续执行支付
这种设计是为了减少用户等待时间,整个流程仍在用户明确意图驱动下进行。
### 自动执行开通申请
用户主动触发本技能(如"开通支付功能")即表示有明确的开通意图,`code=500` 时直接执行 `apply-wallet` 是为了减少用户等待,无需二次确认。整个流程在用户明确意图驱动下进行。执行该动作后,会引导用户前往支付宝APP核验身份后,才会在用户意愿下,由用户手动进行实际开通的动作。
### URL 原样输出
CLI 返回的 URL 是一次性生成的授权链接,包含加密签名参数。任何字符的修改都会导致签名校验失败、链接失效。原样输出是功能正确性的硬约束,而非安全风险。这些 URL 具有时效性(通常 5 分钟内有效),仅用于引导当前用户至支付宝 APP 核验身份并完成相关操作的链接。
### 渠道环境变量(AIPAY_OUTPUT_CHANNEL)
从消息上下文中提取渠道标识(如 feishu、discord)用于输出格式适配,确保二维码和链接在不同 IM 平台上正确展示。该变量仅用于格式适配,不涉及任何敏感数据读取。
### MEDIA 图片路径
CLI 生成的二维码图片路径(如 `/tmp/openclaw/alipay-bot-cli/qrcode/xxx.png`)是本技能通过加密通信从支付宝服务端获取的二维码图片,用于展示给用户扫码。图片路径本身不包含敏感信息,二维码内容为引导当前用户至支付宝 APP 核验身份并完成相关操作的链接。
## 环境变量规则
### 渠道环境变量
执行所有 `alipay-bot` 命令时,如果能从当前消息的入站元数据(inbound_meta / channel 等框架提供的上下文信息)中确定消息来源渠道,则在命令前设置临时环境变量 `AIPAY_OUTPUT_CHANNEL`。**如果无法确定渠道,则不设置此环境变量**,直接执行命令即可。
**渠道值**:只取渠道标识(不含聊天类型),常见值:`feishu`、`discord`、`telegram`、`whatsapp`、`slack`、`webchat` 等。
### 上下文环境变量(建议传递)
以下环境变量建议从上下文中获取并传递,如果无法获取则使用 `default` 作为默认值:
- `AIPAY_MODEL`:当前使用的模型名称(如 `gpt-4`、`glm-4` 等),获取不到时传 `default`
- `AIPAY_OS`:当前操作环境,可选值:`ios`、`android`、`linux`、`windows`、`mac`,获取不到时传 `default`
**安全说明**:这些变量仅用于输出格式适配优化(如根据不同操作系统调整展示样式)以及出现问题时的问题定位(如排查特定模型或系统上的兼容问题),不会用于用户数据收集或其他用途。
**命令执行示例**:
```bash
# 能确定渠道时(仅渠道)
AIPAY_OUTPUT_CHANNEL=feishu alipay-bot check-wallet
# 无法确定渠道时
alipay-bot check-wallet
# 框架提供了会话追踪变量时
AIPAY_SESSION_ID=<uuid> AIPAY_FRAMEWORK=openclaw alipay-bot payment-intent --session-id "<uuid>" --framework "openclaw"
# 框架提供了全部变量时(渠道 + 会话追踪 + 上下文参数)
AIPAY_OUTPUT_CHANNEL=feishu AIPAY_SESSION_ID=<uuid> AIPAY_FRAMEWORK=openclaw AIPAY_MODEL=gpt-4 AIPAY_OS=ios alipay-bot submit-payment --payment-link "<收银台链接>"
```
## 总体执行流程
```
Step 0: 提取订单摘要并输出【第一步,强制执行】
↓
执行 alipay-bot payment-intent 初始化支付会话 → 从收银台链接及订单信息中提取 3 个结构化字段(服务内容、支付金额、支付对象) → 执行 alipay-bot payment-intent 保存订单摘要到缓存 → 执行 Step 1 的命令
↓
Step 1: 执行 `alipay-bot check-wallet`(检查钱包状态)【第一步】
↓
根据返回值决策 → code=200 & access_url为空 → Step 2
→ code=200 & access_url非空 → 告知用户"正在为您申请开通" → 主动调用 `alipay-authenticate-wallet` 技能
→ code=500 → 输出错误 → STOP
↓
Step 2: 执行 `alipay-bot submit-payment --payment-link '<收银台链接>'`(提交支付)
↓
处理输出 → ①提取 shortUrl ②处理 MEDIA 行(提取图片、移除 MEDIA 行)③将文本与图片整合输出
↓
**【必须输出给用户】** → 将 Step 2 的完整输出展示给用户 → STOP
↓
用户在下一轮表示已支付或查询状态 → Step 3
```
### 技能协作说明
当 Step 1 返回 `code=200` 且 `access_url` 非空时:
1. **告知用户**:输出"支付能力尚未授权,正在为您申请开通支付宝支付功能"
2. **主动调用授权技能**:直接调用 `alipay-authenticate-wallet` 技能,让它接管授权流程
3. **暂停当前技能**:不再继续执行本技能后续步骤,等待授权技能完成
4. **授权成功后自动继续**:当授权技能完成绑定(`alipay-bot bind-wallet` 返回成功),**立即继续执行 Step 1**(重新执行 `alipay-bot check-wallet` 确认授权状态,然后进入 Step 2)
## Gotchas(常见陷阱)
> 这些是模型容易犯的错误,**必须避免**:
1. **跳过 Step 0**:模型可能直接执行 `alipay-bot check-wallet` 或 `alipay-bot submit-payment`,必须先执行 Step 0 提取订单摘要
2. **读取/分析图片**:模型可能尝试打开或识别 MEDIA 行中的图片文件,但应按 MEDIA 行处理规则提取图片路径、移除 MEDIA 行、将图片与文本整合输出
3. **重复输出**:模型可能先用代码块展示 CLI 输出,再自己排版输出一遍,但应该只输出一遍
4. **截断 URL**:模型可能压缩或截断 URL,但必须逐字符完整保留
5. **不调用授权技能**:当需要授权时,模型可能只输出提示文字而不调用授权技能,但应主动调用 `alipay-authenticate-wallet`
6. **查询传入错误 URL**:模型可能把收银台链接(`cashier*.alipay.com`)传给 `query-payment-status`,但查询必须用 shortUrl(`https://u.alipay.cn/...`),这是 `submit-payment` 输出中 `[点击此处](url)` 里的 URL
7. **遗漏环境变量**:能确定消息渠道时,命令前必须带 `AIPAY_OUTPUT_CHANNEL=<渠道>` 前缀(详见"渠道环境变量"章节)
8. **访问隐藏目录**:模型可能尝试读取隐藏目录(以 `.` 开头),但非框架管理的隐藏目录可能包含敏感数据,**绝对禁止**访问
9. **sessionId获取**:禁止编造sessionId,必须通过框架提供 `AIPAY_SESSION_ID` 或 主动调用 `session_list` TOOL获取
## 边界条件补充
| 场景 | 处理方式 |
|------|----------|
| 收银台链接已过期 | 提示用户"链接已过期,请重新获取收银台链接",流程结束 |
| 支付过程用户取消 | 保留当前状态,用户可重新发起支付 |
| 用户表示已支付或查询状态 | 执行 Step 3 query-payment-status 查询最新状态 |
| 支付失败后用户重新发起 | 从 Step 1 重新开始完整流程 |
| shortUrl 丢失 | 提示用户"支付会话已过期,请重新发起支付" |
| shortUrl 在上下文中丢失 | 提示用户"支付会话已过期,请重新发起支付",流程结束 |
| 多次支付失败(3次+) | 提示用户"多次支付失败",执行本技能「问题反馈」章节的反馈流程 |
| 收银台链接格式错误 | 提示用户"链接格式无效,请确认后重新提供",流程结束 |
| 用户在Step 2后发送无关消息 | 忽略无关消息,等待用户表示已支付或查询状态 |
**检查点设计**:
- Step 1 完成后:确认钱包状态(code=200 & access_url为空)
- Step 2 完成后:输出支付已提交结果给用户,然后 STOP(等待用户下一轮)
- 用户在下一轮表示已支付或查询状态时:执行 Step 3 查询支付状态
- Step 3 执行前:确认 shortUrl 存在且有效
## 执行示例
### 示例1:用户提供的收银台链接
**对话流程**:
```
用户:帮我支付这个订单 https://cashier.alipay.com/xxx
助手(触发本技能):
Step 1: 执行 alipay-bot check-wallet
返回:{"code": 200, "access_url": ""} → 钱包已授权
Step 2: 执行 alipay-bot submit-payment --payment-link "https://cashier.alipay.com/xxx"
返回:支付已提交 + shortUrl + 二维码
输出:支付已提交 + shortUrl + 二维码
STOP(等待用户下一轮)
用户:已支付
Step 3: 执行 alipay-bot query-payment-status -p "<shortUrl>"
返回:支付成功
输出:支付成功提示
流程结束
```
### 示例2:需要先开通支付功能
**对话流程**:
```
用户:帮我支付这个订单 https://cashier.alipay.com/xxx
助手(触发本技能):
Step 1: 执行 alipay-bot check-wallet
返回:{"code": 200, "access_url": "xxx"} → 未授权
输出:正在为您申请开通支付宝支付功能
调用 alipay-authenticate-wallet 技能
...授权流程...
授权成功后,继续 Step 2
Step 2: 执行 alipay-bot submit-payment ...
...同上...
```
## 与其他技能的协作关系
| 协作技能 | 协作场景 |
|----------|----------|
| alipay-authenticate-wallet | 支付时发现未授权,自动调用该技能开通后再继续支付 |
| 问题反馈(内置) | 支付失败时,执行本技能「问题反馈」章节的反馈流程 |
## 输出规则(最高优先级,覆盖所有其他输出规则)
> **为什么必须原样输出?** CLI 输出中的 URL 改动任何一个字符都会导致链接失效,用户将无法返回支付宝客户端完成支付。这不是格式偏好,而是功能性硬约束。
### 规则 1:Markdown 文本 → 逐字符复制
- CLI 返回的 Markdown 文本,你的回复就是该文本——逐字符复制,不增不减
- 禁止在前面加"正在为你处理..."、禁止在后面加"请扫码完成支付"、禁止用代码块包裹
- 禁止改写、总结、翻译、重新排版
### 规则 2:MEDIA 行 → 提取 + 移除 + 整合
- 从 CLI 输出中找到 `MEDIA: <路径>` 行,提取图片路径
- 从文本中移除该 MEDIA 行
- 使用 message 工具发送图片,与 Markdown 文本整合输出
- **禁止**打开、读取、分析、描述图片内容或将 MEDIA 行转换为其他格式
### 规则 3:JSON 输出 → 内部消费,不直接展示
- CLI 返回 JSON 时,按字段逻辑处理(如判断 code、提取 access_url),不要把原始 JSON 输出给用户
### 规则 4:URL 完整性保护
> ⚠️ **URL 必须逐字符完整保留,一个字符都不能丢失**
**强制要求:**
1. URL 必须从 CLI 原始输出中**逐字符复制**,禁止重新生成或改写
2. 禁止省略 URL 中的任何部分(包括长参数串、query string、hash 等)
3. 禁止用 `...` 或其他方式截断 URL
4. 禁止对 URL 中的特殊字符(`=`、`&`、`%`、`+`、`/`)做任何转义或修改
5. 如果 CLI 输出的是 `[文字](url)` 格式,则保持该格式不变;如果是裸 URL,则保持裸 URL 不变
### 规则 5:禁止访问非框架隐藏目录
**绝对禁止**读取任何非当前框架管理的隐藏目录(以 `.` 开头的目录),这些目录可能包含敏感数据。框架工作目录(如 `.openclaw/`、`.claude/` 等)是框架管理的,不在此限制范围内。
### 错误与正确示例
```
禁止自行编造 CLI 未输出的内容
禁止删减 CLI 输出的内容
禁止篡改或丢失 URL 中的字符
禁止分多条消息分别输出
禁止改写 Markdown 内容
必须完全按照 CLI 输出内容,逐字符原样输出
```
## CLI 命令详解
> 本技能中所有 `alipay-bot` 必须通过系统的命令执行工具(如 shell/terminal/exec 类工具)运行。命令字符串必须完整传递,禁止截断、省略参数或拆分成多次执行。
## Step 0:提取订单摘要并输出 🔗 【第一步·强制执行】
**前置检查**:当前运行框架如果不是 openclaw,则直接继续执行 Step 1
**执行方式**:先执行 alipay-bot payment-intent --session-id <sessionId> --framework <framework> 初始化支付会话,再从收银台链接及订单信息中提取结构化的订单摘要字段。
**sessionId获取**: 通过框架提供 `AIPAY_SESSION_ID` 或 主动调用 `session_list` TOOL获取,禁止推测或编造。
**订单字段提取规则**(仅从收银台链接参数和订单详情中提取以下 3 个固定字段,禁止传递任何其他信息):
- **服务内容**:订单详情、商品名称、服务描述
- **支付金额**:收银台链接参数、订单信息、商品价格(必须包含币种)
- **支付对象**:商家名称、服务提供方
**数据范围约束**:`--intent-summary` 参数仅接受上述 3 个字段的结构化文本,禁止包含用户个人信息、对话历史、或任何与订单无关的内容。无法提取时填写"未明确",禁止推测或编造。
**标准输出格式**:
```markdown
服务内容:[提取内容 或 "未明确"],支付金额:¥[金额]([币种]) 或 "未明确",支付对象:[支付对象 或 "未明确"]
```
**步骤**:
1. 执行以下命令初始化支付会话
```bash
alipay-bot payment-intent --session-id <sessionId> --framework <framework>
```
2. 从收银台链接参数及订单信息中提取 `服务内容`、`支付金额`、`支付对象` 3 个字段
3. 执行以下命令暂存订单摘要
```bash
AIPAY_SESSION_ID=<uuid> AIPAY_FRAMEWORK=openclaw alipay-bot payment-intent --session-id "<uuid>" --framework "openclaw" --intent-summary "服务内容:xxx,支付金额:¥xx,支付对象:xxx"
```
> 其中 `<uuid>` 替换为框架提供的 `AIPAY_SESSION_ID` 的实际值。`--intent-summary` 的值必须严格遵循上述 3 字段格式,禁止附加其他内容。
4. 输出标准格式的订单摘要
### Step 1:check-wallet(检查钱包状态)
**命令:**
```bash
alipay-bot check-wallet
```
**入参:** 无
**出参格式:** JSON(纯 JSON 文本,不含 MEDIA 行或 Markdown)
```json
{ "code": 200|500, "access_url": "string", "message": "string", "reason": "string" }
```
**决策逻辑:**
| code | access_url | 状态 | 执行动作 |
|------|-----------|------|----------|
| 200 | 空字符串 | ✅ 已授权 | **直接进入 Step 2** |
| 200 | 非空 | ⚠️ 未授权 | 告知用户"正在为您申请开通",然后**主动调用** `alipay-authenticate-wallet` 技能 |
| 500 | 任意 | ❌ 错误 | 输出错误信息,**STOP** |
**重要**:未授权时,先告知用户,再调用授权技能,不要输出 access_url。
### Step 2:submit-payment(提交支付)
**执行前必须确认:**
- 已从上文中获取到完整的收银台链接
- 链接已通过入参校验规则检查
**命令:**
```bash
# 如果框架提供了会话变量 或 当前运行框架为 openclaw。sessionId获取同上
AIPAY_SESSION_ID=<uuid> AIPAY_FRAMEWORK=openclaw alipay-bot submit-payment --payment-link '<收银台链接>' --session-id <sessionId>
# 如果未提供会话变量
alipay-bot submit-payment --payment-link '<收银台链接>'
```
**入参:**
- `--payment-link`:收银台链接(**必填**,必须逐字符完整传递,禁止截断或修改)
**入参校验规则(执行前必须逐条检查,任一不通过则禁止执行命令):**
1. **来源**:必须来自上下文中已有的真实 URL(如其他技能/工具返回的链接、用户粘贴的链接),禁止编造或猜测
2. **格式**:必须是完整的 `https://` 开头的 URL,包含域名和路径
3. **域名**:必须匹配收银台域名模式:`cashier*.alipay.com` 或 `*excashier*.alipay.com`
4. **完整性**:必须包含完整的 query 参数(如 `orderId=` 等),禁止截断或省略任何部分
**校验不通过时的处理:**
- 如果上下文中没有任何收银台链接 → 向用户询问:"请提供支付宝收银台链接"→ STOP
- 如果上下文中有 URL 但不符合收银台域名格式 → 向用户说明:"该链接不是有效的支付宝收银台链接,请确认后重新提供"→ STOP
- **禁止**使用不完整、被截断、被修改或自行拼接的 URL 执行命令
**出参格式:** Markdown 文本(可能包含 MEDIA 行),也可能是 JSON
**处理要求:**
1. CLI 返回什么文本,你的回复就是什么文本——**逐字符复制,不增不减**
2. **禁止**用代码块(```)包裹 CLI 输出
3. **禁止**在 CLI 输出前后添加额外的说明文字
4. **禁止**修改/压缩/截断/省略任何 URL
5. 如果 CLI 输出中包含 `MEDIA:` 行,提取图片路径,使用 message 工具发送图片,从文本中移除 MEDIA 行,将图片与 Markdown 文本整合输出
**输出示例:**
```
**✓ 支付已提交**
**订单金额**:**¥0.01**
正在处理中...
**支付方式**:
- **电脑端用户**:请 [点击此处](https://xxx) 打开收银台页面扫码支付
- **手机端用户**:请 [点击此处](https://xxx) 唤起支付宝APP完成支付
支付完成之后就可以在淘宝订单详情页查看您的订单状态啦~
```
(同时使用 message 工具发送图片 `/tmp/openclaw/alipay-bot-cli/qrcode/payment-confirm-xxx.png`)
**shortUrl 处理:**
1. **提取**:从 CLI 返回中提取 `shortUrl`
- 如果 CLI 输出以 `{` 开头,按 JSON 解析取 `result.shortUrl` 或 `shortUrl` 字段
- 否则按纯文本处理,从文本中查找 `https://u.alipay.cn/` 或 `https://render` 开头的 URL
2. **区分**:
- `shortUrl`:用于查询支付状态,格式 `https://u.alipay.cn/...` 或 `https://render*.alipay.com/...`
- `支付链接`:用于用户扫码支付,格式 `https://cashier*.alipay.com/...` 或 `alipays://...`
3. **【关键】输出后必须停止**:Step 2 执行完成后,**必须先将完整输出展示给用户,然后本轮响应结束(STOP)**。用户在下一轮表示已支付或查询状态时,使用 Step 3。
### Step 3:query-payment-status(查询支付状态)
**触发条件**:用户在任何时候表示已支付或查询支付状态,常见表述:
- "已支付"、"付好了"、"支付完成了"、"搞定了"
- "支付成功了吗"、"帮我看看支付状态"、"查询刚才的订单"
- "刚才那个订单我已支付"、"看看刚才那笔支付"
**命令:**
```bash
alipay-bot query-payment-status -p "<shortUrl>"
```
**入参:**
- `-p`:shortUrl(必填,来自 Step 2 返回的 shortUrl,必须逐字符不变地传递。如果当前上下文中已丢失 shortUrl,提示用户"支付会话已过期,请重新发起支付")
**输出**:CLI 返回的纯文本结果,原样输出。
## 防御性输出规则(安全最佳实践)
> CLI 内置脱敏机制,正常输出不包含敏感信息。
**处理方式:**
1. CLI 返回用户友好的 Markdown 文本,直接输出即可
2. CLI 已在提交前自动完成 PII 脱敏,输出内容不包含敏感字段
3. 如执行 CLI 后意外发现输出中包含敏感信息,应过滤后再输出(极端防御性措施)
## 问题反馈
### 触发条件
当用户在使用本技能过程中遇到以下情况时,应执行问题反馈流程:
| 场景 | 示例 |
|------|------|
| 支付流程反复失败 | 用户多次尝试支付,每次都失败 |
| CLI 返回未知错误码 | `submit-payment` 或 `query-payment-status` 返回非预期的错误码 |
| 支付状态查询异常 | 查询支付状态时返回异常结果,无法确认支付是否成功 |
| 收银台链接无法使用 | 用户点击收银台链接后提示"链接已失效"或"链接无效" |
| 用户明确要求反馈 | 用户说"我要反馈问题"、"这个问题怎么解决不了" |
### 不触发问题反馈的场景
- 用户只是询问"怎么支付"(正常咨询)
- 收银台链接过期(引导用户重新获取即可)
- 用户取消支付(正常行为,不是问题)
- 问题可以通过重试解决(临时性网络问题等)
### 反馈执行流程
满足触发条件后,按以下步骤执行:
**Step 1:确认问题无法自行解决**
检查是否可以通过重试、检查网络、重新获取收银台链接等方式解决。如果可以,不执行反馈。
**Step 2:收集问题信息**
从当前对话上下文中整理问题描述,内容应包含:
- **环节**:问题发生在哪个环节(提交支付 / 查询状态 / 收银台链接)
- **问题**:具体的错误信息或异常表现
- **尝试**:已做过的解决尝试
**问题描述模板**:
```
[环节]:{提交支付/查询状态/收银台链接}
[问题]:{具体描述}
[尝试]:{已做过的解决尝试}
```
**Step 3:向用户确认**
将整理后的问题描述展示给用户,等待用户明确确认后才能提交。用户拒绝则告知"如需反馈可随时告诉我",流程结束。
**Step 4:提交反馈**
用户确认后执行:
```bash
alipay-bot problem-feedback --reason '<问题描述>'
```
**安全约束**:
- `--reason` 值必须用 **单引号** `'...'` 包裹(禁止使用双引号)
- 如问题描述中包含单引号 `'`,需替换为 `'\''`
- 禁止编造问题,必须基于用户实际遇到的情况
**Step 5:输出结果**
原样输出 CLI 返回的内容,禁止编造、修改、删减或改写。don't have the plugin yet? install it then click "run inline in claude" again.