Twilio - 在漫长的过程中播放音乐
Twilio - Play music during long process
这里是 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 秒。
抱歉 - 但我只是对这应该起作用感到困惑。提前致谢!
这是一个可能的解决方案。我已经对此进行了测试并且有效。
主要想法是循环播放一些 message/music 直到 ColdFusion 完成工作,然后,当 ColdFusion 完成时,通过制作 XML 指示调用执行不同的 Twilio XML =89=] 请求 Twilio 的 API 调用资源。
当有来电时,Twilio 到达您的端点,捕获呼叫 ID,它将用于切换呼叫到另一个 XML。它作为 FORM.CALLSID
或 URL.CALLSID
[=70 传递的呼叫 ID =] 取决于您在 Twilio 的 webhook 配置。
呼叫 ID 类似于 CAdecbfa7e8e2a9d09336abcd57044cf74
。
通过您的流程传递呼叫 ID(因为 url 参数应该没问题)所以它到达 processtopup.cfm
.
将长 运行 代码从 processtopup.cfm
移动到让我们说
processtopup-action.cfm
processtopup.cfm
中的代码现在应该 return 立即 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
文档:
这里是 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 秒。
抱歉 - 但我只是对这应该起作用感到困惑。提前致谢!
这是一个可能的解决方案。我已经对此进行了测试并且有效。
主要想法是循环播放一些 message/music 直到 ColdFusion 完成工作,然后,当 ColdFusion 完成时,通过制作 XML 指示调用执行不同的 Twilio XML =89=] 请求 Twilio 的 API 调用资源。
当有来电时,Twilio 到达您的端点,捕获呼叫 ID,它将用于切换呼叫到另一个 XML。它作为 FORM.CALLSID
或 URL.CALLSID
[=70 传递的呼叫 ID =] 取决于您在 Twilio 的 webhook 配置。
呼叫 ID 类似于 CAdecbfa7e8e2a9d09336abcd57044cf74
。
通过您的流程传递呼叫 ID(因为 url 参数应该没问题)所以它到达 processtopup.cfm
.
将长 运行 代码从 processtopup.cfm
移动到让我们说
processtopup-action.cfm
processtopup.cfm
中的代码现在应该 return 立即 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
文档: