0

我们希望在具有相当独特和业务规则的 Web 应用程序的上下文中使用 ejabberd,因此我们需要让每条聊天消息(不是协议消息,而是用户发送给另一个人的消息)首先通过我们的 Web 应用程序,然后让 Web 应用程序代表用户将消息传递给 ejabberd(如果我们的业务规则允许发送消息)。

Web 应用程序也是提供联系人列表的应用程序(如果我对 ejabberd 的理解正确,称为名册)。我们需要成为并且仍然是唯一的事实来源,以简化维护。

对我们来说,ejabberd 的附加价值是向客户提供近乎实时的聊天消息,并启用诸如存在指示器等很酷的东西。Web 客户端将通过 websocket 保持与 ejabberd 的直接连接,但就聊天消息而言,此连接必须是只读的,而就存在消息而言,该连接必须是读写的。

音频和视频通话的情况类似。虽然这次每次看到的呼叫将直接由 ejabberd 管理,以利用内置的 STURN、TURN 等......并且不需要通过我们的 Web 应用程序,我们有自定义业务逻辑来管理谁能够呼叫谁,什么时候,多久等等......(换句话说,我们有自定义业务逻辑来授权或不授权调用,我们希望将所有业务逻辑集中在 Web 应用程序中)。

我的问题是,为了实现我们所追求的目标,我们需要研究什么合适的钩子?我在文档中花了一个小时左右,但我找不到我所追求的,所以希望有人能给我指点。在理想情况下,我们希望从我们的 Web 应用程序中公开 API 端点,以便 ejabberd 钩子可以命中。然而,第一个问题是:ejabberd 提供了哪些相关的钩子,这些钩子记录在哪里?

任何帮助将不胜感激,谢谢!

4

1 回答 1

1

当客户端向 ejabberd 发送数据包时,它会触发user_send_packet钩子,提供数据包和客户端会话进程的状态。几个模块使用该钩子,例如mod_service_log.

于 2021-07-31T19:13:29.563 回答