Employé de Twilio ici. Il y a eu un tas de changements à Rails depuis que cette question originale a été postée, et je voulais partager comment vous pourriez aborder ce problème en utilisant Rails 4, Concerns et la gemme Twilio Ruby.
Dans l'exemple de code ci-dessous, je définis le contrôleur dans /controllers/voice_controller.rb
et inclu un problème appelé Webhookable. Le Webhookable Concern nous permet d'encapsuler la logique liée aux webhooks de Twilio (en définissant l'en-tête de réponse HTTP à text/xml, en rendant TwiML, en validant que les requêtes proviennent de Twilio, etc.) dans un seul module.
require 'twilio-ruby'
class VoiceController < ApplicationController
include Webhookable
after_filter :set_header
# controller code here
end
L'inquiétude se vit dans /controllers/concerns/webhookable.rb
et est assez simple. À l'heure actuelle, il définit simplement Content-Type sur text/xml pour toutes les actions 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 comme 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
Où mettez-vous le fichier de constructeur XML ??? –