<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: cti.incomingCall() hides iframe automatically – need reliable visibility control in APIs &amp; Integrations</title>
    <link>https://community.hubspot.com/t5/APIs-Integrations/cti-incomingCall-hides-iframe-automatically-need-reliable/m-p/1140463#M81771</link>
    <description>&lt;P class=""&gt;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/933659"&gt;@ALOTECH&lt;/a&gt;&amp;nbsp;This is actually by design.&lt;BR /&gt;&lt;BR /&gt;When you fire cti.incomingCall() HubSpot immediately collapses the call-extension iframe and pops a small toast (“Incoming call from +90…”) at the bottom-left of the CRM. The iframe stays hidden until the rep clicks that toast (or presses the built-in “Answer” hot-key if you’ve wired one). As soon as they interact, HubSpot sends a second VISIBILITY_CHANGED event with isHidden: false and expands the iframe again.&lt;/P&gt;&lt;P class=""&gt;Why they force it&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;Prevents the soft-phone from covering the record timeline every time a call lands.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;Keeps the UI consistent with HubSpot’s own native dialer (same toast / same workflow).&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;Ensures the rep explicitly accepts the call so call-start times and engagement direction stay accurate.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;What you can do (work-arounds)&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;Handle the toast flow:&lt;/STRONG&gt; in your onVisibilityChanged callback, wait for isHidden: false, then rebuild or refocus your in-iframe phone UI (no need for MutationObservers—HubSpot will reopen it cleanly).&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;Optional auto-answer:&lt;/STRONG&gt; if you must auto-pop the iframe, use the toast’s “Accept” programmatic hook. In the payload returned from cti.incomingCall you can pass autoAnswer: true; HubSpot will still raise the toast but immediately trigger the click event and re-show the iframe.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;Custom banner instead of iframe:&lt;/STRONG&gt; some partners show an overlay in their own code (outside the iframe) on the toast event, then open the iframe only after the rep clicks—it avoids the hidden/visible dance altogether.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;Outlook on future SDK updates:&lt;/STRONG&gt; the Calling-Extensions team has noted requests for a “don’t hide my iframe” flag, but nothing is on the public roadmap yet. Best channel is a developer-ticket via your app listing; they do log + prioritize those votes.&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;P class=""&gt;Bottom line: you can’t override the automatic hide; the supported pattern is to surface your incoming call in the toast and reopen the iframe when the rep accepts (or auto-accept via the param). If you’re still seeing the iframe stay hidden even after the toast click, open a dev ticket—that part would be a bug.&lt;/P&gt;&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="RubenB_0-1745518871355.png" style="width: 200px;"&gt;&lt;img src="https://community.hubspot.com/t5/image/serverpage/image-id/144316i4842B2C8DB6743D1/image-size/small?v=v2&amp;amp;px=200" role="button" title="RubenB_0-1745518871355.png" alt="RubenB_0-1745518871355.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;A href="https://www.linkedin.com/in/ruben-burdin/" target="_blank" rel="noopener nofollow noreferrer"&gt;Ruben Burdin&lt;/A&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Real-Time Data Sync Between any CRM or Database | Founder @&lt;A href="https://l.stacksync.com/hubspot" target="_blank" rel="nofollow noopener noreferrer"&gt;Stacksync&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;(YC W24)&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;</description>
    <pubDate>Thu, 24 Apr 2025 18:23:20 GMT</pubDate>
    <dc:creator>RubenBurdin</dc:creator>
    <dc:date>2025-04-24T18:23:20Z</dc:date>
    <item>
      <title>cti.incomingCall() hides iframe automatically – need reliable visibility control</title>
      <link>https://community.hubspot.com/t5/APIs-Integrations/cti-incomingCall-hides-iframe-automatically-need-reliable/m-p/1140312#M81762</link>
      <description>&lt;P&gt;&lt;EM&gt;Hi HubSpot team and developers,&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;I'm currently building a custom Calling Extension using the `@hubspot/calling-extensions-sdk`, and I’ve encountered a critical issue regarding iframe visibility during inbound calls.&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;## &lt;span class="lia-unicode-emoji" title=":exclamation_mark:"&gt;❗&lt;/span&gt; &lt;STRONG&gt;Problem&lt;/STRONG&gt;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&lt;STRONG&gt;Whenever&lt;/STRONG&gt; we call:&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;```js&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;await cti.incomingCall({&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;createEngagement: true,&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;phoneNumber: "+90..."&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;});&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;HubSpot&amp;nbsp;sended this:&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;{ type: 'VISIBILITY_CHANGED', data: { isHidden: true } }&lt;/EM&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;EM&gt;This automatically &lt;STRONG&gt;hides the iframe&lt;/STRONG&gt;, regardless of what we programmatically set for visibility (style.display = 'block' etc.). We even tried:&lt;/EM&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;EM&gt;MutationObserver to override the DOM style changes,&lt;/EM&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;EM&gt;Manual re-display logic inside onVisibilityChanged,&lt;/EM&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;EM&gt;Ensuring iframe load order and widget open timing.&lt;/EM&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;&lt;EM&gt;Users &lt;STRONG&gt;cannot see the softphone interface&lt;/STRONG&gt; during incoming calls.&lt;/EM&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;EM&gt;Engagements logged as incoming are &lt;STRONG&gt;useless&lt;/STRONG&gt; if the user can't answer the call in the UI.&lt;/EM&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;EM&gt;Using cti.outgoingCall() as a workaround creates &lt;STRONG&gt;incorrect engagement direction&lt;/STRONG&gt; and corrupts reporting.&lt;/EM&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;EM&gt;This limitation significantly impacts the usability of the Calling Extensions SDK for any inbound-capable softphone.&lt;/EM&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;EM&gt;We’d greatly appreciate any guidance, workaround, or roadmap info for improving this behavior.&lt;/EM&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;EM&gt;Thank you!&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 24 Apr 2025 15:07:45 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/APIs-Integrations/cti-incomingCall-hides-iframe-automatically-need-reliable/m-p/1140312#M81762</guid>
      <dc:creator>ALOTECH</dc:creator>
      <dc:date>2025-04-24T15:07:45Z</dc:date>
    </item>
    <item>
      <title>Re: cti.incomingCall() hides iframe automatically – need reliable visibility control</title>
      <link>https://community.hubspot.com/t5/APIs-Integrations/cti-incomingCall-hides-iframe-automatically-need-reliable/m-p/1140463#M81771</link>
      <description>&lt;P class=""&gt;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/933659"&gt;@ALOTECH&lt;/a&gt;&amp;nbsp;This is actually by design.&lt;BR /&gt;&lt;BR /&gt;When you fire cti.incomingCall() HubSpot immediately collapses the call-extension iframe and pops a small toast (“Incoming call from +90…”) at the bottom-left of the CRM. The iframe stays hidden until the rep clicks that toast (or presses the built-in “Answer” hot-key if you’ve wired one). As soon as they interact, HubSpot sends a second VISIBILITY_CHANGED event with isHidden: false and expands the iframe again.&lt;/P&gt;&lt;P class=""&gt;Why they force it&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;Prevents the soft-phone from covering the record timeline every time a call lands.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;Keeps the UI consistent with HubSpot’s own native dialer (same toast / same workflow).&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;Ensures the rep explicitly accepts the call so call-start times and engagement direction stay accurate.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;What you can do (work-arounds)&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;Handle the toast flow:&lt;/STRONG&gt; in your onVisibilityChanged callback, wait for isHidden: false, then rebuild or refocus your in-iframe phone UI (no need for MutationObservers—HubSpot will reopen it cleanly).&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;Optional auto-answer:&lt;/STRONG&gt; if you must auto-pop the iframe, use the toast’s “Accept” programmatic hook. In the payload returned from cti.incomingCall you can pass autoAnswer: true; HubSpot will still raise the toast but immediately trigger the click event and re-show the iframe.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;Custom banner instead of iframe:&lt;/STRONG&gt; some partners show an overlay in their own code (outside the iframe) on the toast event, then open the iframe only after the rep clicks—it avoids the hidden/visible dance altogether.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;Outlook on future SDK updates:&lt;/STRONG&gt; the Calling-Extensions team has noted requests for a “don’t hide my iframe” flag, but nothing is on the public roadmap yet. Best channel is a developer-ticket via your app listing; they do log + prioritize those votes.&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;P class=""&gt;Bottom line: you can’t override the automatic hide; the supported pattern is to surface your incoming call in the toast and reopen the iframe when the rep accepts (or auto-accept via the param). If you’re still seeing the iframe stay hidden even after the toast click, open a dev ticket—that part would be a bug.&lt;/P&gt;&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="RubenB_0-1745518871355.png" style="width: 200px;"&gt;&lt;img src="https://community.hubspot.com/t5/image/serverpage/image-id/144316i4842B2C8DB6743D1/image-size/small?v=v2&amp;amp;px=200" role="button" title="RubenB_0-1745518871355.png" alt="RubenB_0-1745518871355.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;A href="https://www.linkedin.com/in/ruben-burdin/" target="_blank" rel="noopener nofollow noreferrer"&gt;Ruben Burdin&lt;/A&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Real-Time Data Sync Between any CRM or Database | Founder @&lt;A href="https://l.stacksync.com/hubspot" target="_blank" rel="nofollow noopener noreferrer"&gt;Stacksync&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;(YC W24)&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 24 Apr 2025 18:23:20 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/APIs-Integrations/cti-incomingCall-hides-iframe-automatically-need-reliable/m-p/1140463#M81771</guid>
      <dc:creator>RubenBurdin</dc:creator>
      <dc:date>2025-04-24T18:23:20Z</dc:date>
    </item>
  </channel>
</rss>

