@telegenta/webclient 3.2.2 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/global.html CHANGED
@@ -1,10 +1,10 @@
1
1
  <!DOCTYPE html><html lang="en" style="font-size:16px"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Global</title><!--[if lt IE 9]>
2
2
  <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
3
- <![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="dark"><div class="sidebar-container"><div class="sidebar" id="sidebar"><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="EventClient.html">EventClient</a></div><div class="sidebar-section-children"><a href="EventServiceNotConnected.html">EventServiceNotConnected</a></div><div class="sidebar-section-children"><a href="InvalidMediaDevice.html">InvalidMediaDevice</a></div><div class="sidebar-section-children"><a href="InvalidOptions.html">InvalidOptions</a></div><div class="sidebar-section-children"><a href="InvalidParameter.html">InvalidParameter</a></div><div class="sidebar-section-children"><a href="LogHandler.html">LogHandler</a></div><div class="sidebar-section-children"><a href="MediaNotPrepared.html">MediaNotPrepared</a></div><div class="sidebar-section-children"><a href="NoActiveSession.html">NoActiveSession</a></div><div class="sidebar-section-children"><a href="NotAllowed.html">NotAllowed</a></div><div class="sidebar-section-children"><a href="NotReady.html">NotReady</a></div><div class="sidebar-section-children"><a href="Phone.html">Phone</a></div><div class="sidebar-section-children"><a href="Request.html">Request</a></div><div class="sidebar-section-children"><a href="Requestor.html">Requestor</a></div><div class="sidebar-section-children"><a href="Session.html">Session</a></div><div class="sidebar-section-children"><a href="UnableToConnect.html">UnableToConnect</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-events"><div>Events</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#event:callDataInfo">callDataInfo</a></div><div class="sidebar-section-children"><a href="global.html#event:callDurationUpdate">callDurationUpdate</a></div><div class="sidebar-section-children"><a href="global.html#event:callEnded">callEnded</a></div><div class="sidebar-section-children"><a href="global.html#event:callQualityReportUpdate">callQualityReportUpdate</a></div><div class="sidebar-section-children"><a href="global.html#event:connectionStateChange">connectionStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:holdStateChange">holdStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:incomingCall">incomingCall</a></div><div class="sidebar-section-children"><a href="global.html#event:muteStateChange">muteStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:recordingStateChange">recordingStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionCreated">sessionCreated</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionRemoved">sessionRemoved</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionStateChange">sessionStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:whisperModeChange">whisperModeChange</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#CALL_DIRECTION">CALL_DIRECTION</a></div><div class="sidebar-section-children"><a href="global.html#CALL_DISPOSITION">CALL_DISPOSITION</a></div><div class="sidebar-section-children"><a href="global.html#CONNECTION_STATE">CONNECTION_STATE</a></div><div class="sidebar-section-children"><a href="global.html#LOGLVL">LOGLVL</a></div><div class="sidebar-section-children"><a href="global.html#SESSION_STATE">SESSION_STATE</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section><article><div class="container-overview"></div><h2 id="type-definitions" class="subsection-title has-anchor">Type Definitions</h2><h3 class="name has-anchor" id="CALL_DIRECTION">CALL_DIRECTION</h3><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">string</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>INBOUND</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Incoming call</td></tr><tr><td class="name"><code>OUTBOUND</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Outgoing call</td></tr><tr><td class="name"><code>TRANSFER</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Transferred call</td></tr><tr><td class="name"><code>LOCAL</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Local call</td></tr><tr><td class="name"><code>AUTOMATED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Call triggered from api / server</td></tr><tr><td class="name"><code>LISTEN</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Listen call</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line2188">line 2188</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="CALL_DISPOSITION">CALL_DISPOSITION</h3><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">string</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>BUSY</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Number was busy</td></tr><tr><td class="name"><code>INVALID_NUMBER</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Number call does not exist</td></tr><tr><td class="name"><code>NO_ANSWER</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Call was not picked up before cancelling</td></tr><tr><td class="name"><code>TEMP_UNAVAIL</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Remote is temporarily unavailable</td></tr><tr><td class="name"><code>NORMAL</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Call was terminated normally</td></tr><tr><td class="name"><code>FAILED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">There was a failure connecting the call</td></tr><tr><td class="name"><code>BARRED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Call was prohibited by server</td></tr><tr><td class="name"><code>REJECTED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Incoming call was rejected</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line2198">line 2198</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="CONNECTION_STATE">CONNECTION_STATE</h3><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">string</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>CONNECTING</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Connecting to server</td></tr><tr><td class="name"><code>CONNECTED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Connected to server</td></tr><tr><td class="name"><code>DISCONNECTED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Disconnected from server</td></tr><tr><td class="name"><code>REGISTERED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Registered on server</td></tr><tr><td class="name"><code>UNREGISTERED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">De-registered from server</td></tr><tr><td class="name"><code>REGISTRATION_FAILED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Registration failed</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line908">line 908</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="LOGLVL">LOGLVL</h3><div class="description">Log levels</div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">number</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>ERROR</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">0 Error messages</td></tr><tr><td class="name"><code>WARN</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">1 Warning meesages</td></tr><tr><td class="name"><code>INFO</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">2 Informational messages (default)</td></tr><tr><td class="name"><code>DEBUG</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">3 Debug messages</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="logger.js.html">logger.js</a>, <a href="logger.js.html#line83">line 83</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="SESSION_STATE">SESSION_STATE</h3><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">string</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>INITIALIZING</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Session is initializing (Gather ICE candidates)</td></tr><tr><td class="name"><code>CALLING</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Sending INVITE to server</td></tr><tr><td class="name"><code>PROGRESS</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Call progress received ('event.code' has new progress status)</td></tr><tr><td class="name"><code>ACTIVE</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Call is active (answered)</td></tr><tr><td class="name"><code>TERMINATED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Call ended</td></tr><tr><td class="name"><code>FAILED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Call failed (see 'event.cause' for more info)</td></tr><tr><td class="name"><code>ON_HOLD</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Call is on-hold</td></tr><tr><td class="name"><code>INCOMING</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Incoming call is waiting</td></tr><tr><td class="name"><code>PLAYBACK</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Playback with pending hangup in progress</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line2090">line 2090</a></li></ul></dd></div></dl><h2 id="events" class="subsection-title has-anchor">Events</h2><h3 class="name has-anchor" id="event:callDataInfo">callDataInfo</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>direction</code></td><td class="type"><span class="param-type"><a href="global.html#CALL_DIRECTION">CALL_DIRECTION</a></span></td><td class="description last">Call direction</td></tr><tr><td class="name"><code>disposition</code></td><td class="type"><span class="param-type"><a href="global.html#CALL_DISPOSITION">CALL_DISPOSITION</a></span></td><td class="description last">The final call disposition</td></tr><tr><td class="name"><code>originatingNumber</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Caller ID number (a-number) used for call</td></tr><tr><td class="name"><code>destinationNumber</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Destination number (b-number) used for call</td></tr><tr><td class="name"><code>startTime</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">Start time of call</td></tr><tr><td class="name"><code>answerTime</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">Time call was answered</td></tr><tr><td class="name"><code>endTime</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">End time of call</td></tr><tr><td class="name"><code>duration</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Total duration of the call (including call setup and remote answer time) (millisec)</td></tr><tr><td class="name"><code>durationStr</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">Total duration of the call formatted as (mm:ss)</td></tr><tr><td class="name"><code>answerDuration</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Time before call was answered (millisec)</td></tr><tr><td class="name"><code>answerDurationStr</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">Time before call was answered formatted as (mm:ss)</td></tr><tr><td class="name"><code>activeDuration</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Active duration of the call (time spend talking) (millisec)</td></tr><tr><td class="name"><code>activeDurationStr</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">Active duration of the call formatted as (mm:ss)</td></tr><tr><td class="name"><code>rateDestinationId</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Rate destination id</td></tr><tr><td class="name"><code>rateDestinationStr</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Rate destination name</td></tr><tr><td class="name"><code>rateDestinationCost</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Rate destination cost / minute</td></tr><tr><td class="name"><code>callConnectFee</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Call attempt/connect cost</td></tr><tr><td class="name"><code>effectiveCidId</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Phone number id used as a-number for call</td></tr><tr><td class="name"><code>effectiveCidNumberStr</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Phone number used as a-number for call</td></tr><tr><td class="name"><code>effectiveCidNameStr</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Phone number name used as a-number for call</td></tr><tr><td class="name"><code>callPrivacy</code></td><td class="type"><span class="param-type">boolean</span></td><td class="description last">Call privacy used for call (number hidden)</td></tr><tr><td class="name"><code>hangupCauseQ850</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Q.850 hangup cause code</td></tr></tbody></table></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>uuid</code></td><td class="type"><span class="param-type">uuid</span></td><td class="description last">Customer Call UUID for session</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line955">line 955</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:callDurationUpdate">callDurationUpdate</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>uuid</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">UUID of session</td></tr><tr><td class="name"><code>beginTime</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">Time session was created</td></tr><tr><td class="name"><code>answerTime</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">Time session was answered</td></tr><tr><td class="name"><code>duration</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">The total duration of the session</td></tr><tr><td class="name"><code>durationStr</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">The duration of the session string formated (mm:ss)</td></tr><tr><td class="name"><code>activeDuration</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">The active duration of the session</td></tr><tr><td class="name"><code>activeDurationStr</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">The active duration of the session string formated (mm:ss)</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line1872">line 1872</a></li></ul></dd></div></dl><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Example</strong><div class="rel"><pre class="prettyprint"><code>// Update duration text on screen
3
+ <![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="dark"><div class="sidebar-container"><div class="sidebar" id="sidebar"><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="EventClient.html">EventClient</a></div><div class="sidebar-section-children"><a href="EventServiceNotConnected.html">EventServiceNotConnected</a></div><div class="sidebar-section-children"><a href="InvalidMediaDevice.html">InvalidMediaDevice</a></div><div class="sidebar-section-children"><a href="InvalidOptions.html">InvalidOptions</a></div><div class="sidebar-section-children"><a href="InvalidParameter.html">InvalidParameter</a></div><div class="sidebar-section-children"><a href="LogHandler.html">LogHandler</a></div><div class="sidebar-section-children"><a href="MediaNotPrepared.html">MediaNotPrepared</a></div><div class="sidebar-section-children"><a href="NoActiveSession.html">NoActiveSession</a></div><div class="sidebar-section-children"><a href="NotAllowed.html">NotAllowed</a></div><div class="sidebar-section-children"><a href="NotReady.html">NotReady</a></div><div class="sidebar-section-children"><a href="Phone.html">Phone</a></div><div class="sidebar-section-children"><a href="Request.html">Request</a></div><div class="sidebar-section-children"><a href="Requestor.html">Requestor</a></div><div class="sidebar-section-children"><a href="Session.html">Session</a></div><div class="sidebar-section-children"><a href="UnableToConnect.html">UnableToConnect</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-events"><div>Events</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#event:callDataInfo">callDataInfo</a></div><div class="sidebar-section-children"><a href="global.html#event:callDurationUpdate">callDurationUpdate</a></div><div class="sidebar-section-children"><a href="global.html#event:callEnded">callEnded</a></div><div class="sidebar-section-children"><a href="global.html#event:callQualityReportUpdate">callQualityReportUpdate</a></div><div class="sidebar-section-children"><a href="global.html#event:connectionStateChange">connectionStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:holdStateChange">holdStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:incomingCall">incomingCall</a></div><div class="sidebar-section-children"><a href="global.html#event:muteStateChange">muteStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:recordingStateChange">recordingStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionCreated">sessionCreated</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionRemoved">sessionRemoved</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionStateChange">sessionStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:whisperModeChange">whisperModeChange</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#CALL_DIRECTION">CALL_DIRECTION</a></div><div class="sidebar-section-children"><a href="global.html#CALL_DISPOSITION">CALL_DISPOSITION</a></div><div class="sidebar-section-children"><a href="global.html#CONNECTION_STATE">CONNECTION_STATE</a></div><div class="sidebar-section-children"><a href="global.html#LOGLVL">LOGLVL</a></div><div class="sidebar-section-children"><a href="global.html#SESSION_STATE">SESSION_STATE</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section><article><div class="container-overview"></div><h2 id="type-definitions" class="subsection-title has-anchor">Type Definitions</h2><h3 class="name has-anchor" id="CALL_DIRECTION">CALL_DIRECTION</h3><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">string</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>INBOUND</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Incoming call</td></tr><tr><td class="name"><code>OUTBOUND</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Outgoing call</td></tr><tr><td class="name"><code>TRANSFER</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Transferred call</td></tr><tr><td class="name"><code>LOCAL</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Local call</td></tr><tr><td class="name"><code>AUTOMATED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Call triggered from api / server</td></tr><tr><td class="name"><code>LISTEN</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Listen call</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line2232">line 2232</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="CALL_DISPOSITION">CALL_DISPOSITION</h3><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">string</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>BUSY</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Number was busy</td></tr><tr><td class="name"><code>INVALID_NUMBER</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Number call does not exist</td></tr><tr><td class="name"><code>NO_ANSWER</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Call was not picked up before cancelling</td></tr><tr><td class="name"><code>TEMP_UNAVAIL</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Remote is temporarily unavailable</td></tr><tr><td class="name"><code>NORMAL</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Call was terminated normally</td></tr><tr><td class="name"><code>FAILED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">There was a failure connecting the call</td></tr><tr><td class="name"><code>BARRED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Call was prohibited by server</td></tr><tr><td class="name"><code>REJECTED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Incoming call was rejected</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line2242">line 2242</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="CONNECTION_STATE">CONNECTION_STATE</h3><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">string</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>CONNECTING</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Connecting to server</td></tr><tr><td class="name"><code>CONNECTED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Connected to server</td></tr><tr><td class="name"><code>DISCONNECTED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Disconnected from server</td></tr><tr><td class="name"><code>REGISTERED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Registered on server</td></tr><tr><td class="name"><code>UNREGISTERED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">De-registered from server</td></tr><tr><td class="name"><code>REGISTRATION_FAILED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Registration failed</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line928">line 928</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="LOGLVL">LOGLVL</h3><div class="description">Log levels</div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">number</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>ERROR</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">0 Error messages</td></tr><tr><td class="name"><code>WARN</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">1 Warning meesages</td></tr><tr><td class="name"><code>INFO</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">2 Informational messages (default)</td></tr><tr><td class="name"><code>DEBUG</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">3 Debug messages</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="logger.js.html">logger.js</a>, <a href="logger.js.html#line83">line 83</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="SESSION_STATE">SESSION_STATE</h3><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">string</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>INITIALIZING</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Session is initializing (Gather ICE candidates)</td></tr><tr><td class="name"><code>CALLING</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Sending INVITE to server</td></tr><tr><td class="name"><code>PROGRESS</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Call progress received ('event.code' has new progress status)</td></tr><tr><td class="name"><code>ACTIVE</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Call is active (answered)</td></tr><tr><td class="name"><code>TERMINATED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Call ended</td></tr><tr><td class="name"><code>FAILED</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Call failed (see 'event.cause' for more info)</td></tr><tr><td class="name"><code>ON_HOLD</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Call is on-hold</td></tr><tr><td class="name"><code>INCOMING</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Incoming call is waiting</td></tr><tr><td class="name"><code>PLAYBACK</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Playback with pending hangup in progress</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line2134">line 2134</a></li></ul></dd></div></dl><h2 id="events" class="subsection-title has-anchor">Events</h2><h3 class="name has-anchor" id="event:callDataInfo">callDataInfo</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>direction</code></td><td class="type"><span class="param-type"><a href="global.html#CALL_DIRECTION">CALL_DIRECTION</a></span></td><td class="description last">Call direction</td></tr><tr><td class="name"><code>disposition</code></td><td class="type"><span class="param-type"><a href="global.html#CALL_DISPOSITION">CALL_DISPOSITION</a></span></td><td class="description last">The final call disposition</td></tr><tr><td class="name"><code>originatingNumber</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Caller ID number (a-number) used for call</td></tr><tr><td class="name"><code>destinationNumber</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Destination number (b-number) used for call</td></tr><tr><td class="name"><code>startTime</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">Start time of call</td></tr><tr><td class="name"><code>answerTime</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">Time call was answered</td></tr><tr><td class="name"><code>endTime</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">End time of call</td></tr><tr><td class="name"><code>duration</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Total duration of the call (including call setup and remote answer time) (millisec)</td></tr><tr><td class="name"><code>durationStr</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">Total duration of the call formatted as (mm:ss)</td></tr><tr><td class="name"><code>answerDuration</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Time before call was answered (millisec)</td></tr><tr><td class="name"><code>answerDurationStr</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">Time before call was answered formatted as (mm:ss)</td></tr><tr><td class="name"><code>activeDuration</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Active duration of the call (time spend talking) (millisec)</td></tr><tr><td class="name"><code>activeDurationStr</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">Active duration of the call formatted as (mm:ss)</td></tr><tr><td class="name"><code>rateDestinationId</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Rate destination id</td></tr><tr><td class="name"><code>rateDestinationStr</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Rate destination name</td></tr><tr><td class="name"><code>rateDestinationCost</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Rate destination cost / minute</td></tr><tr><td class="name"><code>callConnectFee</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Call attempt/connect cost</td></tr><tr><td class="name"><code>effectiveCidId</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Phone number id used as a-number for call</td></tr><tr><td class="name"><code>effectiveCidNumberStr</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Phone number used as a-number for call</td></tr><tr><td class="name"><code>effectiveCidNameStr</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Phone number name used as a-number for call</td></tr><tr><td class="name"><code>callPrivacy</code></td><td class="type"><span class="param-type">boolean</span></td><td class="description last">Call privacy used for call (number hidden)</td></tr><tr><td class="name"><code>hangupCauseQ850</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Q.850 hangup cause code</td></tr></tbody></table></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>uuid</code></td><td class="type"><span class="param-type">uuid</span></td><td class="description last">Customer Call UUID for session</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line975">line 975</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:callDurationUpdate">callDurationUpdate</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>uuid</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">UUID of session</td></tr><tr><td class="name"><code>beginTime</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">Time session was created</td></tr><tr><td class="name"><code>answerTime</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">Time session was answered</td></tr><tr><td class="name"><code>duration</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">The total duration of the session</td></tr><tr><td class="name"><code>durationStr</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">The duration of the session string formated (mm:ss)</td></tr><tr><td class="name"><code>activeDuration</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">The active duration of the session</td></tr><tr><td class="name"><code>activeDurationStr</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">The active duration of the session string formated (mm:ss)</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line1916">line 1916</a></li></ul></dd></div></dl><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Example</strong><div class="rel"><pre class="prettyprint"><code>// Update duration text on screen
4
4
  session.on('callDurationUpdate', function (event) {
5
5
  document.getElementById('duration').textContent = event.durationStr;
6
- });</code></pre></div></div><h3 class="name has-anchor" id="event:callEnded">callEnded</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>direction</code></td><td class="type"><span class="param-type"><a href="global.html#CALL_DIRECTION">CALL_DIRECTION</a></span></td><td class="description last">Call direction</td></tr><tr><td class="name"><code>disposition</code></td><td class="type"><span class="param-type"><a href="global.html#CALL_DISPOSITION">CALL_DISPOSITION</a></span></td><td class="description last">The final call disposition</td></tr><tr><td class="name"><code>originatingNumber</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Caller ID number (a-number) used for call</td></tr><tr><td class="name"><code>destinationNumber</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Destination number (b-number) used for call</td></tr><tr><td class="name"><code>startTime</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">Start time of call</td></tr><tr><td class="name"><code>answerTime</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">Time call was answered</td></tr><tr><td class="name"><code>endTime</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">End time of call</td></tr><tr><td class="name"><code>duration</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Total duration of the call (including call setup and remote answer time) (millisec)</td></tr><tr><td class="name"><code>durationStr</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">Total duration of the call formatted as (mm:ss)</td></tr><tr><td class="name"><code>answerDuration</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Time before call was answered (millisec)</td></tr><tr><td class="name"><code>answerDurationStr</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">Time before call was answered formatted as (mm:ss)</td></tr><tr><td class="name"><code>activeDuration</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Active duration of the call (time spend talking) (millisec)</td></tr><tr><td class="name"><code>activeDurationStr</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">Active duration of the call formatted as (mm:ss)</td></tr><tr><td class="name"><code>callQualityReport</code></td><td class="type"><span class="param-type">object</span></td><td class="description last">Call quality report (see callQualityReportUpdate event for details)</td></tr></tbody></table></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>uuid</code></td><td class="type"><span class="param-type">uuid</span></td><td class="description last">Customer Call UUID for session</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line2289">line 2289</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:callQualityReportUpdate">callQualityReportUpdate</h3><div class="description">Contains information about call quality (fires in interval of 5 sec). Payload contains "total" (metrics for whole session) and "delta" (metrics last 5 secs).</div><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>uuid</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">UUID of session</td></tr><tr><td class="name"><code>outboundPacketsSent</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Number of packets sent</td></tr><tr><td class="name"><code>outboundBytesSent</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Number of bytes sent</td></tr><tr><td class="name"><code>outboundPacketsLost</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Number of packets lost to remote</td></tr><tr><td class="name"><code>outboundPacketLossPct</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Percentage of outbound packets lost</td></tr><tr><td class="name"><code>outboundJitter</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Network jitter to remote (ms)</td></tr><tr><td class="name"><code>inboundPacketsReceived</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Number of packets received</td></tr><tr><td class="name"><code>inboundBytesReceived</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Number of bytes received</td></tr><tr><td class="name"><code>inboundPacketsLost</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Number of packets lost from remote</td></tr><tr><td class="name"><code>inboundPacketLossPct</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Percentage of inbound packets lost</td></tr><tr><td class="name"><code>inboundJitter</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Network jitter from remote (ms)</td></tr><tr><td class="name"><code>roundTripTime</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Latency in ms to media gateway</td></tr><tr><td class="name"><code>effectiveLatency</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Effective latency with combined jitter impact</td></tr><tr><td class="name"><code>rFactor</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Quality of media stream (0 - 100%)</td></tr><tr><td class="name"><code>mos</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Synthetic MOS</td></tr><tr><td class="name"><code>qualityString</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">Quality string [Excellent, Good, Fair, Poor, Bad]</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line1916">line 1916</a></li></ul></dd></div></dl><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Example</strong><div class="rel"><pre class="prettyprint"><code>// Update call quality text on screen
6
+ });</code></pre></div></div><h3 class="name has-anchor" id="event:callEnded">callEnded</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>direction</code></td><td class="type"><span class="param-type"><a href="global.html#CALL_DIRECTION">CALL_DIRECTION</a></span></td><td class="description last">Call direction</td></tr><tr><td class="name"><code>disposition</code></td><td class="type"><span class="param-type"><a href="global.html#CALL_DISPOSITION">CALL_DISPOSITION</a></span></td><td class="description last">The final call disposition</td></tr><tr><td class="name"><code>originatingNumber</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Caller ID number (a-number) used for call</td></tr><tr><td class="name"><code>destinationNumber</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Destination number (b-number) used for call</td></tr><tr><td class="name"><code>startTime</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">Start time of call</td></tr><tr><td class="name"><code>answerTime</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">Time call was answered</td></tr><tr><td class="name"><code>endTime</code></td><td class="type"><span class="param-type">Date</span></td><td class="description last">End time of call</td></tr><tr><td class="name"><code>duration</code></td><td class="type"><span class="param-type">number</span></td><td class="description last">Total duration of the call (including call setup and remote answer time) (millisec)</td></tr><tr><td class="name"><code>durationStr</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">Total duration of the call formatted as (mm:ss)</td></tr><tr><td class="name"><code>answerDuration</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Time before call was answered (millisec)</td></tr><tr><td class="name"><code>answerDurationStr</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">Time before call was answered formatted as (mm:ss)</td></tr><tr><td class="name"><code>activeDuration</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Active duration of the call (time spend talking) (millisec)</td></tr><tr><td class="name"><code>activeDurationStr</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">Active duration of the call formatted as (mm:ss)</td></tr><tr><td class="name"><code>callQualityReport</code></td><td class="type"><span class="param-type">object</span></td><td class="description last">Call quality report (see callQualityReportUpdate event for details)</td></tr></tbody></table></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>uuid</code></td><td class="type"><span class="param-type">uuid</span></td><td class="description last">Customer Call UUID for session</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line2333">line 2333</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:callQualityReportUpdate">callQualityReportUpdate</h3><div class="description">Contains information about call quality (fires in interval of 5 sec). Payload contains "total" (metrics for whole session) and "delta" (metrics last 5 secs).</div><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>uuid</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">UUID of session</td></tr><tr><td class="name"><code>outboundPacketsSent</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Number of packets sent</td></tr><tr><td class="name"><code>outboundBytesSent</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Number of bytes sent</td></tr><tr><td class="name"><code>outboundPacketsLost</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Number of packets lost to remote</td></tr><tr><td class="name"><code>outboundPacketLossPct</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Percentage of outbound packets lost</td></tr><tr><td class="name"><code>outboundJitter</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Network jitter to remote (ms)</td></tr><tr><td class="name"><code>inboundPacketsReceived</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Number of packets received</td></tr><tr><td class="name"><code>inboundBytesReceived</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Number of bytes received</td></tr><tr><td class="name"><code>inboundPacketsLost</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Number of packets lost from remote</td></tr><tr><td class="name"><code>inboundPacketLossPct</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Percentage of inbound packets lost</td></tr><tr><td class="name"><code>inboundJitter</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Network jitter from remote (ms)</td></tr><tr><td class="name"><code>roundTripTime</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Latency in ms to media gateway</td></tr><tr><td class="name"><code>effectiveLatency</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Effective latency with combined jitter impact</td></tr><tr><td class="name"><code>rFactor</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Quality of media stream (0 - 100%)</td></tr><tr><td class="name"><code>mos</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last">Synthetic MOS</td></tr><tr><td class="name"><code>qualityString</code></td><td class="type"><span class="param-type">String</span></td><td class="description last">Quality string [Excellent, Good, Fair, Poor, Bad]</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line1960">line 1960</a></li></ul></dd></div></dl><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Example</strong><div class="rel"><pre class="prettyprint"><code>// Update call quality text on screen
7
7
  session.on('callQualityReportUpdate', (report) => {
8
8
  document.getElementById('quality_text').textContent = report.delta.qualityString;
9
9
  document.getElementById('latency').textContent = report.delta.effectiveLatency;
10
- });</code></pre></div></div><h3 class="name has-anchor" id="event:connectionStateChange">connectionStateChange</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>state</code></td><td class="type"><span class="param-type"><a href="global.html#CONNECTION_STATE">CONNECTION_STATE</a></span></td><td class="attributes"></td><td class="description last">The current connection state</td></tr><tr><td class="name"><code>cause</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last">For REGISTRATION_FAILED only: JsSIP's registrationFailed cause, e.g. 'Connection Error', 'Request Timeout' (network/transport issues, JsSIP will keep retrying on its own), 'Authentication Error' (401), or 'Rejected' (403 - account disabled or credentials rejected by the registrar)</td></tr><tr><td class="name"><code>statusCode</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="description last">For REGISTRATION_FAILED only: the SIP status code of the failed REGISTER response, when JsSIP received one (e.g. 401, 403)</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line919">line 919</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:holdStateChange">holdStateChange</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>state</code></td><td class="type"><span class="param-type">boolean</span></td><td class="description last">New hold state</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line2261">line 2261</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:incomingCall">incomingCall</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>session</code></td><td class="type"><span class="param-type"><a href="Session.html">Session</a></span></td><td class="description last">New incoming session</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line940">line 940</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:muteStateChange">muteStateChange</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>state</code></td><td class="type"><span class="param-type">boolean</span></td><td class="description last">Mute state (true = muted / false = unmuted)</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line2247">line 2247</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:recordingStateChange">recordingStateChange</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>state</code></td><td class="type"><span class="param-type">boolean</span></td><td class="description last">New recording state</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line2233">line 2233</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:sessionCreated">sessionCreated</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>session</code></td><td class="type"><span class="param-type">session</span></td><td class="description last">New session created</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line834">line 834</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:sessionRemoved">sessionRemoved</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>session</code></td><td class="type"><span class="param-type">session</span></td><td class="description last">Session removed</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line858">line 858</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:sessionStateChange">sessionStateChange</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>state</code></td><td class="type"><span class="param-type"><a href="global.html#SESSION_STATE">SESSION_STATE</a></span></td><td class="description last">The current session state</td></tr><tr><td class="name"><code>uuid</code></td><td class="type"><span class="param-type">uuid</span></td><td class="description last">Call UUID for session</td></tr><tr><td class="name"><code>originName</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Originating name of call [INCOMING only]</td></tr><tr><td class="name"><code>originatingNumber</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Originating phone number of call [INCOMING only]</td></tr><tr><td class="name"><code>destinationNumber</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Destination number of call</td></tr><tr><td class="name"><code>cause</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Fail cause [FAILED only]</td></tr><tr><td class="name"><code>message</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Fail message description [FAILED only]</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line2105">line 2105</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:whisperModeChange">whisperModeChange</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>mode</code></td><td class="type"><span class="param-type">boolean</span></td><td class="description last">New whisper mode (0 = No whisper / 1 = Local only / 2 = Three way)</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line2275">line 2275</a></li></ul></dd></div></dl></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><div class="mobile-nav-links"></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="EventClient.html">EventClient</a></div><div class="sidebar-section-children"><a href="EventServiceNotConnected.html">EventServiceNotConnected</a></div><div class="sidebar-section-children"><a href="InvalidMediaDevice.html">InvalidMediaDevice</a></div><div class="sidebar-section-children"><a href="InvalidOptions.html">InvalidOptions</a></div><div class="sidebar-section-children"><a href="InvalidParameter.html">InvalidParameter</a></div><div class="sidebar-section-children"><a href="LogHandler.html">LogHandler</a></div><div class="sidebar-section-children"><a href="MediaNotPrepared.html">MediaNotPrepared</a></div><div class="sidebar-section-children"><a href="NoActiveSession.html">NoActiveSession</a></div><div class="sidebar-section-children"><a href="NotAllowed.html">NotAllowed</a></div><div class="sidebar-section-children"><a href="NotReady.html">NotReady</a></div><div class="sidebar-section-children"><a href="Phone.html">Phone</a></div><div class="sidebar-section-children"><a href="Request.html">Request</a></div><div class="sidebar-section-children"><a href="Requestor.html">Requestor</a></div><div class="sidebar-section-children"><a href="Session.html">Session</a></div><div class="sidebar-section-children"><a href="UnableToConnect.html">UnableToConnect</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-events"><div>Events</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#event:callDataInfo">callDataInfo</a></div><div class="sidebar-section-children"><a href="global.html#event:callDurationUpdate">callDurationUpdate</a></div><div class="sidebar-section-children"><a href="global.html#event:callEnded">callEnded</a></div><div class="sidebar-section-children"><a href="global.html#event:callQualityReportUpdate">callQualityReportUpdate</a></div><div class="sidebar-section-children"><a href="global.html#event:connectionStateChange">connectionStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:holdStateChange">holdStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:incomingCall">incomingCall</a></div><div class="sidebar-section-children"><a href="global.html#event:muteStateChange">muteStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:recordingStateChange">recordingStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionCreated">sessionCreated</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionRemoved">sessionRemoved</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionStateChange">sessionStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:whisperModeChange">whisperModeChange</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#CALL_DIRECTION">CALL_DIRECTION</a></div><div class="sidebar-section-children"><a href="global.html#CALL_DISPOSITION">CALL_DISPOSITION</a></div><div class="sidebar-section-children"><a href="global.html#CONNECTION_STATE">CONNECTION_STATE</a></div><div class="sidebar-section-children"><a href="global.html#LOGLVL">LOGLVL</a></div><div class="sidebar-section-children"><a href="global.html#SESSION_STATE">SESSION_STATE</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>
10
+ });</code></pre></div></div><h3 class="name has-anchor" id="event:connectionStateChange">connectionStateChange</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>state</code></td><td class="type"><span class="param-type"><a href="global.html#CONNECTION_STATE">CONNECTION_STATE</a></span></td><td class="attributes"></td><td class="description last">The current connection state</td></tr><tr><td class="name"><code>cause</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last">For REGISTRATION_FAILED only: JsSIP's registrationFailed cause, e.g. 'Connection Error', 'Request Timeout' (network/transport issues, JsSIP will keep retrying on its own), 'Authentication Error' (401), or 'Rejected' (403 - account disabled or credentials rejected by the registrar)</td></tr><tr><td class="name"><code>statusCode</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="description last">For REGISTRATION_FAILED only: the SIP status code of the failed REGISTER response, when JsSIP received one (e.g. 401, 403)</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line939">line 939</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:holdStateChange">holdStateChange</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>state</code></td><td class="type"><span class="param-type">boolean</span></td><td class="description last">New hold state</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line2305">line 2305</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:incomingCall">incomingCall</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>session</code></td><td class="type"><span class="param-type"><a href="Session.html">Session</a></span></td><td class="description last">New incoming session</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line960">line 960</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:muteStateChange">muteStateChange</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>state</code></td><td class="type"><span class="param-type">boolean</span></td><td class="description last">Mute state (true = muted / false = unmuted)</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line2291">line 2291</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:recordingStateChange">recordingStateChange</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>state</code></td><td class="type"><span class="param-type">boolean</span></td><td class="description last">New recording state</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line2277">line 2277</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:sessionCreated">sessionCreated</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>session</code></td><td class="type"><span class="param-type">session</span></td><td class="description last">New session created</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line854">line 854</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:sessionRemoved">sessionRemoved</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>session</code></td><td class="type"><span class="param-type">session</span></td><td class="description last">Session removed</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line878">line 878</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:sessionStateChange">sessionStateChange</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>state</code></td><td class="type"><span class="param-type"><a href="global.html#SESSION_STATE">SESSION_STATE</a></span></td><td class="description last">The current session state</td></tr><tr><td class="name"><code>uuid</code></td><td class="type"><span class="param-type">uuid</span></td><td class="description last">Call UUID for session</td></tr><tr><td class="name"><code>originName</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Originating name of call [INCOMING only]</td></tr><tr><td class="name"><code>originatingNumber</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Originating phone number of call [INCOMING only]</td></tr><tr><td class="name"><code>destinationNumber</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Destination number of call</td></tr><tr><td class="name"><code>cause</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Fail cause [FAILED only]</td></tr><tr><td class="name"><code>message</code></td><td class="type"><span class="param-type">string</span></td><td class="description last">Fail message description [FAILED only]</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line2149">line 2149</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:whisperModeChange">whisperModeChange</h3><div class="method-member-container mt-20"><strong>Type:</strong><ul><li><span class="param-type">object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>mode</code></td><td class="type"><span class="param-type">boolean</span></td><td class="description last">New whisper mode (0 = No whisper / 1 = Local only / 2 = Three way)</td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="phone-client.js.html">phone-client.js</a>, <a href="phone-client.js.html#line2319">line 2319</a></li></ul></dd></div></dl></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><div class="mobile-nav-links"></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="EventClient.html">EventClient</a></div><div class="sidebar-section-children"><a href="EventServiceNotConnected.html">EventServiceNotConnected</a></div><div class="sidebar-section-children"><a href="InvalidMediaDevice.html">InvalidMediaDevice</a></div><div class="sidebar-section-children"><a href="InvalidOptions.html">InvalidOptions</a></div><div class="sidebar-section-children"><a href="InvalidParameter.html">InvalidParameter</a></div><div class="sidebar-section-children"><a href="LogHandler.html">LogHandler</a></div><div class="sidebar-section-children"><a href="MediaNotPrepared.html">MediaNotPrepared</a></div><div class="sidebar-section-children"><a href="NoActiveSession.html">NoActiveSession</a></div><div class="sidebar-section-children"><a href="NotAllowed.html">NotAllowed</a></div><div class="sidebar-section-children"><a href="NotReady.html">NotReady</a></div><div class="sidebar-section-children"><a href="Phone.html">Phone</a></div><div class="sidebar-section-children"><a href="Request.html">Request</a></div><div class="sidebar-section-children"><a href="Requestor.html">Requestor</a></div><div class="sidebar-section-children"><a href="Session.html">Session</a></div><div class="sidebar-section-children"><a href="UnableToConnect.html">UnableToConnect</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-events"><div>Events</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#event:callDataInfo">callDataInfo</a></div><div class="sidebar-section-children"><a href="global.html#event:callDurationUpdate">callDurationUpdate</a></div><div class="sidebar-section-children"><a href="global.html#event:callEnded">callEnded</a></div><div class="sidebar-section-children"><a href="global.html#event:callQualityReportUpdate">callQualityReportUpdate</a></div><div class="sidebar-section-children"><a href="global.html#event:connectionStateChange">connectionStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:holdStateChange">holdStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:incomingCall">incomingCall</a></div><div class="sidebar-section-children"><a href="global.html#event:muteStateChange">muteStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:recordingStateChange">recordingStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionCreated">sessionCreated</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionRemoved">sessionRemoved</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionStateChange">sessionStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:whisperModeChange">whisperModeChange</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#CALL_DIRECTION">CALL_DIRECTION</a></div><div class="sidebar-section-children"><a href="global.html#CALL_DISPOSITION">CALL_DISPOSITION</a></div><div class="sidebar-section-children"><a href="global.html#CONNECTION_STATE">CONNECTION_STATE</a></div><div class="sidebar-section-children"><a href="global.html#LOGLVL">LOGLVL</a></div><div class="sidebar-section-children"><a href="global.html#SESSION_STATE">SESSION_STATE</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>
@@ -28,6 +28,7 @@ const options = {
28
28
  autoRemoveSessionTime: 3000,
29
29
  playRingOnIncoming: true,
30
30
  playCallInitializedTone: false,
31
+ playCallEndedTone: false,
31
32
  };
32
33
 
33
34
  // DTMF Frequency table
@@ -64,6 +65,11 @@ const ST_CALLINIT = [
64
65
  { d: 200, f1: 500, f2: 0, g: 0 },
65
66
  { d: 200, f1: 700, f2: 0, g: 5000 },
66
67
  ];
68
+ const ST_CALLENDED = [
69
+ { d: 150, f1: 600, f2: 0, g: 50 },
70
+ { d: 150, f1: 500, f2: 0, g: 50 },
71
+ { d: 150, f1: 400, f2: 0, g: 0 },
72
+ ];
67
73
  const ST_RINGBACK = [{ d: 1000, f1: 425, f2: 0, g: 4000 }];
68
74
  const ST_INCOMING = [
69
75
  { d: 150, f1: 400, f2: 0, g: 0 },
@@ -222,10 +228,7 @@ export class Phone extends EventEmitter {
222
228
  return false;
223
229
  }
224
230
  const sinkId = deviceId || '';
225
- await Promise.all([
226
- this._remoteAudioElement.setSinkId(sinkId),
227
- this._toneAudioElement.setSinkId(sinkId),
228
- ]);
231
+ await Promise.all([this._remoteAudioElement.setSinkId(sinkId), this._toneAudioElement.setSinkId(sinkId)]);
229
232
  return true;
230
233
  }
231
234
 
@@ -247,6 +250,7 @@ export class Phone extends EventEmitter {
247
250
  * @param {number} [phoneOptions.autoRemoveSessionTime=3000] Automatically remove session after interval specified
248
251
  * @param {number} [phoneOptions.playRingOnIncoming=true] Play ringing tones on incoming calls
249
252
  * @param {number} [phoneOptions.playCallInitializedTone=false] Play tone when call has been initiated (before progress/ringback tones)
253
+ * @param {boolean} [phoneOptions.playCallEndedTone=false] Play tone once when an answered call ends without the agent hanging up (remote hangup, server hangup, connection loss, timeouts)
250
254
  *
251
255
  * @throws MediaNotPrepared - If {@link prepareMedia} was not called and resolved prior to calling this method
252
256
  * @throws InvalidOptions - If one or more options are invalid
@@ -682,14 +686,18 @@ export class Phone extends EventEmitter {
682
686
 
683
687
  // Set timer to stop tone again
684
688
  const self = this;
685
- this._toneTimer = setTimeout(function () {
686
- self.stopTone();
689
+ const timer = setTimeout(function () {
690
+ // A later playTone() has taken over the oscillators; don't silence it or cancel its timer
691
+ if (self._toneTimer === timer) {
692
+ self.stopTone();
693
+ }
687
694
 
688
695
  // Handle callback now
689
696
  if (callback) {
690
697
  callback();
691
698
  }
692
699
  }, duration);
700
+ this._toneTimer = timer;
693
701
  }
694
702
 
695
703
  /**
@@ -732,6 +740,18 @@ export class Phone extends EventEmitter {
732
740
  }
733
741
  }
734
742
 
743
+ // Play a tone sequence once. A repeat tone starting meanwhile (e.g. a new call's ringing) cancels the rest.
744
+ _playToneSequence(sequence, pos = 0) {
745
+ const toneDef = sequence[pos];
746
+ if (!toneDef || this._repeatToneActive) {
747
+ return;
748
+ }
749
+ const self = this;
750
+ this.playTone(toneDef.d, toneDef.f1, toneDef.f2, function () {
751
+ setTimeout(self._playToneSequence.bind(self, sequence, pos + 1), toneDef.g);
752
+ });
753
+ }
754
+
735
755
  // End repeating tones
736
756
  _endRepeatTone() {
737
757
  if (this._repeatToneActive) {
@@ -1061,6 +1081,7 @@ export class Session extends EventEmitter {
1061
1081
  this._isListenCall = false;
1062
1082
  this._whisperMode = null;
1063
1083
  this._manualDisposition = null;
1084
+ this._transferInitiated = false;
1064
1085
 
1065
1086
  // Quality report
1066
1087
  this._rtcpStatsTimer = null;
@@ -1221,6 +1242,13 @@ export class Session extends EventEmitter {
1221
1242
  // Hookup events
1222
1243
  const self = this;
1223
1244
 
1245
+ // make sure to remove stereo=1 from the SDP
1246
+ this._webRTCSession.on('sdp', function (e) {
1247
+ if (e.originator === 'local') {
1248
+ e.sdp = Tools.withoutOpusStereo(e.sdp);
1249
+ }
1250
+ });
1251
+
1224
1252
  // ICE CANDIDATES
1225
1253
  this._webRTCSession.on('icecandidate', function (event) {
1226
1254
  const c = event.candidate;
@@ -1320,10 +1348,17 @@ export class Session extends EventEmitter {
1320
1348
  self._setSessionState('ACTIVE');
1321
1349
  });
1322
1350
 
1323
- this._webRTCSession.on('ended', function (/* data */) {
1351
+ this._webRTCSession.on('ended', function (data) {
1324
1352
  // End any ringsbacks if needed
1325
1353
  self._phone._endRepeatTone();
1326
1354
 
1355
+ // jssip fires 'ended' once a call is answered. Its own errors (connection loss, timeouts, ICE failure)
1356
+ // also end as 'local' but with their own cause, so only a local BYE is the agent hanging up.
1357
+ const agentHangup = data.originator === 'local' &amp;&amp; data.cause === JsSIP.C.causes.BYE;
1358
+ if (self._phone.options.playCallEndedTone &amp;&amp; !agentHangup &amp;&amp; !self._transferInitiated) {
1359
+ self._phone._playToneSequence(ST_CALLENDED);
1360
+ }
1361
+
1327
1362
  self._callEndTime = Date.now();
1328
1363
 
1329
1364
  // Clear answer call timeout timer if needed
@@ -1765,6 +1800,10 @@ export class Session extends EventEmitter {
1765
1800
  transfer(dstSession) {
1766
1801
  this.log.info(`Transferring ${this.uuid} => ${dstSession.uuid}`);
1767
1802
 
1803
+ // The server hangs up both legs once the transfer completes - that's the agent's doing, no call-ended tone
1804
+ this._transferInitiated = true;
1805
+ dstSession._transferInitiated = true;
1806
+
1768
1807
  // Create ReferSubscriber event class
1769
1808
  const referSubscriber = this._webRTCSession.refer(this._webRTCSession._request.ruri, {
1770
1809
  replaces: dstSession._webRTCSession,
@@ -1779,10 +1818,15 @@ export class Session extends EventEmitter {
1779
1818
 
1780
1819
  referSubscriber.on('requestFailed', function (cause) {
1781
1820
  self.log.error(`Transfer rejected: ${cause}`);
1821
+ // Legs stay up, so a later hangup by the other party should get the cue
1822
+ self._transferInitiated = false;
1823
+ dstSession._transferInitiated = false;
1782
1824
  });
1783
1825
 
1784
1826
  referSubscriber.on('failed', function (cause) {
1785
1827
  self.log.error(`Transfer failed: ${cause}`);
1828
+ self._transferInitiated = false;
1829
+ dstSession._transferInitiated = false;
1786
1830
  });
1787
1831
  }
1788
1832
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telegenta/webclient",
3
- "version": "3.2.2",
3
+ "version": "3.4.0",
4
4
  "type": "module",
5
5
  "description": "Webphone and event client library",
6
6
  "main": "dist/telegenta.js",