Channel Type
查阅当前 1–12 Channel Type 值,并区分基础、专用和兼容类型。
channel_id + channel_type 共同标识一个 Channel。数值会进入协议、HTTP、存储与路由合同;集成者必须按数值传输,并把名称作为可读元数据保存。
目标与完成标准
选择 Channel Type 后,你应能说明该类型的成员模型、消息恢复、会话投影和业务权限来源。仅仅“枚举存在”不代表当前 SDK 或公开 API 已发布完整接入能力。
权威来源
下表与当前 pkg/protocol/frame/common.go 的 ChannelType* 常量 1–12 对齐,由测试检查名称和值。它属于当前源码快照,不是跨任意版本永远不变的承诺。
| 值 | 名称 | 范围 | 集成说明 |
|---|---|---|---|
1 | ChannelTypePerson | 基础接入 | 单聊;调用方使用对端 UID,服务端入口负责规范化双方 UID 的 Channel 身份。 |
2 | ChannelTypeGroup | 基础接入 | 群聊;业务服务必须先维护稳定 Channel ID、成员和发送策略。 |
3 | ChannelTypeCustomerService | 兼容 / 旧类型 | 旧客服频道类型;源码已标注过时,新访客流程使用 ChannelTypeVisitors。 |
4 | ChannelTypeCommunity | 专用类型 | 社区容器类型;只在所选 SDK 与业务流程明确支持时使用。 |
5 | ChannelTypeCommunityTopic | 专用类型 | 社区话题类型;不要把它与社区容器或普通群聊互换。 |
6 | ChannelTypeInfo | 专用类型 | 资讯频道,包含临时订阅者语义;接入前验证对应成员生命周期。 |
7 | ChannelTypeData | 专用类型 | 数据频道;枚举存在不等于当前平台已发布完整接入流程。 |
8 | ChannelTypeTemp | 专用类型 | 临时或请求级目标频道;不能当作持久业务群 ID。 |
9 | ChannelTypeLive | 专用类型 | 直播频道;当前语义不保存最近会话数据。 |
10 | ChannelTypeVisitors | 专用类型 | 访客频道;Channel ID 是访客 UID,可对应一个访客和多个客服订阅者。 |
11 | ChannelTypeAgent | 专用类型 | 单聊 Agent 频道;内部身份形如 UID@AgentID,业务服务仍负责 Agent 授权。 |
12 | ChannelTypeAgentGroup | 专用类型 | 群聊 Agent 频道;用于多 Agent 协同,不是普通群聊的透明别名。 |
集成者默认选择
- 一对一通信从
ChannelTypePerson=1开始,调用方使用对端 UID; - 普通群聊从
ChannelTypeGroup=2开始,业务服务先维护群 ID、成员和策略; - 只有产品需求和所选客户端明确覆盖时才使用社区、资讯、直播、访客或 Agent 类型;
- 新访客客服流程不要继续选择源码已标记过时的
ChannelTypeCustomerService=3; - 临时 Channel 不能作为稳定业务群 ID 持久化。
类型不能在上线后随意修改
同一个业务 Channel 改变 channel_type 会形成不同的路由与存储身份。迁移必须作为显式的数据与客户端兼容方案,而不是更新一个配置值。
单聊身份
调用方为 Alice 发送给 Bob 时使用 Bob 的 UID。服务端在入口边界把双方 UID 规范化为内部 person Channel 身份;响应或 Webhook 中可能看到该 canonical 值。业务好友关系仍以双方 UID 为主键,不能把内部值回写为“对端 UID”。
专用类型检查
使用专用类型前至少验证:
- 服务端当前路径是否包含所需的成员、权限、持久化和会话语义;
- 精确 SDK 版本是否能正确编码、解码并展示该类型;
- 离线同步、推送、回调和历史迁移是否有覆盖测试;
- 十万成员或高消息率场景是否使用有界成员变更与分页 fanout;
- 未识别该类型的旧客户端是否安全降级。
失败诊断
- ReasonNotSupportChannelType:先确认协议版本与调用值,不对其他类型盲重试。
- 单聊历史分裂:检查是否同时使用对端 UID 和 canonical person ID 作为输入。
- 群聊发送被拒绝:检查成员、黑白名单、封禁与解散状态,而不是改成 Person 绕过策略。
- 旧客户端无法展示:维持服务端数据不变,按 Payload/客户端兼容方案降级。
安全边界
Channel Type 不是授权。即使类型正确,业务服务仍负责创建关系、成员、角色、内容治理和租户隔离。
下一步
客户端身份使用 Device Flag;消息行为位见 Message Flags。