2014-11-12 2 views
2

Я пытаюсь передать простой номер телефона в блок vxml. Как передать динамическую переменную?создать vxml с php динамически

$my_phone_number_here = '12197719191'; 

$string = <<<XML 
<?xml version="1.0" encoding="UTF-8"?> 
<vxml version = "2.1"> 
<menu dtmf="true"> 
<prompt> 
<audio src="http://my.site.com/app/service-interaction-center.mp3"/> 
</prompt> 
<choice dtmf="1" next="#sales"/> 
</menu> 
<form id="sales"> 
<block> 
<audio src="http://my.site.com/app/service-interaction-center-thank-you.mp3"/> 
</block> 
<transfer name="MyCall" dest="tel:+{$my_phone_number_here}" bridge="true" connecttimeout="20s"/> 
</form> 
</vxml> 
XML; 

Я попытался преобразовать его в использовании:

$string = ''; 
$string .= $to_call; 
$string .= ''; 
etc... 

Но это, похоже, не работает. Я бы просто хотел, чтобы одна переменная php отображалась в {my_phone_number_here}, что мне не хватает, что не позволит этому работать правильно?

EDIT:

Показанная Теперь код визуализируется с номером телефона на месте, но мой призыв никогда не подключается. Когда звонок помещен, вы получаете доступ к звуку и нажимаете приглашение, а затем сообщение спасибо, но потом он звонит в течение секунды и звонок падает. Все еще должно быть что-то с xml. Есть предположения?

ответ

2

Вы можете загрузить его в Parser (DOMDocument в частности), и изменить его оттуда с помощью ->setAttribute():

$transfer->item(0)->setAttribute('dest', $telephone_number); 

Простой пример:

// use the parser 
$dom = new DOMDocument; 
$dom->loadXML($string); 
$xpath = new DOMXpath($dom); 

// setup those values 
$number = 123131; 
$telephone_number = 'tel:+' . $number; 
// target that element 
$transfer = $xpath->query('/vxml/form[@id="sales"]/transfer'); 
// set the value 
$transfer->item(0)->setAttribute('dest', $telephone_number); 
// show output 
echo $dom->saveXML(); 

Или просто заменить и поставить переменную внутри и интерполировать:

$my_phone_number_here = 123456879; 
$string = <<<XML 
<?xml version="1.0" encoding="UTF-8"?> 
    <vxml version = "2.1"> 
     <menu dtmf="true"> 
      <prompt> 
       <audio src="http://my.site.com/app/service-interaction-center.mp3"/> 
      </prompt> 
      <choice dtmf="1" next="#sales"/> 
     </menu> 
     <form id="sales"> 
      <block> 
       <audio src="http://my.site.com/app/service-interaction-center-thank-you.mp3"/> 
      </block> 
      <transfer name="MyCall" dest="tel:+{$my_phone_number_here}" bridge="true" connecttimeout="20s"/> 
     </form> 
    </vxml> 
XML; 

echo $string; 
+0

Derp! Благодаря! Это действительно так, не знаю, почему я не думал об этом так. Хотя у меня есть еще одна проблема. $ xml-> asXML(), кажется, добавляет еще одну строку после xml и создает проблему и не будет размещать вызов. Любые идеи, как я могу очистить эту последнюю строку? – MrTechie

+0

Пренебрежение: обрезать ($ xml-> asXML()), похоже, делает трюк. – MrTechie

+0

@MrTechie, о, хорошо, им это помогло – Ghost