使用自身Matrix账号发消息无法触发推送通知的解决方案咨询
问题解答
你的两个猜测完全正确:
- Matrix服务器默认不会对用户自身发送的消息触发推送通知,这是平台内置的防打扰设计;
- Element客户端同样会过滤掉当前登录账号发送的消息通知,避免用户被自己的操作打扰。
如果你不想使用机器人账号,可以通过以下两种方式规避这个问题:
方法1:修改用户的推送规则
Matrix允许用户自定义推送规则,你可以为用户添加一条高优先级规则,让特定条件的自发送消息触发推送。比如:
- 匹配消息内容中的特定标识(比如你的应用通知前缀
[APP通知]); - 匹配自定义的事件类型(比如
com.yourapp.notification)。
通过Cosium客户端可以调用Matrix的推送规则API完成修改,核心思路是添加一条优先级高于默认"忽略自身消息"的规则,强制触发推送。
方法2:发送消息时指定推送属性
在发送消息时,通过设置消息的push字段,明确要求Matrix服务器触发推送。你可以改用更底层的sendEvent方法,手动构造包含推送指令的消息内容,修改示例代码如下:
import java.util.HashMap; import java.util.Map; public class Example { public static void main(String[] args) { MatrixResources matrix = MatrixResources.factory() .builder() .https() .hostname("matrix.example.org") .defaultPort() .usernamePassword("jdoe", "secret") .build(); RoomResource room = matrix .rooms() .create( CreateRoomInput.builder() .name("Science") .roomAliasName("science") .topic("Anything about science") .build()); // 构造带推送指令的消息内容 Map<String, Object> messageContent = new HashMap<>(); messageContent.put("body", "[APP通知] Hello!"); messageContent.put("formatted_body", "<b>[APP通知] Hello!</b>"); messageContent.put("msgtype", "m.text"); // 添加强制推送的配置 Map<String, Object> pushConfig = new HashMap<>(); pushConfig.put("force", true); messageContent.put("m.push", pushConfig); room.sendEvent("m.room.message", messageContent); } }
注意:部分Matrix服务器或客户端可能对m.push字段的支持有差异,建议先在测试环境验证效果。
内容的提问来源于stack exchange,提问作者Pixelcode
相关产品推荐
相关产品推荐

