通过Ejabberd API加入MUC房间成为MUC房间的居住者

时间:2018-04-25 07:28:42

标签: ejabberd ejabberd-api

我正致力于通过API http向muc房间发送消息。我发现有get_room_occupants用户加入了muc房间是可能的。

现在,从ejabberd muc房间我发现团队成员在那里,但不是团队成员,这就是为什么显示此错误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 :(得分:1)

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