我一直在与Twilio一起开发呼叫系统。它是这样工作的:
1。)当有人呼叫它播放IVR时,他们发送响应并重定向他们
2。)然后,我们向他们播放铃声,然后使用DialCallStatus将其转发到手机。我们之所以使用它,是因为我们不希望他们在手机上打语音邮件。因此,如果没有人接听电话,他们将拨打twilio语音邮件,而不是手机语音邮件。如果话务员回答,他们会听到“按任意键接听电话”,则按一下键,这样twilio就会知道有人接听了电话。
3。)我遇到的问题是,当我想显示“未接来电”时,它不起作用。我看到了通话状态,并尝试使用“未接来电”,但似乎几乎每个通话都被标记为“已完成”。本质上,我希望能够查明实际接线员未接听的电话。因此,即使他们不留下语音邮件,我们也可以给他们回电。
很抱歉,这个冗长的问题,但是如果您有任何想法,将不胜感激。
特定于“按任意键接听电话”。您是否在将Dial动词与Number noun url parameter结合使用,并使用随数字URL返回的Gather verb来收集此肯定输入?如果被叫方按任意键,您将收到一个Digits参数。重定向(请参见下文)是未按任何数字(但在dial timeout之前接听电话)时所命中的中断。如果未输入任何密钥,则将Digits的值设置为等于超时。
请看下面的Twilio功能代码。在我的测试中,如果被叫方应答但未按gather DTMF entry timeout之前的数字,则“拨号操作” URL会正确显示无应答。
初始拨号号码代码:
exports.handler = function(context, event, callback) { let twiml = new Twilio.twiml.VoiceResponse(); twiml.dial({action: "https://x.x.x.x/dialAction"}) .number({url: "https://x.x.x.x/gatherWhisp"}, "+15555551212"); callback(null, twiml); };
被叫方应答呼叫时运行的代码:
exports.handler = function(context, event, callback) {
let twiml = new Twilio.twiml.VoiceResponse();
let digits = event.Digits || null;
if (digits === "timeout") {
// The dialed party never pressed a digit to accept call
// The DialCallStatus returned in the Dial action URL should say no-answer
twiml.hangup();
callback(null, twiml);
} else if (digits) {
twiml.say("You pressed a digit");
callback(null, twiml);
} else {
twiml.gather({numDigits: "1", finishOnKey: ""})
.say("Please press a digit to accept the call");
twiml.redirect("https://x.x.x.x/gatherWhisp?Digits=timeout");
callback(null, twiml);
}
};