功能请求:将 Digest Job 的“发送时间窗口”设为可配置

大家好,

我想请求添加一两个站点设置,用于配置摘要任务排队时的“时间窗口”和“摘要发送日期”。

提出此请求的原因是,对于大多数站点(包括我们的站点),用户主要集中在某个特定的地理区域;例如,我们的用户主要在美国,其他站点可能集中在韩国、巴西、德国、澳大利亚或全球任何地区。

如果摘要邮件能够在主要用户群体的正常工作日和工作时间内发送,效率会更高。许多站点使用 MailGun 或 SendGrid 等批量邮件服务来发送摘要邮件;因此,让摘要邮件在“周一上午 10 点左右”送达成员收件箱,远比在“周六凌晨 3 点”送达要好得多。

这些任务是排队的,因此如果提供一两个配置变量,例如“摘要排队时间窗口”和“摘要排队允许日期”,将使用于发送摘要邮件的投入更加高效。

我在 GitHub 的核心代码库中搜索过,但未能找到设置这些重要参数的方法。请问是我遗漏了吗?

感谢您的考虑!

2 个赞

Discourse 开箱即用,会在用户完成 7 天不活跃期后的同一小时发送摘要邮件,这意味着邮件发送时间会与用户在网站上的活跃时段保持一致。这非常棒,因为它能自动适应每位用户及其所在的时区。

一个非常常见的问题出现在数据导入场景中:管理员忘记为导入的用户禁用摘要邮件,或者忘记在导入数据中包含“最后活跃时间”字段,导致所有用户的摘要发送时间都被默认设置为午夜。

3 个赞

太棒了!

哈哈!你真是说到点子上了,完全戳中我们的痛点!我们导入的用户,其“最后活跃时间”被设置成了从旧版 vB 论坛迁移到 Discourse 时的导入时间。

在我们的案例中,我们使用的 Discourse 脚本根本没有处理这个字段;而我们也不可能“忘记”去做一件我们一开始根本不知道需要做的事,哈哈。

正如人们常说的,事后诸葛亮总是 20/20(看得很清楚)。

我认为,大多数首次从旧论坛迁移到 Discourse 的用户,不可能在“还不了解 Discourse 摘要邮件工作原理”之前就“忘记”做某件事吧 :slight_smile:

这倒不是什么大问题。但正如你所说:

因此,我请求的这个功能将有助于缓解已迁移论坛所面临的问题。这些“被遗忘的灵魂”在网络上大多“孤军奋战”,在将论坛迁移到 Discourse 时往往无人指导 :slight_smile:

既然我猜测这个“常见问题”不会被官方解决,能否请你提供一个指向仓库中相关代码的链接?我想编写一个插件,通过猴子补丁(monkey patch)来解决这个问题,以帮助我们这些“在还不知道需要做某事之前,就‘忘记’去做”的迁移者。

谢谢!

1 个赞

或者,也许不必了,与其打补丁,不如写一个 Ruby 脚本,直接将迁移用户的“最后活动时间”修改为正常工作时间(只需在午夜基础上加 10 小时即可搞定!)

问题已解决 :slight_smile:

1 个赞

感谢提供这些信息 @Falco

我刚刚更新了所有这些旧用户,将他们的 last_seen_at 日期/时间统一调整为东部标准时间上午 10 点。

根据我对你的回复的理解,这将把他们的摘要邮件队列安排在上午 10 点左右发送。

对吗?

更新:

嗯,似乎不起作用。在将 last_seen_at 日期时间设置为东部标准时间上午 10 点后,Sidekiq 现在却在东部标准时间午夜刚过就开始队列处理摘要邮件;管理员面板的邮件发送日志也显示摘要邮件正在此时发送。

这种将“最后活动时间”神奇地对齐到摘要发送时间的功能,在我这边似乎并没有按描述那样工作。

:confused:

好的。我正在调试,并在我们的生产网站上对 class EnqueueDigestEmails 类进行猴子补丁(monkey-patching)。

在记录日志并微调后,一旦有确凿的结果,我会回来汇报。

1 个赞