我想打电话给我的Twilio号码立即挂断,然后给我回电话。这与我先前的一个问题类似(但不完全相同)。
问题在于迫使Twilio挂断电话。
红宝石代码是:
get '/callback' do
to = params['From']
from = 'my Twilio number'
"<Response><Hangup/></Response>"
sleep 5
# set up a client to talk to the Twilio REST API
@client = Twilio::REST::Client.new account_sid, auth_token
@call = @client.account.calls.create(
:from => from, # From your Twilio number
:to => to, # To any number
# Fetch instructions from this URL when the call connects
:url => 'https://dl.dropboxusercontent.com/u/85088004/twilio/twilio.xml'
)
end
这会产生一条消息:“我们很抱歉,但发生了系统错误”。问题在于挂断指令。我已经尝试过如上所述
<Response><Hangup/></Response> #without enclosing double or single quotes
和
Twilio::TwiML::Response.new do |r|
r.Hangup
end.text
两者都不会产生所需的挂断结果。
怎么了?
非常感谢提前!
答案 0 :(得分:0)
您应该在twilio.com/user/account/debugger上查看Twilio Debugger。这将提供有关失败的更多信息。
答案 1 :(得分:0)
绝对符合@ Kevin的建议并与Twilio支持联系。但我想补充一点意见。在/callback
操作结束时,最后一个值是您在创建调用时分配的@call
变量,Ruby将尝试作为HTTP请求的结果返回此值。
Ruby返回方法结束时评估的最后一个值。在这种情况下,该值是Sinatra默认响应HTTP Get请求的值。
根据你有<Response><Hangup/></Response>
的文字字符串判断,我猜你没有使用视图,并期望这是get请求的结果。您应该将其置于方法的最后,如下所示。我还添加了一个content_type
,它只是设置响应头,表示响应是XML。
get '/callback' do
to = params['From']
from = 'my Twilio number'
# set up a client to talk to the Twilio REST API
@client = Twilio::REST::Client.new account_sid, auth_token
@call = @client.account.calls.create(
:from => from, # From your Twilio number
:to => to, # To any number
# Fetch instructions from this URL when the call connects
:url => 'https://dl.dropboxusercontent.com/u/85088004/twilio/twilio.xml')
#ruby returns the last value in a method:
content_type 'text/xml'
"<Response><Hangup/></Response>"
end
确保将Twilio语音回调设置为Get请求(默认为发布)。
我还删除了你在那里的sleep 5
。我可以看到你要去哪里。回复hangup
TwiML,等待几秒钟,然后拨打新电话。可悲的是,Sinatra并没有这么做。在方法结束之前,它不会响应HTTP请求。所以你只是让它静坐,等待5秒钟。
这确实会造成一些问题,因为你告诉Twilio要对你要挂断的号码进行出站呼叫,所以你基本上都有竞争条件。呼叫是先断开连接,还是出站开始振铃到忙音。
有很多方法可以做到这一点,但我建议一个帖子。这有点棘手,但SO answer详细介绍了这一点。