@exotel-npm-dev/webrtc-client-sdk 2.0.5 → 3.0.2
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/Changelog +4 -4
- package/Makefile +2 -2
- package/dist/exotelsdk.js +1940 -1593
- package/dist/exotelsdk.js.map +1 -1
- package/index.js +2 -1
- package/package.json +2 -2
- package/src/api/callAPI/Call.js +17 -13
- package/src/api/omAPI/Diagnostics.js +48 -19
- package/src/api/omAPI/DiagnosticsListener.js +19 -8
- package/src/api/registerAPI/RegisterListener.js +2 -2
- package/src/listeners/CallListener.js +28 -31
- package/src/listeners/Callback.js +59 -50
- package/src/listeners/ExWebClient.js +224 -208
- package/src/listeners/ExotelVoiceClientListener.js +18 -7
- package/src/listeners/SessionListeners.js +114 -96
package/index.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { ExotelWebClient } from './src/listeners/ExWebClient';
|
|
2
|
+
export { ExotelWebClient };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exotel-npm-dev/webrtc-client-sdk",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.2",
|
|
4
4
|
"description": "client sdk for webrtc based on webrtc core sdk",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -29,6 +29,6 @@
|
|
|
29
29
|
"webpack-cli": "^4.10.0"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@exotel-npm-dev/webrtc-core-sdk": "^
|
|
32
|
+
"@exotel-npm-dev/webrtc-core-sdk": "^3.0.2"
|
|
33
33
|
}
|
|
34
34
|
}
|
package/src/api/callAPI/Call.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { CallDetails } from "./CallDetails";
|
|
2
|
+
import { getLogger } from '@exotel-npm-dev/webrtc-core-sdk';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
4
|
+
const logger = getLogger();
|
|
5
|
+
|
|
6
|
+
export function Call(webrtcSIPPhone) {
|
|
7
|
+
if (!webrtcSIPPhone) {
|
|
8
|
+
throw new Error("webrtcSIPPhone is required for Call");
|
|
9
|
+
}
|
|
5
10
|
|
|
6
|
-
export function Call() {
|
|
7
11
|
this.Answer = function () {
|
|
8
12
|
/**
|
|
9
13
|
* When agent accepts phone, add appropriate msg to be sent to webclient
|
|
@@ -32,25 +36,25 @@ export function Call() {
|
|
|
32
36
|
/**
|
|
33
37
|
* When agent clicks on mute
|
|
34
38
|
*/
|
|
35
|
-
var
|
|
36
|
-
logger.log('Call: Mute:
|
|
37
|
-
if (
|
|
39
|
+
var isMuted = webrtcSIPPhone.getMuteStatus();
|
|
40
|
+
logger.log('Call: Mute: isMuted: ', isMuted);
|
|
41
|
+
if (!isMuted) {
|
|
38
42
|
webrtcSIPPhone.muteAction(true);
|
|
39
43
|
} else {
|
|
40
|
-
logger.log('Call: Mute:
|
|
44
|
+
logger.log('Call: Mute: Already muted');
|
|
41
45
|
}
|
|
42
46
|
}
|
|
43
47
|
|
|
44
48
|
this.UnMute = function () {
|
|
45
49
|
/**
|
|
46
|
-
* When agent clicks on
|
|
50
|
+
* When agent clicks on unmute
|
|
47
51
|
*/
|
|
48
|
-
var
|
|
49
|
-
logger.log('Call: UnMute:
|
|
50
|
-
if (
|
|
51
|
-
logger.log('Call: Unmute: Already unmuted');
|
|
52
|
-
} else {
|
|
52
|
+
var isMuted = webrtcSIPPhone.getMuteStatus();
|
|
53
|
+
logger.log('Call: UnMute: isMuted: ', isMuted);
|
|
54
|
+
if (isMuted) {
|
|
53
55
|
webrtcSIPPhone.muteAction(false);
|
|
56
|
+
} else {
|
|
57
|
+
logger.log('Call: UnMute: Already unmuted');
|
|
54
58
|
}
|
|
55
59
|
}
|
|
56
60
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { getLogger } from "@exotel-npm-dev/webrtc-core-sdk";
|
|
1
2
|
import { diagnosticsCallback } from "../../listeners/Callback";
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
4
|
+
const logger = getLogger();
|
|
5
|
+
|
|
5
6
|
var speakerNode;
|
|
6
7
|
var micNode;
|
|
7
8
|
var audioTrack;
|
|
@@ -24,6 +25,21 @@ eventMapper.sipml5.terminated_REGISTER = "USER_REG_TEST_FAIL";
|
|
|
24
25
|
|
|
25
26
|
var candidateProcessData = {};
|
|
26
27
|
|
|
28
|
+
export class Diagnostics {
|
|
29
|
+
constructor() {
|
|
30
|
+
this.report = {};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
setReport(key, value) {
|
|
34
|
+
this.report[key] = value;
|
|
35
|
+
logger.log("Diagnostics: setReport", key, value);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
getReport() {
|
|
39
|
+
return this.report;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
27
43
|
export var ameyoWebRTCTroubleshooter = {
|
|
28
44
|
js_yyyy_mm_dd_hh_mm_ss: function () {
|
|
29
45
|
var now = new Date();
|
|
@@ -139,35 +155,45 @@ export var ameyoWebRTCTroubleshooter = {
|
|
|
139
155
|
return browserName + "/" + version;
|
|
140
156
|
},
|
|
141
157
|
|
|
142
|
-
stopSpeakerTesttone: function () {
|
|
158
|
+
stopSpeakerTesttone: function (webrtcSIPPhone) {
|
|
159
|
+
if (!webrtcSIPPhone) {
|
|
160
|
+
logger.log("stopSpeakerTesttone: webrtcSIPPhone not provided");
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
143
163
|
speakerTestTone = webrtcSIPPhone.getSpeakerTestTone();
|
|
144
164
|
speakerTestTone.pause();
|
|
145
165
|
},
|
|
146
166
|
|
|
147
|
-
stopSpeakerTesttoneWithSuccess: function () {
|
|
148
|
-
this.stopSpeakerTest();
|
|
167
|
+
stopSpeakerTesttoneWithSuccess: function (webrtcSIPPhone) {
|
|
168
|
+
this.stopSpeakerTest(webrtcSIPPhone);
|
|
149
169
|
this.sendDeviceTestingEvent("SPEAKER_TEST_PASS");
|
|
150
170
|
this.addToTrobuleshootReport("INFO", "Speaker device testing is successfull");
|
|
151
171
|
this.addToTrobuleshootReport("INFO", "Speaker device testing is completed");
|
|
152
172
|
},
|
|
153
173
|
|
|
154
|
-
stopSpeakerTesttoneWithFailure: function () {
|
|
155
|
-
this.stopSpeakerTest();
|
|
174
|
+
stopSpeakerTesttoneWithFailure: function (webrtcSIPPhone) {
|
|
175
|
+
this.stopSpeakerTest(webrtcSIPPhone);
|
|
156
176
|
this.sendDeviceTestingEvent("SPEAKER_TEST_FAIL");
|
|
157
177
|
this.addToTrobuleshootReport("INFO", "Speaker device testing is failed");
|
|
158
178
|
this.addToTrobuleshootReport("INFO", "Speaker device testing is completed");
|
|
159
179
|
},
|
|
160
180
|
|
|
161
|
-
startSpeakerTest: function () {
|
|
181
|
+
startSpeakerTest: function (webrtcSIPPhone) {
|
|
162
182
|
var parent = this;
|
|
163
|
-
|
|
183
|
+
if (!webrtcSIPPhone) {
|
|
184
|
+
logger.log("startSpeakerTest: webrtcSIPPhone not provided");
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
if (intervalID) {
|
|
188
|
+
logger.log("startSpeakerTest: already running");
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
164
191
|
try {
|
|
165
192
|
intervalID = setInterval(function () {
|
|
166
193
|
|
|
167
194
|
try {
|
|
168
195
|
speakerTestTone = webrtcSIPPhone.getSpeakerTestTone();
|
|
169
|
-
|
|
170
|
-
logger.log("close last track")
|
|
196
|
+
logger.log("close last track");
|
|
171
197
|
speakerTestTone.pause();
|
|
172
198
|
parent.closeAudioTrack();
|
|
173
199
|
|
|
@@ -223,14 +249,18 @@ export var ameyoWebRTCTroubleshooter = {
|
|
|
223
249
|
|
|
224
250
|
},
|
|
225
251
|
|
|
226
|
-
stopSpeakerTest: function () {
|
|
252
|
+
stopSpeakerTest: function (webrtcSIPPhone) {
|
|
227
253
|
var parent = this;
|
|
254
|
+
if (!webrtcSIPPhone) {
|
|
255
|
+
logger.log("stopSpeakerTest: webrtcSIPPhone not provided");
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
228
258
|
speakerTestTone = webrtcSIPPhone.getSpeakerTestTone();
|
|
229
|
-
//Enable this for tone loop - Start
|
|
230
259
|
try {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
260
|
+
if (intervalID) {
|
|
261
|
+
clearInterval(intervalID);
|
|
262
|
+
intervalID = 0;
|
|
263
|
+
}
|
|
234
264
|
speakerTestTone.pause();
|
|
235
265
|
parent.closeAudioTrack();
|
|
236
266
|
parent.addToTrobuleshootReport("INFO", "Speaker device testing is stopped");
|
|
@@ -437,9 +467,8 @@ export var ameyoWebRTCTroubleshooter = {
|
|
|
437
467
|
logger.log("No explicit registration sent during testing...")
|
|
438
468
|
},
|
|
439
469
|
|
|
440
|
-
setWSTroubleshootData: function (txtWsStatus) {
|
|
441
|
-
|
|
442
|
-
let txtWSSUrl = webrtcSIPPhone.getWSSUrl();
|
|
470
|
+
setWSTroubleshootData: function (txtWsStatus, webrtcSIPPhone) {
|
|
471
|
+
let txtWSSUrl = webrtcSIPPhone && webrtcSIPPhone.getWSSUrl ? webrtcSIPPhone.getWSSUrl() : '';
|
|
443
472
|
diagnosticsCallback.triggerKeyValueSetCallback("wss", txtWsStatus, txtWSSUrl)
|
|
444
473
|
},
|
|
445
474
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { getLogger } from "@exotel-npm-dev/webrtc-core-sdk";
|
|
1
2
|
import { diagnosticsCallback } from '../../listeners/Callback';
|
|
2
3
|
import { ameyoWebRTCTroubleshooter } from './Diagnostics';
|
|
3
|
-
import { webrtcSIPPhone } from '@exotel-npm-dev/webrtc-core-sdk';
|
|
4
4
|
|
|
5
|
+
const logger = getLogger();
|
|
5
6
|
|
|
6
|
-
var logger = webrtcSIPPhone.getLogger();
|
|
7
7
|
|
|
8
8
|
export function initDiagnostics(setDiagnosticsReportCallback, keyValueSetCallback) {
|
|
9
9
|
if (!keyValueSetCallback || !setDiagnosticsReportCallback) {
|
|
@@ -23,27 +23,27 @@ export function closeDiagnostics() {
|
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
export function startSpeakerDiagnosticsTest() {
|
|
26
|
+
export function startSpeakerDiagnosticsTest(webrtcSIPPhone) {
|
|
27
27
|
/**
|
|
28
28
|
* When user registers the agent phone for the first time, register your callback onto webrtc client
|
|
29
29
|
*/
|
|
30
30
|
logger.log("Request to startSpeakerTest:\n");
|
|
31
|
-
ameyoWebRTCTroubleshooter.startSpeakerTest()
|
|
31
|
+
ameyoWebRTCTroubleshooter.startSpeakerTest(webrtcSIPPhone)
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
export function stopSpeakerDiagnosticsTest(speakerTestResponse) {
|
|
35
|
+
export function stopSpeakerDiagnosticsTest(speakerTestResponse, webrtcSIPPhone) {
|
|
36
36
|
/**
|
|
37
37
|
* When user registers the agent phone for the first time, register your callback onto webrtc client
|
|
38
38
|
*/
|
|
39
39
|
|
|
40
40
|
logger.log("Request to stopSpeakerTest - Suuccessful Test:\n");
|
|
41
41
|
if (speakerTestResponse == 'yes') {
|
|
42
|
-
ameyoWebRTCTroubleshooter.stopSpeakerTesttoneWithSuccess()
|
|
42
|
+
ameyoWebRTCTroubleshooter.stopSpeakerTesttoneWithSuccess(webrtcSIPPhone)
|
|
43
43
|
} else if (speakerTestResponse == 'no') {
|
|
44
|
-
ameyoWebRTCTroubleshooter.stopSpeakerTesttoneWithFailure()
|
|
44
|
+
ameyoWebRTCTroubleshooter.stopSpeakerTesttoneWithFailure(webrtcSIPPhone)
|
|
45
45
|
} else {
|
|
46
|
-
ameyoWebRTCTroubleshooter.stopSpeakerTest()
|
|
46
|
+
ameyoWebRTCTroubleshooter.stopSpeakerTest(webrtcSIPPhone)
|
|
47
47
|
}
|
|
48
48
|
return;
|
|
49
49
|
}
|
|
@@ -93,4 +93,15 @@ export function stopNetworkDiagnostics() {
|
|
|
93
93
|
*/
|
|
94
94
|
logger.log("Request to stop network diagnostics:\n");
|
|
95
95
|
return;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export class DiagnosticsListener {
|
|
99
|
+
constructor(diagnosticsCallback) {
|
|
100
|
+
this.diagnosticsCallback = diagnosticsCallback;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
onDiagnosticsEvent(event) {
|
|
104
|
+
logger.log("DiagnosticsListener: onDiagnosticsEvent", event);
|
|
105
|
+
this.diagnosticsCallback.triggerCallback(event);
|
|
106
|
+
}
|
|
96
107
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getLogger } from "@exotel-npm-dev/webrtc-core-sdk";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
const logger = getLogger();
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Function to register the phone onto a webRTC client
|
|
@@ -1,38 +1,35 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { webrtcSIPPhone } from "@exotel-npm-dev/webrtc-core-sdk";
|
|
1
|
+
import { getLogger } from "@exotel-npm-dev/webrtc-core-sdk";
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
const logger = getLogger();
|
|
5
4
|
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
export class CallListener {
|
|
6
|
+
constructor(callCallback) {
|
|
7
|
+
this.callCallback = callCallback;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
onIncomingCall(call, phone) {
|
|
11
|
+
logger.log("CallListener: onIncomingCall", call, phone);
|
|
12
|
+
this.callCallback.initializeCall(call, phone);
|
|
13
|
+
this.callCallback.triggerCallback("call", call, "incoming", phone);
|
|
14
|
+
}
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
logger.log("CallListener:
|
|
16
|
-
|
|
16
|
+
onCallEstablished(call, phone) {
|
|
17
|
+
logger.log("CallListener: onCallEstablished", call, phone);
|
|
18
|
+
this.callCallback.triggerCallback("call", call, "connected", phone);
|
|
17
19
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
logger.log("CallListener:Initialise call")
|
|
23
|
-
callbacks.initializeCall(call, phone)
|
|
24
|
-
/** Triggers the callback on the UI end with message indicating call has been established*/
|
|
25
|
-
logger.log("CallListener:Trigger Connected")
|
|
26
|
-
callbacks.triggerCallback("connected")
|
|
20
|
+
|
|
21
|
+
onCallEnded(call, phone) {
|
|
22
|
+
logger.log("CallListener: onCallEnded", call, phone);
|
|
23
|
+
this.callCallback.triggerCallback("call", call, "callEnded", phone);
|
|
27
24
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
logger.log("CallListener:
|
|
36
|
-
|
|
25
|
+
|
|
26
|
+
onCallEvent(event) {
|
|
27
|
+
logger.log("CallListener: onCallEvent", event);
|
|
28
|
+
this.callCallback.triggerCallback(event);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
onRinging(call, phone) {
|
|
32
|
+
logger.log("CallListener: onRinging", call, phone);
|
|
33
|
+
this.callCallback.triggerCallback("call", call, "ringing", phone);
|
|
37
34
|
}
|
|
38
35
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getLogger } from "@exotel-npm-dev/webrtc-core-sdk";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
const logger = getLogger();
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* The call backs are called through this function. First initiates the call object and then
|
|
@@ -10,43 +10,52 @@ var logger = webrtcSIPPhone.getLogger();
|
|
|
10
10
|
/**
|
|
11
11
|
* Initializes call event callbacks and also sends to which phone callback was received
|
|
12
12
|
*/
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
export class Callback {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.callbacks = {};
|
|
16
|
+
this.call = null;
|
|
17
|
+
this.phone = '';
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
registerCallback(event, callback) {
|
|
21
|
+
this.callbacks[event] = callback;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
initializeCall(call, phone) {
|
|
21
25
|
this.call = call;
|
|
22
26
|
this.phone = phone;
|
|
23
|
-
},
|
|
24
|
-
triggerCallback: function (eventType) {
|
|
25
|
-
const callbackFunc = this.callback;
|
|
26
|
-
const call = this.call;
|
|
27
|
-
return callbackFunc(call, eventType, this.phone);
|
|
28
27
|
}
|
|
29
|
-
|
|
28
|
+
|
|
29
|
+
triggerCallback(event, ...args) {
|
|
30
|
+
if (this.callbacks[event]) {
|
|
31
|
+
this.callbacks[event](...args);
|
|
32
|
+
} else {
|
|
33
|
+
logger.log("No callback registered for event:", event);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
30
38
|
/**
|
|
31
39
|
* Initializes register callback and also sets to which phone registration was renewed
|
|
32
40
|
*/
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
};
|
|
41
|
+
|
|
42
|
+
export class RegisterCallback {
|
|
43
|
+
registerCallbackHandler = null;
|
|
44
|
+
registerState= null;
|
|
45
|
+
phone= '';
|
|
46
|
+
initializeRegisterCallback= function (RegisterEventCallBack) {
|
|
47
|
+
this.registerCallbackHandler = RegisterEventCallBack;
|
|
48
|
+
};
|
|
49
|
+
initializeRegister= function (state, phone) {
|
|
50
|
+
this.registerState = state;
|
|
51
|
+
this.phone = phone;
|
|
52
|
+
};
|
|
53
|
+
triggerRegisterCallback= function () {
|
|
54
|
+
const callbackFunc = this.registerCallbackHandler;
|
|
55
|
+
const state = this.registerState
|
|
56
|
+
return callbackFunc(state, this.phone);
|
|
57
|
+
};
|
|
58
|
+
}
|
|
50
59
|
/**
|
|
51
60
|
* Sets all the phone instances
|
|
52
61
|
*/
|
|
@@ -79,30 +88,30 @@ export var phoneInstance = {
|
|
|
79
88
|
}
|
|
80
89
|
};
|
|
81
90
|
|
|
82
|
-
export
|
|
83
|
-
sessioncallback
|
|
84
|
-
callState
|
|
85
|
-
document
|
|
86
|
-
documentCallback
|
|
87
|
-
phone
|
|
88
|
-
initializeSessionCallback
|
|
91
|
+
export class SessionCallback {
|
|
92
|
+
sessioncallback = null;
|
|
93
|
+
callState= null;
|
|
94
|
+
document= null;
|
|
95
|
+
documentCallback= null;
|
|
96
|
+
phone= '';
|
|
97
|
+
initializeSessionCallback= function (SessionCallback) {
|
|
89
98
|
this.sessioncallback = SessionCallback;
|
|
90
|
-
}
|
|
91
|
-
intializeDocumentCallback
|
|
99
|
+
};
|
|
100
|
+
intializeDocumentCallback= function (DocumentCallback) {
|
|
92
101
|
this.documentCallback = DocumentCallback;
|
|
93
|
-
}
|
|
94
|
-
initializeSession
|
|
102
|
+
};
|
|
103
|
+
initializeSession= function (state, phone) {
|
|
95
104
|
this.callState = state;
|
|
96
105
|
this.phone = phone;
|
|
97
|
-
}
|
|
98
|
-
initializeDocument
|
|
106
|
+
};
|
|
107
|
+
initializeDocument= function (calldocument) {
|
|
99
108
|
this.document = calldocument;
|
|
100
|
-
}
|
|
101
|
-
triggerDocumentCallback
|
|
109
|
+
};
|
|
110
|
+
triggerDocumentCallback= function () {
|
|
102
111
|
const documentCallbackFunc = this.documentCallback;
|
|
103
112
|
return documentCallbackFunc(this.document);
|
|
104
|
-
}
|
|
105
|
-
triggerSessionCallback
|
|
113
|
+
};
|
|
114
|
+
triggerSessionCallback= function () {
|
|
106
115
|
const sessionCallBackFunc = this.sessioncallback;
|
|
107
116
|
if (sessionCallBackFunc) {
|
|
108
117
|
return sessionCallBackFunc(this.callState, this.phone);
|