Frage

Dieses Twilio API Beispielcode funktioniert nicht 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

Irgendwelche Ideen?

Twilio scheint erfolgreich den Anruf zu tätigen (Ich kann die params sehe mit meiner Telefonnummer, Standort, etc.), aber dann wieder diesen vageen Antwort-Code:

Completed 406 Not Acceptable in 0ms
War es hilfreich?

Lösung

Twilio nicht ein HTTP-Header in Accept schicken ihre Anfragen , die 3 bewirkt, dass Rails zu entscheiden, dass es nicht kann reagieren mit einem entsprechenden Inhaltstyp. Ich denke, die folgende umgehen wird, dass für Sie aber:

# voice_controller.rb

  def reminder
    @postto = BASE_URL + '/directions'

    render :content_type => 'application/xml'
  end

Andere Tipps

Twilio Mitarbeiter hier. Es gibt eine Reihe von Änderungen an Rails, seit dieser ursprüngliche Frage gestellt wurde, und ich wollte teilen, wie Sie dieses Problem mit angehen könnten Rails 4, Bedenken und die Twilio Rubin gem.

In dem Codebeispiel unten definiere ich den Controller in /controllers/voice_controller.rb und umfassen eine Sorge genannt Webhookable. Die Webhookable Concern läßt uns encapsulate Logik im Zusammenhang mit Twilio webhooks (Einstellung des HTTP-Antwort-Header text / xml, Rendering TwiML, Validieren, dass Anfragen von Twilio stammen, usw.) in ein einziges Modul.

require 'twilio-ruby'

class VoiceController < ApplicationController
  include Webhookable

  after_filter :set_header

  # controller code here

end

Die Sorge selbst lebt in /controllers/concerns/webhookable.rb und ist ziemlich einfach. Im Moment setzt er einfach den Content-Type auf text / xml für alle Aktion und stellt eine Methode, um das TwiML Objekt zu machen. Ich habe nicht enthalten den Code zu bestätigen, dass Anfragen Ursprung sind von Twilio, aber das wäre einfach hinzufügen:

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

Schließlich ist hier, was Ihre reminder Aktion aussehen könnte das Twilio Juwel wie mit TwiML und mit der Sorge zu erzeugen, dieses Objekt als Text zu machen:

  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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top