#php #twilio #twilio-twiml
#php #twilio #twilio-twiml
Вопрос:
Я хотел бы создать приложение, в котором пользователь может вводить номер телефона и сообщение, и я могу попросить Twilio отправить этому номеру телефона сообщение с синтезированным текстом. Пример кода TwiML, который я использую, — это что-то простое, например
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say>Hello World</Say>
<Response>
Чтобы заставить это работать, я попытался настроить функцию PHP, которая принимает сообщение и повторяет вышеупомянутый TwiML, но телефонные звонки, которые я получаю из теста, сообщают о сбое приложения. Для справки, вот PHP-код, который я пробовал.
echo "<?xml version='1.0' encoding='UTF-8'?>";
echo "<Response>";
echo "<Say>" . $_GET['message'] . "</Say>";
echo "</Response>";
Тем не менее, я легко смог заставить TwiMLBin работать с этим (в конце концов, это его цель). Однако, осмотревшись, я не смог найти ничего относительно API для сайта. Кто-нибудь знает, есть ли способ программно создать TwiMLBin, чтобы я мог создать соответствующий TwiMLBin для сообщения, которое вводит мой пользователь, а затем направить мои вызовы функции Twilio на соответствующий URL?
Комментарии:
1. никогда не загружайте необработанный текст в контекст xml. очень легко ввести синтаксическую ошибку xml и уничтожить все, что ожидает действительный xml. как минимум, вы должны делать
htmlspecialchars($_GET['message'])
.2. Привет! Евангелист Twilio здесь, как упоминал Марк Б., вы проверили вывод? Вероятно, что нечетный символ нарушает форматирование XML. Также — я не могу сказать, используете ли вы SMS или voice, но тег <Say> не будет работать с сообщениями SMS.
Ответ №1:
Что-то подобное должно работать в PHP. cURL доступен на многих языках программирования, поэтому вы можете изменить его таким же образом.
<?php
/*
* Create TWimL Bin
*/
$url = "http://twimlbin.com/create";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$html = curl_exec($ch);
$status_code = curl_getinfo($ch,CURLINFO_HTTP_CODE);
if($status_code=302 or $status_code=301){
$TwimLBinURL = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
}
curl_close($ch);
/*
* Update TwimL with XML
*/
$ExplodeTwimLBinURL = explode("/", $TwimLBinURL);
$TwimLBinID = $ExplodeTwimLBinURL[3];
$TwimLBinUpdateUrl = "http://twimlbin.com/".$TwimLBinID."/update";
$data = "twiml=<PUT TWIML XML HERE>";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$TwimLBinUpdateUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
curl_close($ch);
echo $TwimLBinURL;
/*
* End of TwimL Bin Creation
*/
?>