Twilio新手在这里。
我有一个收集大量数据(国际充值销售)的Twilio语音应用程序 - 并且有一个点可以实现购买充值的实际过程。
此过程可持续10到30秒,其中大部分时间约为15秒。听起来像我需要使用Twilio <Enqueue
waitUrl="processtopup.cfm"
method="POST"
action="topupdone.cfm">processTopup</Enqueue>
标签(https://www.twilio.com/docs/voice/twiml/enqueue),但它不起作用。
我只是这样称呼它(碰巧是ColdFusion):
processtopup.cfm
在<PLAY>
文件中是{{1}}标记(它不会起作用,因为这是一个超过15秒的页面。
很抱歉 - 但我只是对此感到困惑。提前谢谢!
答案 0 :(得分:2)
这是一个可能的解决方案。我已经测试了这个并且它可以工作。
主要思想是在循环中播放一些消息/音乐,直到ColdFusion完成工作,然后,当ColdFusion完成时,通过向Twilio的API调用资源发出POST请求,指示调用执行不同的Twilio XML。 / p>
当有来电,Twilio点击您的终端时, 捕获呼叫ID ,它将用于将呼叫切换到其他XML。呼叫ID将作为 FORM.CALLSID
或 URL.CALLSID
传递,具体取决于您的webhook配置在Twilio。
通话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
的新TwiML
<强> 文档: 强>