2016-09-12 2 views
1

Ich habe Twilio über twilio-ruby mit meiner Rails App integriert. Die grundlegenden SMS- und Sprachfunktionen funktionieren wie erwartet, aber jetzt möchte ich meine Funktionalität erweitern. Ich möchte in der Lage sein, TwiML in meinem Controller dynamisch zu generieren, irgendwo (lokal oder in einem Dienst) zu speichern und Twilio dann auf dieses XML zugreifen zu lassen. Zum Beispiel, ein Kunde macht eine Bestellung über meine App, TwiML wird generiert und gespeichert, und dann macht Twilio einen Sprachanruf an meinen Lieferanten mit den neuen Bestelldaten. Wie sieht die Lösung bei gleichzeitigen Bestellungen aus? Was ist die beste Lösung, TwiML/XML zu speichern und Twilio dann darauf zugreifen zu lassen? Vielen Dank.Wie erzeuge ich TwiML dynamisch aus meiner Rails App?

+0

Gibt es einen Grund, es vorübergehend zu speichern, anstatt das TwiML während eines Anrufs dynamisch zu generieren? –

Antwort

0

Die dynamische Generierung des TwiML während des Aufrufs scheint die bevorzugte Methode zu sein.

Ein Beispiel zur Erzeugung von TwimL Inhalt dynamisch aus der docs, wo wir einen Anrufer mit Namen begrüßen:

https://www.twilio.com/docs/quickstart/ruby/twiml/greet-caller-by-name#twiml-quickstartrb

require 'rubygems' 
require 'sinatra' 
require 'twilio-ruby' 

get '/hello-monkey' do 
    people = { 
    '+14158675309' => 'Curious George', 
    '+14158675310' => 'Boots', 
    '+14158675311' => 'Virgil', 
    '+14158675312' => 'Marcel', 
    } 
    name = people[params['From']] || 'Monkey' 
    Twilio::TwiML::Response.new do |r| 
    r.Say "Hello #{name}" 
    end.text 
end 

Statt einen people Array Ihrer Anwendung eingehende Nachricht Körper analysieren müßte (wenn SMS) für die Bestellung verwenden und dann den entsprechenden Anruf beim Lieferanten tätigen.

Wenn Ihr Use Case tatsächlich die Erstellung von gehostetem TwiML im laufenden Betrieb erfordert, können Sie dies in Kürze mit TwiML Bins in the Twilio Console durch Interpolation tun.

Das bedeutet, würden Sie in der Lage sein, etwas zu tun:

curl -X POST api.twilio.com/..../Calls -d 'Url=https://hander.twilio.com/EHxxx?message=hello+world' -u Cxxx:yyyy 

Und Ihre TwiML Ist die notwendige TwiML enthalten würde:

zu machen <Response><Say>{{message}}</Say></Response>

Auf diese Weise würden Sie nicht brauchen, um zwei Ruheanrufe und würden nicht Tausende (oder mehr) redundanter Behälter ansammeln, die schwer zu warten oder aufzuräumen sind.

+1

Danke für den Kommentar. Leider hat das Generieren während des Anrufs nicht zu meiner Implementierung geführt. Ich entschied mich, TwiML in Amazon S3 zu schreiben und Twilio dann darauf zugreifen zu lassen. Alles funktioniert wie geplant. Vielen Dank. –

+0

Ah Gotcha, nachdem ich gestern gepostet habe, fing ich an zu überlegen, wie man das mit TwiML Bins machen könnte (zB http://stackoverflow.com/questions/24494782/is-there-a-way-to-programmatic-create-a) -twimlbin). Diese werden jetzt von Twilio in der Konsole gehostet und ich habe mich mit dem Team angemeldet, um herauszufinden, dass sie eine Interpolation hinzufügen möchten. Ich werde meine Antwort mit diesen Tipps für die Zukunft aktualisieren. Trotzdem bin ich froh, dass Ihre Lösung mit Amazon S3 Ihren Bedürfnissen entspricht. Ich hatte nicht daran gedacht. –

Verwandte Themen