如何确定呼叫接收者在rails

时间:2017-05-23 07:07:10

标签: ruby-on-rails 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被通常的initiatedringing等点击。来电接听者拿起电话,statusCallback被{{1}击中}}。我的in-progress按照上面1中定义的question_path进行了点击。经过一些处理后,我的响应如下调用

url:

3) 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 @latest_question.text。如果呼叫接收者挂断,我想终止呼叫。我希望我的Please press any key to continue会被一个状态命中,让我知道呼叫接收者已经挂断了。它没有这样做,我不知道它发生过。超时后,我的statusCallback被点击。没有回复,所以我再次提出这个问题。我还是不知道电话已经挂断了。我继续问这个问题,一切都在继续,好像呼叫接收者还在线上。这一直持续到我放弃并挂断电话。然后我的voice_redirect_path被点击状态为statusCallback

提前致谢。

1 个答案:

答案 0 :(得分:2)

Twilio开发者传道者在这里。

你不会立即从状态回调中获得挂起事件,这很奇怪。如果您可以发送电子邮件给我发送电子邮件地址为philnash@twilio.com,我会在内部向团队提出(虽然我本周正在休假,所以通过{{3}可能会更快})。

要解决此问题,您可以在重定向到voice_redirect_path时使用count参数,并在计数过高时自行挂断。类似的东西:

  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

这样您就可以在等待答案时设置最大重定向次数。

让我知道这是否有帮助。