带语音邮件的Twilio屏幕来电者

带语音邮件的Twilio屏幕来电者,twilio,twilio-php,Twilio,Twilio Php,我的目标是能够屏蔽来电,并将其发送到语音信箱。下面的代码正确地进行了筛选,但是如果我接听电话,然后只是挂断电话,电话就会被挂断,而不是直接转到语音信箱。我怎样才能做到这一点 <Say>Please wait while we connect you to Aaron. Calls may be recorded for quality assurance purposes.</Say> <Dial action="voicemail.php?email=aaron

我的目标是能够屏蔽来电,并将其发送到语音信箱。下面的代码正确地进行了筛选,但是如果我接听电话,然后只是挂断电话,电话就会被挂断,而不是直接转到语音信箱。我怎样才能做到这一点

<Say>Please wait while we connect you to Aaron. Calls may be recorded for quality assurance purposes.</Say>

<Dial action="voicemail.php?email=aaron" timeout="15">
  <Number url="screen-caller.xml">+11231231234</Number>
</Dial>
请稍候,我们正在为您连接Aaron。出于质量保证的目的,可能会记录通话。
+11231231234
screen-caller.xml:

<Response>
    <Gather action="handle-screen-input.php" numDigits="1">
            <Say>To accept, press 1.</Say>
    </Gather>
    <!-- If customer doesn't input anything, prompt and try again. -->
    <Say>Sorry, I didn't get your response.</Say>
    <Redirect>screen-caller.xml</Redirect>
</Response>

要接受,请按1。
对不起,我没有收到你的回复。
screen-caller.xml
handle-screen-input.php:

    echo '<?xml version="1.0" encoding="UTF-8"?>';

    echo '<Response>';

    $user_pushed = (int) $_REQUEST['Digits'];

    if ($user_pushed == 1)
    {
            echo '<Say>Connecting. Calls are recorded.</Say>';
    }
    else {
            echo '<Hangup />';
    }

    echo '</Response>';
echo';
回声';
$user_pushed=(int)$_请求['Digits'];
如果($user\u==1)
{
回显“正在连接。呼叫已被记录。”;
}
否则{
回声';
}
回声';
voicemail.php:

    header("content-type: text/xml");
    echo '<?xml version="1.0" encoding="UTF-8"?>';
    $email = $_REQUEST['email'];
?>
<Response>
    <?php if ($_REQUEST['DialCallStatus'] == 'completed') { ?>
            <Hangup/>
    <?php } else { ?>
            <Say>Please leave a message at the beep.  Press the star key when finished.</Say>
            <Record transcribe="true" action="goodbye.php" transcribeCallback="voicemail-send.php?email=<?php echo $email; ?>" maxLength="120" finishOnKey="*" />
            <Say>I did not receive a recording.</Say>
            <Redirect>voicemail.php</Redirect>
    <?php } ?>
</Response>
标题(“内容类型:text/xml”);
回声';
$email=$_请求['email'];
?>
请在哔的一声后留言。完成后按星形键。

[[编辑]]

啊!我知道那是什么!下面的答案(我为子孙后代保留)是完全错误的

当被拨号的人挂断耳语时,就会调用
动词上的
动作。从文档中可以看到:已完成、忙、无应答、失败或取消。当用户拿起电话时,状态不能为忙碌、无应答、失败或取消。因此,当他们在窃窃私语结束前挂断电话时,通话状态将完成

因此,当调用您的操作时,
diallstatus
将完成,并且您的voicemail.php将挂断

您也会收到一个
拨号持续时间
,这样您就可以检查通话持续了多长时间,并确定通话是否已接通或对方刚刚挂断

希望这有帮助

[[原始答案]]

这里是Twilio开发者福音传道者

如果您在通话的耳语部分挂断电话,那么最初的来电者将继续通过他们获得的TwiML。在这种情况下,您只给他们一个
动词,因此一旦您挂断电话,调用方将完成
操作,到达TwiML的末尾并挂断电话

尝试在第一个TwiML中的
之后添加
/voicemail.php?email=aaron


如果有帮助,请告诉我。

刚刚尝试过,如果来电筛选人员在接听后挂断,来电仍会挂断。嗯。好的,让我问问周围的人是的,这就成功了!在大多数情况下,只有挂断超过30秒的已完成通话才有效。万岁!很抱歉花了一段时间才回复,很高兴现在已经整理好了。你能把你的
voicemail.php
也发出来吗?看看会发生什么。Thanks@philnash你那边有更新吗?我已经编辑了我的答案。我想我现在的想法是对的。