отправка данных POST, когда вы кладете трубку на Twilio

У меня есть приложение, работающее с Twilio. Идея состоит в том, что вы позвоните по номеру телефона, и Twilio ответит вам и предложит варианты меню. Как только вы нажмете цифру, он отправит данные сообщения, а затем повесит трубку (эта часть работает правильно) Проблема, с которой я столкнулся, заключается в том, чтобы выяснить, есть ли способ отправить данные сообщения, если пользователь просто повесит трубку, как только twilio ответы ... Я нашел в их документации следующий код.

<?xml version="1.0" encoding="UTF-8"?>
<!-- page located at http://example.com/gather_hints.xml -->
<Response>
 <Gather action="/process_gather.php" method="GET">
     <Say>Enter something, or not</Say>
 </Gather>
 <Redirect method="GET">
     /process_gather.php?Digits=TIMEOUT
 </Redirect>
</Response>

Проблема в том, что вам нужно дождаться конца сообщения, чтобы время ожидания сборки истекло. Есть ли способ сделать так, чтобы при запуске, если пользователь повесит трубку, он сделает что-то вроде перехода к тегу перенаправления?

Спасибо!

Изменить: Итак, на странице process_gather.php я могу сохранить завершенный статус как переменную?

$Completed = $_POST["completed"]; //which would set $Completed == 'completed'

а затем на этой странице я могу просто сказать, если if (! empty ($ Completed)) что-то сделает (мне нужно встроить это в свою логику, но я просто хочу убедиться, что у меня есть общая идея)


person Bill    schedule 29.11.2010    source источник
comment
Важен не завершенный статус. Дело в том, что происходит обратный вызов CallStatus. вам понадобится новый сценарий .php (что-то вроде /call_ended.php), который проверяет, запущен ли /process_gather.php.   -  person TelegramSam    schedule 30.11.2010
comment
Как мне узнать, запущен ли process_gather.php? Думаю, я этого не совсем понимаю ...   -  person Bill    schedule 30.11.2010
comment
Я обновил свой ответ ниже некоторыми примерами кода, которые должны помочь.   -  person TelegramSam    schedule 01.12.2010


Ответы (1)


Лучший способ решить эту проблему - использовать URL-адрес StatusCallback. Вы можете установить этот URL-адрес для входящих вызовов в Конфигурации номера в вашей учетной записи или с помощью необязательного аргумента для исходящих вызовов.

Когда вызов завершится, Twilio отправит POST (или GET) на URL-адрес со всеми те же переменные, которые он передает во время обычного запроса. Переменная CallStatus будет установлена ​​в completed.

Если этот URL-адрес вызывается до того, как вы получите ввод от пользователя (в ваш скрипт «/process_gather.php»), то он повесит трубку.

Примечание. Вы можете использовать файлы cookie для управления состоянием сеанса во время вызова: все запросы, сделанные Twilio во время одного вызова (и запрос StatusCallback), будут содержать любые отправленные вами файлы cookie. Это позволяет вам использовать переменную сеанса для отслеживания прогресса вызова.

Пример PHP для /proces_gather.php:

 <?php 
 session_start(); 
 // adds it to our session 
 $_SESSION['gather_result']=$_POST["Digits"]; 
 // then do whatever else you want your gather script to do.
 ?> 

Пример PHP для /status_callback.php, который должен быть настроен как URL-адрес StatusCallback для номера телефона на экране учетной записи Twilio:

<?php
session_start();
//check for gather_result
if(isset($_SESSION['gather_result'])){
  //user did enter digits
} else {
  //do whatever you want to do if the user entered no digits.
}
?>
person TelegramSam    schedule 29.11.2010
comment
Джон из Twilio здесь ... это правильный ответ. Спасибо, Сэм! - person John Sheehan; 30.11.2010
comment
Спасибо за помощь. Я отредактировал свой пост, просто чтобы убедиться, что все правильно. Думаю, да, но не совсем уверен. - person Bill; 30.11.2010
comment
Хм, хорошо, в этом есть смысл ... Я попробую. - person Bill; 02.12.2010