The problem is that even if you have the roomId on the client side you won't be able to grab the relative user object unless you're joined in that room (so you have the list of users in that room)
It's just that public message and private message does send the room id where message did originate, so I though that this was just accidentally left out because the room id does come through in xml.