@telegenta/webclient 3.3.0 → 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/demos/phone_client.html +3 -0
- package/dist/telegenta.js +43 -3
- package/dist/telegenta.min.js +1 -1
- package/docs/Phone.html +2 -2
- package/docs/Session.html +2 -2
- package/docs/global.html +3 -3
- package/docs/phone-client.js.html +43 -3
- package/package.json +1 -1
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#line2192">line 2192</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#line2202">line 2202</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#line905">line 905</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#line2094">line 2094</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#line952">line 952</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#line1876">line 1876</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#
|
|
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"><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"><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#line916">line 916</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#line2265">line 2265</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#line937">line 937</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#line2251">line 2251</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#line2237">line 2237</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#line831">line 831</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#line855">line 855</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#line2109">line 2109</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#line2279">line 2279</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"><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"><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 },
|
|
@@ -244,6 +250,7 @@ export class Phone extends EventEmitter {
|
|
|
244
250
|
* @param {number} [phoneOptions.autoRemoveSessionTime=3000] Automatically remove session after interval specified
|
|
245
251
|
* @param {number} [phoneOptions.playRingOnIncoming=true] Play ringing tones on incoming calls
|
|
246
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)
|
|
247
254
|
*
|
|
248
255
|
* @throws MediaNotPrepared - If {@link prepareMedia} was not called and resolved prior to calling this method
|
|
249
256
|
* @throws InvalidOptions - If one or more options are invalid
|
|
@@ -679,14 +686,18 @@ export class Phone extends EventEmitter {
|
|
|
679
686
|
|
|
680
687
|
// Set timer to stop tone again
|
|
681
688
|
const self = this;
|
|
682
|
-
|
|
683
|
-
|
|
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
|
+
}
|
|
684
694
|
|
|
685
695
|
// Handle callback now
|
|
686
696
|
if (callback) {
|
|
687
697
|
callback();
|
|
688
698
|
}
|
|
689
699
|
}, duration);
|
|
700
|
+
this._toneTimer = timer;
|
|
690
701
|
}
|
|
691
702
|
|
|
692
703
|
/**
|
|
@@ -729,6 +740,18 @@ export class Phone extends EventEmitter {
|
|
|
729
740
|
}
|
|
730
741
|
}
|
|
731
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
|
+
|
|
732
755
|
// End repeating tones
|
|
733
756
|
_endRepeatTone() {
|
|
734
757
|
if (this._repeatToneActive) {
|
|
@@ -1058,6 +1081,7 @@ export class Session extends EventEmitter {
|
|
|
1058
1081
|
this._isListenCall = false;
|
|
1059
1082
|
this._whisperMode = null;
|
|
1060
1083
|
this._manualDisposition = null;
|
|
1084
|
+
this._transferInitiated = false;
|
|
1061
1085
|
|
|
1062
1086
|
// Quality report
|
|
1063
1087
|
this._rtcpStatsTimer = null;
|
|
@@ -1324,10 +1348,17 @@ export class Session extends EventEmitter {
|
|
|
1324
1348
|
self._setSessionState('ACTIVE');
|
|
1325
1349
|
});
|
|
1326
1350
|
|
|
1327
|
-
this._webRTCSession.on('ended', function (
|
|
1351
|
+
this._webRTCSession.on('ended', function (data) {
|
|
1328
1352
|
// End any ringsbacks if needed
|
|
1329
1353
|
self._phone._endRepeatTone();
|
|
1330
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' && data.cause === JsSIP.C.causes.BYE;
|
|
1358
|
+
if (self._phone.options.playCallEndedTone && !agentHangup && !self._transferInitiated) {
|
|
1359
|
+
self._phone._playToneSequence(ST_CALLENDED);
|
|
1360
|
+
}
|
|
1361
|
+
|
|
1331
1362
|
self._callEndTime = Date.now();
|
|
1332
1363
|
|
|
1333
1364
|
// Clear answer call timeout timer if needed
|
|
@@ -1769,6 +1800,10 @@ export class Session extends EventEmitter {
|
|
|
1769
1800
|
transfer(dstSession) {
|
|
1770
1801
|
this.log.info(`Transferring ${this.uuid} => ${dstSession.uuid}`);
|
|
1771
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
|
+
|
|
1772
1807
|
// Create ReferSubscriber event class
|
|
1773
1808
|
const referSubscriber = this._webRTCSession.refer(this._webRTCSession._request.ruri, {
|
|
1774
1809
|
replaces: dstSession._webRTCSession,
|
|
@@ -1783,10 +1818,15 @@ export class Session extends EventEmitter {
|
|
|
1783
1818
|
|
|
1784
1819
|
referSubscriber.on('requestFailed', function (cause) {
|
|
1785
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;
|
|
1786
1824
|
});
|
|
1787
1825
|
|
|
1788
1826
|
referSubscriber.on('failed', function (cause) {
|
|
1789
1827
|
self.log.error(`Transfer failed: ${cause}`);
|
|
1828
|
+
self._transferInitiated = false;
|
|
1829
|
+
dstSession._transferInitiated = false;
|
|
1790
1830
|
});
|
|
1791
1831
|
}
|
|
1792
1832
|
|