Javascript Twilio调用被不遵守Twilio.device.destroy()的多个设备实例阻止

Javascript Twilio调用被不遵守Twilio.device.destroy()的多个设备实例阻止,javascript,jquery,twilio,twilio-api,twilio-click-to-call,Javascript,Jquery,Twilio,Twilio Api,Twilio Click To Call,我正在开发一个Twilio应用程序,用户可以在公共终端上看到一个号码列表。有些是SIP,有些是传统的。最终用户可能会按一个按钮给列表中的一个人打电话,进行对话,然后走开——然后另一个用户会走过来给另一个人打电话 我遇到了一个问题,Twilio.Device.destroy并没有消除所有正在使用的设备,示例中的第二个用户最终会调用第一个用户的目标。 首先是代码,然后是日志:按钮挂钩: $('.twilio-voice').click(function() { var toNum = thi

我正在开发一个Twilio应用程序,用户可以在公共终端上看到一个号码列表。有些是SIP,有些是传统的。最终用户可能会按一个按钮给列表中的一个人打电话,进行对话,然后走开——然后另一个用户会走过来给另一个人打电话
我遇到了一个问题,Twilio.Device.destroy并没有消除所有正在使用的设备,示例中的第二个用户最终会调用第一个用户的目标。
首先是代码,然后是日志:
按钮挂钩:

$('.twilio-voice').click(function() {
    var toNum = this.value;
    console.log('To num in jq');
    console.log(toNum);
    makeVoiceCall(toNum);
});

makeVoiceCall功能:

var makeVoiceCall = function(toNum) {
    console.log('To Num Is:');
    console.log(toNum);
    if(localStorage.token == undefined) {
        console.log("In If");
        getVoiceToken(toNum);
    } else {
        console.log("In Else");
        console.log(localStorage.token);
        Twilio.Device.setup(localStorage.token, {debug: true});
        Twilio.Device.ready(function(device){
            console.log('IN READY TO NUM IS');
            console.log(toNum);
            Twilio.Device.connect({"To": toNum});
        });
        Twilio.Device.error(function(error) {
            console.log(error.message);
            if(error.message == 'JWT Token Expired') {
                getVoiceToken(toNum);
            };
        });
    }
};

有一个事件监听器,它在Twilio.Device.connect上启动一个模式,该模式创建一个模式按钮,当按下该按钮时,它将创建一个断开连接的事件监听器,两者都调用挂起功能:

function hangup() {
    Twilio.Device.disconnectAll();
    Twilio.Device.destroy();
};

我已尝试添加Twilio.Device.destroy();在makeVoiceCall开始时,在Twilio.Device.ready()内;在else语句的顶部,它们似乎没有任何效果。如果我单击一个传统的数字,然后单击一个sip数字,日志会是这样的。传统的数字叫两次。如果先调用SIP号码,然后再尝试使用传统号码,则会调用SIP号码。在本例中,加载页面时,localStorage中已经有一个令牌。

To num in jq
ts:1214 +15555555555
ts:1178 To Num Is:
ts:1179 +15555555555
ts:1190 In Else
ts:1191 
[STACKOVERFLOW EDIT: console logged token removed]
twilio.min.js:71 Device.sounds is deprecated and will be removed in the next 
breaking release. Please use the new functionality available on 
Device.audio.
m.defaultWarnHandler @ twilio.min.js:71
m.deprecated @ twilio.min.js:71
(anonymous) @ twilio.min.js:72
l @ twilio.min.js:71
a @ twilio.min.js:39
setup @ twilio.min.js:59
makeVoiceCall @ ts:1192
(anonymous) @ ts:1215
dispatch @ jquery-2.1.3.min.js:3
r.handle @ jquery-2.1.3.min.js:3
twilio.min.js:70 [Device] Setting up PStream
twilio.min.js:70 [WSTransport] Opening socket
twilio.min.js:70 [WSTransport] attempting to connect
twilio.min.js:70 [WSTransport] Socket opened
twilio.min.js:70 [PStream] Setting token and publishing listen
twilio.min.js:70 [Device] Stream is ready
ts:1194 IN READY TO NUM IS
ts:1195 +15555555555
twilio.min.js:70 [Twilio.PeerConnection] signalingState is "have-local-offer"
twilio.min.js:70 [Twilio.PeerConnection] signalingState is "stable"
twilio.min.js:70 [Twilio.PeerConnection] iceConnectionState is "checking"
xb @ jquery-2.1.3.min.js:3
get @ jquery-2.1.3.min.js:3
css @ jquery-2.1.3.min.js:3
get @ jquery-2.1.3.min.js:3
cur @ jquery-2.1.3.min.js:3
init @ jquery-2.1.3.min.js:3
Kb @ jquery-2.1.3.min.js:3
createTween @ jquery-2.1.3.min.js:3
Rb.* @ jquery-2.1.3.min.js:3
Ub @ jquery-2.1.3.min.js:3
Vb @ jquery-2.1.3.min.js:3
Xb @ jquery-2.1.3.min.js:3
g @ jquery-2.1.3.min.js:3
dequeue @ jquery-2.1.3.min.js:3
(anonymous) @ jquery-2.1.3.min.js:3
each @ jquery-2.1.3.min.js:2
each @ jquery-2.1.3.min.js:2
queue @ jquery-2.1.3.min.js:3
animate @ jquery-2.1.3.min.js:3
n.fn.(anonymous function) @ jquery-2.1.3.min.js:3
addModal @ ts:974
(anonymous) @ ts:1024
a.emit @ twilio.min.js:162
(anonymous) @ twilio.min.js:48
c @ twilio.min.js:165
a.emit @ twilio.min.js:163
mediaStream.onopen @ twilio.min.js:21
a.version.pc.onsignalingstatechange @ twilio.min.js:119
twilio.min.js:70 [Twilio.PeerConnection] iceConnectionState is "completed"
twilio.min.js:70 [Connection] Disconnecting...
twilio.min.js:70 [PStream] Closing PStream
twilio.min.js:70 [WSTransport] Closing socket
twilio.min.js:70 [Twilio.PeerConnection] iceConnectionState is "closed"
twilio.min.js:70 [Twilio.PeerConnection] signalingState is "closed"
twilio.min.js:158 WebSocket connection to 'wss://chunderw-vpc-gll.twilio.com/signal' failed: Close received after close
l._connect @ twilio.min.js:158
l.open @ twilio.min.js:157
a @ twilio.min.js:78
a @ twilio.min.js:75
a._setupStream @ twilio.min.js:54
a.register @ twilio.min.js:50
a @ twilio.min.js:46
setup @ twilio.min.js:59
makeVoiceCall @ ts:1192
(anonymous) @ ts:1215
dispatch @ jquery-2.1.3.min.js:3
r.handle @ jquery-2.1.3.min.js:3
twilio.min.js:70 [WSTransport] Socket received error: undefined
twilio.min.js:70 [WSTransport] Socket closed
twilio.min.js:70 [Device] Stream is offline
ts:1213 To num in jq
ts:1214 sip:test@sipexample.info
ts:1178 To Num Is:
ts:1179 sip:test@sipexample.info
ts:1190 In Else
ts:1191 [STACKOVERFLOW EDIT: token console.logged]
twilio.min.js:70 [Device] Found existing Device; using new token but ignoring options
twilio.min.js:70 [Device] Setting up PStream
twilio.min.js:70 [WSTransport] Opening socket
twilio.min.js:70 [WSTransport] attempting to connect
twilio.min.js:70 [WSTransport] Socket opened
twilio.min.js:70 [PStream] Setting token and publishing listen
twilio.min.js:70 [Device] Stream is ready
[STACKOVERFLOW EDIT: HERE IS WHERE TWO DEVICES ARE CALLED BY ONE Twilio.Device.setup()]
ts:1194 IN READY TO NUM IS
ts:1195 +15555555555
ts:1194 IN READY TO NUM IS
ts:1195 sip:test@sipexample.info
twilio.min.js:51 Uncaught Error: A Connection is already active
    at a.connect (twilio.min.js:51)
    at Function.connect (twilio.min.js:60)
    at a.<anonymous> (ts:1196)
    at a.emit (twilio.min.js:163)
    at a.<anonymous> (twilio.min.js:55)
    at a.emit (twilio.min.js:163)
    at l.transport.onmessage (twilio.min.js:78)
    at WebSocket.c.onmessage (twilio.min.js:160)
a.connect @ twilio.min.js:51
connect @ twilio.min.js:60
(anonymous) @ ts:1196
a.emit @ twilio.min.js:163
(anonymous) @ twilio.min.js:55
a.emit @ twilio.min.js:163
transport.onmessage @ twilio.min.js:78
c.onmessage @ twilio.min.js:160
twilio.min.js:70 [Twilio.PeerConnection] signalingState is "have-local-offer"
twilio.min.js:70 [Twilio.PeerConnection] signalingState is "stable"
twilio.min.js:70 [Twilio.PeerConnection] iceConnectionState is "checking"
twilio.min.js:70 [Twilio.PeerConnection] iceConnectionState is "completed"
twilio.min.js:70 [Connection] Disconnecting...
twilio.min.js:70 [PStream] Closing PStream
twilio.min.js:70 [WSTransport] Closing socket
twilio.min.js:70 [Twilio.PeerConnection] iceConnectionState is "closed"
twilio.min.js:70 [Twilio.PeerConnection] signalingState is "closed"
twilio.min.js:158 WebSocket connection to 'wss://chunderw-vpc-gll.twilio.com/signal' failed: Close received after close
l._connect @ twilio.min.js:158
l.open @ twilio.min.js:157
a @ twilio.min.js:78
a @ twilio.min.js:75
a._setupStream @ twilio.min.js:54
a.register @ twilio.min.js:50
setup @ twilio.min.js:59
makeVoiceCall @ ts:1192
(anonymous) @ ts:1215
dispatch @ jquery-2.1.3.min.js:3
r.handle @ jquery-2.1.3.min.js:3
twilio.min.js:70 [WSTransport] Socket received error: undefined
twilio.min.js:70 [WSTransport] Socket closed
twilio.min.js:70 [Device] Stream is offline
到jq中的num
ts:1214+15555
ts:1178到Num是:
ts:1179+15555
ts:1190英寸
ts:1191
[STACKOVERFLOW编辑:删除控制台记录的令牌]
twilio.min.js:71 Device.sounds已弃用,将在下一个月删除
破坏释放。请使用上提供的新功能
设备。音频。
m、 defaultWarnHandler@twilio.min.js:71
m、 已弃用@twilio.min.js:71
(匿名)@twilio.min.js:72
l@twilio.min.js:71
a@twilio.min.js:39
setup@twilio.min.js:59
makeVoiceCall@ts:1192
(匿名)@ts:1215
dispatch@jquery-2.1.3.min.js:3
r、 handle@jquery-2.1.3.min.js:3
twilio.min.js:70[设备]设置PStream
twilio.min.js:70[WSTransport]开口插座
twilio.min.js:70[WSTransport]正在尝试连接
twilio.min.js:70[WSTransport]套接字已打开
twilio.min.js:70[PStream]设置令牌和发布侦听
twilio.min.js:70[设备]流已就绪
ts:1194中的就绪数值为
ts:1195+15555
twilio.min.js:70[twilio.PeerConnection]信号状态为“本地报价”
twilio.min.js:70[twilio.PeerConnection]信号状态为“稳定”
twilio.min.js:70[twilio.PeerConnection]iceConnectionState正在“检查”
xb@jquery-2.1.3.min.js:3
获取@jquery-2.1.3.min.js:3
css@jquery-2.1.3.min.js:3
获取@jquery-2.1.3.min.js:3
cur@jquery-2.1.3.min.js:3
init@jquery-2.1.3.min.js:3
Kb@jquery-2.1.3.min.js:3
createTween@jquery-2.1.3.min.js:3
Rb.*@jquery-2.1.3.min.js:3
Ub@jquery-2.1.3.min.js:3
Vb@jquery-2.1.3.min.js:3
Xb@jquery-2.1.3.min.js:3
g@jquery-2.1.3.min.js:3
dequeue@jquery-2.1.3.min.js:3
(匿名)@jquery-2.1.3.min.js:3
每个@jquery-2.1.3.min.js:2
每个@jquery-2.1.3.min.js:2
queue@jquery-2.1.3.min.js:3
动画@jquery-2.1.3.min.js:3
n、 fn.(匿名函数)@jquery-2.1.3.min.js:3
addModal@ts:974
(匿名)@ts:1024
a、 emit@twilio.min.js:162
(匿名)@twilio.min.js:48
c@twilio.min.js:165
a、 emit@twilio.min.js:163
mediaStream.onopen@twilio.min.js:21
a、 version.pc.onsignalingstatechange@twilio.min.js:119
twilio.min.js:70[twilio.PeerConnection]iceConnectionState已“完成”
twilio.min.js:70[连接]断开连接。。。
twilio.min.js:70[PStream]关闭PStream
twilio.min.js:70[WSTransport]闭合插座
twilio.min.js:70[twilio.PeerConnection]iceConnectionState已“关闭”
twilio.min.js:70[twilio.PeerConnection]信号状态为“关闭”
twilio.min.js:158 WebSocket连接到'wss://chunderw-vpc-gll.twilio.com/signal'失败:关闭后接收到关闭
l、 _connect@twilio.min.js:158
l、 打开@twilio.min.js:157
a@twilio.min.js:78
a@twilio.min.js:75
a、 _setupStream@twilio.min.js:54
a、 注册@twilio.min.js:50
a@twilio.min.js:46
setup@twilio.min.js:59
makeVoiceCall@ts:1192
(匿名)@ts:1215
dispatch@jquery-2.1.3.min.js:3
r、 handle@jquery-2.1.3.min.js:3
twilio.min.js:70[WSTransport]套接字收到错误:未定义
twilio.min.js:70[WSTransport]插槽已关闭
twilio.min.js:70[设备]流处于脱机状态
ts:1213到jq中的数值
ts:1214 sip:test@sipexample.info
ts:1178到Num是:
ts:1179 sip:test@sipexample.info
ts:1190英寸
ts:1191[堆栈溢出编辑:令牌控制台。已记录]
twilio.min.js:70[设备]找到现有设备;使用新令牌但忽略选项
twilio.min.js:70[设备]设置PStream
twilio.min.js:70[WSTransport]开口插座
twilio.min.js:70[WSTransport]正在尝试连接
twilio.min.js:70[WSTransport]套接字已打开
twilio.min.js:70[PStream]设置令牌和发布侦听
twilio.min.js:70[设备]流已就绪
[STACKOVERFLOW EDIT:这里是一个Twilio.Device.setup()调用两个设备的地方]
ts:1194中的就绪数值为
ts:1195+15555
ts:1194中的就绪数值为
ts:1195 sip:test@sipexample.info
twilio.min.js:51未捕获错误:连接已处于活动状态
在a.connect(twilio.min.js:51)
在Function.connect(twilio.min.js:60)
在a。(ts:1196)
在a.emit(twilio.min.js:163)
在a。(twilio.min.js:55)
在a.emit(twilio.min.js:163)
在l.transport.onmessage(twilio.min.js:78)
在WebSocket.c.onmessage(twilio.min.js:160)
a、 连接@twilio.min.js:51
连接@twilio.min.js:60
(匿名)@ts:1196
a、 emit@twilio.min.js:163
(匿名)@twilio.min.js:55
a、 emit@twilio.min.js:163
transport.onmessage@twilio.min.js:78
c、 onmessage@twilio.min.js:160
twilio.min.js:70[twilio.PeerConnection]信号状态为“本地报价”
twilio.min.js:70[twilio.PeerConnection]信号状态为“稳定”
twilio.min.js:70[twilio.PeerConnection]iceConnectionState正在“检查”
twilio.min.js:70[twilio.PeerConnection]iceConnectionState已“完成”
twilio.min.js
function makeVoiceCall(toNum) {
  Twilio.Device.connect({"To": toNum});
}

function setupDevice(token) {
  Twilio.Device.setup(token, { debug: true });
}

function getVoiceToken(callback) {
  $.post('/token', function(data) {
    localStorage.token = data.token;
    callback(token);
  })
}

function init() {
  if(localStorage.token == undefined) {
    getVoiceToken(function(token){ 
      setupDevice(token)
    });
  } else {
    setupDevice(localstorage.token)
  }

  // Ready will setup click handlers.
  Twilio.Device.ready(function() {
    $('.twilio-voice').click(function() {
      var toNum = this.value;
      makeVoiceCall(toNum);
    });
  });

  // offline will remove click handlers, get a new token and setup the device again
  Twilio.Device.offline(function() {
    // unregister click handlers for now
    $('.twilio-voice').off('click');
    getVoiceToken(function(token) {
      setupDevice(token);
    })
  })
}

window.addEventListener('load', init);