在10秒后关闭一个电话或3个分机号码 - (如果他们输入错误的号码3次)用c#
if (Request.Form["Digits"] == null || Request.Form["Digits"] == "")
{
response += twimlGatherDigits("nothing was entered"));
}
有人可以帮忙吗?
答案 0 :(得分:0)
Twilio传道者在这里。
所以为了确保我理解,您使用<Gather>
要求用户输入3位数代码,并且如果发生以下任何一种情况,您希望挂断电话:
让我们解决在没有输入10秒后挂断的第一个问题。 <Gather>
动词包含 timeout 属性,您可以使用该属性告诉Twilio等待输入的时间。如果在此期间没有提供任何输入,Twilio实际上不会调用操作 URL,而是通过<Gather>
并且如果执行该操作后有另一个动词。例如:
<Response>
<Say>Please enter your three digit code:</Say>
<Gather timeout="10" action="http://example.com/login/process" />
<Say>I didn't here that. Can you try entering you code again?</Say>
<Redirect>http://example.com/login/start</Redirect>
</Response>
在此示例中,如果调用者输入数字,将请求action参数中指定的url,Twilio将停止执行此响应中的任何其他TwiML谓词。
但是,如果来电者没有输入任何数字,Twilio将不会调用操作URL,而是转到此响应中的下一个动词,即<Say>
动词。
您可以轻松地将<Hangup>
动词放在响应中,以便挂断来电者:
<Response>
<Say>Please enter your three digit code:</Say>
<Gather timeout="10" action="http://example.com/login/process" />
<Say>I didn't here that. Goodbye</Say>
<Hangup />
</Response>
现在,只要允许调用者有三次机会输入正确的代码,那也很容易。您可以使用查询字符串值在每次尝试之间携带计数器值。例如:
<Response>
<Say>Please enter your three digit code:</Say>
<Gather timeout="10" action="http://example.com/login/process?attempt=0" />
<Say>I didn't here that. Goodbye</Say>
<Hangup />
</Response>
请注意,在代码段中,我添加了一个名为attempt的查询字符串值,用于操作URL。当用户输入数字并且Twilio调用我的操作URL时,它将包含此查询字符串值,如果我的应用程序确定调用者输入了错误代码,我只需递增该计数器并在TwiML中发出新计数器值我返回Twilio: / p>
if (Request.Form["Digits"] != "123")
{
int attempts = int.Parse(Request["attempt"]);
attempts++;
//generate the Gather TwiML and append the value
// of the attempts variable to the action URL
}
这有意义吗?
希望有所帮助。