如何解决 Twiml 和 TwiML 之间的混淆 -“无效内容类型”或“检索失败”

问题描述 投票:0回答:1

我想为 WordPress 编写一个插件,当接到我的 Twillio 电话号码的来电时,该插件会显示“Hello World”。 我在 Twilio 管理员上为来电设置了 POST Webhook:

https://myWPsite.com/wp-json/callcenter/incoming
。 我使用 以下代码(在 Twilio Docs 中找到)创建了一个 WP 插件,并将 Twilio PHP helper lib 放入其文件夹中:

<?php
require_once( plugin_dir_path( __FILE__ ) . 'twilio-php-master/Twilio/autoload.php');
use Twilio\TwiML;

defined( 'ABSPATH' ) or die( 'Nope!' );

function respond_incoming( $data ) {
  $response = new TwiML;
  $response->say("hello world!", array('voice' => 'alice'));
  echo $response;
}

add_action( 'rest_api_init', function () {
  register_rest_route( 'callcenter', '/incoming/', array(
    'methods' => array('POST'),
    'callback' => 'respond_incoming',
  ) );
} );

如果我拨打我的 Twillio 号码,我会在 Twilio-Debugger 中看到以下错误:

Invalid Content-Type
,并且在响应正文中看到以下内容:

Warning: require(/wp-content/plugins/twilio-for-DNH/twilio-php-master/Twilio/TwiML.php): failed to open stream: No such file or directory in /wp-content/plugins/twilio-for-DNH/twilio-php-master/Twilio/autoload.php on line 140

Fatal error: require(): Failed opening required '/wp-content/plugins/twilio-for-DNH/twilio-php-master/Twilio/TwiML.php' (include_path='.:/opt/alt/php73/usr/share/pear') in /wp-content/plugins/twilio-for-DNH/twilio-php-master/Twilio/autoload.php on line 140
wordpress twilio wordpress-rest-api twilio-php
1个回答
0
投票

为了解决这个错误,我将

use Twilio\TwiML;
更改为
use Twilio\Twiml;
,尽管我读到
Twiml
depracted,但我无法让它以其他方式工作。

在此之后我仍然收到

Invalid Content-Type
错误,并且我在调试器中看到内容类型是:
Content-Type application/json; charset=UTF-8
。 所以我在我的函数中添加了以下行:
header('content-type: text/xml');

现在我收到

Document parse failure
错误,我的响应正文如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Say voice="alice">hello world!</Say>
</Response>
null

为了解决这个问题,我将

die()
函数添加到函数末尾。 现在终于成功了。 完整的工作代码是:

<?php
require_once( plugin_dir_path( __FILE__ ) . 'twilio-php-master/Twilio/autoload.php');
use Twilio\Twiml;

defined( 'ABSPATH' ) or die( 'Nope!' );

function respond_incoming( $data ) {
  $response = new TwiML;
  $response->say("hello world!", array('voice' => 'alice'));
  header('content-type: text/xml');
  echo $response;
  die();
}

add_action( 'rest_api_init', function () {
  register_rest_route( 'callcenter', '/incoming/', array(
    'methods' => array('POST'),
    'callback' => 'respond_incoming',
  ) );
} );
© www.soinside.com 2019 - 2024. All rights reserved.