背景
ChannelRuntime 的生产入口已经收敛为 Lark -> NyxID -> Aevatar,即由 NyxID 接收 Lark/Feishu 等平台 webhook,再通过 /api/webhooks/nyxid-relay 转发给 Aevatar。
当前仓库里仍保留了旧直连接口:
POST /api/channels/{platform}/callback/{registrationId}
- 实现位置:
agents/channels/Aevatar.GAgents.Channel.NyxIdRelay/ChannelCallbackEndpoints.cs
- 当前行为:返回
410 Gone,提示 Direct platform callbacks are retired...
这个接口已经不是正式兼容面,继续保留会让外部调用方、测试和文档误以为 Aevatar 仍支持平台直连 webhook。
需求
彻底清理已退休的 ChannelRuntime 直连平台 callback 接口,只保留 NyxID relay ingress 作为支持入口。
支持入口应明确为:
POST /api/webhooks/nyxid-relay
不再暴露或文档化:
POST /api/channels/{platform}/callback/{registrationId}
建议清理步骤
-
从 ChannelCallbackEndpoints.MapChannelCallbackEndpoints 删除旧 direct callback 路由注册:
- 删除
group.MapPost("/{platform}/callback/{registrationId}", HandleCallbackAsync).AllowAnonymous();
- 删除
HandleCallbackAsync 方法。
-
删除相关诊断残留:
- 清理
direct_callback_retired 诊断写入。
- 检查
RecordDiagnostic 是否仍有必要保留对应分支。
-
更新测试:
- 删除或改写覆盖旧 410 行为的测试。
- 增加/保留测试确保 ChannelRuntime 注册、diagnostics、repair/rebuild 等仍正常映射。
- 如需要入口约束测试,改为验证
/api/webhooks/nyxid-relay 是唯一支持的 inbound webhook 面。
-
更新文档:
- 搜索并移除旧 direct callback 入口描述。
- 文档中统一说明生产路径为
Lark -> NyxID -> Aevatar /api/webhooks/nyxid-relay。
- 若历史 ADR 保留旧接口说明,标注为 retired historical context,避免当作当前实现。
-
检查工具/示例/README:
- 搜索
/api/channels/{platform}/callback、direct platform callback、direct_callback_retired、registrationId webhook 示例。
- 确保新增或保留示例都指向 NyxID relay provisioning 返回的 NyxID webhook URL,而不是 Aevatar direct callback。
验收标准
- 仓库中不再注册
POST /api/channels/{platform}/callback/{registrationId}。
- 生产支持入口只剩
/api/webhooks/nyxid-relay。
- 不再出现
direct_callback_retired 作为运行时诊断事件。
- 相关测试通过:
dotnet test test/Aevatar.GAgents.ChannelRuntime.Tests/Aevatar.GAgents.ChannelRuntime.Tests.csproj --nologo
bash tools/ci/test_stability_guards.sh(若修改测试)
- 文档和示例不再把 Aevatar direct platform callback 描述为可用入口。
注意事项
- 这次清理不需要修改 NyxID 仓库。NyxID 现有 surface 已经支持
/api/v1/webhooks/channel/lark/{bot_id} -> agent callback URL -> Aevatar /api/webhooks/nyxid-relay。
- 不要恢复 Lark/Feishu credentials 到 ChannelRuntime;Aevatar 仍只接收 NyxID relay normalized payload。
背景
ChannelRuntime 的生产入口已经收敛为
Lark -> NyxID -> Aevatar,即由 NyxID 接收 Lark/Feishu 等平台 webhook,再通过/api/webhooks/nyxid-relay转发给 Aevatar。当前仓库里仍保留了旧直连接口:
POST /api/channels/{platform}/callback/{registrationId}agents/channels/Aevatar.GAgents.Channel.NyxIdRelay/ChannelCallbackEndpoints.cs410 Gone,提示Direct platform callbacks are retired...这个接口已经不是正式兼容面,继续保留会让外部调用方、测试和文档误以为 Aevatar 仍支持平台直连 webhook。
需求
彻底清理已退休的 ChannelRuntime 直连平台 callback 接口,只保留 NyxID relay ingress 作为支持入口。
支持入口应明确为:
POST /api/webhooks/nyxid-relay不再暴露或文档化:
POST /api/channels/{platform}/callback/{registrationId}建议清理步骤
从
ChannelCallbackEndpoints.MapChannelCallbackEndpoints删除旧 direct callback 路由注册:group.MapPost("/{platform}/callback/{registrationId}", HandleCallbackAsync).AllowAnonymous();HandleCallbackAsync方法。删除相关诊断残留:
direct_callback_retired诊断写入。RecordDiagnostic是否仍有必要保留对应分支。更新测试:
/api/webhooks/nyxid-relay是唯一支持的 inbound webhook 面。更新文档:
Lark -> NyxID -> Aevatar /api/webhooks/nyxid-relay。检查工具/示例/README:
/api/channels/{platform}/callback、direct platform callback、direct_callback_retired、registrationIdwebhook 示例。验收标准
POST /api/channels/{platform}/callback/{registrationId}。/api/webhooks/nyxid-relay。direct_callback_retired作为运行时诊断事件。dotnet test test/Aevatar.GAgents.ChannelRuntime.Tests/Aevatar.GAgents.ChannelRuntime.Tests.csproj --nologobash tools/ci/test_stability_guards.sh(若修改测试)注意事项
/api/v1/webhooks/channel/lark/{bot_id}-> agent callback URL -> Aevatar/api/webhooks/nyxid-relay。