【问题标题】:How to create chat room in ejabberd through rest api?如何通过rest api在ejabberd中创建聊天室?
【发布时间】:2016-11-27 01:57:04
【问题描述】:

我知道我可以使用命令在 ejabberd 中创建聊天室

ejabberdctl create_room room_name muc_service xmpp_domain

我可以使用命令向用户发送邀请

ejabberdctl send_direct_invitation room_name password reason jid1[:jid2]

谁能告诉我如何使用 ejabberd rest api 做同样的事情?

我正在使用 oauth 进行身份验证。

我已经在 ejabberd.yml 文件中完成了以下配置

port: 5280 module: ejabberd_http request_handlers: "/websocket": ejabberd_http_ws "/log": mod_log_http "/oauth": ejabberd_oauth "/api": mod_http_api web_admin: true http_bind: true register: true captcha: true commands_admin_access: configure commands: - add_commands: - user - status oauth_expire: 3600 oauth_access: all

并且还使用

在 ejabberd.yml 文件中启用了 mod_muc_admin

modules: mod_muc_admin: {}

【问题讨论】:

    标签: oauth ejabberd multiuserchat ejabberd-api


    【解决方案1】:

    做创建房间的api请求,

    做一个卷曲的帖子,

    curl -X POST -H "Cache-Control: no-cache" -d '{ "name": "aaaaa", "service": "bbbbb", "host": "ccccc" }' "http://localhost:5280/api/create_room"

    或者,如果您想一次性添加多个房间,请将所有房间名称添加到一个文件中,例如文件名为aaaaa

    像这样卷曲,

    curl -X POST -H "Cache-Control: no-cache" -d '{ "file": "aaaaa" }' "http://localhost:5280/api/create_rooms_file"

    【讨论】:

    • 使用 5280 端口是可以的,但同样的端口也可以在 webpanel 中访问,因此建议配置 mod_resful 使用端口 8088 进行 api。
    【解决方案2】:

    使用 mod_restful 模块通过 api 访问 ejabberd。如果要访问该模块,需要在 ejabberd.yml 中配置以下行。

    mod_restful:
    api:
      - path: ["admin"]
        module: mod_restful_admin
        params:
          key: "secret"
          allowed_commands: [register, unregister,status, add_rosteritem, create_room, send_direct_invitation, set_room_affiliation]
      - path: ["register"]
        module: mod_restful_register
        params:
          key: "secret"
    

    它们是在 allowed_commands 中声明的命令,只有那些命令可以通过 api 访问。因此,以后如果您想访问任何其他需要在此处添加的命令。

    完成添加后,重新启动 ejabberd,您可以使用 postman 或 curl 访问 api

    /* 
                Data that need to be sent for creating group.
    
                Url : example.com:8088/api/admin/
                Content-Type: application/json
    
                {"key": "secret","command": "create_room","args": ["group1","conference.example.com","example.com"]}
    
    
    */
    

    类似的尝试 send_direct_invitation 也...

    【讨论】:

    • 我应该在哪里写这些设置,即在模块下或 ejabberd.yml 文件中的其他地方。此外,这个“密钥”:“秘密”是什么意思,我应该按原样发送它,实际上我使用的是oauth,所以我该如何在这里使用它。
    • 您需要在模块部分下的 ejabberd.yml 中添加它,并且密钥用于身份验证目的,以便知道正确的人是否正在访问此端口。您可以通过更改 ejabberd.yml 中的值来更改 key 的值。
    • @ManiKandan 您在上述配置中使用了哪个 ejabberd 版本?
    • ejabberd 版本是 16.04.43
    猜你喜欢
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    相关资源
    最近更新 更多