Есть ли способ программно создать Twimlbin?

#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
 */
?>