Question

Cette API Twilio Exemple de code ne fonctionne pas dans 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

Toutes les idées?

Twilio semble faire avec succès l'appel téléphonique (je peux voir les params avec mon numéro de téléphone, l'emplacement, etc.) mais retourner ce code de réponse vague:

Completed 406 Not Acceptable in 0ms
Était-ce utile?

La solution

Twilio n'envoie pas un en-tête Accept HTTP dans ses demandes qui Les causes Rails 3 de décider qu'il ne peut pas répondre à un type de contenu approprié. Je pense que ce qui suit va se déplacer pour vous si:

# voice_controller.rb

  def reminder
    @postto = BASE_URL + '/directions'

    render :content_type => 'application/xml'
  end

Autres conseils

employé Twilio ici. Il y a eu un tas de changements à Rails depuis cette question originale a été publiée, et je voulais partager comment vous pouvez résoudre ce problème en utilisant Rails 4, préoccupations et le joyau Ruby Twilio.

Dans l'exemple de code ci-dessous, je définir le contrôleur /controllers/voice_controller.rb et comprennent une préoccupation appelée Webhookable. La préoccupation Webhookable nous permet de logique encapsulent liée à Twilio webhooks (réglage l'en-tête de réponse HTTP au texte / xml, rendu TwiML, valider que les demandes proviennent de Twilio, etc.) en un seul module.

require 'twilio-ruby'

class VoiceController < ApplicationController
  include Webhookable

  after_filter :set_header

  # controller code here

end

La préoccupation se vit dans /controllers/concerns/webhookable.rb et est assez simple. En ce moment, il définit simplement le type de contenu text / xml pour toute action et fournit une méthode pour rendre l'objet TwiML. Je n'ai pas inclus le code pour valider que les demandes sont originaires de Twilio, mais ce serait facile d'ajouter:

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

Enfin, voici ce que votre action reminder pourrait ressembler à l'aide de la gemme Twilio pour générer TwiML et en utilisant le souci de rendre cet objet sous forme de texte:

  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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top