我想为WordPress写一个插件,上面写着“ Hello World”,用于打给我的Twillio电话号码。
我在Twilio管理员https://myWPsite.com/wp-json/callcenter/incoming
上为拨入电话设置了POST网络挂接。
我用following code (found in 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
答案 0 :(得分: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',
) );
} );