ejabberd API 邀请加入 MUC 聊天室

8
我正在使用ejabberd API邀请用户进入MUC聊天室。我已经为API设置了OAuth。
我已经使用get_room_occupants测试了OAuth,一切工作正常。
现在,我正在尝试访问/api/send_direct_invitation,但是根据日志,我没有权限访问此API。
我已经使用命令行生成了OAuth: ejabberdctl oauth_issue_token admin@host 31540000 "ejabberd:admin"
我需要传递任何额外的权限吗?
Ejabberd版本:17.11 安装在:ubuntu 16.04 配置的数据库:mysql
这里是一个ejabberd.yml文件
api_permissions:
  "console commands":
    from:
      - ejabberd_ctl
    who: all
    what: "*"
  "admin access":
    who:
      - access:
          - allow:
            - user: admin@host
      - oauth:
        - scope: "ejabberd:admin"
        - access:
          - allow:
            - user: admin@host
    what:
      - "*"
      - "!stop"
      - "!start"
  "public commands":
    who:
      - ip: "127.0.0.1/8"
    what:
      - "status"
      - "connected_users_number"
commands_admin_access:
  - allow:
    - user: "admin@host"
commands:
  add_commands:
    - status
    - registered_users
    - register
    - unregister
    - get_roster
    - connected_users
    - send_stanza_c2s
    - send_stanza
    - join_cluster
    - send_direct_invitation
oauth_expire: 3600
oauth_access: all

我尝试通过命令行运行,却出现了以下错误:

命令:ejabberdctl send_direct_invitation naviteam1519 conference.xxx.yyy.com "" "You need this room!" KESH2FABDE@xxx.yyy.com

错误:

Problem 'error {bad_jid,<<"KESH2FABDE@xxx.yyy.com">>}' occurred executing the command.
Stacktrace: [{jid,decode,1,[{file,"src/jid.erl"},{line,138}]},
         {mod_muc_admin,'-get_users_to_invite/2-fun-1-',2,
                        [{file,"src/mod_muc_admin.erl"},{line,840}]},
         {lists,filtermap,2,[{file,"lists.erl"},{line,1317}]},
         {mod_muc_admin,send_direct_invitation,5,
                        [{file,"src/mod_muc_admin.erl"},{line,826}]},
         {ejabberd_ctl,call_command,4,
                       [{file,"src/ejabberd_ctl.erl"},{line,352}]},
         {ejabberd_ctl,try_call_command,4,
                       [{file,"src/ejabberd_ctl.erl"},{line,321}]},
         {ejabberd_ctl,process2,4,
                       [{file,"src/ejabberd_ctl.erl"},{line,271}]},
         {ejabberd_ctl,process,2,
                       [{file,"src/ejabberd_ctl.erl"},{line,249}]}]

需要答案来采取战略举措。尽快回复可能有助于推动我的项目向前发展。 - Arpit Vaishnav
1个回答

1
您没有展示给我们您的ejabberdctl send_direct_invitation命令和日志。
我猜测您的命令格式不正确:
send_direct_invitation api中,它应该长这样:
POST /api/send_direct_invitation
{
  "name": "room1",
  "service": "muc.example.com",
  "password": "",
  "reason": "Check this out!",
  "users": "user2@localhost:user3@example.com"
}

然后,一个例子看起来会像这样:

ejabberdctl send_direct_invitation aRoom conference.localhost "" "You need this room!" msg_test1@localhost

关于你的ejabbered.yml文件。你确定有一个admin@host用户吗?难道对你来说不应该是admin@localhost吗? 编辑 根据评论:OP缺少mod-client-state配置mod-client-state配置:
示例配置:
modules:
  ...
  mod_client_state:
    queue_chat_states: true
    queue_pep: false
    queue_presence: true
  ...

我收到了响应0,并在日志中看到了这条消息Won't add stanza for kesh2fabde@xxx.yyy.com/s123123 to CSI queu。正在清除来自CSI队列的naviteam1519@conference.xxx.yyy.com数据包。 - Arpit Vaishnav
@ArpitVaishnav,您缺少mod_client_state选项。 - tukan
在 API 响应中,0 代表什么? - Arpit Vaishnav
@ArpitVaishnav 你确实读了链接页面吗?那里有你所需要的信息。你已经获得成功,但 mod_client_state 实际上可以节省你的带宽和资源。 - tukan
从我这边来一块蛋糕吧。已经完成了。非常感谢。我需要将他加入团队作为所有者关联。 - Arpit Vaishnav
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接