这是一个可能的解决方案。我已经对此进行了测试,并且可以正常工作。
主要思想是循环播放一些消息/音乐,直到 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
文件:
- 通过 Twilio REST API 进行呼叫重定向
- 修改实时通话