yinxin630 / fiora

An interesting open source chat application. Developed with node.js, mongoDB, socket.io and react
https://fiora.suisuijiang.com
MIT License
6.57k stars 1.31k forks source link

脑洞:用fiora集成更多的消息来源 #185

Open iyjian opened 4 years ago

iyjian commented 4 years ago

我比较希望有一个能集成微信和其他消息的工具,一方面有些客户有这个需求,因为有些客户有很多微信号,他们拿很多个手机来管理微信不太方便,如果有一个统一的入口能让他们在微信上沟通那就方便很多。另一方面我自己也有这些需求,因为消息来源太多,微信 / telegram / 企业微信 / 邮件 / 各种通知等等,我希望有一个单一的入口来管理这些消息。

我一直在网上找可以承载这个需求的客户端,比如有商业的产品融云,通过githubtopic:chat-roomgithubaction:chat-application关键字也找到了一些开源的产品,我还没有看完,但是看过的一些项目要么太复杂,要么太简陋,后来也不知怎么的就找到了fiora这个项目,看到fiora感到很喜欢,因为它的界面很清晰很简洁大方,所以就有了用fiora作为集成客户端的想法。

(PS: 关于如何集成微信消息可以参看另一个开源项目wechaty)

我觉得集成更多的消息来源一定会让这个客户端变的更有趣也更有用,毕竟人都挺懒的,一会开个微信,一会又切换到qq、企业微信、邮箱,如果能在一个地方对这些消息进行管理一定很好玩。

如果单枪匹马做这个事情确实挺困难的,但是如果能有一套消息格式的类型定义,有一个消息收发的接口定义,那么由各自感兴趣的人去实现这些接口或许能变的容易推进点。

我只是先开个脑洞,想看看有没有人和我有同样的想法,另外我自己已经用了些比较简陋的方法把自己的微信和这个fiora对接上了,还真的挺有用,挺好玩,特别是fiora可以搜索图片,这让我可以在通过fiora给我的微信好友发小图片玩了,这在微信原生客户端里其实是蛮难做到的。

截屏2020-04-14下午3 06 19
huan commented 4 years ago

It's a great idea to integrate this fantastic project with WeChat!

Please feel free to let me know if you need any help.

P.S. I'm the author of Wechaty

lindamustang commented 4 years ago

很有意思的脑洞,希望可以完成。 P.S.我就是截图里面发???的

iyjian commented 4 years ago

我大致想了下,如果要集成更多的消息来源有,那么现有的fiora的账号概念就变味道了,因为现有的fiora账号和传统的微信和qq账号概念是一致的,但是由于想要集成更多的消息来源,比如简单一点,就集成两个微信的消息,那么消息格式里还得引入一个类似accountId的东西:

{
accountId: 'wxId1',
from: 'A',
to: 'B',
type: 'text | image | file | not supported message type',
content: 'C',
atUserList: [ '这里还没想清楚' ]
}

fiora的账号就变成大账号来总管这些账号了。然后如果增加了这个accountId后可能前端也得有对应的标志来展示这个accountId.

可能需要增加一个对外发第三方消息的接口,比如发邮件或者通过网页版微信的接口发微信消息等。现在的发送是sendMessage方法的一部分。

需要增加一个订阅消息的接口,现在的订阅和发送是合并在一起的。

yinxin630 commented 4 years ago

fiora 之前做过和另一个聊天室(nami)的联通, 这个需求可以复用该方案, 具体细节可以再讨论

方案是:

  1. 在两个聊天室分别创建一个账户, 给机器人登录用
  2. 机器人负责监听 A 系统来的消息, 转发给 B 系统. 过程中会处理两端系统消息结构差异
  3. fiora 的消息主要由 from type content 组成, 可以新增一种 type = 'third-party' 的消息类型, content 存放 JSON 消息, JSON 消息需要有个规范, 必须必须包含 name avatar type content 字段
  4. fiora 添加 type = 'third-party' 消息渲染支持, 使用 JSON 消息中的内容来替代原始消息内容渲染展示. 简单讲, 这条消息对于 fiora 来说仍是来自一个"正常用户"的消息, 但是渲染时使用附加内容渲染

联通机器人源码 https://github.com/yinxin630/nami-robot

fiora 处理机器人消息的例子 https://github.com/yinxin630/fiora/blob/master/utils/convertMessage.ts#L1-L14

iyjian commented 4 years ago

我看看哦

iyjian commented 4 years ago

那个聊天消息转化的方案大概看懂了,不过因为没具体看到是怎么的表现形式,我还有点难以想象,另一个聊天室的人的消息是如何展示在fiora聊天室前端的,如何区分他们呢。

我昨天又想到一种方式,我们可以规定一套fiora聊天室必备的接口,让其他人去实现,这样fiora服务端也不需要做太多改动,现有的fiora服务端是一个官方订阅源,另外一个服务端仅仅作为fiora的另外一个“订阅源”存在就可以。每个订阅源只要实现少量的必备的接口就可以让firoa跑起来。

yinxin630 commented 4 years ago

之前 nami 消息展示是和 fiora 正常消息一模一样的, 这里具体怎么展示可以定个规范

第二点十分同意, 制定一套三方消息服务接口规范

iyjian commented 4 years ago

ok 我正在捋 我先把现有的command <-> response 写一个文档出来。

dalaolala commented 4 years ago

如果只是管理消息,写一个api接口,通过这个接口把各种消息推送过去很简单,要是各种聊天工具做互动的功能,有些费劲!

Riceneeder commented 2 years ago

非常有意思的项目,我正在寻找能够支持三方消息服务接口的前端聊天框架,现在已经2022年了,请问能够对接第三方了吗