软件功能授权与使用次数限制
“允许导出”与“每月允许导出 500 次”是两条不同的规则。RunFeature 只检查权限;RunMeteredFeature 在业务成功后确认次数。
设置每月 500 次导出
在策略的功能列表中添加 export,再增加一条功能额度:功能 export、额度 500、周期“每月”。默认用完就拒绝。允许额外使用时,填写最多额外次数;系统会记录超出量,供你的订单系统处理。
每天和每月额度按 UTC 零点重置;累计额度不重置。修改额度不会删除已经使用的次数。
导出成功后,才确认扣次
把自己的业务函数传给对应 SDK 方法。新任务使用新编号,同一任务重试使用原编号、功能和数量;不同进程不要同时执行同一编号。
| 语言 | 计次业务调用 |
|---|---|
| Go | client.RunMeteredFeature(ctx, "export", 1, jobID, exportReport) |
| Java | client.runMeteredFeature("export", 1, jobID, this::exportReport) |
| Node.js | await client.runMeteredFeature("export", 1, jobID, exportReport) |
| Python | client.run_metered_feature("export", 1, job_id, export_report) |
| C# | await client.RunMeteredFeature("export", 1, jobID, ExportReport) |
| C++ | client.RunMeteredFeature("export", 1, jobID, exportReport) |
| Rust | client.run_metered_feature("export", 1, &job_id, || export_report())? |
| Ruby | client.run_metered_feature("export", 1, job_id) { export_report } |
| C | ln_run_metered_feature(client, "export", 1, job_id, export_report, context) |
先在策略中为实际功能设置次数规则,再按 AI 接入流程生成提示词。AI 应使用对应语言的 RunMeteredFeature 和稳定任务编号接入真实业务,重试同一任务时保留原编号。
SDK 保存待确认任务。
业务成功而确认失败时,再次调用同一任务只重试确认,不重复执行业务。若程序在业务执行中途崩溃,SDK 会停止自动重做;核对自己的持久业务结果后,用 ResolveMeteredFeature 确认或取消。远程扣次和本地业务不构成同一个事务。
需要自己控制预留流程时
- 为这次导出生成并保存一个业务编号。
- Reserve 预留 1 次额度,返回 pending 后再导出。返回 committed 表示已完成过,不能再次执行。
- 导出成功并保存结果后,Commit 确认扣次。
- 导出失败且没有完成业务时,Cancel 取消预留,不扣次数。
预留默认有效 15 分钟,遇到 UTC 周期重置会提前结束。直接调用 API 可用 reservation_seconds 设置 30–3600 秒。
| 语言 | 预留 | 确认 / 取消 |
|---|---|---|
| Go | Reserve(ctx, "export", 1, jobID) | Commit / Cancel(ctx, hold.ID, jobID) |
| Java / Node.js | reserve("export", 1, jobID) | commit / cancel(id, jobID) |
| C | ln_reserve(client, "export", 1, jobID) | ln_commit / ln_cancel(client, id, jobID) |
| C++ / C# | Reserve("export", 1, jobID) | Commit / Cancel(id, jobID) |
| Python | reserve("export", 1, jobID) | commit / cancel(id, jobID) |
返回字段怎么读?
| 字段 | 含义 |
|---|---|
| reservation_id / operation_id | 预留编号与原业务编号,重试继续使用原值。 |
| status / expires_at | 预留状态和截止时间;pending 待完成,committed 已扣次,canceled 已取消,expired 已过期。 |
| consumption.used / reserved | 本周期已确认次数 / 所有有效任务正在预留的次数。 |
| consumption.limit / remaining | 基础额度 / 可用基础次数。remaining = max(0, limit - used - reserved),不包含允许超出的部分。 |
| consumption.quantity / overage | 本任务次数 / 已确认的基础额度超出量;不会替厂商向客户收款。 |
| consumption.period / reset_at | UTC 用量周期 / 下次重置时间;终身额度的 reset_at 为 null。 |
发送什么、返回什么和每个字段的类型,见授权验证接口中的预留、确认和取消。
确认超时后,只重试确认。
业务已成功时,不取消预留,也不重新导出。保存原编号和结果,继续调用 Commit;若预留已过期,保留任务供人工核对。远程扣次无法与你本地业务组成同一个事务。
Consume 仍可用于直接记账,但会立即扣次。需要避免业务失败仍扣次时,请用预留流程。所有计次接口都需要联网,不计入平台四类 API 调用额度。