2010-11-29 62 views
3

我有一个与Twilio一起运行的应用程序。这个想法是,你会拨打一个电话号码Twilio会回答并给你菜单选项。一旦你按下一个数字,它将提交发布数据,然后挂断(该部分全部正常工作)我遇到的问题是如果用户刚刚挂断电话,就会发现是否有提交发布数据的方式答案...我在他们的文档中找到了以下代码。当您在Twilio上挂断时提交POST数据

<?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' 

,然后在那个页面,我可以基本上只是说如果,如果(!空($已完成))做一些事情 (我有它的工作为我的逻辑,但我只是想确保我得到的总体思路)

+0

它不是完成状态是重要的。这是CallStatus回调发生。 你需要一个新的.php脚本(类似`/ call_ended.php`)来检查`/ process_gather.php`是否已经运行。 – TelegramSam 2010-11-30 18:59:10

+0

如何运行process_gather.php?我想我真的不明白它... – Bill 2010-11-30 19:26:53

回答

9

解决此问题的最佳方法是使用StatusCallback URL。您可以在帐户中的数字配置中设置入站呼叫的URL,也可以通过可选参数设置呼出呼叫。

当呼叫完成时,Twilio会将POST(或GET)POST(或GET)到所有在正常请求期间通过的所有same variables的URL。 CallStatus变量将被设置为completed

如果在用户输入(到你的`/process_gather.php'脚本)之前调用了这个URL,那么它们就会挂起。

注意:您可以使用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,这应该被配置为StatusCallback URL在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. 
} 
?> 
相关问题