JitsiMeet 获取所有的房间列表

当部署 jitsi-meet 后,若与现有的系统进行集成,需要获取当前所有活动的房间列表来方便管理。此时需要通过 prosody 提供的 lua 插件来实现。

本文基于 docker 部署 jitsi-meet

阅读本文时请保证有 JitsiMeet docker 部署及设置 jw 授权 相关知识作为前提。

配置

使用 jitsi 提供的 muc_census,muc_size 两个插件来实现,具体配置步骤如下:

映射 prosody 端口

在 prosody 配置中,添加 ports 端口映射

1
2
3
4
# ...
prosody:
ports:
- 7280:5280

修改 .env 文件加载插件

1
2
3
4
5
# 添加如下配置
# prosody 额外加载的模块
XMPP_MODULES=muc_census,muc_size
# room_name 完整名称的前缀,在 muc_size 中要用到
XMPP_MUC_DOMAIN_PREFIX = muc

prosody 在 .env 中的所有配置可以通过 prosody\rootfs\defaults\conf.d\jitsi-meet.cfg.lua 来查看,里面以 $+大写字母的变量都是配置变量,可以根据代码推理每个配置的作用。

防火墙放行 7280/tcp 端口

1
2
# 开放 tcp
netsh advfirewall firewall add rule name=jitsi-prosody-tcp dir=in action=allow protocol=TCP localport=7280

nginx 反向代理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# nginx.conf 主文件
http {
include mime.types;

# http_servers/jitsi.conf
# jitsi 会议配置
server {
listen 443 ssl;
server_name your-prosody-domain;

#ssl_certificate F:/encrypt/keys/web/iepc/iepc.shenweitech.cn-chain.pem;
#ssl_certificate_key F:/encrypt/keys/web/iepc/iepc.shenweitech.cn-key.pem;

ssl_certificate F:/encrypt/keys/root/fullchain.pem;
ssl_certificate_key F:/encrypt/keys/root/privkey.pem;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

location / {
proxy_pass http://服务器ip:7280;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}

add_header Access-Control-Allow-Origin "*";
default_type 'text/html';
charset utf-8;
}
}

使用

获取当前所有房间

  • url:get

    http://服务器ip:5280/room-census

  • 结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    {
    "room_census": [
    {
    "room_name": "[email protected]",
    "participants": 2,
    "created_time": 1687876740000
    }
    ]
    }

获取房间的成员

  • url:get

    http://192.168.3.240:5280/room?room=test&domain=meet.jitsi

    其中 room 为需要查看的房间的名称,上述 room_name 中 @ 之前的部分

  • 结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [
    {
    "display_name": "test3",
    "jid": "[email protected]/8c5f7b20",
    "email": ""
    },
    {
    "display_name": "galens",
    "jid": "[email protected]/adc31d69",
    "email": ""
    }
    ]

如果设置了 jwt 认证,则需要传递一个 token 参数,token 中 payload 的 room 值必须包含查询的房间名或者为 *

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"context": {
"user": {
"avatar": "https:/gravatar.com/avatar/abc123",
"name": "John Doe",
"email": "[email protected]",
"id": "abcd:a1b2c3-d4e5f6-0abc1-23de-abcdef01fedcba"
},
"group": "a123-123-456-789"
},
"aud": "jitsi",
"iss": "my_client",
"sub": "meet.jit.si",
"room": "test,test-other,so-on", // 或者 *
"exp": 1500006923
}

参考

Get the list of rooms - Developers / Jitsi Meet API - Jitsi Community Forum - developers & users

jitsi-meet/resources/prosody-plugins/mod_muc_census.lua at master · jitsi/jitsi-meet · GitHub

jitsi-meet/resources/prosody-plugins/mod_muc_size.lua at master · jitsi/jitsi-meet · GitHub