Twilio回调URL不称为 - PHP&Wordpress

问题描述:

我想将Twilio整合到我的Wordpress网站上。Twilio回调URL不称为 - PHP&Wordpress

这个想法是让用户输入他们的电话号码来获得我们的应用程序的下载链接。我们在此提出了一个简单的表单 - http://evntr.co/download - 并且在提交表单后,将运行EvntrPHP.php代码。

使用模板代码,我们很容易就能够使用免费的Twilio号码将消息发送到验证号码(当前位于To字段中的号码)。但是,当我们添加StatusCallback参数时,它永远不会调用我们的callback.php代码。 EvntrPHP.phpcallback.php位于根目录 - evntr.co/。

<?php 
require 'twiliophp/Services/Twilio.php'; 

$AccountSid = "--------"; 
$AuthToken = "---------"; 

$client = new Services_Twilio($AccountSid, $AuthToken); 

$phonenum = $_POST["phonenum"]; 
$callbackURL = "https://evntr.co/callback.php"; 

$client->account->messages->create(array( 
    'To' => "XXXXXXXXXX", 
    'From' => "+XXXXXXXXXX", 
    'Body' => "Test Message", 
    'StatusCallback' => "https://evntr.co/callback.php", 
)); 
?> 

我的理解是,流动应该是这样的:

  1. 用户导航到evntr.co/download
  2. 用户提交他们的数字形式
  3. 形式调用EvntrPHP .php并发送文本消息到他们的号码
  4. Twilio POSTs到callback.php,只要消息的状态发生变化(发送,发送,取消等)。

但是,每次我提交表单时,都会发送消息,页面只停留在evntr.co/EvntrPHP.php,并且不会加载callback.php。也许这是我与回调网址的工作方式的误解。或者,也许StatusCallback参数不适用于免费的Twilio号码?

Twilio开发者传道这里。

你是对的,Twilio回调没有按照你的预期工作。正如麦肯指出的那样,该请求是从Twilio到您提供的URL不同步的。您可以使用回调来跟踪消息的进度,但不会影响用户的请求。

所以,在你的榜样,你要么要呈现的东西,你发出的信息后:

<?php 
    require 'twiliophp/Services/Twilio.php'; 

    // other stuff 

    $client->account->messages->create(array( 
    'To' => $phonenum, 
    'From' => "+14708655xxx", 
    'Body' => "Test Message", 
    'StatusCallback' => "https://evntr.co/callback.php", 
)); 
?> 

<h1>You should receive an SMS, click the link in the SMS to download the app on the platform of choice.</h1> 

与一些当然比普通<h1>更多的风格!或者,您可以重定向到带有成功消息的页面。(PHP不是我最强的话题,但是discussions of redirects are rife on this * question

祝你好运与应用程序,并让我知道如果你有任何更多的Twilio问题!

[编辑]

正如评论讨论的,如果你想看看如果API请求成功,你会想要做的事,如:

<?php 
    require 'twiliophp/Services/Twilio.php'; 

    // other stuff 

    try { 
    $client->account->messages->create(array( 
     'To' => $phonenum, 
     'From' => "+14708655xxx", 
     'Body' => "Test Message", 
     'StatusCallback' => "https://evntr.co/callback.php", 
    )); 

    // Success! Redirect to success page! 
    header("Location: http://evntr.co/success.php"); 
    die(); 

    } catch (Services_Twilio_RestException $e) { 
    // Something went wrong! 
    // Do something about it! 
    } 

?> 

所以,包裹在try/catch块中调用API并正确响应应从错误的电话号码或其他API错误中捕获大多数错误。它不能保证短信已经发送(你会从回叫webhook中获得),但它可以保证你已经尽你所能来发送短信。

+0

啊,所以在发送消息后,我重定向到我的页面 - evntr.co/callback.php - 然后根据状态消息作出反应。你有关于如何捕获发送到该回调url的状态消息的示例代码?我尝试了一个简单的回声变量 - $ _POST ['SmsStatus'] - 但从未显示任何东西。 – U2Pride15

+0

啊,不,你的重定向完全独立于任何Twilio的状态回调。它们异步发生,倾注你的REST API调用。这可能几乎立即或需要几分钟,所以我不会基于任何用户交互。我不确定你想用回调来完成哪些用户交互,所以我不确定如何从这一点引导你。 – philnash

+0

Gotcha。我试图将用户引导至成功页面或失败页面(例如,由于数字无效,twilio无法发送文本)。我可能会接近这个错误。 – U2Pride15

回调不像你想象的那样工作。

通话结束回调(StatusCallback)请求

接收呼叫,从您的应用程序请求TwiML,处理它,终于结束通话后,Twilio会作出异步HTTP请求配置的叫StatusCallback网址Twilio号码(如果有的话)。通过为您的Twilio号码提供StatusCallback URL并捕获此请求,您可以确定通话何时结束并接收有关通话的信息​​。

- https://www.twilio.com/docs/api/twiml/twilio_request