Twilio - Воспроизведение музыки во время длительного процесса - PullRequest
0 голосов
/ 03 мая 2018

Новичок Twilio здесь.

У меня есть голосовое приложение Twilio, которое собирает кучу данных (продажи международных пополнений), и есть момент, когда происходит фактический процесс приобретения пополнений.

Этот процесс может длиться от 10 до 30 секунд, где большинство из них составляет около 15 секунд. Похоже, мне нужно использовать тег Twilio <ENQUEUE> (https://www.twilio.com/docs/voice/twiml/enqueue),, но он не работает.

Я просто называю это так (случается, что это ColdFusion):

<Enqueue 
  waitUrl="processtopup.cfm" 
  method="POST" 
  action="topupdone.cfm">processTopup</Enqueue>

Внутри файла processtopup.cfm находится тег <PLAY> (который не будет работать, поскольку эта страница занимает более 15 секунд.

Извините, но я просто запутался, как это должно сработать. Заранее спасибо!

1 Ответ

0 голосов
/ 09 мая 2018

Вот возможное решение. Я проверил это, и это работает.

Основная идея заключается в воспроизведении некоторого сообщения / музыки в цикле до тех пор, пока ColdFusion не выполнит свою работу, а затем, когда ColdFusion будет завершен, проинструктируйте вызов для выполнения другого Twilio XML, сделав запрос POST к ресурсу вызова API Twilio.

Когда поступит вызов, и Twilio достигнет вашей конечной точки, захватит идентификатор вызова , он будет использоваться для переключения вызова на другой XML. Идентификатор вызова передается как FORM.CALLSID или URL.CALLSID в зависимости от конфигурации вашего интернет-крюка в Twilio.

Идентификатор вызова выглядит примерно так: CAdecbfa7e8e2a9d09336abcd57044cf74.

Передайте идентификатор вызова через ваш поток (так как параметр url должен быть в порядке), чтобы он достиг processtopup.cfm.

Переместите длинный код из processtopup.cfm в, скажем, processtopup-action.cfm


Код в processtopup.cfm теперь должен немедленно возвращать XML для воспроизведения цикла (или вы можете воспроизвести некоторые .mp3), я показываю с сообщением:

<cfoutput><?xml version="1.0" encoding="UTF-8"?>

<Response>
    <Say loop="0">Please wait while we process your request...</Say>
</Response>

</cfoutput>

<cfhttp 
    url="http://www.yourwebsite.com/processtopup-action.cfm?callsid=#FORM.CALLSID#" 
    method="get" 
    timeout="1" />

код для processtopup-action.cfm

<!--- // place your long running code here --->

<cfset accountSid = '{your account sid}' />
<cfset authToken = '{your auth token}' />

<cfhttp 
    url="https://api.twilio.com/2010-04-01/Accounts/#variables.accountSid#/Calls/#URL.CALLSID#.json" 
    method="POST" 
    username="#variables.accountSid#" 
    password="#variables.authToken#"
    result="http_result">

    <cfhttpparam 
        name="Url" 
        value="http://www.yourwebsite.com/finish.cfm" 
        type="formfield" />

</cfhttp>

Код для finish.cfm

<cfoutput><?xml version="1.0" encoding="UTF-8"?>

<Response>
    <Say>This is the data you're looking for.</Say>
    <Say>Thank you. Goodbye!</Say>
    <Hangup />
</Response>

</cfoutput>

Конечно, вы можете передавать другие параметры по мере необходимости.


Опять же, основная идея заключается в том, что processtopup-action.cfm после выполнения вашего долго работающего кода делает POST-запрос к API Twilio и инструктирует вызов переключиться на выполнение нового TwiML, расположенного в http://www.yourwebsite.com/finish.cfm


Docs:

...