POST /api/v1/funnels 使用 operation。start 使用具备 sessions:create 与 funnels:run 的服务端 Key;运行操作使用该运行的 gg_fr_ 凭据。独立 native_receipt 恢复使用宿主后端 Key(billing:write 与 funnels:run)及当前 gg_ct_ 客户会话双鉴权,不依赖运行凭证。客户认证另传当前登录用户的 gg_ct_ 凭据。
| operation | 输入 |
|---|---|
| decide | funnelId, requestId, customerId, attributes; backend API key |
| read_decision | decisionId; backend API key |
| feature_config | funnelId; backend API key |
| report_used | eventId, decisionId, occurredAt, reference?; backend API key |
| renew_run | runId, customerId; backend API key |
| signal | runId, nodeId, eventName, eventId, data; backend API key; sessions:create + funnels:run |
| read_results | runId; backend API key; sessions:create + funnels:run |
| start | source: funnel/id | paywall/id | trigger/key; requestId; customerToken (customer or guest session); locale?, commerce?, parameters? |
| get | customerToken?, data? |
| resume | original requestId; customerToken? |
| answers | requestId, nodeId, revision, answers |
| advance | requestId, nodeId, revision, output, answers |
| execute | requestId, nodeId, revision, intent: begin | confirm | cancel | fail; productVersionId?; nativeEvidence? |
| link | requestId, nodeId, revision, customerToken |
| back / shown / close | requestId, nodeId, revision |
| acknowledge | requestId, nodeId, revision, receiptId |
| native_receipt | requestId, customerToken, orderId, receiptId, nativeEvidence: proof | null; backend API key |
操作与输入
decide
- 输入
- funnelId, requestId, customerId, attributes; backend API key
read_decision
- 输入
- decisionId; backend API key
feature_config
- 输入
- funnelId; backend API key
report_used
- 输入
- eventId, decisionId, occurredAt, reference?; backend API key
renew_run
- 输入
- runId, customerId; backend API key
signal
- 输入
- runId, nodeId, eventName, eventId, data; backend API key; sessions:create + funnels:run
read_results
- 输入
- runId; backend API key; sessions:create + funnels:run
start
- 输入
- source: funnel/id | paywall/id | trigger/key; requestId; customerToken (customer or guest session); locale?, commerce?, parameters?
get
- 输入
- customerToken?, data?
resume
- 输入
- original requestId; customerToken?
answers
- 输入
- requestId, nodeId, revision, answers
advance
- 输入
- requestId, nodeId, revision, output, answers
execute
- 输入
- requestId, nodeId, revision, intent: begin | confirm | cancel | fail; productVersionId?; nativeEvidence?
link
- 输入
- requestId, nodeId, revision, customerToken
back / shown / close
- 输入
- requestId, nodeId, revision
acknowledge
- 输入
- requestId, nodeId, revision, receiptId
native_receipt
- 输入
- requestId, customerToken, orderId, receiptId, nativeEvidence: proof | null; backend API key
交互响应包含 scope 与 run;启动另外返回 runToken。run 固定 Funnel 版本、当前节点、revision、私有客户数据和指令,分别返回 runExpiresAt 与 credentialExpiresAt。浏览器不能指定客户 ID、下一节点或支付成功。JSON 决策查询返回 decisionId 和已提交的 decision.value、state、validUntil;未完成返回 202。
- createFunnelRunController:get、submit、retry、resume、identify、link、subscribe、reset。超时保留 pendingCommand,retry 重放原 requestId。
- showFunnelRun:支持屏幕的弹窗、面板、全屏和嵌入展示;认证、支付和账户链接由宿主回调完成。
- 查看、刷新、过滤、分页及预览均不执行业务动作。优惠领取、收费、取消续费等只由对应节点及原动作回执执行。
- createFunnelDecisionClient:传入已验证 customerId 与完整 attributes JSON。value 是任意业务 JSON;同一 allocationScopeId 沿用首次结果,包括 null、0 和零优惠对象。state 表示活动、过期或停用。features().init/refresh 拉取规则后同步判断。reportUsed 只记录调用方使用报告。
- renewFunnelRun(options, { runId, customerId }):仅限后端,为同一已识别客户的运行轮换浏览器凭证,返回新的 runToken 与 credentialExpiresAt;不启动新运行,也不延长 runExpiresAt。
- JSON 决策查询需要 sessions:create 与 funnels:run。submit 以 Prefer: respond-async 接收后立即返回当前状态,pending 为 HTTP 202;decide 最多等待 30 秒。DECISION_ACCEPTANCE_UNKNOWN 表示首次接收结果未知,复用原 requestId 和完整输入重试;DECISION_PENDING 保留 decisionId,read 原决策继续读取,不取消后台执行。