Code Monkey home page Code Monkey logo

mattermost-plugin-calls's Introduction

Mattermost Calls

calls_screen

Calls enables voice calling and screen sharing functionality in Mattermost channels.

Installation

  1. Download the latest version from the release page.
  2. Upload the file through System Console > Plugins > Plugin Management, or manually upload it to the Mattermost server under plugin directory.
  3. Configure and enable the plugin.

Requirements

This plugin demands some network configuration changes to allow audio/video communication between clients, such as opening network ports. Please refer to the documentation for more details.

Documentation

End-user documentation
Calls self-hosted deployment
Configuration settings

Development

Note

Building the plugin requires the following:

  • Golang: version >= 1.21
  • NodeJS: version 20.11
  • NPM: version 10.x

Use make dist to build this plugin.

Use make deploy to deploy the plugin to your local server.

For more details on how to develop a plugin refer to the official documentation.

How to Release

To trigger a release, follow these steps:

  1. For Patch Release: Run the following command:

    make patch
    

    This will release a patch change.

  2. For Minor Release: Run the following command:

    make minor
    

    This will release a minor change.

  3. For Major Release: Run the following command:

    make major
    

    This will release a major change.

  4. For Patch Release Candidate (RC): Run the following command:

    make patch-rc
    

    This will release a patch release candidate.

  5. For Minor Release Candidate (RC): Run the following command:

    make minor-rc
    

    This will release a minor release candidate.

  6. For Major Release Candidate (RC): Run the following command:

    make major-rc
    

    This will release a major release candidate.

Load testing

Refer to the load-test client documentation for information on how to simulate and load-test calls.

Get involved

Please join the Developers: Calls channel to discuss any topic related to this project.

License

See LICENSE and LICENSE.enterprise for license rights and limitations.

mattermost-plugin-calls's People

Contributors

agmeteor avatar andriusbal avatar asaadmahmood avatar bastien-naturavelo avatar calebroseland avatar cpoile avatar creeper-0910 avatar crspeller avatar devinbinnie avatar fnogcps avatar jespino avatar jfcastroluis avatar jprusch avatar jwilander avatar kayazeren avatar kerray avatar leonambeez avatar lieut-data avatar m-zubairahmed avatar matthewbirtch avatar phoinixgrr avatar roadt avatar streamer45 avatar toninis avatar unified-ci-app[bot] avatar weblate avatar willyfrog avatar yananeer avatar yasserfaraazkhan avatar yoikeda avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mattermost-plugin-calls's Issues

Windows Server support

Hi team.
Thanks for great plugin.
I think it's good plugin for mattermost.
I installed mattermost server in windows server.
but I can not install this plugin because there is no relese file for windows.
can you build windows version.
Kind regards.

Failed to get public IP address

We are using Mattermost Professional 7.0.0 which ships with Calls 0.6.0. When I try to enable the plugin, following error is in console:

{"timestamp":"2022-06-15 09:25:23.784 +02:00","level":"info","msg":"plugin process exited","caller":"plugin/hclog_adapter.go:61","plugin_id":"com.mattermost.calls","wrapped_extras":"path/mattermost/plugins/com.mattermost.calls/server/dist/plugin-linux-amd64pid319"}
{"timestamp":"2022-06-15 09:25:23.784 +02:00","level":"error","msg":"Unable to activate plugin","caller":"app/plugin.go:139","plugin_id":"com.mattermost.calls","error":"failed to get public IP address: failed to get public address: read udp4 0.0.0.0:8443: i/o timeout"}

We are running mattermost in official Docker-compose container, but within internal network (the Mattermost server is available only within LAN).

Turn server config

Would be nice if we can insert shared cred and user-xx to make it use coturn.

Calls always drop after 15 seconds with error "Connection Failed"

Summary of issue

Mattermost calls will stay connected for only 15 seconds, at which point a
Connection failed There was an error with the connection to the call. Try to re-join the call. Check the troubleshooting section if the problem persists.
message will pop up and the call will disconnect. During that 15 seconds nothing can be heard. I see call state is missing from channel state error from the server logs, but not much else.

{"timestamp":"2022-12-02 12:46:35.695 -05:00","level":"error","msg":"callback failed: call state is missing from channel state","caller":"app/plugin_api.go:974","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleLeave websocket.go:381"}

How to encounter/reproduce issue

Our mattermost setup is a bit odd. We have a proxy node that accepts all traffic, and uses nginx to forward all mattermost traffic to the mattermost VM (running on rhel8). Everything other than calls works fine, I've also tried forwarding port 8443 with iptables to the VM, but with no luck.

We had it fully functioning for a short while (woke up one day and it was spontaneously working, cannot explain why), held 1+ hour calls no problem, however after a server restart was needed everything broke again and calls won't last more than 15 seconds. I've attached all relevant config files and logs (replaced our domain with {{domain}}), not sure if this is a configuration issue on my end, or a bug with using a subdomain. Any help would be appreciated!

proxynginx.txt
hostnginx.txt
mmconfig.txt
proxyiptables.txt

Build for arm64 arch - For Pi 4B

I'm running the Mattermost arm64 build with docker on Pi 4B successfully (ref: ). However, when I try to enable the Calls plugin from the Marketplace, it fails to start with the error:

This plugin failed to start. unable to start plugin: com.mattermost.calls: fork/exec plugins/com.mattermost.calls/server/dist/plugin-linux-arm64: no such file or directory

How can I build this plugin for the arm64, any details someone can provide to guide me?

No more ringing after upgrading to Mattermost 7.2

I recently upgraded Mattermost to v7.2, and we noticed that we don't hear anymore the ring (caller or receiver).

Otherwise, calls are properly working.

Anyone else is having this issue with the Mattermost 7.2 version?

Can't listen participants

I can successfully start or join to a call, but none of the participants listen to each other. I tried v0.6.0 and v0.6.1

developer tool log

com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: found default audio input device to use: Default - Grupo de microfones (Realtek Audio)
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: found default audio output device to use: Fones de ouvido / Alto falantes (Realtek Audio)
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 
        
[Deprecation] The ScriptProcessorNode is deprecated. Use AudioWorkletNode instead. (https://bit.ly/audio-worklet)
No @ com.mattermost.calls_1e7361aa1e5244af_bundle.js:2
initVAD @ com.mattermost.calls_1e7361aa1e5244af_bundle.js:2
init @ com.mattermost.calls_1e7361aa1e5244af_bundle.js:2
await in init (async)
o @ com.mattermost.calls_1e7361aa1e5244af_bundle.js:2
(anonymous) @ com.mattermost.calls_1e7361aa1e5244af_bundle.js:2
a @ call_button.tsx:56
s @ react-dom.production.min.js:14
c @ react-dom.production.min.js:14
(anonymous) @ react-dom.production.min.js:14
F @ react-dom.production.min.js:15
ot @ react-dom.production.min.js:52
at @ react-dom.production.min.js:51
rt @ react-dom.production.min.js:52
mt @ react-dom.production.min.js:56
x @ react-dom.production.min.js:287
G @ react-dom.production.min.js:19
Jt @ react-dom.production.min.js:70
Zt @ react-dom.production.min.js:69
t.unstable_runWithPriority @ scheduler.production.min.js:19
Wi @ react-dom.production.min.js:122
v @ react-dom.production.min.js:287
Vt @ react-dom.production.min.js:68
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: ws open, sending join msg
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: vad: noise avg 24 72.12962962962963
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: join ack received, initializing connection
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: local signal: {"type":"offer","sdp":"v=0\r\no=- 4295836606823703310 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS\r\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:Mt8B\r\na=ice-pwd:6n/lFECMJ4RPZhcAwrOfgkoZ\r\na=ice-options:trickle\r\na=fingerprint:sha-256 26:A7:88:6A:23:B9:DE:23:EB:8C:3A:D4:C9:0D:24:43:6B:AC:C0:15:37:E9:BD:6D:4D:2E:0E:24:F8:C6:9F:4C\r\na=setup:actpass\r\na=mid:0\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n"}
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:472740626 1 udp 2122260223 172.31.96.1 62004 typ host generation 0 ufrag Mt8B network-id 6","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:1219214247 1 udp 2122194687 192.168.0.1 62005 typ host generation 0 ufrag Mt8B network-id 7","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:2167460014 1 udp 2122131711 2804:14c:1c5:21f3:41e3:8ed9:8309:3e6c 62006 typ host generation 0 ufrag Mt8B network-id 2 network-cost 10","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:1824731810 1 udp 2122066175 2804:14c:1c5:21f3:e5ad:a8d5:2997:56f6 62007 typ host generation 0 ufrag Mt8B network-id 3 network-cost 10","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:774191610 1 udp 2122000639 2804:14c:1c5:22ed:41e3:8ed9:8309:3e6c 62008 typ host generation 0 ufrag Mt8B network-id 4 network-cost 10","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:3285638134 1 udp 2121935103 2804:14c:1c5:22ed:e5ad:a8d5:2997:56f6 62009 typ host generation 0 ufrag Mt8B network-id 5 network-cost 10","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:4285824471 1 udp 2121867007 192.168.0.12 62010 typ host generation 0 ufrag Mt8B network-id 1 network-cost 10","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:1387171810 1 tcp 1518280447 172.31.96.1 9 typ host tcptype active generation 0 ufrag Mt8B network-id 6","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:103302999 1 tcp 1518214911 192.168.0.1 9 typ host tcptype active generation 0 ufrag Mt8B network-id 7","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:3484626014 1 tcp 1518151935 2804:14c:1c5:21f3:41e3:8ed9:8309:3e6c 9 typ host tcptype active generation 0 ufrag Mt8B network-id 2 network-cost 10","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:574672466 1 tcp 1518086399 2804:14c:1c5:21f3:e5ad:a8d5:2997:56f6 9 typ host tcptype active generation 0 ufrag Mt8B network-id 3 network-cost 10","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:1621542154 1 tcp 1518020863 2804:14c:1c5:22ed:41e3:8ed9:8309:3e6c 9 typ host tcptype active generation 0 ufrag Mt8B network-id 4 network-cost 10","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:2371168006 1 tcp 1517955327 2804:14c:1c5:22ed:e5ad:a8d5:2997:56f6 9 typ host tcptype active generation 0 ufrag Mt8B network-id 5 network-cost 10","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:2985787687 1 tcp 1517887231 192.168.0.12 9 typ host tcptype active generation 0 ufrag Mt8B network-id 1 network-cost 10","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:157549571 1 udp 1685659391 189.33.64.91 30430 typ srflx raddr 192.168.0.12 rport 62010 generation 0 ufrag Mt8B network-id 1 network-cost 10","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 
        
PUT https://mattermost.dotz.com.br/api/v4/users/y4dienzt138rmm7674z1zkpppe/teams/threads/qtza399zrjyf5bwe4aidj5rrbo/following 404
(anonymous) @ com.mattermost.calls_1e7361aa1e5244af_bundle.js:2
(anonymous) @ com.mattermost.calls_1e7361aa1e5244af_bundle.js:2
(anonymous) @ com.mattermost.calls_1e7361aa1e5244af_bundle.js:2
(anonymous) @ com.mattermost.calls_1e7361aa1e5244af_bundle.js:2
(anonymous) @ index.js:8
i @ com.mattermost.calls_1e7361aa1e5244af_bundle.js:2
(anonymous) @ com.mattermost.calls_1e7361aa1e5244af_bundle.js:2
(anonymous) @ websocket_actions.jsx:572
Me @ websocket_actions.jsx:566
conn.e.conn.onmessage @ websocket_client.tsx:174

and mattermost.log

{"timestamp":"2022-06-28 02:27:14.227 -03:00","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:156","method":"POST","url":"/api/v4/channels/members/me/view","request_id":"wwroo5waptdaxq48i9t5ats4ia","status_code":"200"}
{"timestamp":"2022-06-28 02:27:14.229 -03:00","level":"debug","msg":"handleJoin","caller":"app/plugin_api.go:934","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleJoin websocket.go:334","userID":"y4dienzt138rmm7674z1zkpppe","connID":"ttqs6gauxibi7g5b1x9dk1bhea","channelID":"1rka8n71jidztyb7g5rbw615hr"}
{"timestamp":"2022-06-28 02:27:15.896 -03:00","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:156","method":"POST","url":"/api/v4/users/status/ids","request_id":"5qzjzrp83frfd8pz1y57fmgzje","status_code":"200"}
{"timestamp":"2022-06-28 02:27:16.786 -03:00","level":"debug","msg":"Worker received a new candidate job.","caller":"jobs/base_workers.go:50","worker":"ExpiryNotify"}
{"timestamp":"2022-06-28 02:27:17.347 -03:00","level":"info","msg":"SimpleWorker: Job is complete","caller":"jobs/base_workers.go:88","worker":"ExpiryNotify","job_id":"nzp4ycfx4ffub8bgtndmdnyj3r"}
{"timestamp":"2022-06-28 02:27:18.171 -03:00","level":"debug","msg":"got handlerID","caller":"app/plugin_api.go:934","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleJoin websocket.go:403","handlerID":""}
{"timestamp":"2022-06-28 02:27:18.172 -03:00","level":"error","msg":"session not found","caller":"app/plugin_api.go:940","plugin_id":"com.mattermost.calls","origin":"main.(*logger).Error log.go:92","sessionID":"ttqs6gauxibi7g5b1x9dk1bhea","groupID":"","msgType":"2"}
{"timestamp":"2022-06-28 02:27:18.172 -03:00","level":"debug","msg":"candidate!","caller":"app/plugin_api.go:934","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleClientMsg websocket.go:136"}
{"timestamp":"2022-06-28 02:27:18.172 -03:00","level":"debug","msg":"initializing RTC session","caller":"app/plugin_api.go:934","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleJoin.func2 websocket.go:435","userID":"y4dienzt138rmm7674z1zkpppe","connID":"ttqs6gauxibi7g5b1x9dk1bhea","channelID":"1rka8n71jidztyb7g5rbw615hr"}
{"timestamp":"2022-06-28 02:27:18.173 -03:00","level":"error","msg":"session not found","caller":"app/plugin_api.go:940","plugin_id":"com.mattermost.calls","origin":"main.(*logger).Error log.go:92","sessionID":"ttqs6gauxibi7g5b1x9dk1bhea","groupID":"","msgType":"1"}
{"timestamp":"2022-06-28 02:27:18.173 -03:00","level":"debug","msg":"candidate!","caller":"app/plugin_api.go:934","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleClientMsg websocket.go:136"}
{"timestamp":"2022-06-28 02:27:18.173 -03:00","level":"debug","msg":"candidate!","caller":"app/plugin_api.go:934","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleClientMsg websocket.go:136"}
{"timestamp":"2022-06-28 02:27:18.173 -03:00","level":"debug","msg":"candidate!","caller":"app/plugin_api.go:934","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleClientMsg websocket.go:136"}
{"timestamp":"2022-06-28 02:27:18.174 -03:00","level":"debug","msg":"candidate!","caller":"app/plugin_api.go:934","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleClientMsg websocket.go:136"}
{"timestamp":"2022-06-28 02:27:18.174 -03:00","level":"debug","msg":"candidate!","caller":"app/plugin_api.go:934","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleClientMsg websocket.go:136"}
{"timestamp":"2022-06-28 02:27:18.174 -03:00","level":"debug","msg":"candidate!","caller":"app/plugin_api.go:934","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleClientMsg websocket.go:136"}
{"timestamp":"2022-06-28 02:27:18.175 -03:00","level":"debug","msg":"candidate!","caller":"app/plugin_api.go:934","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleClientMsg websocket.go:136"}
{"timestamp":"2022-06-28 02:27:18.175 -03:00","level":"debug","msg":"candidate!","caller":"app/plugin_api.go:934","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleClientMsg websocket.go:136"}
{"timestamp":"2022-06-28 02:27:18.175 -03:00","level":"debug","msg":"candidate!","caller":"app/plugin_api.go:934","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleClientMsg websocket.go:136"}
{"timestamp":"2022-06-28 02:27:18.175 -03:00","level":"debug","msg":"candidate!","caller":"app/plugin_api.go:934","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleClientMsg websocket.go:136"}
{"timestamp":"2022-06-28 02:27:18.176 -03:00","level":"debug","msg":"candidate!","caller":"app/plugin_api.go:934","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleClientMsg websocket.go:136"}
{"timestamp":"2022-06-28 02:27:18.230 -03:00","level":"debug","msg":"candidate!","caller":"app/plugin_api.go:934","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleClientMsg websocket.go:136"}
{"timestamp":"2022-06-28 02:27:18.230 -03:00","level":"debug","msg":"candidate!","caller":"app/plugin_api.go:934","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleClientMsg websocket.go:136"}
{"timestamp":"2022-06-28 02:27:18.249 -03:00","level":"debug","msg":"candidate!","caller":"app/plugin_api.go:934","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).handleClientMsg websocket.go:136"}
{"timestamp":"2022-06-28 02:27:18.355 -03:00","level":"debug","msg":"not found handler triggered","caller":"web/web.go:63","path":"/api/v4/users/y4dienzt138rmm7674z1zkpppe/teams/threads/gztgk4c7xtbd8q88fh3r7r533a/following","code":404,"ip":"34.123.33.209"}
{"timestamp":"2022-06-28 02:27:28.174 -03:00","level":"error","msg":"timed out signaling","caller":"app/plugin_api.go:940","plugin_id":"com.mattermost.calls","origin":"main.(*logger).Error log.go:92","sessionCfg":"{default 1rka8n71jidztyb7g5rbw615hr y4dienzt138rmm7674z1zkpppe ttqs6gauxibi7g5b1x9dk1bhea}"}
{"timestamp":"2022-06-28 02:27:30.392 -03:00","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:156","method":"POST","url":"/api/v4/channels/members/me/view","request_id":"ow4z8d6fpj8wudskijrjmrbhfa","status_code":"200"}

Calls broken in v0.5.0 on macOS

Hey, I've just updated my MM server to 6.6, and it turned out that now both in safari and mattermost desktop on macOS there is no sound. I can't hear anyone, and no one can hear me

Multiple 'join call' clicks needed

A user has to repeat 'join call' multiple times before the call is finally joined. I think it is the case when the configured TURN server is required for communication

Not working plugin

Hello.
We find the following problem:
The MatterMost website is accessible from the wild web, but calls are made only when the VPN is enabled (within the same network as the mattermost server).
All DNS records lead to an external MM address, an external google server is used as an ICE server.
If you turn off the VPN - there will be no sound.

Most likely the problem is in open / closed ports, could you tell me which port should be opened from the MM side for the calls plugin to work correctly?

This plugin failed to start

This plugin failed to start. unable to start plugin: com.mattermost.calls: fork/exec plugins/com.mattermost.calls/server/dist/plugin-darwin-amd64: no such file or directory
for some reason, i trying to deploy this plugin in my mac, but i got message above.is that plugin available on mac?or it's something was lost when i installation.

Access to route for non-existent plugin

I'm getting tons of these errors on my 6.4.2 mattermost, how do I make it stop?

{
    "timestamp": "2022-04-15 16:56:39.235 Z",
    "level": "error",
    "msg": "Access to route for non-existent plugin",
    "caller": "app/plugin_requests.go:37",
    "missing_plugin_id": "com.mattermost.calls",
    "url": "/plugins/com.mattermost.calls/channels",
    "error": "plugin not found: com.mattermost.calls"
}

Install Documentation Missing : RTC Port Open - Fixes Calls disconnection after 15 Seconds

Hello,

The links in the ReadMe dont take to appropriate Install Guide.

Importantly it doesn't say about RTC Port Opening which is Necessary for making calls.

The Following can be added to ReadMe:

RTC port has to be opened for Calls, else the call will drop automatically after a hard limit of 15 Seconds. By default it is 8443 and can be configured in the settings page. If everything works you will see "rtc connected" in Browser Console.

If using Docker-Compose add following under ports

    ports:
      - 8443:8443/udp
      - 8443:8443/tcp

May fix #257

Add a popup notification when someone calls you

Currently, in the new calls (beta) in v7.0, when someone calls you, you get the same notification as you would get with a normal chat message. This does not really grab the attention of the receiver, who might think it's just a chat message notification or just miss it entirely due to the brevity of the notification, leaving the caller waiting indefinitely in an empty call.

Could an option be added to enable e.g. a popup window or a continuously ringing sound when someone calls you? This would greatly improve the usability of the call functionality. Currently, I am often still resorting back to MS Teams or skype in order to reach a colleague since they missed the call notification in mattermost.

Full-screen in calls causes issues

I confirm (by marking "x" in the [ ] below: [x]):


Summary

After full-screening and un-fullscreening a call (bottom-right button in the call), the app's menu bar (File/Edit/View) appears at the top, which pushes all of the rendered interface down however many pixels the menu bar takes up.

Also, while full-screened, the custom menu bar (three-dots menu + servers picker etc) is still at the top of the screen. I think it should not be there when full-screen because it cuts into the total viewable height of the call. It should be hidden when full-screen.

Environment

  • Operating System: Linux, PopOS (debian/ubuntu-based)
  • Mattermost Desktop App version: 5.1.1
  • Mattermost Server version: 7.2.0

Steps to reproduce

  • Start a call with someone
  • Have them screen share
  • Click Pop-out
  • Click Full-screen
  • See that the custom menu bar is shown (point number 2)
  • Close Full-screen
  • See that the menu bar appeared (point number 1)

Calls Plugin not working within subdirectory

We run Mattermost in a subdirectory, but apparently the Calls plugin can't handle it. No user icons are displayed and screen sharing, for example, refers to the main domain and ignores the subdirectory.

"Start Call" button does not work in Windows application

In the desktop application for Windows x64, the "Start Call" button is pressed, but call does not start.
In the application for Mac OS, the "Start Call" button is pressed and the call is starting.
When I call from mobile App to Windows App, the call is appier with green button, but I can't enter the call.

Windows App: v5.0.4 or v5.1.0-rc.2 (msi,exe)
Windows 10 (19044.1415)

Feature Request: order participant list alphabetically

Hey there,

I'd like to propose another feature request. We use Calls for our daily team meetings - colleagues take their turn to speak in alphabetical order.
Therefore it would be helpful if at least the participants list in the sidebar would be statically sorted alphabetically (while being in fullscreen mode). The participant list in the center may remain dynamic, though.

Maybe, a way to sort the list arbitrarily via dropdown (alphabetically, active speaker first, joining time, ...) would also be helpful.

Best regards!

Inherit configuration of Mattermost config.json (or db config) for WebsocketURL

Description of problem:

Mattermost Calls plugin assumes the websocket URL is equal to the board URL, but in some deployments, the websocket URL must be configured to a subdomain in order to bypass a CDN which is serving static assets to users at the edge. In this case you may have service at chat.example.com, but websockets via only ws.chat.example.com. [1]

This was originally an issue for the Focalboard plugin of Mattermost but it was resolved at some point. I am trying to identify an exact commit.

Expected behavior:

Calls plugin works in mattermost server configured as above where SiteURL != WebsocketURL

Actual behavior:

Calls plugin attempts to start a call but is unable to open a websocket connection to the SiteURL, so fails. If the SiteURL's DNS record is changed locally (e.g., with a hosts file change) to bypass the CDN, Calls plugin appears to function as expected.

[1] https://docs.mattermost.com/configure/configuring-cloudfront-to-host-mattermost-static-assets.html

STUN/TURN not working

I wanted to test STUN/TURN and did set media.peerconnection.ice.relay_only to TRUE in my Firefox about:config.

I then started a call and it immediately ended. Firefox tab about:webrtc is showing this:
grafik

So there is no candidate found.

Btw is Calls supporting something like turns:turn.server.de:443 instead of stun for ICE Server?
If I enter this for my TURN Server and check with Firefox, no ICE Server is displayed at all with about:webrtc

Can't connect to the server

Hello! I installed a new version of the Mattermost Server 7.0.1 Team Edition and Calls Plugin 0.6.1

I wanted to test drive the Mattermost calls, but the desktop client can't connect to the server.

Infrastructure

I deployed the docker version of the Mattermost Server on the dedicated server. I've attached the component diagram that is illustrated the deployment.
image

The desktop client connects to the server via 443 port. The 8884 port is used for the calls connection.

The nginx processes HTTPS and WSS connections and proxies to the docker container with the Mattermost Server. This part works well.

The iptables routes all UDP traffic for the 8884 port to the docker container.

I hope I've explained it clearly :)

Subject

When I push the "Start Call" button my teammates can join to the call but nobody hear nobody and call members disconnect after 45 seconds.
The developer console logs are below

com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: a/v device change detected
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: found default audio input device to use: Default
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: found default audio output device to use: Default
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: a/v device change detected
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 [Deprecation] The ScriptProcessorNode is deprecated. Use AudioWorkletNode instead. (https://bit.ly/audio-worklet)
bo @ com.mattermost.calls_e71c72812e3ae94d_bundle.js:2
initVAD @ com.mattermost.calls_e71c72812e3ae94d_bundle.js:2
init @ com.mattermost.calls_e71c72812e3ae94d_bundle.js:2
await in init (async)
o @ com.mattermost.calls_e71c72812e3ae94d_bundle.js:2
(anonymous) @ com.mattermost.calls_e71c72812e3ae94d_bundle.js:2
a @ call_button.tsxx:56
s @ react-dom.production.min.jss:14
c @ react-dom.production.min.jss:14
(anonymous) @ react-dom.production.min.jss:14
F @ react-dom.production.min.jss:15
ot @ react-dom.production.min.jss:52
at @ react-dom.production.min.jss:51
rt @ react-dom.production.min.jss:52
mt @ react-dom.production.min.jss:56
x @ react-dom.production.min.jss:287
G @ react-dom.production.min.jss:19
Jt @ react-dom.production.min.jss:70
Zt @ react-dom.production.min.jss:69
t.unstable_runWithPriority @ scheduler.production.min.jss:19
Wi @ react-dom.production.min.jss:122
v @ react-dom.production.min.jss:287
Vt @ react-dom.production.min.jss:68
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: ws open, sending join msg
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: join ack received, initializing connection
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: local signal: {"type":"offer","sdp":"v=0\r\no=- 7506066426796797632 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS\r\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:RZcX\r\na=ice-pwd:70A9VgLqA4PJ/ZZ/TAvSSTKg\r\na=ice-options:trickle\r\na=fingerprint:sha-256 1A:47:93:F4:57:54:7C:12:7A:71:EF:C7:C1:FA:5E:65:C0:B5:31:0F:07:4A:37:A0:68:EC:5E:E8:A0:38:C7:F2\r\na=setup:actpass\r\na=mid:0\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n"}
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:2107020778 1 udp 2122260223 172.50.254.1 41331 typ host generation 0 ufrag RZcX network-id 1","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:3885250869 1 udp 2122194687 172.17.0.1 52258 typ host generation 0 ufrag RZcX network-id 2","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:1699298163 1 udp 2122129151 192.168.0.58 42658 typ host generation 0 ufrag RZcX network-id 3","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2          PUT https://chat.insys.io/api/v4/users/7mmn7y4x9pnq985tt7c7siofec/teams/threads/f7r3e4ukoidp8qgyunxjahzchy/following 404
(anonymous) @ com.mattermost.calls_e71c72812e3ae94d_bundle.js:2
(anonymous) @ com.mattermost.calls_e71c72812e3ae94d_bundle.js:2
(anonymous) @ com.mattermost.calls_e71c72812e3ae94d_bundle.js:2
(anonymous) @ com.mattermost.calls_e71c72812e3ae94d_bundle.js:2
(anonymous) @ index.jss:8
i @ com.mattermost.calls_e71c72812e3ae94d_bundle.js:2
(anonymous) @ com.mattermost.calls_e71c72812e3ae94d_bundle.js:2
(anonymous) @ websocket_actions.jsxx:572
Me @ websocket_actions.jsxx:566
conn.e.conn.onmessage @ websocket_client.tsxx:174
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: remote signal {"type":"answer","sdp":"v=0\r\no=- 7413999486141202981 1656675804 IN IP4 0.0.0.0\r\ns=-\r\nt=0 0\r\na=fingerprint:sha-256 B0:CF:E5:C9:F1:8F:52:F8:80:B3:B7:D7:81:BA:D6:CC:F1:81:3D:6B:46:01:87:25:21:CE:57:81:A1:77:CE:BF\r\na=extmap-allow-mixed\r\na=group:BUNDLE 0\r\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=setup:active\r\na=mid:0\r\na=sendrecv\r\na=sctp-port:5000\r\na=ice-ufrag:zjDgUiWiGnwkPqzW\r\na=ice-pwd:hcCpMXyxNOOebaWwGrkmFZvKOhQGZtkr\r\n"}
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:857041178 1 tcp 1518280447 172.50.254.1 9 typ host tcptype active generation 0 ufrag RZcX network-id 1","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:2836907461 1 tcp 1518214911 172.17.0.1 9 typ host tcptype active generation 0 ufrag RZcX network-id 2","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:734709635 1 tcp 1518149375 192.168.0.58 9 typ host tcptype active generation 0 ufrag RZcX network-id 3","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: remote signal {"candidate":{"candidate":"candidate:434529953 1 udp 2130706431 PUBLIC_IP 8884 typ host","sdpMid":"","sdpMLineIndex":0,"usernameFragment":null},"type":"candidate"}
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:2340875326 1 udp 1686052607 92.124.128.60 41331 typ srflx raddr 172.50.254.1 rport 41331 generation 0 ufrag RZcX network-id 1","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:79019993 1 udp 1685987071 92.124.128.60 52258 typ srflx raddr 172.17.0.1 rport 52258 generation 0 ufrag RZcX network-id 2","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: local signal: {"type":"candidate","candidate":{"candidate":"candidate:2472100519 1 udp 1685921535 92.124.128.60 42658 typ srflx raddr 192.168.0.58 rport 42658 generation 0 ufrag RZcX network-id 3","sdpMLineIndex":0,"sdpMid":"0"}}
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: vad: noise avg 21 58.466666666666676
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: peer error Error: Connection failed.
    at h._onConnectionStateChange (com.mattermost.calls_e71c72812e3ae94d_bundle.js:2:762049)
    at RTCPeerConnection._pc.onconnectionstatechange (com.mattermost.calls_e71c72812e3ae94d_bundle.js:2:751869)
mn @ com.mattermost.calls_e71c72812e3ae94d_bundle.js:2
(anonymous) @ com.mattermost.calls_e71c72812e3ae94d_bundle.js:2
i.emit @ com.mattermost.calls_e71c72812e3ae94d_bundle.js:2
(anonymous) @ com.mattermost.calls_e71c72812e3ae94d_bundle.js:2
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: disconnect
com.mattermost.calls_e71c72812e3ae94d_bundle.js:2 com.mattermost.calls: ws close: 1005

The calls plugin settings
image

The nmap command result

Host is up (0.076s latency).

PORT     STATE         SERVICE
8884/udp open|filtered unknown

Nmap done: 1 IP address (1 host up) scanned in 1.03 seconds

The netcat command result

netcat -z -v -u PUBLIC_IP 8884
Connection to PUBLIC_IP 8884 port [udp/*] succeeded!

Looks like the webapp can't connect to the server part of the plugin

Plugin Code Analysis

I tried to found answers my questions in the plugin source code.

I've found that the plugin use the mattermost/rtcd module. I've looked at the Start() function in the server.go file.
I've analyze this part of code
image

I see that the getPublicIP function return the my server public IP if the ICE host override isn't set. After this the RTC server starts listen the server public IP and the ICE Port UDP.

For example, my public IP is 1.2.3.4 and the RTC server listen the 1.2.3.4:8884.

As i mentioned earlier, the mattermost server is launched in the docker container. The docker container hasn't network interface that provides the 1.2.3.4 IP address. The container has the next network interfaces

eth0      Link encap:Ethernet  HWaddr 02:42:AC:32:00:02  
          inet addr:172.50.0.2  Bcast:172.50.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5964789 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5250916 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:3039726993 (2.8 GiB)  TX bytes:1586327453 (1.4 GiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:69394 errors:0 dropped:0 overruns:0 frame:0
          TX packets:69394 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:6604609 (6.2 MiB)  TX bytes:6604609 (6.2 MiB)

I guess that the calls plugin server should listen the 0.0.0.0 if it run in the docker.
I tried to set the ICE Host override as 0.0.0.0 but the webapp part of the plugin starts to send request to the 0.0.0.0:8884.

Can you help me?

Unable to activate plugin: Caller

My Mattermost is self hosted in Version 7.0.1

The new Caller Plugin doesn't work.

In my mattermost.log i find this line:
{"timestamp":"2022-06-27 07:00:11.363 Z","level":"error","msg":"Unable to activate plugin","caller":"app/plugin.go:139","plugin_id":"com.mattermost.calls","error":"unable to generate webapp bundle: com.mattermost.calls: unable to read webapp bundle: com.mattermost.calls: open client/plugins/com.mattermost.calls/main.js: no such file or directory"}

I go to this Folder "client/plugins/com.mattermost.calls/" and there is only a folder "files" in it. But the main.js is missing. The same Error on Version 7.0.0.

What can i do?

Bildschirmfoto 2022-06-27 um 13 26 40

peer error Error: Connection failed.

I installed 0.6.0 today for a test drive on our mattermost 6.7.0 Team Edition instance, deployed on kubernetes via helm chart, with alb + nginx ingress.

I tested with ICE Servers stun:stun.l.google.com:19302,stun:stun.global.calls.mattermost.com:3478

but call drops in few seconds. anything else I can try? maybe is it about the UDP server port 8443?

Screen Shot 2022-06-08 at 17 04 16

Plugin support for Kubernetes with Oprator

Can you write a tutorial on how to set up the plugin on a Kubernetes cluster related to the Mattermost operator?

A simple NodePort pointing to the container does not work.

message was dropped by rate limiter

Hello,

I'm getting this message below in logs when I'm trying to open a call (in particular when I unmute my microphone):

May 27 06:49:21 mattermost mattermost[18506]: {"timestamp":"2022-05-27 06:49:21.772 Z","level":"error","msg":"message was dropped by rate limiter","caller":"app/plugin_api.go:940","plugin_id":"com.mattermost.calls","origin":"main.(*Plugin).WebSocketMessageHasBeenPosted websocket.go:547","msgType":"ice","userID":"x8cg86aefpfjjpqs4mjqjoo51y","connID":"o7cppry7jj8u7n5dit4hxd9wqe"}

I checked in mattermost configuration the parameter RateLimitSettings (in case it was related) but no impact on it, also set as False.
Same issue if I use mattermost STUN default or mine.

My version is 0.5.3 (same with 0.5.1), first time I'm testing this plugin.

Any idea?

Feature Request: Automatically end call if only one user

It would be nice if calls could automatically terminate if they are open with only one user for some fixed amount of time. I have seen scenarios where I had to remind someone to disconnect from the call after everyone else had dropped.

Feature Request: Option to Increase Screen Sharing Quality

It would be awesome to have some kind of setting to control screenshare quality, as right now when sharing a full desktop small text is kind of hard to read for some. I see in the docs that screenshares are limited to 1mbps, if we have more bandwidth available, is there a way to force it higher?

Cannot end a call

Cross-posting from forum.

Summary
A call with a teammate seemingly cannot be ended.

Steps to reproduce
Using Cloud Starter plan. I’m using the web version, teammate was using windows app.

Expected behavior
Being able to start a new call.

Observed behavior
We were on a call. We finished the call (don’t recall whether by closing the tab or through the UI). App still shows us as being on call, but doesn’t show the usual interface when we are. There is simply the call icon next to teammate’s name and the “start call” button is now a (disabled) “join call” button.

Tried restarting PC and logging out. Tried disabling and removing the Calls plugin. On re-install it is still stuck on the call.

You can find more details in the original forum thread.

MM-47046 Use version of React DOM provided by web app

From here:

"For some more context, see here. The short version though is that we updated the web app to React 17, and there's a chance that plugins will have some issues with it because they're compiled with the React 16 version of ReactDOM. I'm submitting PRs to the 3 products, the demo plugin, and the plugin template to have them use the web app's version of React DOM to fix any immediate issues, but we'll want to properly migrate them to React 17 going forward."

Ticket Link
https://mattermost.atlassian.net/browse/MM-47046

Related Pull Requests
mattermost/mattermost-plugin-playbooks#1489
mattermost/focalboard#3861
mattermost-community/mattermost-plugin-todo#190
mattermost/mattermost-plugin-starter-template#169

Calls Permission

So it looks like a user must be an "administrator" to utilize the calls feature.

Summary
We recently upgraded our on premises version to 7.0, and now have access to calls. They do work; however, both users have to be admins for the calls to complete from each end. Is there a way around this?

Steps to reproduce
Start a call from an admin to non admin and the non admin cannot join
Non admin’s cannot start a call

Expected behavior
Admin and Non admin users should be able to start and join calls

Observed behavior
Non admins cannot join or create calls

OpenBSD support

First of all, thank you so much for doing possible calls in Mattermost! It is an amazing feature :)

We deploy Mattermost on OpenBSD and we compiled this plugin last week for OpenBSD and everything is working right up to now. We only had to tune the UDP buffer size to same values in Linux:

net.inet.udp.recvspace=212992
net.inet.udp.sendspace=212992

It would be wonderful if you add a build target for OpenBSD in your next release. If you prefer, I can send a PR with changes in Makefile and plugin.json

Thanks in advance.

Cannot start a call in Linux desktop client

I upgraded our server to version 7.0.1 and also upgraded my client version to 5.1.0 via snap on Ubuntu 22.04.
I wanted to test the new 'Start a call' function and enabled it for all channels in the system console. Now I've got a 'Start call' button in each channel but nothing happens when I click this button. When I test it in my browser, everything works fine. My colleague can start it from its windows client.

When I start the 'Developer Tools for Current Server' I get the following console output:

VM5:258 Preload initialized
index.jss:151 Loading plugin com.mattermost.plugin-channel-export, version 1.0.0
index.jss:151 Loading plugin com.mattermost.calls, version 0.6.0
index.jss:151 Loading plugin playbooks, version 1.28.2
index.jss:151 Loading plugin focalboard, version 7.0.1
index.jss:137 Loaded plugin com.mattermost.plugin-channel-export, version 1.0.0
index.jss:137 Loaded plugin com.mattermost.calls, version 0.6.0
index.jss:137 Loaded plugin playbooks, version 1.28.2
focalboard_c3252f522e64fa70_bundle.js:2 [1656315270.56] OctoClient baseURL: https://<LOCAL-MATTERMOST-URL>/plugins/focalboard
index.jss:137 Loaded plugin focalboard, version 7.0.1
Metropolis-SemiBold.woff2:1          Failed to load resource: the server responded with a status of 404 (Not Found)
websocket_client.tsxx:62 websocket connecting to wss://<LOCAL-MATTERMOST-URL>/api/v4/websocket
VM5:348 registering Mattermost v5.1.0 with the server
websocket_client.tsxx:148 got connection id  7fwbnqzkpbdu3mi1hsrnie66io
Metropolis-SemiBoldItalic.woff2:1          Failed to load resource: the server responded with a status of 404 (Not Found)
com.mattermost.calls_1e7361aa1e5244af_bundle.js:2 Uncaught (in promise) DOMException: Requested device not found
init @ com.mattermost.calls_1e7361aa1e5244af_bundle.js:2
await in init (async)
o @ com.mattermost.calls_1e7361aa1e5244af_bundle.js:2
(anonymous) @ com.mattermost.calls_1e7361aa1e5244af_bundle.js:2
a @ call_button.tsxx:56
s @ react-dom.production.min.jss:14
c @ react-dom.production.min.jss:14
(anonymous) @ react-dom.production.min.jss:14
F @ react-dom.production.min.jss:15
ot @ react-dom.production.min.jss:52
at @ react-dom.production.min.jss:51
rt @ react-dom.production.min.jss:52
mt @ react-dom.production.min.jss:56
x @ react-dom.production.min.jss:287
G @ react-dom.production.min.jss:19
Jt @ react-dom.production.min.jss:70
Zt @ react-dom.production.min.jss:69
t.unstable_runWithPriority @ scheduler.production.min.jss:19
Wi @ react-dom.production.min.jss:122
v @ react-dom.production.min.jss:287
Vt @ react-dom.production.min.jss:68

I was asked in mattermost/desktop#2173 to move this issue to this repository and to call the command /call stats but when I do this my mattermost window turns completely blank with the following output in the console:

advanced_create_post.tsxx:651 Uncaught (in promise) Error: Minified React error #31; visit https://reactjs.org/docs/error-decoder.html?invariant=31&args[]=Error%3A%20not%20connected&args[]= for the full message or use the non-minified dev environment for full errors and additional helpful warnings.
    at Mo (react-dom.production.min.jss:139:47)
    at react-dom.production.min.jss:149:278
    at wr (react-dom.production.min.jss:173:103)
    at Ds (react-dom.production.min.jss:265:156)
    at c_ (react-dom.production.min.jss:246:265)
    at d_ (react-dom.production.min.jss:246:194)
    at a_ (react-dom.production.min.jss:239:172)
    at react-dom.production.min.jss:123:115
    at t.unstable_runWithPriority (scheduler.production.min.jss:19:467)
    at Wi (react-dom.production.min.jss:122:325)
Mo @ react-dom.production.min.jss:139
(anonymous) @ react-dom.production.min.jss:149
wr @ react-dom.production.min.jss:173
Ds @ react-dom.production.min.jss:265
c_ @ react-dom.production.min.jss:246
d_ @ react-dom.production.min.jss:246
a_ @ react-dom.production.min.jss:239
(anonymous) @ react-dom.production.min.jss:123
t.unstable_runWithPriority @ scheduler.production.min.jss:19
Wi @ react-dom.production.min.jss:122
Vi @ react-dom.production.min.jss:123
Ki @ react-dom.production.min.jss:122
Qs @ react-dom.production.min.jss:230
enqueueSetState @ react-dom.production.min.jss:132
D.setState @ react.production.min.jss:12
(anonymous) @ advanced_create_post.tsxx:461
await in (anonymous) (async)
(anonymous) @ advanced_create_post.tsxx:769
s @ react-dom.production.min.jss:14
c @ react-dom.production.min.jss:14
(anonymous) @ react-dom.production.min.jss:14
F @ react-dom.production.min.jss:15
ot @ react-dom.production.min.jss:52
at @ react-dom.production.min.jss:51
rt @ react-dom.production.min.jss:52
mt @ react-dom.production.min.jss:56
x @ react-dom.production.min.jss:287
G @ react-dom.production.min.jss:19
Jt @ react-dom.production.min.jss:70
Zt @ react-dom.production.min.jss:69
t.unstable_runWithPriority @ scheduler.production.min.jss:19
Wi @ react-dom.production.min.jss:122
v @ react-dom.production.min.jss:287
Vt @ react-dom.production.min.jss:68

Screenshare UX improvement - fullscreen

Summary

Related to #251

Feature request: I'd appreciate a button to go straight to full-screen from the small call widget instead of having to click "Pop-out" and then click full-screen.

The usecase is that if I'm full-screen currently (to better read the text on the presenter's screen), I have to click twice to minimize it so I can go open a chat to reference something or send a quick message, then click twice again to pop-out and fullscreen to get back to the call.

Using Mattermost 7.2.0 (and desktop Linux 5.1.1)

Steps to reproduce

  • Start call with someone
  • Ask them to share screen
  • Click Pop-out
  • Click Full-screen
  • Realize I received a message, or want to send a message to someone while on the call
  • Click to close full-screen (or ESC, whatever)
  • Click to "un-popout"
  • Send message or w/e
  • Have to click two times again to fullscreen again

Expected behavior

I'd like a full-screen button directly from the small widget (to the right of pop-out probably).

Feature Request: Option to add other users to two-party call

Hey there,

I'd like to propose another feature request. When making calls in a private chat, sometimes there are situations where you need additional people for troubleshooting, etc.
Therefore, it would be good to be able to invite people to existing phone calls regardless of channel memberships (but without the possibility to read text messages).
The feature would be comparable to Skype rooms and would make communication much easier.

Is such a feature theoretically conceivable?

Best regards!

Call dropped after ~10-12 seconds

I've a setup running in the docker. Just installed the v9.0.0 from the marketplace.

I can see it has the port mapping of 8065 - tcp port.

Now, from the calls plugins settings page, I see there is some UDP port to mention. I kept it default, but it is not working.

What else should I need to do? This docker setup is running in a raspberry pi with cloudflare tunnel (which also acts as a reverse proxy) and the tunnel url is given in the DNS records.

Any port mapping I need to do in docker or any DNS entries?

Here are the call logs:

com.mattermost.calls: a/v device change detected
com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2 com.mattermost.calls: a/v device change detected
com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2 [Deprecation] The ScriptProcessorNode is deprecated. Use AudioWorkletNode instead. (https://bit.ly/audio-worklet)
ki @ com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2
initVAD @ com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2
initAudio @ com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2
await in initAudio (async)
init @ com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2
await in init (async)
s @ com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2
a @ com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2
(anonymous) @ com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2
s @ call_button.tsx:56
s @ react-dom.production.min.js:14
c @ react-dom.production.min.js:14
(anonymous) @ react-dom.production.min.js:14
F @ react-dom.production.min.js:15
ot @ react-dom.production.min.js:52
at @ react-dom.production.min.js:51
rt @ react-dom.production.min.js:52
mt @ react-dom.production.min.js:56
x @ react-dom.production.min.js:287
G @ react-dom.production.min.js:19
Jt @ react-dom.production.min.js:70
Zt @ react-dom.production.min.js:69
t.unstable_runWithPriority @ scheduler.production.min.js:19
Yi @ react-dom.production.min.js:122
v @ react-dom.production.min.js:287
Vt @ react-dom.production.min.js:68
c @ rocket-loader.min.js:1
com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2 com.mattermost.calls: vad: noise avg 24 58.67592592592592
com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2 com.mattermost.calls: ws: new conn id from server
com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2 com.mattermost.calls: ws: setting original conn id
com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2 com.mattermost.calls: ws open, sending join msg
com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2 com.mattermost.calls: join ack received, initializing connection
com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2 com.mattermost.calls: local signal: {"type":"offer","sdp":"v=0\r\no=- 2631070512264055518 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS\r\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:Vpnt\r\na=ice-pwd:b5tMsPoVLpo5xO+EG4a02kxY\r\na=ice-options:trickle\r\na=fingerprint:sha-256 BB:2B:01:66:E1:86:48:B7:16:9C:47:47:6E:0B:14:1A:12:72:EB:99:7F:7E:B4:58:94:E0:64:D7:54:F9:39:42\r\na=setup:actpass\r\na=mid:0\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n"}
com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2 com.mattermost.calls: remote signal {"type":"answer","sdp":"v=0\r\no=- 1259815370657842333 1665117303 IN IP4 0.0.0.0\r\ns=-\r\nt=0 0\r\na=fingerprint:sha-256 3F:C5:B2:A4:1D:38:D1:F4:C3:42:64:87:31:E0:52:AD:24:B4:B3:03:C0:B7:C0:88:62:D9:E2:99:52:95:9B:94\r\na=extmap-allow-mixed\r\na=group:BUNDLE 0\r\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=setup:active\r\na=mid:0\r\na=sendrecv\r\na=sctp-port:5000\r\na=ice-ufrag:djMsRFIPlupdYEFJ\r\na=ice-pwd:mFHPeOkIJiseguSprAlhBODdGBiMPzWG\r\n"}
com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2 com.mattermost.calls: remote signal {"candidate":{"candidate":"candidate:3460764426 1 udp 2130706431 122.170.105.202 8443 typ host","sdpMid":"","sdpMLineIndex":0,"usernameFragment":null},"type":"candidate"}
com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2 com.mattermost.calls: remote signal {"candidate":{"candidate":"candidate:1990777822 1 udp 1694498815 122.170.105.202 33739 typ srflx raddr 0.0.0.0 rport 33739","sdpMid":"","sdpMLineIndex":0,"usernameFragment":null},"type":"candidate"}
com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2 com.mattermost.calls: rtc closed
com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2 com.mattermost.calls: disconnect
com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2 com.mattermost.calls: websocket reconnect handler
com.mattermost.calls_20b1f0b7d4b3b754_bundle.js:2 com.mattermost.calls: resetting state

[Feature Requests] option to select shared monitor and phone dial-in

Hey there,

first of all: this plugin is great!
During our tests in our enterprise environment, we noticed two things that could be improved in our opinion:

  • screen sharing: it would be really helpful to have an option to select the monitor to share (when using multiple screens). Otherwise it becomes partly difficult to read the shared content
  • nice to have: an option to configure SIP/phone dial-in (like Jigasi for Jitsi Meet)

Best regards!

FreeBSD support

I tried to install plugin to mattermost server on Freebsd 13.0-RELEASE-p11, but it does not work.
Could you add compatibility with FreeBSD?

Thank you.

Update Plugin To Work On Mattermost Server Hosted on NGINX Sub Path

Our Mattermost server is hosted on https://example.com/mattermost/ using the NGINX subfolder. When I start a call, it tries to establish a web socket connection to 'wss://example.com/api/v4/websocket' and it failed. You can see the sub-folder path is missing in the URL. Could you update the plugin to read the sub-folder from the server configuration? I saw this issue in a lot of other plugins.

The correct request should be 'wss://example.com/mattermost/api/v4/websocket'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.