Giter Site home page Giter Site logo

Comments (23)

vietnguyen87 avatar vietnguyen87 commented on May 17, 2024

@prefiks, @badlop Please help.!

from ejabberd.

prefiks avatar prefiks commented on May 17, 2024

So in other words you created room with create_room_with_opts with subscribers and then when you sent message to a room using command (what exactly command?), that didn't get delivered to subscriber from create command, yes? I am just trying to see what i need to do to reproduce it.

from ejabberd.

vietnguyen87 avatar vietnguyen87 commented on May 17, 2024

yup, @prefiks i used two ways:

  1. I use admin api https://docs.ejabberd.im/developer/ejabberd-api/admin-api/#send-message
  2. I use XMPP send stanza
<message to='[email protected]' type='groupchat' id='e23ff0a35b4e9150' xml:lang='en'><body>testing </body></message>
image

from ejabberd.

prefiks avatar prefiks commented on May 17, 2024

It's working in my tests, you are aware that mucsub will not send regular groupchat message, but event with wrapped message like this:

<message to='prefiks@localhost' from='[email protected]' id='1713861977424826' xmlns='jabber:client'>
  <event xmlns='http://jabber.org/protocol/pubsub#event'>
    <items node='urn:xmpp:mucsub:nodes:messages'>
      <item id='1713861977424826'>
        <message to='prefiks@localhost' from='[email protected]/p2' type='groupchat' id='10483677060557293314' xmlns='jabber:client'><body>test</body>
        </message>
      </item>
    </items>
  </event>
</message>

from ejabberd.

vietnguyen87 avatar vietnguyen87 commented on May 17, 2024

hi @prefiks, i call Admin Api send-stanza https://docs.ejabberd.im/developer/ejabberd-api/admin-api/#send-stanza

<message to='7214252@localhost' from='[email protected]' id='1713865884466642' xmlns='jabber:client'><event xmlns='http://jabber.org/protocol/pubsub#event'><items node='urn:xmpp:mucsub:nodes:messages'><item id='1713865884466642'><message to='7214252@localhost' from='[email protected]/7238854' type='groupchat' id='1713865884466642' xmlns='jabber:client'><body>test</body></message></item></items></event></message>

but it did not work. I can't receive the message at SSE connection. Data has stored at db.

image

from ejabberd.

prefiks avatar prefiks commented on May 17, 2024

So that message that i showed in previous message was a result of calling

ejabberdctl send_message groupchat user@localhost [email protected] "" test

and that resulted in sending that event to subscribers in a room.

I think your ejabberd sends event like this too, but your SSE server doesn't recognize it. Are you able to see all traffic that your code receive?

from ejabberd.

vietnguyen87 avatar vietnguyen87 commented on May 17, 2024

hi @prefiks, i can see the traffic come ejabberd server. I think SSE server doesn't recognize it because it's not auto join when a new group created. When i reconnect SSE and join all group that user subscribe then message receive.

ejabberdctl send_message groupchat 7238854@localhost [email protected] "" TestBody
image

from ejabberd.

vietnguyen87 avatar vietnguyen87 commented on May 17, 2024

Hi @prefiks,

Even if I reuse the xmpp client id in the call flow through the Chat APIs Server to join the room i created.

image

I also did not receive the message when I sent it.

send_message groupchat 7238854@localhost [email protected] "" TestBody

From admin website no any users join the room
image

from ejabberd.

prefiks avatar prefiks commented on May 17, 2024

So about send_message not sending message to a room, user that you use in 'from' must be room subscriber or muc admin, only those two classes can send message without joining room first.

from ejabberd.

vietnguyen87 avatar vietnguyen87 commented on May 17, 2024

hi @prefiks, Are these users who subscribe to the room?

image

When i created the room. all users are become subscriber.

from ejabberd.

prefiks avatar prefiks commented on May 17, 2024

Yes that list of room subscribers.

from ejabberd.

vietnguyen87 avatar vietnguyen87 commented on May 17, 2024

yeah, and i using 7238854@localhost 7238854 is a room subscriber to sending message to the room. But all other subscribers don't receive messages.

If i'm not join the room, i'm not receive the history message. I don't know if I did something wrong? Please help.

from ejabberd.

prefiks avatar prefiks commented on May 17, 2024

I don't know, do you have anything logged by server when you call that?

from ejabberd.

vietnguyen87 avatar vietnguyen87 commented on May 17, 2024

yes, when i call send_message

send_message groupchat 7238854@localhost [email protected] "" "TestBody no join group"

and log by server
image

log from ejabberd
image

from ejabberd.

prefiks avatar prefiks commented on May 17, 2024

So it seems that part is working.

from ejabberd.

vietnguyen87 avatar vietnguyen87 commented on May 17, 2024

ok @prefiks, let's me check again. But. i can't receive history message if i don't join group. in case user disconnected, the SSE connection lost. Currently, when user reconnect SSE, i join all group user subscribe.

from ejabberd.

prefiks avatar prefiks commented on May 17, 2024

Messages with event are stored in both user archive and offline storage (so they will be redelivered when user comes online). So those are two ways you can get older mesages.

from ejabberd.

vietnguyen87 avatar vietnguyen87 commented on May 17, 2024

in case user login on the other devices. I will get the messages history from api?

from ejabberd.

vietnguyen87 avatar vietnguyen87 commented on May 17, 2024

Hi @prefiks, I received data from ejabberd with type xmpp.PubsubEvent, parsing xml and received the message.
image

{
  "Node": "urn:xmpp:mucsub:nodes:messages",
  "Items": [
    {
      "ID": "1713956108027223",
      "InnerXML": "PG1lc3NhZ2UgdG89JzcyMTQyNTJAbG9jYWxob3N0JyBmcm9tPSdyb29tMUBjb25mZXJlbmNlLmxvY2FsaG9zdC83MjM4ODU0JyB0eXBlPSdncm91cGNoYXQnIGlkPScxMjE4OTA1NjA4NjQ4ODIyMTgzMicgeG1sbnM9J2phYmJlcjpjbGllbnQnPjxhcmNoaXZlZCBieT0ncm9vbTFAY29uZmVyZW5jZS5sb2NhbGhvc3QnIGlkPScxNzEzOTU2MTA4MDI3MjIzJyB4bWxucz0ndXJuOnhtcHA6bWFtOnRtcCcvPjxzdGFuemEtaWQgYnk9J3Jvb20xQGNvbmZlcmVuY2UubG9jYWxob3N0JyBpZD0nMTcxMzk1NjEwODAyNzIyMycgeG1sbnM9J3Vybjp4bXBwOnNpZDowJy8+PGJvZHk+aGFoYWhhaGEgPzwvYm9keT48L21lc3NhZ2U+"
    }
  ]
}

InnerXML after parse

<message to='7214252@localhost' from='[email protected]/7238854' type='groupchat' id='12189056086488221832' xmlns='jabber:client'><archived by='[email protected]' id='1713956108027223' xmlns='urn:xmpp:mam:tmp'/><stanza-id by='[email protected]' id='1713956108027223' xmlns='urn:xmpp:sid:0'/><body>hahahaha ?</body></message>

So what is the difference between muc and mucsub?

  1. Mucsub, I can get the subscriber list to display, right?
  2. For both modules, do I have to call the api to get message history when the user logs in on another device?

Please help me understand them clearly.!

from ejabberd.

prefiks avatar prefiks commented on May 17, 2024

Regular muc: you must be online, and explicitly join room to receive messages, when you go offline, you automatically leave room and messages stop arrive.

Mucsub: after subscribing room you will get event for every message until you unsubscribe from room. Messages will also arrive when you are offline, so with mod_offline enabled, they will be delivered to you after you reconnect.

from ejabberd.

vietnguyen87 avatar vietnguyen87 commented on May 17, 2024

Yeah, I understand clearly.!
Thanks so much @prefiks. You save my day.! :D

from ejabberd.

vietnguyen87 avatar vietnguyen87 commented on May 17, 2024

Messages with event are stored in both user archive and offline storage (so they will be redelivered when user comes online). So those are two ways you can get older mesages.

Hi @prefiks, with MUCSUB when user online. If user don't join the room, will the message be automatically deliver? What is the best practice for returning history messages to users?

from ejabberd.

vietnguyen87 avatar vietnguyen87 commented on May 17, 2024

How to know if a subscriber is online in a room @prefiks ?

from ejabberd.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.