31 lines
No EOL
2.6 KiB
Markdown
31 lines
No EOL
2.6 KiB
Markdown
### 服务器通知
|
||
|
||
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` 标签识别服务器通知房间。活跃通知通过服务器通知房间中的[置顶事件](#mroompinned_events)表示。在该房间中被置顶的服务器通知事件,客户端应通过特殊的用户界面展示给用户,而不是通过普通的置顶事件界面。例如,客户端可以显示警告横幅或弹窗以引起用户注意。在服务器通知房间中被置顶但不是服务器通知事件的事件,应与房间中其他置顶事件一样展示。
|
||
|
||
客户端不得期望能够拒绝加入服务器通知房间的邀请。尝试拒绝该邀请必须导致返回 `M_CANNOT_LEAVE_SERVER_NOTICE_ROOM` 错误。服务器不应阻止用户在加入服务器通知房间后离开该房间,但如果服务器要阻止离开房间,则必须使用同样的错误码。
|
||
|
||
#### 服务器行为
|
||
|
||
服务器应为每个用户管理正好 1 个服务器通知房间。服务器必须通过 `m.server_notice` 标签向客户端标识此房间。服务器应向目标用户发送邀请,而不是自动将其加入服务器通知房间。
|
||
|
||
服务器如何向客户端发送通知、以及使用哪个用户发送事件,均作为服务器的实现细节处理。 |