【问题标题】:Twilio Callback URL not Called - PHP & Wordpress未调用 Twilio 回调 URL - PHP 和 Wordpress
【发布时间】:2015-10-11 13:19:00
【问题描述】:

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

我们的想法是允许用户输入他们的电话号码以获取我们应用的下载链接。我们在这里建立了一个简单的表单 - 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. form 调用 EvntrPHP.php 并向他们的号码发送一条短信
  4. 只要消息的状态发生变化(Sent、Delivered、Canceled 等),Twilio 就会 POST 到 callback.php。

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

【问题讨论】:

    标签: php wordpress twilio


    【解决方案1】:

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

    呼叫结束回调(StatusCallback)请求

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

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

    【讨论】:

      【解决方案2】:

      这里是 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>
      

      当然比普通的&lt;h1&gt; 更有风格!或者,您可以重定向到显示成功消息的页面。 (PHP不是我最强的科目,而是discussions of redirects are rife on this StackOverflow question

      祝您使用该应用程序好运,如果您还有其他 Twilio 问题,请告诉我!

      [编辑]

      如 cmets 中所述,如果您想查看 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 块中并进行适当响应应该可以捕获来自不正确电话号码或其他 API 错误的大多数错误。它不能保证 SMS 已送达(您将从回调 webhook 中获得),但它会保证您已尽一切努力将 SMS 发送出去。

      【讨论】:

      • 啊,所以在发送消息后,我重定向到我的页面 - evntr.co/callback.php - 然后根据状态消息做出反应。您是否有关于如何捕获发送到该回调 url 的状态消息的示例代码?我尝试了变量的简单回显 - $_POST['SmsStatus'] - 但从未显示任何内容。
      • 啊,不,您的重定向完全独立于来自 Twilio 的任何状态回调。它们是异步发生的,倾注了您的 REST API 调用。这几乎可以立即完成,也可能需要几分钟,所以我不会基于它们进行任何用户交互。我不确定您要通过回调完成什么用户交互,所以我不确定如何从这一点指导您。
      • 明白了。我正在尝试将用户引导至成功页面或失败页面(例如,twilio 由于号码无效而无法发送文本)。我可能接近这个错误。
      • 我在我的答案中添加了一些可能会有所帮助的内容。你怎么看?
      • 这行得通。那么回调 url 的用例是什么?我似乎一直在接近这个错误。
      猜你喜欢
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      相关资源
      最近更新 更多