Skip to content

Remove retired ChannelRuntime direct platform callback endpoint #671

@eanzhao

Description

@eanzhao

背景

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}

建议清理步骤

  1. ChannelCallbackEndpoints.MapChannelCallbackEndpoints 删除旧 direct callback 路由注册:

    • 删除 group.MapPost("/{platform}/callback/{registrationId}", HandleCallbackAsync).AllowAnonymous();
    • 删除 HandleCallbackAsync 方法。
  2. 删除相关诊断残留:

    • 清理 direct_callback_retired 诊断写入。
    • 检查 RecordDiagnostic 是否仍有必要保留对应分支。
  3. 更新测试:

    • 删除或改写覆盖旧 410 行为的测试。
    • 增加/保留测试确保 ChannelRuntime 注册、diagnostics、repair/rebuild 等仍正常映射。
    • 如需要入口约束测试,改为验证 /api/webhooks/nyxid-relay 是唯一支持的 inbound webhook 面。
  4. 更新文档:

    • 搜索并移除旧 direct callback 入口描述。
    • 文档中统一说明生产路径为 Lark -> NyxID -> Aevatar /api/webhooks/nyxid-relay
    • 若历史 ADR 保留旧接口说明,标注为 retired historical context,避免当作当前实现。
  5. 检查工具/示例/README:

    • 搜索 /api/channels/{platform}/callbackdirect platform callbackdirect_callback_retiredregistrationId 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。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions