coldfusion - Twilio - 在漫长的过程中播放音乐
问题描述
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 秒。
抱歉 - 但我只是对这应该工作感到困惑。提前致谢!
解决方案
这是一个可能的解决方案。我已经对此进行了测试,并且可以正常工作。
主要思想是循环播放一些消息/音乐,直到 ColdFusion 完成工作,然后,当 ColdFusion 完成时,通过向 Twilio 的 API 调用资源发出 POST 请求来指示调用执行不同的 Twilio XML。
当来电时,Twilio 到达您的端点,捕获呼叫 id,它将用于将呼叫切换到不同的 XML。FORM.CALLSID
它作为或URL.CALLSID
取决于您在 Twilio 的 webhook 配置传递的调用 ID 。
呼叫 ID 看起来像CAdecbfa7e8e2a9d09336abcd57044cf74
.
通过您的流程传递呼叫 ID(因为 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
,在执行长时间运行的代码后,向 Twilio 的 API 发出 POST 请求,并指示调用切换以执行位于http://www.yourwebsite.com/finish.cfm
文件:
推荐阅读
- android - android屏幕中的react-native-swiper从potrait旋转到风景,滚动不会重新渲染
- tsql - 如何在不事先知道列的情况下将动态 sql 结果插入临时表
- c++ - 如何对带有信号和槽的类强制使用 Q_OBJECT 宏
- java - Java SwingWorker doInBackground() 是否可以在继续之前等待临时进程完成
- android - Android Studio 3.6.3:遵循关于如何制作音板的旧教程(错误:AlertController is not public in androidx.appcompat.app)
- python - 来自opencv矩形的奇怪错误
- c++ - Qt:显示 QCompleter 时,eventFilter 未收到 KeyPress
- java - 从不确定的数量中找到所有可能的组合
- python - 获得数字总和的最有效方法是什么?
- angular - Angular 9 - 不是已知元素