3

开源之夏 - IM 应用消息聚合

 1 year ago
source link: https://wechaty.js.org/2022/06/05/summer-code-im-aggregation/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

如今,社交应用的种类日渐丰富,每个人每天都会面对海量的信息,而注意力和时间是有限的,频繁地在各个社交平台上浏览、查阅、回复消息会消耗大量的精力。为了提升工作效率,减少无效信息的干扰,我们希望能够聚合不同 IM 应用(例如微信,企业微信和 WhatsApp)的消息,并在每天的固定时间点转发上一个周期内的所有消息到指定应用。

IM 消息聚合应用功能概览

通过 Wechaty 对接微信、企业微信、WhatsApp

  • 利用 Wechaty 的能力实现这三类社交 APP 基础类型消息的收发功能

以上三者应用间的消息实现互通

  • 通过消息的转发调度方案,使得企业微信和 WhatsApp 的消息可以汇总到微信上
  • 消息同步:同步其他应用的消息

支持分时间段选择接收消息的社交软件

  • 支持通过配置来选择任一社交软件来作为消息的汇总应用、选择接收消息的时间等。
  • 支持用 docker 快速部署项目
  • 支持更多的 IM 应用
  • 支持拓展第三方应用,接入机器人,天气查询之类的应用

消息转发调度

到达某个用户指定的时间点后,消息聚合应用自动从存储池中拉取历史消息并转发到汇总应用。

其转发调度的大致流程如下。

消息转发调度的流程

为了保障用户的隐私信息,原则上消息聚合应用应该默认在转发之后删除原本存储的消息。

为了增强该部分的可用性,可以对消息进行针对性的过滤和处理。

例如当应用接收到某些触发了设定好的规则的信息:

  1. @我的消息
  2. 正则表达式匹配成功的消息
  3. 指定群聊的消息
  4. 指定好友发送的消息
  5. 特定类别的消息(图片,链接,动画表情等)

那么就可以进行一些自定义的操作,例如:

  1. 发送指定的网络请求
  2. 转发消息给某个指定用户
  3. 给指定邮件地址发送邮件

在转发消息到汇总应用的时候,需要额外发送一条消息来告知用户接下来转发的消息是来自哪个社交应用,例如(以下内容发送自微信)。

为了让用户体验更加一致,也为了避免在启动 docker 服务之后繁琐的配置,用户应通过微信对话式的交互操作来配置消息聚合应用,我们期望可以实现如下功能的配置:

  1. 消息转发的时间(可以是一个序列,多个时间)
  2. 白名单机制(正则表达式,消息类型,@我等多条件组合)
  3. 黑名单机制
  4. 关键字触发后的操作
  5. 清空消息池
  6. 通过交互式命令暂停消息转发
  7. 通过交互式操作重新启动消息转发
交互式操作

除上述配置相关的内容以外,该交互式操作还应该支持:

  1. 查询应用状态,如应用是否正在运行,消息池内有多少条消息。
  2. 查询其他几个社交应用账号是否在线。

多IM应用接入

本应用应该设计一组完善的接口,方便开发者和使用者接入更多的 IM 应用,例如 Telegram,QQ 等。Wechaty 社区已经适配了很多 IM 应用,我们可以对这些应用进行一个简单的适配,例如开发一个 adapter 层来统一 puppet 和消息聚合应用之间数据通信。

消息聚合应用架构设计

第三方应用接入

为了增强项目的可玩性和拓展性,可以引入一个插件框架,应用在生命周期内向插件暴露几个 hook 函数,方便第三方开发者开发应用嵌入到消息聚合的流程中。

hook 大致可以分为这么几类:

  1. 向汇总应用转发消息
  2. 接收来自用户的指令

如下图所示,当消息聚合应用启动的时候,会触发所有注册了“启动成功” hook 的拓展的回调函数,在接收到 IM 消息的时候也会触发所有注册了“接收消息” hook 的拓展的回调函数, 其他几项都是差不多的逻辑。

生命周期事件

部分触发关键字的消息会被发送到第三方应用:

交互式命令事件

docker 镜像打包

我们计划使用 docker 集成项目所需要的运行环境,方便用户在自己的机器或者服务器上快速部署 IM 消息聚合项目。

docker 的相关文档:https://docs.docker.com/


我自去年使用过 Wechaty 之后就一直有关注 Wechaty 的动向,想着来年考研结束后可以做一波 Wechaty 的开源之夏项目。好巧不巧,今年也给我蹲到了,所以就很有幸能够参与进来。

本项目计划在六月底七月初正式开始施工,按照上文所写的工作量,差不多一个月就可以做出粗略的成品,八月左右开始进行完善和测试工作,并编写相关文档。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK