首页 > 解决方案 > 显示未接来电 Twilio

问题描述

我一直在使用 Twilio 开发呼叫系统。下面是它的工作原理:

1.) 当有人呼叫它时,它会播放 IVR,他们会发送响应并重定向他们

2.) 然后我们向他们播放铃声并使用 DialCallStatus 将其转发到手机。我们使用它是因为我们不希望他们点击手机上的语音邮件。因此,如果没有人接听电话,他们会点击 twilio 语音信箱,而不是手机语音信箱。如果接线员接听电话,他们会听到“按任意键接听电话”,然后按一个键,这样 twilio 就知道有人接听了电话。

3.)我遇到的问题是当我想显示“未接来电”时它不起作用。我看到了通话状态,并尝试使用“未接来电”,但似乎几乎每个通话都被标记为“已完成”。从本质上讲,我希望能够查明没有被实际接线员接听的电话。因此,即使他们没有留下语音邮件,我们也可以给他们回电。

很抱歉这个冗长的问题,但如果您知道如何做到这一点,我们将不胜感激。

标签: twilio

解决方案


具体到“按任意键接听电话”。您是否将Number 名词 url 参数与 Dial 动词一起使用,并使用与 Number URL 返回的Gather 动词来收集此肯定输入?如果被叫方按任意键,您将收到一个数字参数。重定向(见下文)是如果没有按下任何数字(但呼叫在拨号超时之前接听)时命中的下降。如果没有输入密钥,我将 Digits 的值设置为超时。

查看下面的 Twilio 函数代码以获取示例。在我的测试中,如果拨号方在收集 DTMF 条目超时之前应答但未按数字,则拨号操作 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);
    }
};

推荐阅读