External Call Service: joining a call does not update call presence or notify other participants
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 2.2k
- Forks
- 586
- Avg merge
- 18h 27m
- Merged PRs (30d)
- 333
Description
[!TIP]
How to use GitHub
- Please use the 👍 reaction to show that you are affected by the same issue.
- Please don't comment if you have no relevant information to add. It's just extra noise for everyone subscribed to this issue.
- Subscribe to receive notifications on status change and new comments.
Steps to reproduce
- Configure the External Call Service: set
start_calls=3,external_call_service,external_call_service_auth_user,external_call_service_auth_password,external_call_service_shared_secretandexternal_call_service_frame_origins, pointing at a service that returns an iframe URL. - Create a conversation with
objectType=external_calland anobjectId. Open it as user A and start the call. The iframe loads, user A joins the external meeting, and the iframe postsexternalCallJoinedto the parent window. - As user B (a member of the same conversation), watch the conversation and the conversation list while user A is in the call.
Expected behaviour
Other participants should be made aware that a call is running, like they are for native Talk calls. That means a call notification is delivered, the "call in progress" indicator and call bar are shown in the conversation and in the conversation list, and the joined participant is reflected in call presence and user status. In other words, externalCallJoined should trigger the call presence side effects so that other users know a call has started and can join it.
Actual behaviour
Nothing happens for other users. externalCallJoined is currently a no-op. In src/components/ExternalCallView.vue the externalCallJoined case contains only commented-out TODOs (fake the inCall flag via joinCall(...), set the Nextcloud user status, post a system message to the chat). docs/external-call-service.md documents the same message as "Reserved for future side-effects (e.g. updating call presence, user status)". As a result there is no call notification, no call in progress indicator, and no presence update for anyone but the joining user. Other participants can only discover the call by opening the conversation and clicking the always-visible call button. Only externalCallLeft is handled today (it unmounts the iframe and returns to the chat view).
References:
src/components/ExternalCallView.vue, theexternalCallJoinedbranch with the commented-out side effects.docs/external-call-service.md, the "iframe to Talk postMessage API" table, whereexternalCallJoinedis listed as reserved for future side-effects.- Feature pull requests: #18426, #18429, #18430, #18431.
Note: this is a feature gap in the External Call Service integration, not an environment specific bug, so the browser and server sections below are not relevant to reproducing it.
Talk app
Talk app version: any version that exposes the external-call-service capability (for example 22.0.15, 23.0.8 or 24.0.2 and newer)
Custom Signaling server configured: not relevant to this issue
Custom TURN server configured: not relevant to this issue
Custom STUN server configured: not relevant to this issue
Browser
Microphone available: yes
Camera available: yes
Operating system: any
Browser name: any (reproduced in Firefox and Chromium)
Browser version: current
Browser log
Not relevant. No error is logged. The iframe posts { type: 'externalCallJoined' }
to the parent, and Talk accepts it, but the handler in ExternalCallView.vue does
nothing (the side effects are commented out), so no call state or notification is
produced for other participants.
Server configuration
Operating system: any
Web server: any
Database: any
PHP version: any
Nextcloud Version: any server release whose bundled Talk exposes the external-call-service capability
List of activated apps:
Not relevant to this issue.
Nextcloud configuration:
Relevant Talk settings only:
start_calls = 3
external_call_service = https://<service-host>/...{meetingId}
external_call_service_auth_user = <user>
external_call_service_frame_origins = ["https://<service-host>"]
Server log (data/nextcloud.log)
No relevant entries. The behaviour is client side: ExternalCallView.vue receives
externalCallJoined and intentionally does nothing with it yet.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in src/components/ExternalCallView.vue at the externalCallJoined branch, then read the iframe postMessage API entry for externalCallJoined in docs/external-call-service.md. Reproduce with users A and B and trace the existing native call behavior. Done means joining triggers notifications, call indicators and the call bar, call presence, and user status for other participants.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- audio-video-rtc, frontend
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 55/100