docs: 完善 Webhook 事件与 Transaction 字段文档 - #385
Conversation
- CN upgrade-guide.mdx: restore WaaS 2.0 API operation names to English (Create wallet, Create addresses in wallet, Transfer token, Speed up transaction, Drop transaction, Cancel transaction, Call smart contract, Sign message, List all transactions, Get transaction information) - transfer-routing.mdx EN+CN: add note clarifying force_internal / force_external are mutually exclusive, and add JSON code examples showing force-Cobo-Loop, force-on-chain, and default routing - status.mdx EN+CN: update FailedSignerTimeout remedy to specify retry operation by original transaction type (Transfer token / Call smart contract / Sign message) instead of always pointing to Transfer token Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
关联 api-spec PR:https://github.com/CoboGlobal/developer-site-waas2/pull/2313 |
运行过程记录(自动生成)本评论记录本次 doc 运行的内部过程,便于审查每个结论的来源。 1. 意图(确认后)来源:Phabricator T96128(https://pha.1cobo.com/T96128)。该任务汇总 2025-11 至 2026-06 的 140 条反馈;H1 有 126 条相关反馈,其中 custody 112 条。以下为 7 个文档问题:
证据:T96128 要求回答重试用尽后能否从 Developer Console 或 List all webhook events API 补数、是否支持 resend、如何用 List transactions 对账,以及 Mintlify 问题“webhook 数据的保留时间是多久”。疑似 webhook events 查询/运维文档缺少恢复路径、手动重发能力、Console/API 保留期与超期行为。需核对 webhook event persistence/TTL 配置、Console 与 List all webhook events API 的查询范围、resend handler/权限、清理任务,以及 List transactions 可用于对账的过滤与分页语义。 2. 探索发现(按仓库 × explorer)原始并行探索包含 8 份较长 findings。为避免超过 GitHub 评论长度限制,本节按规则将每个 explorer 的 findings 截断为 handoff_brief,并保留关键 code_evidence;完整结论已在“综合结论”和“编辑计划”中保留。 developer-site × explorer AHandoff brief:主工作应落在 developer-site,并强制同步 EN/CN。新增 Transaction Payload、MPC Payload、字段字典、订阅/入账和恢复 owner pages,并更新 关键证据: custody × explorer BHandoff brief:7 个任务均与 custody 相关。Transaction event family 与公开 关键证据: custody-2.0-website × explorer AHandoff brief:Portal 动态读取 event definitions,Endpoint 注册同时要求 关键证据: custody-2.0-website × explorer BHandoff brief:前端类型与组件进一步确认阶段性字段、Portal resend 和事件时间过滤。Transaction 前端模型区分 关键证据: developer-site-waas2 × explorer AHandoff brief:应采用 Developer Hub + API-spec 的双 PR 路由,并附带小型 Product Manual 恢复 UI 任务。OpenAPI 仅允许修改 source YAML 的 description/example,不能改 关键证据: developer-site-waas2 × explorer BHandoff brief:7 项均可定位到 developer-site prose gaps;如需改 API 示例,只能拆到 api-spec source YAML。Spec 确认 CallbackMessage 复用 Transaction、Retry event 适用于 关键证据: cobo-libs × explorer AHandoff brief:cobo-libs 仅提供组织级 opaque producer record 和 关键证据: cobo-libs × explorer BHandoff brief:cobo-libs 是独立 webhook service 的薄封装,实际 retry/backoff 和 event TTL 不在可访问仓库中,应标记为 code_evidence_missing。可确认 resend endpoint、事件查询过滤和 event logs。其内部整数 关键证据: 3. 综合结论result:七个问题共同指向一个文档契约缺口。现有页面虽然列出事件并链接生成 schema,但客户仍无法回答四个关键问题:事件何时触发、该阶段完整 Payload 是什么、哪个事件可驱动业务动作,以及投递失败后如何恢复。最终方向是建立共享 Transaction 字段参考、 confidence:0.91 open_questions:
汇总代码证据:
4. 编辑计划[
{"task_id":"webhook-event-index-en","action":"fix_docs","doc_file":"v2/guides/webhooks-callbacks/webhook-event-type.mdx","repo_alias":"primary","doc_edit_description":"Keep this page as the English webhook inventory. Link the Transaction and MPC TSS rows to the new owning payload pages, replace the generic generated-schema-only pointer with direct payload-reference links, and add only backend-verified missing base events such as wallets.updated, mpc_vaults.updated/deleted, and organizations.updated. Do not present environment-limited token-listing or KYA events as generally available without production confirmation.","code_evidence":["custody/custody/cobo/settings/91_webhook.py:4","custody/custody/cobo/settings/91_webhook.py:50","custody/custody/cobo/settings/91_webhook.py:54","custody/custody/cobo/settings/91_webhook.py:58","custody/custody/cobo/settings/91_webhook.py:62","custody/waas2/webhooks/managers/wallet_source_event.py:63","custody/waas2/webhooks/managers/vault_event.py:63","custody/waas2/webhooks/managers/vault_event.py:77","custody/waas2/webhooks/managers/org_event.py:21"],"code_evidence_missing":false},
{"task_id":"webhook-event-index-cn","action":"fix_docs","doc_file":"v2_cn/guides/webhooks-callbacks/webhook-event-type.mdx","repo_alias":"primary","doc_edit_description":"Mirror webhook-event-index-en in Chinese, preserving every event and field identifier in English and linking to the Chinese Transaction and MPC TSS payload pages.","code_evidence":["custody/custody/cobo/settings/91_webhook.py:4","custody/custody/cobo/settings/91_webhook.py:50","custody/custody/cobo/settings/91_webhook.py:54","custody/custody/cobo/settings/91_webhook.py:58","custody/custody/cobo/settings/91_webhook.py:62"],"code_evidence_missing":false},
{"task_id":"transaction-webhook-payload-en","action":"fix_docs","doc_file":"v2/guides/webhooks-callbacks/transaction-webhook-events.mdx","repo_alias":"primary","doc_edit_description":"Create the English owner page for wallets.transaction.created/updated/succeeded/failed. Document the common event envelope, exact trigger/status mapping, update and deduplication behavior, the complete Transaction payload including conditional fields, and reviewed full JSON examples that collectively cover all four lifecycle events plus deposit/withdrawal, EVM/UTXO/TRON, and native-token/token variants. Explain that created is not a success signal and failed includes Failed, Rejected, and Canceled; cross-link the shared Transaction fields and source/destination guides.","code_evidence":["custody/custody/cobo/settings/91_webhook.py:4","custody/waas2/webhooks/managers/wallet_event_by_source.py:25","custody/waas2/webhooks/managers/wallet_event_by_source.py:51","custody/waas2/webhooks/managers/wallet_event_by_source.py:116","custody/waas2/transactions/dev/bo/transaction_query/transaction.py:363","custody/waas2/transactions/mongo/manager/read/waas_transaction.py:178"],"code_evidence_missing":false},
{"task_id":"transaction-webhook-payload-cn","action":"fix_docs","doc_file":"v2_cn/guides/webhooks-callbacks/transaction-webhook-events.mdx","repo_alias":"primary","doc_edit_description":"Create the Chinese counterpart of transaction-webhook-payload-en with the same triggers, full field coverage, conditional-field guidance, and JSON example matrix. Keep event names, field names, enum values, and API operation names in English.","code_evidence":["custody/custody/cobo/settings/91_webhook.py:4","custody/waas2/webhooks/managers/wallet_event_by_source.py:25","custody/waas2/webhooks/managers/wallet_event_by_source.py:51","custody/waas2/webhooks/managers/wallet_event_by_source.py:116","custody/waas2/transactions/dev/bo/transaction_query/transaction.py:363","custody/waas2/transactions/mongo/manager/read/waas_transaction.py:178"],"code_evidence_missing":false},
{"task_id":"mpc-tss-webhook-payload-en","action":"fix_docs","doc_file":"v2/guides/webhooks-callbacks/mpc-tss-request-webhook-events.mdx","repo_alias":"primary","doc_edit_description":"Create the English owner page for wallets.mpc.tss_request.created/updated/succeeded/failed. State the supported portal key-generation/reshare scope, suppressed intermediate states, trigger branches, the complete TSSRequest payload and conditional source/target group fields, and a full JSON example for each event outcome. Link back to the inventory rather than duplicating unrelated event families.","code_evidence":["custody/custody/cobo/settings/91_webhook.py:4","custody/waas2/mpc/managers/dev/webhook_wallet_mpc.py:29","custody/waas2/mpc/managers/dev/webhook_wallet_mpc.py:35","custody/waas2/mpc/managers/dev/webhook_wallet_mpc.py:41","custody/waas2/mpc/managers/dev/webhook_wallet_mpc.py:130","custody/waas2/mpc/bo/dev/vault.py:235"],"code_evidence_missing":false},
{"task_id":"mpc-tss-webhook-payload-cn","action":"fix_docs","doc_file":"v2_cn/guides/webhooks-callbacks/mpc-tss-request-webhook-events.mdx","repo_alias":"primary","doc_edit_description":"Create the Chinese counterpart of mpc-tss-webhook-payload-en with identical scope, triggers, conditional fields, and examples. Keep TSS request types, statuses, event names, and field identifiers in English.","code_evidence":["custody/custody/cobo/settings/91_webhook.py:4","custody/waas2/mpc/managers/dev/webhook_wallet_mpc.py:29","custody/waas2/mpc/managers/dev/webhook_wallet_mpc.py:35","custody/waas2/mpc/managers/dev/webhook_wallet_mpc.py:41","custody/waas2/mpc/managers/dev/webhook_wallet_mpc.py:130","custody/waas2/mpc/bo/dev/vault.py:235"],"code_evidence_missing":false},
{"task_id":"callback-field-availability-en","action":"fix_docs","doc_file":"v2/guides/webhooks-callbacks/set-up-endpoint.mdx","repo_alias":"primary","doc_edit_description":"Add an English callback request-data section explaining that callback data uses the Transaction shape but represents an earlier phase. Provide a stage-by-stage availability table and paired early/final JSON examples for cobo_id, request_id, token_id, asset_id, result, fee, transaction_hash, block_info, raw_tx_info, and replacement. Distinguish explicit null from omission only where the serializer proves it, and link to the shared Transaction fields page.","code_evidence":["custody/waas2/developers/managers/callback_message.py:201","custody/waas2/transactions/dev/bo/transaction_query/transaction.py:363","custody/waas2/transactions/mongo/manager/read/waas_transaction.py:178"],"code_evidence_missing":false},
{"task_id":"callback-field-availability-cn","action":"fix_docs","doc_file":"v2_cn/guides/webhooks-callbacks/set-up-endpoint.mdx","repo_alias":"primary","doc_edit_description":"Mirror callback-field-availability-en in Chinese, including the same phase table, early/final examples, null-versus-omission distinctions, and link to the Chinese Transaction fields page. Keep all field identifiers in English.","code_evidence":["custody/waas2/developers/managers/callback_message.py:201","custody/waas2/transactions/dev/bo/transaction_query/transaction.py:363","custody/waas2/transactions/mongo/manager/read/waas_transaction.py:178"],"code_evidence_missing":false},
{"task_id":"transaction-field-dictionary-en","action":"fix_docs","doc_file":"v2/guides/transactions/transaction-fields.mdx","repo_alias":"primary","doc_edit_description":"Create a consolidated English Transaction field dictionary. Explain token_id versus asset_id and their generation sources; request_id absence when no withdrawal request exists; replacement.replaced_by_transaction_hash and RBF linkage; cobo_category including high-signal values such as AutoSweep; fee/raw_tx_info and other conditional fields; and deposit/withdrawal source and destination shapes with a link to the existing detailed guide. Add the requested ETH_USDT/USDT, TRON_USDT/USDT, TRON/TRON, ETH/ETH, and BTC/BTC matrix only after validating those exact live catalog values.","code_evidence":["custody/waas2/transactions/mongo/manager/write/fields/token.py:24","custody/waas2/transactions/dev/bo/transaction_query/transaction.py:319","custody/waas2/transactions/dev/bo/transaction_query/transaction.py:363","custody/waas2/transactions/mongo/manager/read/waas_transaction.py:178","custody/waas2/transactions/dev/bo/transaction_query/source.py:18","custody/waas2/transactions/dev/bo/transaction_query/destination.py:28","custody/waas2/transactions/mongo/enums/transaction_fields.py:45","custody/waas2/transactions/dev/manager/transaction_query.py:143"],"code_evidence_missing":false},
{"task_id":"transaction-field-dictionary-cn","action":"fix_docs","doc_file":"v2_cn/guides/transactions/transaction-fields.mdx","repo_alias":"primary","doc_edit_description":"Create the Chinese counterpart of transaction-field-dictionary-en, preserving field names, enum values, token IDs, asset IDs, and transaction type identifiers in English. Include the same conditional-field rules, cross-links, and only live-catalog-validated comparison rows.","code_evidence":["custody/waas2/transactions/mongo/manager/write/fields/token.py:24","custody/waas2/transactions/dev/bo/transaction_query/transaction.py:319","custody/waas2/transactions/dev/bo/transaction_query/transaction.py:363","custody/waas2/transactions/mongo/manager/read/waas_transaction.py:178","custody/waas2/transactions/dev/bo/transaction_query/source.py:18","custody/waas2/transactions/dev/bo/transaction_query/destination.py:28","custody/waas2/transactions/mongo/enums/transaction_fields.py:45","custody/waas2/transactions/dev/manager/transaction_query.py:143"],"code_evidence_missing":false},
{"task_id":"register-new-payload-pages","action":"fix_docs","doc_file":"docs.json","repo_alias":"primary","doc_edit_description":"Register transaction-webhook-events and mpc-tss-request-webhook-events in both existing Webhooks and callbacks language groups, and transaction-fields in both existing Transactions language groups. Keep English and Chinese ordering parallel.","code_evidence":["custody/custody/cobo/settings/91_webhook.py:4","custody/waas2/transactions/dev/bo/transaction_query/transaction.py:363","custody/waas2/mpc/bo/dev/vault.py:235"],"code_evidence_missing":false},
{"task_id":"spec-transaction-webhook-example","action":"fix_docs","doc_file":"v2/cobo_waas2_openapi_spec/components/schemas/webhooks/transaction_event_data.yaml","repo_alias":"api-spec","doc_edit_description":"Improve only description/example content for Transaction webhook event data: explain that the payload is the public Transaction view and add a complete representative serialized example. Do not alter composition, fields, types, required status, or nullability.","code_evidence":["custody/waas2/webhooks/managers/wallet_event_by_source.py:51","custody/waas2/transactions/dev/bo/transaction_query/transaction.py:363","custody/waas2/transactions/mongo/manager/read/waas_transaction.py:178"],"code_evidence_missing":false},
{"task_id":"spec-tss-event-example","action":"fix_docs","doc_file":"v2/cobo_waas2_openapi_spec/components/schemas/webhooks/tss_request_event_data.yaml","repo_alias":"api-spec","doc_edit_description":"Improve only description/example content for MPC TSS webhook event data with a complete serialized example and a pointer in the description to event-dependent status semantics. Do not change schema structure.","code_evidence":["custody/waas2/mpc/managers/dev/webhook_wallet_mpc.py:41","custody/waas2/mpc/managers/dev/webhook_wallet_mpc.py:130","custody/waas2/mpc/bo/dev/vault.py:235"],"code_evidence_missing":false},
{"task_id":"spec-tss-request-fields","action":"fix_docs","doc_file":"v2/cobo_waas2_openapi_spec/components/schemas/wallets/mpcs/tss_request.yaml","repo_alias":"api-spec","doc_edit_description":"Improve only field descriptions and examples for TSSRequest, especially when source and target key-share-holder group fields are populated across key generation and reshare. Preserve all field names, types, enums, and required declarations.","code_evidence":["custody/waas2/mpc/managers/dev/webhook_wallet_mpc.py:29","custody/waas2/mpc/managers/dev/webhook_wallet_mpc.py:130","custody/waas2/mpc/bo/dev/vault.py:235"],"code_evidence_missing":false},
{"task_id":"spec-callback-phase-examples","action":"fix_docs","doc_file":"v2/cobo_waas2_openapi_spec/components/schemas/developers/callback_message.yaml","repo_alias":"api-spec","doc_edit_description":"Improve only the CallbackMessage data description and examples to show that it carries the Transaction representation at the callback phase, including a complete early-phase example with verified unpopulated values. Do not change the Transaction reference or schema structure.","code_evidence":["custody/waas2/developers/managers/callback_message.py:201","custody/waas2/transactions/dev/bo/transaction_query/transaction.py:363","custody/waas2/transactions/mongo/manager/read/waas_transaction.py:178"],"code_evidence_missing":false},
{"task_id":"spec-transaction-field-descriptions","action":"fix_docs","doc_file":"v2/cobo_waas2_openapi_spec/components/schemas/transactions/transactions/transaction.yaml","repo_alias":"api-spec","doc_edit_description":"Improve only descriptions/examples for token_id, asset_id, request_id, result, fee, transaction_hash, block_info, raw_tx_info, replacement.replaced_by_transaction_hash, cobo_category, source, and destination. State verified population/absence conditions and distinctions; do not change names, types, required status, enum values, or nullable declarations.","code_evidence":["custody/waas2/transactions/mongo/manager/write/fields/token.py:24","custody/waas2/transactions/dev/bo/transaction_query/transaction.py:319","custody/waas2/transactions/dev/bo/transaction_query/transaction.py:363","custody/waas2/transactions/mongo/manager/read/waas_transaction.py:178","custody/waas2/transactions/dev/bo/transaction_query/source.py:18","custody/waas2/transactions/dev/bo/transaction_query/destination.py:28","custody/waas2/transactions/mongo/enums/transaction_fields.py:45","custody/waas2/transactions/dev/manager/transaction_query.py:143"],"code_evidence_missing":false},
{"task_id":"spec-nullable-required-structure","action":"skip","doc_file":"v2/cobo_waas2_openapi_spec/components/schemas/transactions/transactions/transaction.yaml","repo_alias":"api-spec","doc_edit_description":"Record any mismatch between the serialized callback/API payload and OpenAPI nullable or required declarations for engineering follow-up.","code_evidence":["custody/waas2/developers/managers/callback_message.py:201","custody/waas2/transactions/dev/bo/transaction_query/transaction.py:363","custody/waas2/transactions/mongo/manager/read/waas_transaction.py:178"],"code_evidence_missing":false,"skip_reason":"structural API change — requires dev team"}
]5. 评审轮次第 1 轮:未通过Reviewer 指出事件 inventory 尚缺 第 2 轮:未通过Reviewer 将剩余阻塞项收窄为两项机械修正:从 primary PR 移除受污染的 完成处理执行者完成上述两项修正,运行 Mintlify validation 通过,提交 6. 基线与同步
|
关联来源
意图
补齐 Webhook 事件类型、Transaction 与 MPC TSS Request Payload 参考,解决客户难以确认事件触发条件、完整 JSON 结构及阶段性字段可用性的问题。集中说明 Transaction 字段语义、充提币来源与目标结构、入账事件选择、重试隔离和失败后的恢复路径。英文与中文文档保持一致,并以已核实的事件注册、状态映射和序列化逻辑为依据。
变更摘要
docs.json:将新增的 Transaction Webhook、MPC TSS Request Webhook 和 Transaction 字段页面注册到中英文导航。v2/guides/transactions/transaction-fields.mdx:新增 Transaction 字段字典,说明token_id、asset_id、request_id、RBF、cobo_category及条件字段。v2/guides/webhooks-callbacks/mpc-tss-request-webhook-events.mdx:新增wallets.mpc.tss_request.*事件、触发条件、字段和完整示例。v2/guides/webhooks-callbacks/set-up-endpoint.mdx:补充 Callback 与后续 Transaction 阶段的字段可用性对照和配套 JSON 示例。v2/guides/webhooks-callbacks/transaction-webhook-events.mdx:新增wallets.transaction.*生命周期映射、Payload 结构和覆盖多链及充提币场景的示例。v2/guides/webhooks-callbacks/webhook-event-type.mdx:补充已注册的基础事件并链接新的 Payload 参考页。v2_cn/guides/transactions/transaction-fields.mdx:新增对应的中文 Transaction 字段字典。v2_cn/guides/webhooks-callbacks/mpc-tss-request-webhook-events.mdx:新增对应的中文 MPC TSS Request Webhook 参考页。v2_cn/guides/webhooks-callbacks/set-up-endpoint.mdx:同步中文 Callback 字段可用性说明和示例。v2_cn/guides/webhooks-callbacks/transaction-webhook-events.mdx:新增对应的中文 Transaction Webhook 参考页。v2_cn/guides/webhooks-callbacks/webhook-event-type.mdx:同步中文事件清单和新页面链接。dev_openapi.yaml;developer-site-waas2中的 api-spec 源 YAML 改动将在单独 PR 中提交。关联 PR
代码证据
custody/custody/cobo/settings/91_webhook.py:4:确认wallets.transaction.*和wallets.mpc.tss_request.*的基础注册事件清单。custody/custody/cobo/settings/91_webhook.py:50:确认mpc_vaults.updated已注册。custody/custody/cobo/settings/91_webhook.py:54:确认mpc_vaults.deleted已注册。custody/custody/cobo/settings/91_webhook.py:58:确认wallets.updated已注册。custody/custody/cobo/settings/91_webhook.py:62:确认organizations.updated已注册。custody/waas2/webhooks/managers/wallet_event_by_source.py:25:确认Success映射到wallets.transaction.succeeded,Failed、Rejected和Canceled映射到wallets.transaction.failed。custody/waas2/webhooks/managers/wallet_event_by_source.py:51:确认 Transaction Webhook Payload 使用公开 Transaction 视图。custody/waas2/webhooks/managers/wallet_event_by_source.py:116:确认 Transaction Webhook 的触发与去重逻辑。custody/waas2/transactions/dev/bo/transaction_query/transaction.py:319:确认replacement包含replaced_by_transaction_hash。custody/waas2/transactions/dev/bo/transaction_query/transaction.py:363:确认 Transaction 字段集合及其可选字段。custody/waas2/transactions/mongo/manager/read/waas_transaction.py:178:确认公开 Transaction Payload 的条件填充逻辑。custody/waas2/developers/managers/callback_message.py:201:确认 Callbackdata由 Transaction 序列化结果生成。custody/waas2/developers/managers/callback_message.py:511:确认二次 Callback 按 URL 独立投递、跳过已成功 Endpoint,并最多重试 30 次。custody/waas2/mpc/managers/dev/webhook_wallet_mpc.py:29:确认 MPC TSS Webhook 仅覆盖 Portal 密钥生成与 Reshare 请求。custody/waas2/mpc/managers/dev/webhook_wallet_mpc.py:35:确认WAIT_SEND_TO_BC与SENT中间状态不会发布事件。custody/waas2/mpc/managers/dev/webhook_wallet_mpc.py:41:确认 TSS Request 的created、updated、succeeded和failed事件分支。custody/waas2/mpc/managers/dev/webhook_wallet_mpc.py:130:确认 TSS Webhook Payload 的字段填充逻辑。custody/waas2/mpc/bo/dev/vault.py:235:确认共享TSSRequestBoPayload 字段。custody/waas2/transactions/mongo/manager/write/fields/token.py:24:确认token_id来源于asset_coin,asset_id来源于unique_asset_id。custody/waas2/transactions/dev/bo/transaction_query/source.py:18:确认公开 Transaction 的source变体。custody/waas2/transactions/dev/bo/transaction_query/destination.py:28:确认公开 Transaction 的destination变体。custody/waas2/transactions/mongo/enums/transaction_fields.py:45:确认cobo_category枚举包含AutoSweep。custody/waas2/transaction_query/handlers/withdraw_request.py:337:确认提币生命周期区分授权、合规和广播状态。custody/waas2/webhooks/views/dev/event_retry.py:19:确认 Webhook 事件支持权限校验后的手动重发。custody/waas2/webhooks/views/dev/events.py:26:确认 Webhook 事件列表按 Endpoint 查询并使用游标分页。custody/waas2/transactions/dev/bo/transaction_query/transaction.py:195:确认非唯一 Transaction 查询窗口最长为 90 天。custody-2.0-website/src/pages/Developers/Events/Detail/index.tsx:133:确认 Portal 对Failed或Retrying事件提供重发操作。developer-site-waas2/v2/cobo_waas2_openapi_spec/paths/webhooks/events.yaml:6:确认公开的 List all webhook events 契约声明 30 天查询窗口和 Endpoint 作用域。developer-site-waas2/v2/cobo_waas2_openapi_spec/paths/webhooks/retry_by_event_id.yaml:9:确认 Retry event 适用于Retrying或Failed事件并要求webhook.resend权限。developer-site-waas2/v2/cobo_waas2_openapi_spec/paths/transactions/transactions.yaml:7:确认 List all transactions 提供组织级过滤与游标分页,可用于对账。wallets.mpc.tss_request.failed示例沿用既有文档中的status: KeyGeneratingFailed;发布前需再次核实该值确为对应事件的终态失败值,而非中间状态。