You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matrix客户端推送通知:如何确保sender_display_name同步至推送网关?

解决方案

针对你的问题,无需修改Synapse,可通过调整客户端的推送配置和逻辑来确保sender_display_name等字段被包含在推送请求中,具体调整如下:

1. 自定义推送规则模板

Matrix的推送规则允许你指定推送内容的格式模板,强制Synapse携带所需元数据:

  • 在客户端的推送规则(可通过PUT /_matrix/client/v3/pushrules/{scope}/{kind}/{ruleId}接口更新)中,为目标规则添加format字段,使用模板语法明确引用sender_display_name。例如:
    {
      "actions": [
        "notify",
        {
          "set_tweak": "content",
          "value": "{{sender_display_name}}: {{content.body}}"
        }
      ]
    }
    
  • 确保规则中包含{"set_tweak": "include_content", "value": true}的动作,允许Synapse传递事件相关的元数据到推送网关。

2. 优化设备推送注册参数

客户端在向homeserver注册推送设备时,可通过参数配置影响Synapse的推送行为:

  • 调用POST /_matrix/client/v3/pushers/set接口注册推送器时,在data字段中指定format参数为自定义格式(如org.matrix.custom),并附带模板内容,明确要求包含sender_display_name:
    {
      "pushkey": "你的FCM推送密钥",
      "kind": "http",
      "app_id": "你的客户端ID",
      "data": {
        "url": "https://你的Sygnal网关地址",
        "format": "org.matrix.custom",
        "template": "{{sender_display_name}}发送了消息: {{content.body}}"
      }
    }
    
  • 部分homeserver可能默认限制推送内容,通过显式指定模板,可触发Synapse填充所需字段。

3. 客户端本地补充字段(兼容跨homeserver场景)

对于不支持自定义模板的homeserver,客户端可通过本地逻辑补充缺失的字段:

  • 当收到仅包含event_id的推送时,客户端立即调用GET /_matrix/client/v3/rooms/{roomId}/event/{eventId}接口拉取完整事件数据,从中提取sender_display_name并更新通知内容。
  • 提前缓存用户通讯录中的显示名:客户端可定期同步用户的联系人列表,缓存user_id与sender_display_name的映射关系,收到推送时直接通过user_id匹配缓存数据,快速补充通知信息。

内容的提问来源于stack exchange,提问作者Jordan Myers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 12:25:17