- 后端
- 前端
- 协同办公
- 即时通讯
- 企业应用
【免费下载链接】dootask
DooTask是一款开源在线项目任务管理工具,提供各类文档协作工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM,文件管理等工具;同时消息功能使用非对称加密技术让你的沟通更安全。
本篇技术指南围绕 DooTask 移动端 APP 的「按时段免打扰」(静音时段)功能展开,说明其在个人消息设置中的入口、操作步骤、跨天时段判定规则,以及它与「会话级免打扰」「系统级勿扰」之间的层级关系;同时结合仓库源码(WebSocketDialogMsgTask.php、DialogController.php 与数据库迁移)深入剖析免打扰背后
silence标记的落库、推送过滤与角标计算逻辑。读完本文,你将能够独立完成「晚上 22:00 至次日 08:00 手机静音」这类需求,并能在收不到通知时快速定位是哪种静音机制在起作用。
功能定位:移动端通知的两种形态
在理解时段免打扰之前,需要先明确 DooTask 移动端通知的组成。依据 移动端通知概念文档,移动端收到新消息存在两种提醒形式,二者缺一不可:
| 形态 | 触发场景 | 实现 |
|---|---|---|
| 系统通知栏推送 | APP 处于后台 / 退出 / 锁屏 | 友盟 UMENG 通道下发系统通知栏消息 |
| APP 内浮层 | APP 前台运行且不在该会话 | 屏幕顶部下拉横幅,展示头像 + 发送者昵称 + 消息摘要 |
APP 内浮层默认显示 6 秒后自动收起,可手动下拉关闭,同时调用原生setVibrate触发短振动,点击可直接进入对应会话。
时段免打扰的作用面即覆盖上述两种形态:在指定时间窗口内,APP 不再触发振动、不再弹出通知(包括系统通知栏推送与前台浮层)。而消息本身不受影响——它们仍会通过 WebSocket 正常到达,出现在消息列表与未读数中。
开启入口与操作步骤
入口路径为:
DooTask 移动端 APP:「个人中心 / 我的 → 设置 → 消息免打扰」(不同版本菜单名可能略有差异,关键词「免打扰」)
操作步骤:
- 打开「消息免打扰」总开关;
- 设置开始时间(如 22:00);
- 设置结束时间(如 08:00);
- 保存;
- 时段内 APP 不再触发振动、不弹通知;时段外自动恢复。
开关即时生效,无需重启 APP;若修改后仍未生效,可下拉刷新或退出登录后重新进入(见 移动端通知开关)。
跨天时段规则
系统对「开始时间 > 结束时间」的组合自动识别为跨天时段。例如22:00 → 08:00表示「晚上 10 点到次日早 8 点」,覆盖整段夜间睡眠时间;08:00 → 22:00则表示白天时段。判定以开始时间与结束时间的数值比较为准,无需额外勾选「次日」选项。
与「会话级免打扰」的静音体系关系
DooTask 中存在两种彼此独立、可以叠加的免打扰机制,务必区分清楚:
| 维度 | 会话级免打扰 | 按时段免打扰 |
|---|---|---|
| 作用范围 | 单个会话(单聊 / 普通群) | 所有会话 |
| 持续时间 | 永久持续,直到手动取消 | 仅在指定时间窗口内循环生效 |
| 实现层面 | 服务端记录silence标记 | 移动端 APP 本地时间判断 |
| 典型场景 | 静音某个吵闹的群 | 夜间 / 休息时段统一静默 |
- 会话级免打扰只对一个聊天生效,永久持续,具体说明见 单个会话免打扰;
- 按时段免打扰影响所有会话,但只作用于指定时间窗口;
- 两者叠加:在免打扰时段内 + 该会话本身已免打扰 = 双重静音。
会话级免打扰的源码落点
从源码结构看,会话级免打扰对应web_socket_dialog_users表的silence字段:
- 字段定义见迁移文件 2023_01_17_124320_add_web_socket_dialog_users_add_silence.php:
boolean('silence')->default(0)->nullable()->after('mark_unread')->comment('是否免打扰:0否,1是'); - 模型属性注释见 WebSocketDialogUser.php:
@property int|null $silence 是否免打扰:0否,1是; - 切换接口为
api/dialog/msg/silence,实现于 DialogController.php。接口接收dialog_id与type(set/cancel),开启时会把该会话所有未读消息批量标记为已读(避免一开免打扰还显示一堆未读);且对type=group && group_type!==user的系统群(项目群、任务群、部门群等)会直接返回「此会话不允许设置免打扰」。
推送过滤链路上的 silence 判定
新消息推送任务 WebSocketDialogMsgTask.php 是理解免打扰的关键代码:
- 任务通过
msgJoinGroup()取得会话成员对应的silences集合,对每个收件人计算$silence = $this->silence || $silences[$userid](L99-L106); - @提及例外:
$silence = $mention ? false : $silence;(L118)——被 @ 到会临时解除静音,仍触发提醒,这是独立通道; - 进入友盟推送名单的前提是
$item['userid'] != $msg->userid && !$item['silence'] && !$this->silence(L184),即发送者本人、被免打扰者、静默发送的消息都不会进入推送名单; - 实际下发由
PushUmengMsg任务携带title、body、badge与dialog_id、msg_id扩展字段完成(L213-L224)。
此外,消息级静默标记还会写入web_socket_dialog_msg_reads.silence(迁移见 2023_01_18_181320_add_web_socket_dialog_msg_reads_add_silence.php),供角标未读统计与未读邮件汇总时排除。
与 APP 推送触发条件的衔接
依据 APP 推送触发场景,友盟推送需要全部满足以下条件才触发:
- 管理员后台「APP 推送」总开关 =
open; - 友盟 iOS / Android 至少一端配置了 key / secret;
- 收件人在
umeng_alias表存在 30 天内的有效别名; - 消息发送者 ≠ 收件人本人;
- 该会话对收件人的
silence标记 = 0(非免打扰); - 消息本身未携带静默标志;
- 收件人未被禁用(
disable_at为 NULL)。
其中第 5 条即会话级免打扰的过滤位。而按时段免打扰属于移动端 APP 的本地时间窗口抑制:消息仍满足推送条件到达 APP,但 APP 在时段内不展示通知、不触发振动——这正是「消息正常到达消息列表」这一现象的实现依据。两者位于链路的不同环节,因此可以叠加。
与系统级勿扰的区别
| 机制 | 作用范围 | 影响其他 APP 吗 |
|---|---|---|
| iOS / Android 自带「专注模式」「勿扰」 | 拦截所有 APP 通知,包括 DooTask | 是 |
| DooTask 内时段免打扰 | 只屏蔽 DooTask 自己的通知 | 否 |
同时启用时取更严格者:系统勿扰 + 时段免打扰同时开启,DooTask 在系统层即被拦截,时段外的通知也一并被压制。因此若希望「只静默 DooTask 而不影响其他应用」,应使用 APP 内的时段免打扰;若希望临时完全静默,系统勿扰更直接(桌面端同理,见 桌面通知开关)。
免打扰期间仍可能感知到的事项
时段免打扰不等于「完全消失」,以下表现仍然存在:
- 角标数仍会更新:未读红点 / 桌面角标按真实新消息累加,不受时段免打扰抑制;
- 消息列表可见:进入 APP 仍能看到新消息与未读数,因为消息经 WebSocket 站内通道正常送达;
- 紧急联系人 / 系统提示例外与否:若被特殊标记,是否在免打扰时段内例外取决于 APP 版本,请以当前 APP 实际行为为准。
边界与不支持项
该功能目前存在明确的能力边界(以当前仓库文档标注版本 v1.7.90 为准):
- 不支持按星期分别配置时段(如「工作日 22:00-08:00,周末 23:00-09:00」);
- 只支持一段免打扰时段,不支持配置多个时段;
- 不支持按会话类型设置例外(如「免打扰时段内仍允许单聊推送」)。
如果需求超出以上边界,可改用组合方案:时段免打扰 + 对个别重要会话单独管理(会话级免打扰仅支持关闭,无法反向开例外),或直接依赖系统级勿扰规则。
收不到通知时的排查顺序
若开启免打扰后发现「连时段外也收不到」,可参考 移动端没有通知权限 与 APP 收不到推送怎么办 的排查顺序:
- 服务端是否已配置友盟 AppKey / Master Secret(自部署版本默认未开启推送,见 移动端推送通知);
- 系统「通知」里 DooTask 是否允许通知;
- DooTask 内时段免打扰是否误开启;
- 目标会话是否被设置了会话级免打扰;
- PC 端在线时存在「60 秒心跳 → 10 秒延迟队列 → 已读则跳过」的推送延迟设计,属正常行为;
umeng_alias是否因 30 天未启动而过期(重新打开 APP 登录会自动刷新);- 国产 ROM 后台杀进程 / 电池优化限制(华为、小米、OPPO、vivo 需在系统中允许自启动与后台运行)。
恢复方式相应为:系统通知权限在系统设置中重新打开;时段免打扰在 APP 内修改时间段或关闭功能;会话免打扰进入会话关闭「消息免打扰」——均即时生效,无需重启 APP。
- 后端
- 前端
- 协同办公
- 即时通讯
- 企业应用
【免费下载链接】dootask
DooTask是一款开源在线项目任务管理工具,提供各类文档协作工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM,文件管理等工具;同时消息功能使用非对称加密技术让你的沟通更安全。
相关推荐
号称能教任何学科?Universal Primer 递归教学提示词深度解析:原理与完整实现还原
号称能教任何学科?Universal Primer 递归教学提示词深度解析:原理与完整实现还原 "任何学科都能教"(Learn everything about
提示工程Spaceship Prompt 的 time 时间段:隐藏时间戳段的配置、格式化与源码原理
Spaceship Prompt 的 time 时间段:隐藏时间戳段的配置、格式化与源码原理 导读 本文聚焦 Spaceship Prompt 内置的 time
开发工具DooTask 通知太多怎么减少:从会话免打扰到系统级静音的完整治理指南
DooTask 通知太多怎么减少:从会话免打扰到系统级静音的完整治理指南 导读 :本文聚焦 DooTask 中"通知过多、消息刷屏"这一高频使用痛点,系统梳理从
后端前端协同办公即时通讯企业应用
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考