Twilio 回调 URL 未调用 - PHP & Wordpress

Twilio Callback URL not Called - PHP & Wordpress

我正在尝试将 Twilio 集成到我的 Wordpress 网站上。

我们的想法是让用户输入他们的 phone 号码来下载 link 我们的应用程序。我们在这里放置了一个简单的表格 - http://evntr.co/download - 提交表格后,EvntrPHP.php 代码为 运行。

使用模板代码,我们可以轻松获得表单,使用免费的 Twilio 号码向经过验证的号码(当前位于“收件人”字段中的号码)发送消息。但是,当我们添加 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. 发送短信
  5. 只要消息的状态发生变化(已发送、已送达、已取消等),Twilio 就会发送到 callback.php。

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

回调并不像您想象的那样起作用。

呼叫结束回调 (StatusCallback) 请求

收到一个电话后,从您的应用程序请求 TwiML,处理它,最后结束通话,Twilio 将向为被叫 Twilio 号码配置的 StatusCallback URL 发出异步 HTTP 请求(如果有一)。通过为您的 Twilio 号码提供 StatusCallback URL 并捕获此请求,您可以确定通话何时结束并接收有关通话的信息​​。

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

这里是 Twilio 开发人员布道者。

您说得对,Twilio 回调未按预期工作。正如 McCann 指出的那样,请求是从 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 Whosebug 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!
  }

?>

因此,将 API 调用包装在 try/catch 块中并适当响应应该可以捕获来自不正确 phone 数字或其他 API 错误的大多数错误。它不能保证短信已送达(您将从回调网络钩子中获得)但它会保证您已尽一切努力发送短信。