nextcloud / nextcloud/spreed

External Call Service: joining a call does not update call presence or notify other participants

Open
#18,764 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement feature: api 🛠️ feature: call 📹 feature: frontend 🖌️ feature: integration 📦
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

  1. 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_secret and external_call_service_frame_origins, pointing at a service that returns an iframe URL.
  2. Create a conversation with objectType=external_call and an objectId. Open it as user A and start the call. The iframe loads, user A joins the external meeting, and the iframe posts externalCallJoined to the parent window.
  3. 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, the externalCallJoined branch with the commented-out side effects.
  • docs/external-call-service.md, the "iframe to Talk postMessage API" table, where externalCallJoined is 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.