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.php 和 callback.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",
));
?>
我的理解是流程应该是这样的:
- 用户导航到 evntr。co/download
- 用户提交带有他们的号码的表单
- 表单呼叫 EvntrPHP.php 并向其号码
发送短信
- 只要消息的状态发生变化(已发送、已送达、已取消等),Twilio 就会发送到 callback.php。
但是,每次我提交表单时,都会发送消息并且页面只停留在 evntr.co/EvntrPHP.php 并且永远不会加载 callback.php。也许这是我对回调 URL 工作方式的误解?或者 StatusCallback 参数不适用于免费的 Twilio 号码?
回调并不像您想象的那样起作用。
呼叫结束回调 (StatusCallback) 请求
收到一个电话后,从您的应用程序请求 TwiML,处理它,最后结束通话,Twilio 将向为被叫 Twilio 号码配置的 StatusCallback URL 发出异步 HTTP 请求(如果有一)。通过为您的 Twilio 号码提供 StatusCallback URL 并捕获此请求,您可以确定通话何时结束并接收有关通话的信息。
这里是 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 错误的大多数错误。它不能保证短信已送达(您将从回调网络钩子中获得)但它会保证您已尽一切努力发送短信。
我正在尝试将 Twilio 集成到我的 Wordpress 网站上。
我们的想法是让用户输入他们的 phone 号码来下载 link 我们的应用程序。我们在这里放置了一个简单的表格 - http://evntr.co/download - 提交表格后,EvntrPHP.php 代码为 运行。
使用模板代码,我们可以轻松获得表单,使用免费的 Twilio 号码向经过验证的号码(当前位于“收件人”字段中的号码)发送消息。但是,当我们添加 StatusCallback 参数时,它永远不会调用我们的 callback.php 代码。 EvntrPHP.php 和 callback.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",
));
?>
我的理解是流程应该是这样的:
- 用户导航到 evntr。co/download
- 用户提交带有他们的号码的表单
- 表单呼叫 EvntrPHP.php 并向其号码 发送短信
- 只要消息的状态发生变化(已发送、已送达、已取消等),Twilio 就会发送到 callback.php。
但是,每次我提交表单时,都会发送消息并且页面只停留在 evntr.co/EvntrPHP.php 并且永远不会加载 callback.php。也许这是我对回调 URL 工作方式的误解?或者 StatusCallback 参数不适用于免费的 Twilio 号码?
回调并不像您想象的那样起作用。
呼叫结束回调 (StatusCallback) 请求
收到一个电话后,从您的应用程序请求 TwiML,处理它,最后结束通话,Twilio 将向为被叫 Twilio 号码配置的 StatusCallback URL 发出异步 HTTP 请求(如果有一)。通过为您的 Twilio 号码提供 StatusCallback URL 并捕获此请求,您可以确定通话何时结束并接收有关通话的信息。
这里是 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 错误的大多数错误。它不能保证短信已送达(您将从回调网络钩子中获得)但它会保证您已尽一切努力发送短信。