Twilio odd记录动词行为,需要建议

时间:2016-02-11 01:32:37

标签: php twilio

我有一个电话树,如果他们不提供分机,就会将呼叫者排入队列,并且在播放音乐时,呼叫者可以随时按键以留言。

如果用户有一个分机,并且代理没有接听,则转到LeaveMessage.php,然后点击记录动词就好了,调用者可以留言,它会添加到我的数据库和电子邮件中出。效果很好。

当我尝试从重定向到队列的调用者中击中同一个LeaveMessage.php脚本时,会发生奇怪的记录动词行为。它只是跳过那个Record动词,即使它从其他任何地方都可以正常工作。

我不能为我的生活弄清楚为什么它会像这样。

的index.php

if( $_REQUEST['Digits'] ) {
    echo '<Redirect>./LeaveMessage.php?exten=' . $digits . '</Redirect>';
}
echo '<Say>Thank you for calling.</Say>';
echo '<Gather timeout="4">';
echo '<Say>If you know your parties extension, please enter it now.</Say>';
echo '<Say>If you do not know your parties extension, please hold while we connect you to an operator.</Say>';
echo '</Gather>';
//redirect to enqueue caller, and dialOut and event handlers.
echo '<Redirect>./EnqueueCaller.php</Redirect>';

LeaveMessage.php

echo '<Say>Please leave a message after the tone. </Say>';
echo '<Record action="./handle_message.php?exten=' . $exten . '" maxLength="35" method="POST" timeout="7" playBeep="true" />';
echo '<Gather action="./leave_a_message.php?exten=' . $exten . '" method="GET" >';
echo '<Say>I\'m sorry, the message was not received, press any key to try again.</Say>';
echo '</Gather>';

WaitQueue.php

if( isset( $_REQUEST['Digits'] ) ) {
    echo '<Redirect>./leave_a_message.php</Redirect>';
    echo '</Response>';
    exit();
}
else if( isset( $_REQUEST['hold'] ) ) {
    echo '<Gather action="./wait.php?Digits=true" method="POST" numDigits="1" timeout="1">';
    echo '<Say>At any time press any number to leave a message, and an agent will call you back shortly.</Say>';
}
else {
    echo '<Say> You are now on hold.</Say>';
    echo '<Gather action="./wait.php?Digits=true" method="POST" numDigits="1" timeout="1">';
}
echo '<Say>At any time press any number to leave a message, and an agent will call you back shortly.</Say>';
echo '<Play>';
echo 'http://com.twilio.sounds.music.s3.amazonaws.com/ClockworkWaltz.mp3';
echo '</Play>';
echo '</Gather>';
echo '<Redirect>./wait.php?hold=true</Redirect>';
echo '</Response>';

1 个答案:

答案 0 :(得分:0)

Twilio开发者传道者在这里。

你的问题是,在调用者跳过<Record>动词的情况下,你的调用者仍然在队列中。在队列中,用户会听到waitUrlyou can only the use Play, Say, Pause, Hangup, Gather, Redirect and Leave verbs中发生的事情。

然而,你并没有失去运气。为了记录消息,您需要用户自己离开队列,您可以使用<Leave> verb这样做。当您<Leave>队列时,调用会在<Enqueue>动词后直接返回到TwiML,因此您可以在那里添加<Record> TwiML。

您没有提供您的EnqueueCaller.php文件,但您的想法是您的Enqueue可能如下所示:

<Response>
  <Enqueue>Queue Name</Enqueue>
  <Redirect>./leave_a_message.php</Redirect>
</Response>

您的WaitQueue.php将以(请注意<Leave>而不是<Redirect>)开头:

if( isset( $_REQUEST['Digits'] ) ) {
    echo '<Leave/>';
    echo '</Response>';
    exit();
}

或者,您可以使用REST API手动将用户出列,并将其作为this question eventually did中的开发人员重定向到<Record> TwiML。

请告诉我这是否有帮助!