Twilio-PHP-SDK 4.xのdialを5.xにアップデートでDOMExceptionエラー(response->dialを5.xに対応させる)

  • このエントリーをはてなブックマークに追加

TwilioPHP-SDKの4.xで書かれたこんなカンファレンスへの誘導と、完了後にsayするconference_complet.phpへのdial発信

着信のwebhookで起動します。

include './twilio-php/Services/Twilio.php';
include './twilio-php/Services/Twilio/Capability.php';

$response = new Services_Twilio_Twiml();
$dial = $response->dial(array(
	'action' => "https://***.com/conference_complet.php",
 	"method" => "GET",
));
$dial->conference("My Conference", array(
	"startConferenceOnEnter" => "true",
	"waitUrl" => "https://***.com/conference_wait.php",
 	"endConferenceOnExit" => "true",
 	"beep" => "true",
));
print $response;

dialの部分を下記のようにTwilio-PHP-SDK ver5.xで書いたのですが、print responseでXMLのDOMエラーが発生しました。

PHP Fatal error:  Method Twilio\\TwiML\\VoiceResponse::__toString() must not throw an exception, caught DOMException: Invalid Character Error 

conferenceは動くので、dialに問題があるようです。

$response = new VoiceResponse();

$dial = $response->dial([
	'action' => "https://***.com/conference_complet.php",
 	"method" => "GET",
));
print $response;

4.xで出力されるTwiMLは下記のようになっており、Dial要素の中はConferenceなので、dialにはactionなどのパラメータしか入力していないのですが、5.xではエラーになります

<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial action="https://***.com/conference_complet.php" method="GET">
<Conference startConferenceOnEnter="true" waitUrl="https://***.com/conference_wait.php" endConferenceOnExit="true" beep="true">My Conference</Conference>
</Dial>
</Response>

下記のようにdialの引数を変更すると、動作します。

$response = new VoiceResponse();

$dial = $response->dial("",[
	'action' => "https://***.com/conference_complet.php",
 	"method" => "GET",
));
print $response;

<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial action="https://***.com/conference_complet.php" method="GET">
<Conference startConferenceOnEnter="true" waitUrl="https://***.com/conference_wait.php" endConferenceOnExit="true" beep="true">My Conference</Conference>
</Dial>
</Response>
  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。