【发布时间】:2020-08-05 16:47:33
【问题描述】:
我正在尝试获取通过Twilio Client(js) v 1.10.1 拨打的外拨电话的状态。但是即使呼叫处于振铃状态,.status() 方法也会将值返回为“open”。我尝试在初始化 Twilio.Device 时添加 enableRingingState: true 作为参数,并在服务器端创建 TwiMl Dial 动词时设置 answerOnBridge="true"。
根据官方documentation,js sdk 应该返回这些状态“pending”、“connecting”、“ringing”、“open”、“close”。
这是显示“正在呼叫...”所必需的,直到接听电话并在接听电话后立即在浏览器中的拨号器中启动计时器(mm:ss)。
注意:也尝试过使用 Twilio 的快速入门指南代码。
/**** 伪代码如下 ***/ // 前端代码
let device = require('twilio-client').Device;
let outboundCall = '';
const twilioInit = () => {
// axios call to get capability {token} from service
device = device.setup(token,
{
allowIncomingWhileBusy: true,
enableRingingState: true
});
device.ready(function () {
console.log("Twilio ready");
device.identity = "Ratan";
console.log("Twilio Device ", device);
});
device.error(function (error) {
console.log("error in twilio ", error);
if (error.message == "JWT Token Expired") {
alert("token expired");
}
// If token has expired, dispatch an action to get new token.
});
}
// on phone icon click i am calling the below method
const makeOutboundCall = () => {
outboundCall = device.connect({
To: '+911234567890' // This is not the real phone number, I use number from list of Twilio verified numbers
});
outboundCall.on('ringing', function (hasEarlyMedia) {
console.log("ringing");
});
// Then tracking the status of this outboundCall object in setInterval function with a interval of one second by outboundCall.status() and clearing the..
// ..setInterval once the call disconnects
}
// 后端代码 - 服务器端(WEBHOOK)
@RequestMapping(value="/callCustomers", produces= "text/xml")
public String callByBrowserToMobile(@RequestParam String ApplicationSid, @RequestParam String ApiVersion,
@RequestParam String Called, @RequestParam String Caller,
@RequestParam String CallStatus, @RequestParam String To,
@RequestParam String From, @RequestParam String CallSid,
@RequestParam String Direction, @RequestParam String AccountSid) {
Number number = new Number.Builder(To).build();
Dial dial = new Dial.Builder().answerOnBridge(true).number(number).callerId(myTwilioNumber).build();
VoiceResponse response = new VoiceResponse.Builder().dial(dial).build();
logger.info(response.toXml());
return response.toXml();
}
呼叫已正确拨打,但问题仅在于使用 twilio js 库跟踪出站呼叫状态,以便一旦收件人接听呼叫,我就可以在 UI 中启动呼叫计时器。
【问题讨论】:
-
如果有人能在这里帮助我,那就太好了。我期待 philnash Twilio Developer Evangelist 回答我的问题。
-
你能分享你用来设置 Twilio 设备和监听事件变化的代码吗?
-
我添加了伪代码。请指导。
标签: twilio