☰
DooTask 移动端按时段免打扰(静音时段)配置与原理指南
2026/10/16 2:43:15 网站建设 项目流程
  • 后端
  • 前端
  • 协同办公
  • 即时通讯
  • 企业应用

【免费下载链接】dootask

DooTask是一款开源在线项目任务管理工具,提供各类文档协作工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM,文件管理等工具;同时消息功能使用非对称加密技术让你的沟通更安全。

项目地址:https://gitcode.com/gh_mirrors/do/dootask
点击查看免费下载

本篇技术指南围绕 DooTask 移动端 APP 的「按时段免打扰」(静音时段)功能展开,说明其在个人消息设置中的入口、操作步骤、跨天时段判定规则,以及它与「会话级免打扰」「系统级勿扰」之间的层级关系;同时结合仓库源码(WebSocketDialogMsgTask.php、DialogController.php 与数据库迁移)深入剖析免打扰背后silence标记的落库、推送过滤与角标计算逻辑。读完本文,你将能够独立完成「晚上 22:00 至次日 08:00 手机静音」这类需求,并能在收不到通知时快速定位是哪种静音机制在起作用。

功能定位:移动端通知的两种形态

在理解时段免打扰之前,需要先明确 DooTask 移动端通知的组成。依据 移动端通知概念文档,移动端收到新消息存在两种提醒形式,二者缺一不可:

形态触发场景实现
系统通知栏推送APP 处于后台 / 退出 / 锁屏友盟 UMENG 通道下发系统通知栏消息
APP 内浮层APP 前台运行且不在该会话屏幕顶部下拉横幅,展示头像 + 发送者昵称 + 消息摘要

APP 内浮层默认显示 6 秒后自动收起,可手动下拉关闭,同时调用原生setVibrate触发短振动,点击可直接进入对应会话。

时段免打扰的作用面即覆盖上述两种形态:在指定时间窗口内,APP 不再触发振动、不再弹出通知(包括系统通知栏推送与前台浮层)。而消息本身不受影响——它们仍会通过 WebSocket 正常到达,出现在消息列表与未读数中。

开启入口与操作步骤

入口路径为:

DooTask 移动端 APP:「个人中心 / 我的 → 设置 → 消息免打扰」(不同版本菜单名可能略有差异,关键词「免打扰」)

操作步骤:

  1. 打开「消息免打扰」总开关;
  2. 设置开始时间(如 22:00);
  3. 设置结束时间(如 08:00);
  4. 保存;
  5. 时段内 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 推送触发场景,友盟推送需要全部满足以下条件才触发:

  1. 管理员后台「APP 推送」总开关 =open;
  2. 友盟 iOS / Android 至少一端配置了 key / secret;
  3. 收件人在umeng_alias表存在 30 天内的有效别名;
  4. 消息发送者 ≠ 收件人本人;
  5. 该会话对收件人的silence标记 = 0(非免打扰);
  6. 消息本身未携带静默标志;
  7. 收件人未被禁用(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 收不到推送怎么办 的排查顺序:

  1. 服务端是否已配置友盟 AppKey / Master Secret(自部署版本默认未开启推送,见 移动端推送通知);
  2. 系统「通知」里 DooTask 是否允许通知;
  3. DooTask 内时段免打扰是否误开启;
  4. 目标会话是否被设置了会话级免打扰;
  5. PC 端在线时存在「60 秒心跳 → 10 秒延迟队列 → 已读则跳过」的推送延迟设计,属正常行为;
  6. umeng_alias是否因 30 天未启动而过期(重新打开 APP 登录会自动刷新);
  7. 国产 ROM 后台杀进程 / 电池优化限制(华为、小米、OPPO、vivo 需在系统中允许自启动与后台运行)。

恢复方式相应为:系统通知权限在系统设置中重新打开;时段免打扰在 APP 内修改时间段或关闭功能;会话免打扰进入会话关闭「消息免打扰」——均即时生效,无需重启 APP。

  • 后端
  • 前端
  • 协同办公
  • 即时通讯
  • 企业应用

【免费下载链接】dootask

DooTask是一款开源在线项目任务管理工具,提供各类文档协作工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM,文件管理等工具;同时消息功能使用非对称加密技术让你的沟通更安全。

项目地址:https://gitcode.com/gh_mirrors/do/dootask
点击查看免费下载

相关推荐

上一篇:LatentSync开源生态建设:如何构建完整的工具链
下一篇:PaddleOCR 文档视觉语言模型(DocVLM)模块实战:PP-DocBee 系列模型选型、命令行与 Python 推理全指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询