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
。如果拨打的电话被接听,该值将是 completed
或 answered
(在会议的情况下)。在 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
}
?>
我设置了一个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
。如果拨打的电话被接听,该值将是 completed
或 answered
(在会议的情况下)。在 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
}
?>