Domanda

Questo codice di esempio di API Twilio non funziona in 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

Tutte le idee?

Twilio sembra rendere con successo la telefonata (posso vedere i params con il mio numero di telefono, posizione, ecc), ma poi restituire questo codice di risposta vaga:

Completed 406 Not Acceptable in 0ms
È stato utile?

Soluzione

Twilio non invia un Accept HTTP intestazione sue richieste , che Le cause Rails 3 per decidere che non può rispondere con un tipo di contenuto appropriato. Penso che la seguente vi andare in giro per voi se:

# voice_controller.rb

  def reminder
    @postto = BASE_URL + '/directions'

    render :content_type => 'application/xml'
  end

Altri suggerimenti

dipendente

Twilio qui. Ci sono stati una serie di modifiche a Rails poiché questa domanda originale è stato pubblicato, e ho voluto condividere come si potrebbe affrontare questo problema usando Rails 4, le preoccupazioni e la gemma Twilio Ruby.

Nel codice di esempio qui di seguito, ho definire il controller in /controllers/voice_controller.rb e comprendono una preoccupazione chiamato Webhookable. La preoccupazione Webhookable ci permette di incapsulare la logica relativa a webhooks Twilio (impostazione l'intestazione della risposta HTTP a text / xml, di rendering TwiML, convalida che le richieste provengono da Twilio, ecc) in un singolo modulo.

require 'twilio-ruby'

class VoiceController < ApplicationController
  include Webhookable

  after_filter :set_header

  # controller code here

end

La preoccupazione si vive in /controllers/concerns/webhookable.rb ed è abbastanza semplice. In questo momento è semplicemente imposta il Content-Type a text / xml per tutte le azioni e fornisce un metodo per rendere l'oggetto TwiML. Non ho inserito il codice per verificare che le richieste sono provenienti da Twilio, ma che sarebbe facile aggiungere:

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

Infine, ecco cosa la vostra azione reminder potrebbe essere simile utilizzando la gemma Twilio per generare TwiML e utilizzando la preoccupazione di rendere questo oggetto come testo:

  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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top