Pregunta

Este código API Muestra Twilio no está funcionando en Rails 3:

#voice_controller.rb

  def reminder
    @postto = BASE_URL + '/directions'

    respond_to do |format|
      format.xml { @postto }
    end
  end

#reminder.xml.builder

xml.instruct!
xml.Response do
xml.Gather(:action => @postto, :numDigits => 1) do
    xml.Say "Hello this is a call from Twilio.  You have an appointment 
        tomorrow at 9 AM."
    xml.Say "Please press 1 to repeat this menu. Press 2 for directions.
        Or press 3 if you are done."
    end
end

¿Alguna idea?

Twilio parece tener éxito la llamada telefónica (Puedo ver los parametros con mi número de teléfono, ubicación, etc.), pero luego devolver este código de respuesta vaga:

Completed 406 Not Acceptable in 0ms
¿Fue útil?

Solución

Twilio no envía una cabecera HTTP Accept en sus peticiones , que causas Rails 3 a decidir que no puede responder con un tipo de contenido apropiado. Creo que el siguiente será conseguir alrededor de eso para usted, aunque:

# voice_controller.rb

  def reminder
    @postto = BASE_URL + '/directions'

    render :content_type => 'application/xml'
  end

Otros consejos

empleado

Twilio aquí. Ha habido un montón de cambios en los carriles ya que esta pregunta original fue publicada, y quería compartir cómo se puede hacer frente a este problema utilizando los carriles 4, Preocupaciones y la gema Twilio Ruby.

En el siguiente ejemplo de código, I definen el controlador en /controllers/voice_controller.rb e incluyen una preocupación llamado Webhookable. La preocupación Webhookable nos permite encapsular la lógica relacionada con WebHooks Twilio (ajuste de la cabecera de respuesta HTTP para text / xml, lo que hace TwiML, la validación de las solicitudes que se originan a partir Twilio, etc.) en un único módulo.

require 'twilio-ruby'

class VoiceController < ApplicationController
  include Webhookable

  after_filter :set_header

  # controller code here

end

La preocupación en sí vive en /controllers/concerns/webhookable.rb y es bastante simple. En este momento es simplemente establece el tipo de contenido de texto / xml para toda la acción y proporciona un método para representar el objeto TwiML. No he incluido el código para validar que las solicitudes son procedentes de Twilio, pero eso sería fácil de añadir:

module Webhookable
    extend ActiveSupport::Concern

    def set_header
      response.headers["Content-Type"] = "text/xml"
    end

    def render_twiml(response)
      render text: response.text
    end

end

Finalmente, esto es lo que su acción reminder puede tener un aspecto como el uso de la gema Twilio para generar TwiML y utilizando la preocupación de hacer este objeto como texto:

  def reminder
    response = Twilio::TwiML::Response.new do |r|
      r.Gather :action => BASE_URL + '/directions', :numDigits => 1 do |g|
        g.Say 'Hello this is a call from Twilio.  You have an appointment 
    tomorrow at 9 AM.'
        g.Say 'Please press 1 to repeat this menu. Press 2 for directions.
    Or press 3 if you are done.'
      end
    end

    render_twiml response
  end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top