我遇到的一个问题是,每当我从软拨号器(浏览器应用程序)发出出站呼叫并且被呼叫者(移动电话)拒绝呼叫时,twilio就会再次自动拨号到同一被呼叫者。但是,当被叫方拒绝twilio自动生成的第二个呼叫时,不会发生这种情况。
与Javascript相关的twilio代码:
const makeOutboundCall = () => {
let outboundCall = device.connect({
To: TO_NUMBER
});
outboundCall.on("ringing", (hasEarlyMedia) => {
console.log("The call has started and the other phone is ringing.");
});
outboundCall.on("accept", (connection) => {
console.log("The other person answered the phone!");
});
outboundCall.on("disconnect", () => {
console.log("The other person hung up.");
});
}
服务器端Java webhook如下所示:
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();
}
answerOnBridge(true)用于跟踪振铃并在UI端接受出站呼叫的状态。 使用github.com/TwilioDevEd/client-quickstart-js也可以复制该问题。
答案 0 :(得分:0)
打开support ticket可能是最好的方法。终止服务提供商可能返回错误的SIP响应代码,这导致Twilio尝试跨另一提供商进行传递(因此是第二次呼叫),因为该响应代码表明运营商无法终止该呼叫。
如果返回以下任何SIP状态代码(“ 2xx”,“ 400”, “ 404”,“ 405”,“ 410”,“ 416”,“ 482”,“ 484”,“ 486”,“ 6xx”),Twilio will 不会故障转移到下一个原始SIP URI。