HubSpot Support Task (Calling SDK Visibility Issue)

I am currently developing a custom calling extension using the @hubspot/calling-extensions-sdk, integrated via iframe in the CRM environment. During our implementation, we encountered a critical issue related to the visibility of the iframe when handling inbound calls.Whenever we call cti.incomingCall({ phoneNumber, createEngagement: true }), the iframe (our softphone UI) is automatically hidden by the HubSpot system. We confirmed this by observing a postMessage of type INCOMING_CALL, immediately followed by a VISIBILITY_CHANGED message with { isHidden: true } This action interrupts the user interface and prevents the call process from being displayed. How can we resolve this situation?

Hi @ALOTECH ,

The iframe is hidden because HubSpot automatically manages UI visibility when in inbound calls to prioritize the built in call interface, triggering the message { isHidden: true }.

Try implementing an event listener in your iframe’s code to listen for VISBILITY_CHANGED messages. When its detected, override the default behaviour by programmatically ensuring your softphone UI is visible by adjusting the dispay mostly should work. Make sure your iframe or dialer remains open in background. Also Debug the sequence using browser dev tools.

If this helps, feel free to mark it as the solution

:check_mark:

and give it an upvote

:+1:

!

Thank you for your response.

We have already implemented a listener for the VISIBILITY_CHANGED event and attempted to override the default behavior by forcefully setting

frame.style.display = ‘block’;
frame.style.visibility = ‘visible’;

We’ve also used a MutationObserver to re-apply these styles whenever they are changed by HubSpot’s internal logic. However, the problem persists: HubSpot continues to enforce display: none and visibility: hidden — even after we reset them programmatically.

It appears that HubSpot’s internal UI framework re-applies the visibility change after our override, nullifying any attempt to display the iframe.

We are simply requesting an official, supported way to prevent iframe hiding for cti.incomingCall(), such as:

  • a parameter like showWidget: true in incomingCall(), or
  • an SDK method to cancel/override VISIBILITY_CHANGED.

Without this, the only working workaround is to incorrectly call cti.outgoingCall() for incoming calls, which breaks engagement accuracy and analytics integrity.