在 Twilio 中 <Redirect> 之后 Webhook 无效
Webhook not valid after <Redirect> in Twilio
我正在尝试在 twilio 中测试工作流程,工作流程是这样的:
- 一个电话打进来,我的服务器被 twilio 击中,请求根据 docs
有效
- Webhook returns 重定向到另一个端点的 Twiml,以便将调用排队。
- 在此端点上,webhook 无效。
除此第二个端点之外的所有端点都得到了正确验证。在验证这样的重定向时,是否需要考虑任何特殊情况?
如果重要的话,我正在使用 laravel。
[编辑 1]
twiml 看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say></Say>
<Redirect>https://example.com/webhook/call/handle-incoming-call?Enqueue=1</Redirect>
</Response>
重定向到 url 请求后 returns 出现 403 错误。
为了验证,我在 laravel 中的路由中间件中使用了以下代码。
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Response;
use Twilio\Security\RequestValidator;
class TwilioRequestValidator
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// Be sure TWILIO_TOKEN is set in your .env file.
// You can get your authentication token in your twilio console https://www.twilio.com/console
$requestValidator = new RequestValidator(env('TWILIO_TOKEN'));
$requestData = $request->toArray();
// Switch to the body content if this is a JSON request.
if (array_key_exists('bodySHA256', $requestData)) {
$requestData = $request->getContent();
}
$isValid = false;
if ($request->hasHeader('X-Twilio-Signature')) {
$isValid = $requestValidator->validate(
$request->header('X-Twilio-Signature'),
$request->fullUrl(),
$requestData
);
}
if ($isValid) {
return $next($request);
} else {
return new Response('Invalid Request', 403);
}
}
}
谢谢。
此处为 Twilio 开发人员布道师。
而不是使用 request->toArray()
其中 returns 所有参数,您只需要主体参数。查询字符串参数已在 request->fullUrl()
.
中处理
请尝试 request->post()
获取 POST 数据。
我正在尝试在 twilio 中测试工作流程,工作流程是这样的:
- 一个电话打进来,我的服务器被 twilio 击中,请求根据 docs 有效
- Webhook returns 重定向到另一个端点的 Twiml,以便将调用排队。
- 在此端点上,webhook 无效。
除此第二个端点之外的所有端点都得到了正确验证。在验证这样的重定向时,是否需要考虑任何特殊情况?
如果重要的话,我正在使用 laravel。
[编辑 1]
twiml 看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say></Say>
<Redirect>https://example.com/webhook/call/handle-incoming-call?Enqueue=1</Redirect>
</Response>
重定向到 url 请求后 returns 出现 403 错误。
为了验证,我在 laravel 中的路由中间件中使用了以下代码。
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Response;
use Twilio\Security\RequestValidator;
class TwilioRequestValidator
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// Be sure TWILIO_TOKEN is set in your .env file.
// You can get your authentication token in your twilio console https://www.twilio.com/console
$requestValidator = new RequestValidator(env('TWILIO_TOKEN'));
$requestData = $request->toArray();
// Switch to the body content if this is a JSON request.
if (array_key_exists('bodySHA256', $requestData)) {
$requestData = $request->getContent();
}
$isValid = false;
if ($request->hasHeader('X-Twilio-Signature')) {
$isValid = $requestValidator->validate(
$request->header('X-Twilio-Signature'),
$request->fullUrl(),
$requestData
);
}
if ($isValid) {
return $next($request);
} else {
return new Response('Invalid Request', 403);
}
}
}
谢谢。
此处为 Twilio 开发人员布道师。
而不是使用 request->toArray()
其中 returns 所有参数,您只需要主体参数。查询字符串参数已在 request->fullUrl()
.
请尝试 request->post()
获取 POST 数据。