ejabberd MUC-SUB Уведомление о событии до принятия приглашения MUC

Я использую подход Ejabberd MucSub для реализации клиента мобильного группового чата. Пользователь создает комнату и отправляет приглашения MUC пользователям, которые должны быть членами этой группы. Клиенты настроены на автоматическое принятие приглашений MUC, а затем подписываются на узел pubsub комнаты для различных событий.

Однако проблема заключается в том, что пользователь, который не в сети, не получит опубликованное событие, пока он не подпишется на узел, и это не может произойти, пока пользователь не подключится к сети один раз, следовательно, отправка push-уведомлений таким пользователям для этих событий не представляется возможным.

Каким должен быть подход для достижения этой цели?


person sainiankit    schedule 09.11.2016    source источник


Ответы (1)


Отправка приглашения данному пользователю осуществляется в виде прямого сообщения пользователю. Он также хранится в автономном хранилище, поэтому пользователь получит его при повторном подключении.

Например:

  1. Пользователь A отправляет это приглашение MUC для [email protected] пользователю B, пользователь B находится в автономном режиме:

    <message to='[email protected]'>
      <x xmlns='http://jabber.org/protocol/muc#user'>
        <invite to='userB@localhost'/>
      </x>
    </message>
    
  2. Когда UserB подключится, он получит приглашение:

    <message from="[email protected]" type="normal" to="userB@localhost">
     <x xmlns="http://jabber.org/protocol/muc#user">
      <invite from="userA@localhost/laptop">
       <reason/>
      </invite>
     </x>
     <x xmlns="jabber:x:conference" jid="[email protected]"/>
     <body>userA@localhost/laptop invites you to the room [email protected]</body>
     <delay xmlns="urn:xmpp:delay" from="localhost" stamp="2016-11-09T08:10:58.063Z">Offline Storage</delay>
    </message>
    

Когда пользователь B получает автономное сообщение при подключении, он может подписаться на события MUC.

person Mickaël Rémond    schedule 09.11.2016
comment
Да @Mickaël Rémond, именно так я это и реализовал, единственная проблема, с которой я столкнулся, это то, что я хочу генерировать push-уведомления для сообщений, отправленных в комнату, до того, как пользователь примет приглашение и подпишется. Есть ли возможность, что мы можем достичь этого каким-то образом? - person sainiankit; 09.11.2016
comment
Ну, это пользовательский вариант использования, поэтому вы должны каким-то образом реализовать это самостоятельно. Большинство развертываний не хотят отправлять push-уведомления для всех сообщений в комнате чата до того, как пользователь примет приглашение. Похоже на push-спам. - person Mickaël Rémond; 09.11.2016