如何确定呼叫接收者在Twilio呼叫期间是否挂起电话
我有以下简单的回叫来处理Twilio呼叫。我要求用户按下任何键盘按钮继续。如果通话收件人未按下某个键,则再次询问该问题。如何确定呼叫接收者是否挂断。目前,如果接听电话并挂机,我的重定向路线继续进行,直到我放弃要求按任意键。在挂断之前可能会有一分钟的延迟,以及我的应用停止接收命中的时间点。如何确定呼叫接收者在Twilio呼叫期间是否挂起电话
def response
Twilio::TwiML::Response.new do |r|
r.Gather finishOnKey: '#', numDigits: @num_digits,
timeout: @phone_wait_time,
action: NGROK +
voice_path(@notification.id, @final_question_response) do |g|
g.Say @latest_question.text, voice: 'alice', language: 'en-AU'
end
r.Redirect NGROK +
voice_redirect_path(@notification.id, @final_question_response)
end.to_xml
end
编辑
这里有一个关于这个问题我已经和我想要做的更多的信息。我将用一个例子。
1)我拨出电话如下
def call_phone
client = Twilio::REST::Client.new(
Rails.application.secrets.twilio_sid,
Rails.application.secrets.twilio_token
)
call = client.account.calls.create(
from: Rails.application.secrets.twilio_voice_number,
to: @phone_number,
url: NGROK + question_path(@notification.id),
method: 'GET',
statusCallback: NGROK + call_status_path(@notification.id),
statusCallbackEvent: [:initiated, :ringing, :answered, :completed]
)
end
2)我statusCallback
被击中与往常一样,initiated
,ringing
等呼叫接收者拿起电话和statusCallback
被击中in-progress
。按照上面1中定义的url:
命中我的question_path
。一些处理后我的反应叫做如下
def response
Twilio::TwiML::Response.new do |r|
r.Gather finishOnKey: '#', numDigits: @num_digits,
timeout: @phone_wait_time,
action: NGROK +
voice_path(@notification.id, @final_question_response) do |g|
g.Say @latest_question.text, voice: 'alice', language: 'en-AU'
end
r.Redirect NGROK +
voice_redirect_path(@notification.id, @final_question_response)
end.to_xml
end
3)@latest_question.text
说Please press any key to continue
。如果通话收件人挂断,我想终止通话。我希望我的statusCallback
能够打到状态,让我知道电话接收者已挂断。它不这样做,我不知道它发生了。超时后,我的voice_redirect_path
被击中。没有回应,所以我再次问这个问题。我仍然不知道电话已挂断。我继续问这个问题,一切仍在继续,好像呼叫接收者仍然在线。这一直持续下去,直到我放弃并挂断电话。然后我的statusCallback
被点击,状态为completed
。
在此先感谢。
Twilio开发者传道这里。
这很奇怪,你不会立即从状态回调中获得挂断事件。如果您可以发邮件给[email protected]并在发生这种情况时拨打SID,我会在内部与团队一起提高(尽管我本周假期,所以通过support team可能会更快)。
要解决此问题,可以在重定向到voice_redirect_path
时使用计数参数,并在计数过高时自行挂断。例如:
def response
Twilio::TwiML::Response.new do |r|
@count = params[:count] || 0
if @count > MAX_REDIRECTS
r.Hangup
else
r.Gather finishOnKey: '#', numDigits: @num_digits,
timeout: @phone_wait_time,
action: NGROK +
voice_path(@notification.id, @final_question_response) do |g|
g.Say @latest_question.text, voice: 'alice', language: 'en-AU'
end
r.Redirect NGROK +
voice_redirect_path(@notification.id, @final_question_response, :count = @count+1)
end
end.to_xml
end
这将允许您在等待答案的同时设置最大数量的重定向。
让我知道这是否有帮助。
您是否在呼出中设置了一个'statusCallback' URL,无论是来自出站的API请求,还是Twilio控制台中编号的'statusCallback'设置? – philnash
是的,我有。即使呼叫已挂断,'statusCallback'仍会继续以'进行中'命中。直到我最终放弃要求呼叫者按任意键并挂断自己,我的'statusCallback'才被命令为'completed'的状态。 – RamJet
我发现这个[link](https://stackoverflow.com/questions/24087517/twiml-app-if-the-caller-hangs-up-in-the-middle-of-the-application-process-does) 。它说我可以做我想做的事,但实际上并没有说我该怎么做。 – RamJet