Присоединяйтесь к комнате MUC, чтобы стать ее обитателями через API Ejabberd - PullRequest
0 голосов
/ 25 апреля 2018

Я работаю над отправкой сообщения в muc room через API http.Я заметил, что это возможно get_room_occupants пользователей, которые присоединились к Muc Room.

Теперь, из ejabberd muc room, я обнаружил, что члены команды есть, но не являются ее обитателями, поэтому показывает эту ошибку Only occupants are allowed to send messages to the conference, хотя и являются членами группы.

Есть ли API, который может подключить меня к muc и ​​показать мне в обитателях?

Ejabberd Версия: 17.11 Установлен в: ubuntu 16.04 Конфигурируемая БД: mysql

Ejaberd.yml

api_permissions:
  "console commands":
    from:
      - ejabberd_ctl
    who: all
    what: "*"
  "admin access":
    who: all
    what:
      - "*"
      - "!stop"
      - "!start"
  "public commands":
    who: all
    what:
      - "*"
commands_admin_access:
  - allow:
    - user: "xxx@yy.zz"
commands:
  add_commands:
    - status
    - registered_users
    - register
    - unregister
    - get_roster
    - connected_users
    - send_stanza_c2s
    - send_stanza
    - join_cluster
oauth_expire: 3600
oauth_access: all

1 Ответ

0 голосов
/ 26 апреля 2018

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

Например, с такой конфигурацией:

acl:
  admin:
    user:
      - "user1@localhost"
modules:
  mod_muc:
    access_admin:
      - allow: admin

Я могу выполнить этот запрос, указав существующую учетную запись и комнату, но эта учетная запись не занята в этой комнате:

$ ejabberdctl send_message groupchat user1@localhost room1@conference.localhost Sub Bodyyy

Жители этой комнаты получают сообщение:

<message to='user2@localhost/tka1'
    from='room1@conference.localhost'
    type='groupchat'
    id='1234779465623896577'>
  <body xml:lang='en'>Bodyyy</body>
  <subject xml:lang='en'>Sub</subject>
</message>

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

$ ejabberdctl subscribe_room user2@localhost/tka1 User2 room1@conference.localhost urn:xmpp:mucsub:nodes:messages
urn:xmpp:mucsub:nodes:messages

$ ejabberdctl send_message groupchat user2@localhost room1@conference.localhost Sub Bodyyy
...