docs-matrix-spec/locales/zh-Hans/client-server-api/modules/server_notices.md
2025-04-20 16:13:37 +08:00

2.6 KiB
Raw Blame History

服务器通知

Homeserver 提供商通常希望以官方身份向用户发送消息,或者其资源限制会影响用户使用 homeserver 的能力。例如homeserver 可能每月只允许一定数量的活跃用户并且已经超出了该限制。为了向用户传达这一限制homeserver 会使用服务器通知房间Server Notices Room

房间的外观(名称、主题、头像等)作为实现细节留给实现方决定。建议 homeserver 对房间进行装饰,使其在用户看来像是一个官方房间。

事件

通知会作为正常的 m.room.message 事件发送到客户端,在服务器通知房间内的事件 msgtypem.server_notice。客户端必须忽略服务器通知房间外,msgtypem.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.messagemsgtype: m.server_notice" %}}

客户端行为

客户端可以通过房间的 m.server_notice 标签识别服务器通知房间。活跃通知通过服务器通知房间中的置顶事件表示。在该房间中被置顶的服务器通知事件,客户端应通过特殊的用户界面展示给用户,而不是通过普通的置顶事件界面。例如,客户端可以显示警告横幅或弹窗以引起用户注意。在服务器通知房间中被置顶但不是服务器通知事件的事件,应与房间中其他置顶事件一样展示。

客户端不得期望能够拒绝加入服务器通知房间的邀请。尝试拒绝该邀请必须导致返回 M_CANNOT_LEAVE_SERVER_NOTICE_ROOM 错误。服务器不应阻止用户在加入服务器通知房间后离开该房间,但如果服务器要阻止离开房间,则必须使用同样的错误码。

服务器行为

服务器应为每个用户管理正好 1 个服务器通知房间。服务器必须通过 m.server_notice 标签向客户端标识此房间。服务器应向目标用户发送邀请,而不是自动将其加入服务器通知房间。

服务器如何向客户端发送通知、以及使用哪个用户发送事件,均作为服务器的实现细节处理。