chrome询问多次,允许在twilio中使用扬声器和麦克风接听来电

chrome询问多次,允许在twilio中使用扬声器和麦克风接听来电,twilio,Twilio,我正在创建一个呼叫中心应用程序,当chrome浏览器上的twilio客户端接到一个呼叫时,它会请求允许使用扬声器和麦克风。当第二个呼叫到来时,我必须允许它使用两次,如果第三个呼叫到来,我必须允许使用三次,依此类推 在firfox浏览器中,当我第二次接受呼叫时,它会自动断开连接并给出mediastream错误 请告诉我哪里错了以及如何解决这个问题 下面是twilio客户端的javascript,如果需要更多信息,请告诉我 <script //var 代币 =callaction(); 变

我正在创建一个呼叫中心应用程序,当chrome浏览器上的twilio客户端接到一个呼叫时,它会请求允许使用扬声器和麦克风。当第二个呼叫到来时,我必须允许它使用两次,如果第三个呼叫到来,我必须允许使用三次,依此类推

在firfox浏览器中,当我第二次接受呼叫时,它会自动断开连接并给出mediastream错误

请告诉我哪里错了以及如何解决这个问题

下面是twilio客户端的javascript,如果需要更多信息,请告诉我

<script

//var
代币
=callaction();
变量
连接=空;
变量
内容;
$(文档).ready(函数(){
$(“#挂起调用按钮”).hide();
$.post('cleanify?action=createcall',
功能(数据){
内容=
数据;
Twilio.Device.setup(内容、,
{
调试:
真的}
);
}
);
Twilio.设备准备就绪(功能
(装置)
{
$(“#log”).text(“就绪”);
}
);
Twilio.Device.error(函数
(错误)
{
$(“#日志”).text(“错误:
"
+
错误消息);
}
);
Twilio.Device.connect(功能)
(康涅狄格州)
{
//警报(“连接
经办人);
$(“#log”).text(“成功
确立
调用“);
连接
=
康涅狄格州;
}
);
斜纹装置断开(功能
(康涅狄格州)
{
//警觉
断开“);
$(“#callbutton”).html('Call');
$(“#callbutton”).removeClass(“btn危险
addClass(“btn成功”);
//
$(“#callbutton”).toggleClass('btn-danger
btn成功’;
$(“#日志”).text(“调用
(完);;
$('#RejectCallButton').show();
$('#acceptcallbutton').show();
$(“#挂起调用按钮”).hide();
$('#myModal').modal('hide');
}
);
Twilio.设备输入(功能
(康涅狄格州)
{
//
警觉
输入“);
连接
=
康涅狄格州;
$(“#log”).text(“aa
拉希
H
调用“);
$('myModal').modal('show');
$('#incomingnumber').html(conn.parameters.From);
$('#RejectCallButton')。单击(函数()
{
connection.reject();
}
);
$('#acceptcallbutton')。单击(函数()
{
connection.accept();
$('#RejectCallButton').hide();
$('#acceptcallbutton').hide();
$(“#挂起调用按钮”).show();
}
);
$(“#挂起调用按钮”)。单击(函数()
{
$('#RejectCallButton').show();
$('#acceptcallbutton').show();
$(“#挂起调用按钮”).hide();
连接断开();
}
);
//
接受
这个
新当选的
连接
和
开始
双向
音频
}
);
Twilio.Device.cancel(
功能
(康涅狄格州)
{
//警觉
取消);;
连接
=
康涅狄格州;
$('#myModal').modal('hide');
}
);
元。每件(['0'、'1'、'2'、'3'、'4'、'5'、'6'、'7'、'8'、'9'、'star'、'pound'),
功能(索引,
价值)
{
$(“#按钮”
+
值)。单击(函数(){
//警惕(“你好”);
如果(连接)
{
如果
(值=='star')
connection.sendDigits(“*”)
其他的
如果
(值=='pound')
connection.sendDigits(“#”)
其他的
连接。发送数字(值)
返回
虚假的;
}
}
);
}
);
//
做
某物
具有
C
警报(内容);
}
);
功能
callhandle(){
if($(“#callbutton”).html().trim()
==
"呼叫"){
$(“#callbutton”).html(‘挂断’);
$(“#callbutton”).removeClass(“btn成功”).addClass(“btn危险”);
//
$(“#callbutton”).toggleClass('btn-success
btn危险’;
call();
}
其他的
if($(“#callbutton”).html().trim()
==
"挂断"){
挂断();
$(“#callbutton”).html('Call');
$(“#callbutton”).removeClass(“btn危险”).addClass(“btn成功”);
//
$(“#callbutton”).toggleClass('btn-danger
btn成功’;
}
}
功能
调用()
{
//
得到
这个
电话
数
到
连接
这个
呼叫
到
//
得到
这个
电话
数
到
连接
这个
呼叫
到
//
警觉的(
$(“#选择传出”).val();
params
=
{“电话号码”:
$('.dialnumber').val(),“发件人”:
$(“#选择传出”).val(),“iClient”:
“真的”}
;
Twilio.Device.connect(参数);
}
功能
挂断
{
Twilio.Device.disconnectAll();
}

根据我的经验,Chrome只会通过HTTPS存储这些设置。在HTPP上,Chrome不会存储设置,因此每次都会提示输入权限。根据我的经验,Chrome只会通过HTTPS存储这些设置。在HTPP上,Chrome不会存储设置,因此每次接到另一个呼叫时,它都会在呼叫后初始化twilio之前提示您输入权限。因此,您必须首先初始化

当你接到另一个电话时,它可能发生在一个电话之后,然后初始化twilio。因此,您必须首先初始化

这里是Twilio福音传道者。从您的代码来看,看起来您的操作是正确的。你能澄清一下“允许扬声器和麦克风”对话框何时出现,以及页面是否在其间被重新加载吗?这里是Twilio福音传道者。从您的代码来看,看起来您的操作是正确的。您能否确切说明“允许扬声器和麦克风”对话框何时出现,以及页面是否已在其间重新加载?
//var
token
=callaction();
var
connection=null;
var
content;
$(document).ready(function(){
$('#hangupcallbutton').hide();
$.post('cleanify?action=createcall',
function(data){
content=
data;
Twilio.Device.setup(content,
{
debug:
true}
);
}
);
Twilio.Device.ready(function
(device)
{
$("#log").text("Ready");
}
);
Twilio.Device.error(function
(error)
{
$("#log").text("Error:
"
+
error.message);
}
);
Twilio.Device.connect(function
(conn)
{
//alert("connect
handler");
$("#log").text("Successfully
established
call");
connection
=
conn;
}
);
Twilio.Device.disconnect(function
(conn)
{
//alert("in
disconnect");
$("#callbutton").html('Call');
$("#callbutton").removeClass("btn-danger
").addClass("btn-success");
//
$("#callbutton").toggleClass('btn-danger
btn-success');
$("#log").text("Call
ended");
$('#RejectCallButton').show();
$('#acceptcallbutton').show();
$('#hangupcallbutton').hide();
$('#myModal').modal('hide');
}
);
Twilio.Device.incoming(function
(conn)
{
//
alert("in
incomming");
connection
=
conn;
$("#log").text("aa
rahi
h
call");
$('#myModal').modal('show');
$('#incomingnumber').html(conn.parameters.From);
$('#RejectCallButton').click(function()
{
connection.reject();
}
);
$('#acceptcallbutton').click(function()
{
connection.accept();
$('#RejectCallButton').hide();
$('#acceptcallbutton').hide();
$('#hangupcallbutton').show();
}
);
$('#hangupcallbutton').click(function()
{
$('#RejectCallButton').show();
$('#acceptcallbutton').show();
$('#hangupcallbutton').hide();
connection.disconnect();
}
);
//
accept
the
incoming
connection
and
start
two-way
audio
}
);
Twilio.Device.cancel(
function
(conn)
{
//alert("in
cancel");
connection
=
conn;
$('#myModal').modal('hide');
}
);
$.each(['0','1','2','3','4','5','6','7','8','9','star','pound'],
function(index,
value)
{
$('#button'
+
value).click(function(){
//alert("hello");
if(connection)
{
if
(value=='star')
connection.sendDigits('*')
else
if
(value=='pound')
connection.sendDigits('#')
else
connection.sendDigits(value)
return
false;
}
}
);
}
);
//
Do
something
with
c
alert(content);
}
);
function
callhandle(){
if($("#callbutton").html().trim()
==
'Call'){
$("#callbutton").html('HangUp');
$("#callbutton").removeClass("btn-success").addClass("btn-danger");
//
$("#callbutton").toggleClass('btn-success
btn-danger');
call();
}
else
if($("#callbutton").html().trim()
==
'HangUp'){
hangup();
$("#callbutton").html('Call');
$("#callbutton").removeClass("btn-danger").addClass("btn-success");
//
$("#callbutton").toggleClass('btn-danger
btn-success');
}
}
function
call()
{
//
get
the
phone
number
to
connect
the
call
to
//
get
the
phone
number
to
connect
the
call
to
//
alert(
$("#selectOutgoing").val());
params
=
{"PhoneNumber":
$('.dialnumber').val(),"From":
$("#selectOutgoing").val(),"isclient":
"true"}
;
Twilio.Device.connect(params);
}
function
hangup()
{
Twilio.Device.disconnectAll();
}

</script>