twilio - 通话结束时停止流程

twilio - stop flow when call end

我设置了一个twilio号码。当有电话打进来时,来电者会收到一条欢迎信息,然后电话会转到我的手机 phone。如果电话无人接听,电话将转至语音信箱,告知来电者留言,然后电话将转至语音信箱。一切正常。 但如果电话被接听,我挂断电话,流程就不会停止。它继续到语音邮件消息。现在我的问题是:

通话结束后如何停止流量?

这是我的代码:

<?php
header('content-type: text/xml');
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
?>
<Response>
<Play>http://example.com/telephone/sounds/welcome-message.mp3</Play>
<Dial record="true" timeout="25">
<Number url="http://example.com/telephone/wisper.php">
+4581732211
</Number>
</Dial>
<Play>http://example.com/telephone/sounds/no-answer.mp3</Play>
<Record transcribe="true" transcribeCallback="http://twimlets.com/voicemail?Email=mail@mydomain.com"/>
</Response>

在您的代码中,Dial 和 Record 都发生在同一个 TwiML 文件中。所以条件执行是不可能的。

要解决这个问题,

1.将录音部分移动到另一个文件中。 (说 recording.php

2. 然后指定新文件(recording.php)的url作为拨号时的动作。拨号完成后,twilio 将向此 URL 发出请求,并继续执行从此 URL.

收到的 TwiML 3. 查看recording.php中的取值请求参数DialCallStatus。如果拨打的电话被接听,该值将是 completedanswered(在会议的情况下)。在 recording.php

中相应地路由呼叫

dial.php

<?php
header('content-type: text/xml');
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
?>
<Response>
    <Play>http://example.com/telephone/sounds/welcome-message.mp3</Play>
    <Dial record="true" timeout="25" action="http://example.com/telephone/recording.php">
        <Number url="http://example.com/telephone/wisper.php">
            +4581732211
        </Number>       
    </Dial>
</Response>

recording.php

<?php
header('content-type: text/xml');
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$dial_call_status = $_REQUEST['DialCallStatus'];
if($dial_call_status == "completed" || $dial_call_status == "answered"){
?>
    <Response>
        <Hangup/>
    </Response>
<?php
}else{
?>
    <Response>
            <Play>http://example.com/telephone/sounds/no-answer.mp3</Play>
            <Record transcribe="true" transcribeCallback="http://twimlets.com/voicemail?Email=mail@mydomain.com"/>
    </Response>
<?php
}
?>