育儿大师 · 分龄养育方案(付费技能)
> 【文件自查】这是付费版(slug: parenting-expert,v1.12.0,由 v1.11.4 免费版升级而来)。打开本文件 Ctrl+F 搜「402」应能搜到;搜不到说明你拿的是免费版,传错了文件。
面向家长,产出一份针对自家孩子月龄的可执行养育方案。本技能是一个 Pay Skill,按次计价(详见「价格」一节),支付在任务流程内完成,走支付宝 AI 按量付费的 402 协议:未付款时服务端返回 HTTP 402 + Payment-Needed 账单,付款后携 Payment-Proof 凭证重试原请求,服务端验付通过才交付方案。
> 本技能是付费技能。 任何一次方案生成都会产生一笔真实费用。
> 在用户明确同意价格之前,不得推进到付款环节。
一、何时使用
家长描述了 0-18 岁孩子的具体养育困扰,且希望得到针对性方案时触发:
- 睡眠(夜醒、哄睡、入睡依赖、作息漂移、赖床)
- 喂养(挑食、追喂、断奶、食欲差)
- 情绪与行为(发脾气、打人咬人、顶嘴、说谎、恐惧、分离焦虑)
- 学习(写作业拖延、注意力、厌学拒学、考试焦虑)
- 屏幕与手机、同胞争宠、隔代养育、离异与单亲家庭
- 发育担忧(说话晚、走路晚、身高体重、注意力、感统)
- 身体症状的分诊(发烧、腹泻、湿疹、皮疹——判断该观察还是该就医)
- 家长自己的情绪(崩溃、自责、吼完孩子后的修复)
不适用:单纯的知识问答(如「几岁开始加辅食」,直接用公开知识回答即可,不需要付费方案);医疗诊断;药物剂量。
安全优先:描述中出现自伤、自杀、被伤害、走失、惊厥、呼吸困难、误服等信号时,先按「危机处理」输出应急动作与求助路径,不要先推销方案。付费方案解决不了危机。
二、价格与付款规则(必须遵守)
| 项目 | 说明 |
|---|---|
| 计价方式 | 按次。每生成一份方案收费一次 |
| 展示价格 | 以调用 probe 后返回的账单金额为准,并在付款前原样告知用户 |
| 付款方式 | 支付宝扫码授权,由官方买家支付能力完成 |
| 重复请求 | 同一订单重试不重复扣费;已完成交付的订单会直接返回已生成的方案 |
硬性规则:
- 先报价,后付款。 取得账单后,先把「商品 / 金额 / 订单号 / 付款截止」明确告诉用户,等用户确认再进行付款。
- 不代替用户付款。 不索取、不接触任何支付密钥、密码、验证码。
- 状态不明先查单。 付款结果不确定时,先查询原订单(
complete),绝不重复下单或重复付款。 - 付款后原样复用原请求。 重试时请求参数必须与下单时完全一致,否则服务端会拒绝交付。
- 失败不追加回执。 履约回执(ack)由服务端在交付资源后发送;技能侧成功路径原样展示官方支付能力的输出,不自行再发。
三、依赖与前置
| 依赖 | 用途 | 安装 |
|---|---|---|
| Node.js 18 或以上 | 运行本技能的编排脚本(用内置 fetch,无需 npm install) |
见 nodejs.org |
@alipay/agent-payment |
买家侧官方支付能力(提供 alipay-bot) |
npx -y @alipay/agent-payment@latest install |
| 服务地址 | 卖家已部署的付费业务接口 | 由卖家提供,或通过环境变量 PARENTING_PLAN_URL 设置 |
脚本自身零第三方依赖,不上传任何本地文件,除状态目录外不写入其它路径。
四、执行流程
状态目录 --state-dir 用于保存本次会话的账单与原始请求(例如 .state/育儿大师-20261009)。同一次会话必须复用同一目录。
第 1 步:收集最小输入
只问必要信息,一次问全,不要连环追问:
- 孩子月龄(必需,0~216 个月;知道出生日期就自己换算)
- 这次想解决的具体困扰(必需,一句话,越具体越好)
- 可选:孩子的称呼、发生场景、其它补充
第 2 步:probe —— 取得账单,向用户报价
node scripts/pay/parenting-paid.mjs probe \
--age-months 30 \
--concern "晚上不肯睡,一放床上就哭,要抱着走才睡" \
--child-name 小满 \
--resource-url "<卖家提供的资源地址>" \
--state-dir ".state/parenting-plan-20261009" \
--session-id "SESSION_20261009"
- 返回 HTTP 402 → 未付款。响应头
Payment-Needed携带账单(Base64URL 编码的 JSON,含订单号、金额、币种、付款截止时间)。脚本已保存账单与原始请求,并打印商品、金额、订单号、付款截止。 - 返回 200 → 该资源无需再付款(或凭证仍在有效期),会直接输出方案。
拿到账单后,先把价格告诉用户并取得同意。用户不同意就到此为止,不要继续。
第 3 步:pay —— 生成支付入口
node scripts/pay/parenting-paid.mjs pay \
--state-dir ".state/parenting-plan-20261009" \
--session-id "SESSION_20261009"
脚本会调用官方买家能力(alipay-bot 402-buyer-pay)展示支付入口并等待用户扫码授权。
把支付二维码 / 授权界面呈现给用户,然后等待。用户取消或超时都属正常,可用同一账单重新执行本步。
若安装的官方版本参数名不同,用 --extra-arg 透传,不要自行改写官方参数:
node scripts/pay/parenting-paid.mjs pay --state-dir "..." --extra-arg="--body" --extra-arg="@.state/.../request.json"
第 4 步:complete —— 查询原订单并交付方案
付款成功后,官方买家支付能力会签发 Payment-Proof 支付凭证。本步骤携原始请求(参数与 probe 时完全一致,不得改动)再次请求资源,服务端验付通过后交付方案并返回 Payment-Validation 回执。
node scripts/pay/parenting-paid.mjs complete \
--state-dir ".state/parenting-plan-20261009" \
--out-shake-no "<pay 步骤输出的订单号>"
--out-shake-no 可省略——pay 成功时会自动从官方输出中识别并记录;识别不到时脚本会提示你手动传入。
交付成功后,脚本会输出完整方案 Markdown。把它呈现给用户,并可询问是否需要保存为文件。
五、输出契约
交付内容是八段式 Markdown:
- 孩子的画像(分龄定位) — 月龄、所处阶段、睡眠与专注时长参考
- 安全分诊 — 有红旗信号时置顶并给出应急动作与求助路径;没有时明确说明
- 我的判断 — 归因(发展 × 气质 × 环境 × 未被满足的需求)
- 今天就能做的 3 件事
- 本周的小习惯 — 可记录、可复评
- 可以这样说 — 家长能一字不改说出口的台词
- 该阶段的预警征象 + 转介建议
- 复评 — 7 天 / 14 天 / 立刻
末尾附免责声明:仅作养育参考与就医准备,不构成诊断、不替代诊疗。
参考样例见 references/plan-output-sample.md。
六、危机处理(优先于付费流程)
描述中出现以下信号时,先给应急动作和求助路径,不要先走付款流程:
| 信号 | 首要动作 |
|---|---|
| 自伤、自杀意念、想消失 | 直接询问确认 + 收好危险物品 + 今天就联系精神科/心理科;心理援助热线 12356(24 小时) |
| 惊厥、呼吸困难、意识不清、误服、大出血 | 立即急诊 120 |
| 被伤害、家暴、性侵、走失 | 先保障人身安全,报警 110 |
这些场景下,付费方案能提供的只是后续的养育支持,不能替代急救与专业干预。
七、常见问题
Q:用户说「先看看有没有用再付款」?
A:可以先用公开知识做基础回答;但针对性方案是一次付费调用,不能先交付后收费。
Q:付款后没拿到方案?
A:先执行 complete 查询原订单,不要重新付款。查询异常时按官方支付能力文档恢复;成功路径不追加独立回执。
Q:同一问题想再看一次?
A:已交付的订单可用同一 --state-dir 重放,服务端返回已保存的方案,不重复扣费。
Q:想换一个困扰重新生成?
A:这是新的一次调用,会产生新费用。先明确告知用户,再重新执行 probe。
Q:方案里提到「需要就医」是诊断吗?
A:不是。本技能只做安全分诊(该观察 / 该门诊 / 该急诊)与就医准备,不做诊断、不判症、不开药。
八、付费改造五项能力对照
本技能的付费能力由服务端与编排脚本共同实现,逐项对照平台自查表:
| 平台自查项 | 实现位置 | 说明 |
|---|---|---|
| 402 账单下发 | probe → 业务接口 |
未付款时服务端返回 HTTP 402,响应头 Payment-Needed(Base64URL 编码 JSON)携带账单:out_trade_no、amount、currency=CNY、pay_before、resource_id、卖家 RSA2 签名。脚本保存账单与原始请求,先向用户报价 |
| 携带凭证重试 | pay → complete |
付款成功后官方买家能力签发 Payment-Proof 支付凭证;complete 以与 probe 完全一致的请求参数重试原请求,服务端比对请求指纹,参数不一致直接拒绝 |
| 验付调用 | 服务端 | 收到凭证后调用支付宝 alipay.aipay.agent.payment.verify 严格验付六项:凭证有效、金额一致、订单号一致、resource_id 一致、交易未被重复使用、订单状态有效;任一不过不交付 |
| 履约确认 | 服务端 | 交付资源后调用 alipay.aipay.agent.fulfillment.confirm 发送履约确认(ack);确认失败返回 502,用同一 Payment-Proof 重试即可推进到已履约 |
| 订单持久化与幂等 | 服务端 | 订单与交易号落库(SQLite,唯一约束 + 事务):同一订单重放直接返回已保存方案,不重复扣费、不重复交付;同一交易号不得为第二个订单履约 |
技能侧(本包)不持有任何密钥,验付调用、履约确认与订单持久化均在服务端完成;本 SKILL.md 约束 Agent 的编排顺序:先报价取得同意 → probe → pay → complete。
编排细节遵循本机安装的官方 alipay-payment-skill(A2M 支付能力)文档:pay 子命令组装 alipay-bot 402-buyer-pay,把账单文件与原始资源请求交给官方买家 CLI,等待用户扫码授权;complete 子命令以订单号查询原订单并取回资源,服务端验付通过后交付,并由服务端调用履约确认(对应官方买家侧命令 402-buyer-fulfillment-ack,成功路径不重复发送买家回执)。
九、上线必要条件(卖家侧)
本包负责买家侧编排,能否真正收到钱取决于卖家侧三道闸门同时成立:
| 闸门 | 内容 | 判定方式 |
|---|---|---|
| A 产品开通 | 生产环境已开通、签约已生效(不是「已提交」)、服务市场已注册服务并拿到真实 serviceId、开放平台应用已上线、应用公钥生效且支付宝公钥已导出 |
只能卖家本人在支付宝后台逐条确认 |
| B 代码开发 | 订单落库(非内存)、先落库再下发 402 账单、验付六校验、校验失败一律回到 402、幂等履约与待确认状态、fulfillment.confirm 成功后才标完成、只用 402 / verify / confirm 三个接口 |
cd service && npm run preflight |
| C 生产配置 | 网关、APPID、密钥、serviceId、私钥格式(非 Java 语言必须 PKCS#1)全部换成生产值,且配置里无沙箱残留 |
npm run preflight;npm run start:prod 会在带沙箱值时拒绝启动 |
完整清单、逐项「缺了会怎样」与最后一步真实小额付费验证步骤,见 references/go-live-conditions.md。
> 按量付费不用 notify_url 异步通知、不用统一收单下单接口:只有「402 账单 → 携带 Payment-Proof 重试 → 验付 → 履约确认(ack)」这一条链路。
> 三道闸门全过之后,先用真实小额付费跑一笔,再用同一张凭证重放确认 already_fulfilled=true,才算真正可以放量收款。