2.6 KiB
服务器通知
Homeserver 提供商通常希望以官方身份向用户发送消息,或者其资源限制会影响用户使用 homeserver 的能力。例如,homeserver 可能每月只允许一定数量的活跃用户,并且已经超出了该限制。为了向用户传达这一限制,homeserver 会使用服务器通知房间(Server Notices Room)。
房间的外观(名称、主题、头像等)作为实现细节留给实现方决定。建议 homeserver 对房间进行装饰,使其在用户看来像是一个官方房间。
事件
通知会作为正常的 m.room.message
事件发送到客户端,在服务器通知房间内的事件 msgtype
为 m.server_notice
。客户端必须忽略服务器通知房间外,msgtype
为 m.server_notice
的事件。
server_notice_type
的指定取值如下:
m.server_notice.usage_limit_reached
服务器已超出某项限制,需要服务器管理员进行干预。limit_type
描述已达成的限制类型。limit_type
的指定取值如下:
monthly_active_user
服务器在过去 30 天内的活跃用户数已超过最大值。服务器正在拒绝新的连接。“活跃”的定义作为实现细节留给实现方决定,但建议服务器将同步用户视为“活跃”。
{{% event event="m.room.message$m.server_notice" title="m.room.message
,msgtype: m.server_notice
" %}}
客户端行为
客户端可以通过房间的 m.server_notice
标签识别服务器通知房间。活跃通知通过服务器通知房间中的置顶事件表示。在该房间中被置顶的服务器通知事件,客户端应通过特殊的用户界面展示给用户,而不是通过普通的置顶事件界面。例如,客户端可以显示警告横幅或弹窗以引起用户注意。在服务器通知房间中被置顶但不是服务器通知事件的事件,应与房间中其他置顶事件一样展示。
客户端不得期望能够拒绝加入服务器通知房间的邀请。尝试拒绝该邀请必须导致返回 M_CANNOT_LEAVE_SERVER_NOTICE_ROOM
错误。服务器不应阻止用户在加入服务器通知房间后离开该房间,但如果服务器要阻止离开房间,则必须使用同样的错误码。
服务器行为
服务器应为每个用户管理正好 1 个服务器通知房间。服务器必须通过 m.server_notice
标签向客户端标识此房间。服务器应向目标用户发送邀请,而不是自动将其加入服务器通知房间。
服务器如何向客户端发送通知、以及使用哪个用户发送事件,均作为服务器的实现细节处理。