
Teilen Sie:
Ein Englischlehrer, der zum einfühlsamen Softwareentwickler wurde. Ein neugieriger Optimist mit einer Leidenschaft für die Erstellung zugänglicher Inhalte und die Unterstützung von Entwicklern bei der Verbesserung ihrer Fähigkeiten.
Wie man eine Magic 8-Ball Voice App mit Ruby erstellt
Lesedauer: 9 Minuten
Seien wir ehrlich. Unsere Tage sind ständig mit schwierigen Fragen gefüllt:
Was soll ich zum Abendessen kochen?
Ist dies der beste Schritt für meine Karriere?
Ist die Pizza schlecht geworden?
Soll ich ihm zurückschreiben?
Erwachsenwerden ist verdammt schwer, ihr alle. Und offen gesagt, ist es hart, Entscheidungen zu treffen. alle zu treffen. Wäre es nicht toll, wenn man sich in die Zeit der Kindheit zurückversetzen könnte, wo ein einfaches Spielzeug alle schwierigen Fragen des Lebens beantworten konnte? Aber noch besser wäre es, wenn man es selbst bauen könnte!
In diesem Lernprogramm werden Sie eine Magic 8-Ball Voice-Anwendung mit Ruby erstellen. Diese App wird die Fragen nicht weniger schwierig machen, aber sie wird aber die Entscheidungsfindung erleichtern.

Voraussetzungen
Vonage API-Konto
Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.
In diesem Lernprogramm wird auch eine virtuelle Telefonnummer verwendet. Um eine zu erwerben, gehen Sie zu Rufnummern > Rufnummern kaufen und suchen Sie nach einer Nummer, die Ihren Anforderungen entspricht.
Darüber hinaus benötigen Sie:
ngrok um Ihre Rails-Anwendung nach außen hin sichtbar zu machen
Erstellen einer Magic 8-Ball Voice App
Wie Sie Ihre App erstellen:
Erstellen Sie die Rails-Anwendung
Einrichten der Routen und des Controllers in der App
Stellen Sie Ihre Anwendung nach außen mit
ngrokKaufen Sie eine Nexmo-Rufnummer
Erstellen einer Nexmo Voice Anwendung
Alles miteinander verbinden
Führen Sie Ihre App aus und beantworten Sie alle schwierigen Fragen des Lebens (die Ja- oder Nein-Fragen, das heißt)!
Dieses Tutorial führt Sie von Anfang an durch den Prozess. Wenn Sie den fertigen Code sehen möchten, können Sie das Git-Repository für dieses Projekt klonen.
Erstellen Sie die Rails-Anwendung
Initialisieren Sie zunächst ein neues Rails-API-Projekt.
Führen Sie in der Befehlszeile Folgendes aus:
(Da es keine dauerhaften Daten für diese Anwendung gibt, hilft das Hinzufügen des -api --skip-active-record Teil dazu bei, dass Ihre App superleicht ist).
Wechseln Sie in den Ordner Ihrer neuen Rails-App cd magic8-ball-voice-app und öffnen Sie sie in Ihrem bevorzugten Code-Editor.
Der Ablauf dieser App
Halten wir kurz inne, um über den Ablauf dieser Anwendung zu sprechen, bevor wir uns mit dem Code beschäftigen.
Der Nutzer wählt sich in die App ein und wird aufgefordert, eine Frage zu stellen. Um zu zeigen, dass er bereit ist, einen klugen Ratschlag zu erhalten, wird der Nutzer aufgefordert, die 1 auf seiner Tastatur zu drücken. Dann wählt die App nach dem Zufallsprinzip eine Antwort aus, die dem Nutzer vorgelesen wird.
Um diesen Ablauf zu erreichen, müssen Sie diese Aktionen und Routen in Ihrer Anwendung erstellen:
#answer: um den ersten Anruf zu erhalten#caller_input: mit einer zufällig ausgewählten Antwort auf die Frage des Anrufers zu antworten und Eingabefehler zu behandeln#event: um das Ereignis von Nexmo API zu empfangen und in die Konsole zu drucken
Nun, da der Ablauf der App klar ist, können wir uns an den spaßigen Teil machen und die Routen und Controller-Aktionen schreiben!
Einrichten der Routen innerhalb der App
Damit Ihre Anwendung weiß, wohin sie die Nexmo GET Anfrage leitet, sollten Sie die Routen in routes.rb.
Um den Anruf zu beantworten, die Eingaben des Anrufers zu verarbeiten und die Ereignisse auf Ihrem Terminal auszugeben, müssen Sie drei eindeutige Routen schreiben.
Öffnen Sie /config/routes.rb zum Hinzufügen:
# routes.rb
get '/answer', to: 'responses#answer'
post '/caller_input', to: 'responses#caller_input'
post '/event', to: 'responses#event' Einrichten des Controllers innerhalb der App
Führen Sie in Ihrem Terminal den Befehl aus: rails generate controller Responses.
Dies erzeugt eine neue Controller Datei im Ordner /app/controllers Ordner.
Innerhalb dieser Datei werden Sie Ihre Aktionen erstellen:
# responses_controller.rb
class ResponsesController < ActionController::API
# this URL is the one you use ngrok to create
NGROK_URL = "http://********.ngrok.io"
# it’s up to you if there are more or less positive responses in your array
POSSIBLE_RESPONSES = ["It is certain.", "It is decidedly so.", "Without a doubt.", "Yes, definitely.", "You may rely on it.", "As I see it, yes.", "Most likely.", "The outlook good.", "Yes.", "All signs point to yes.", "Sorry, but no.", "I really don’t think it will work out.", " Don't count on it.", "That my sources say no.", "It is very doubtful."]
def answer
render json:
[
{
:action => 'talk',
:text => 'Welcome to the Magic Eightball hotline. Ask your question and then press 1.',
:bargeIn => true
},
{
:action => 'input',
:eventUrl => ["#{NGROK_URL}/caller_input"],
:timeOut => '10'
}
].to_json
end
Als nächstes müssen Sie die Eingaben des Anrufers verarbeiten.
Dual Tone Multi Frequency (DTMF) ist eine Form der Signalisierung, die von Telefonsystemen verwendet wird, um die Ziffern 0-9 und die Zeichen * und # zu übertragen. Wir verwenden 'dtmf' hier, um die Zahl 1 als Signal für die Anwendung zu akzeptieren, dass der Anrufer bereit ist, zum nächsten Durchlauf überzugehen. Wenn der Anrufer eine andere Taste drückt oder gar nichts eingibt, bittet die App den Anrufer, es erneut zu versuchen.
Dann verwenden wir die Ruby .sample Methode. Diese wählt zufällig eine Magic 8-Ball Antwort aus dem POSSIBLE_RESPONSES Array.
# responses_controller.rb continued
def caller_input
dtmf = params['dtmf'] || parsed_body['dtmf']
if dtmf == '1'
render json:
[
{
:action => 'talk',
:text => "My answer is: #{POSSIBLE_RESPONSES.sample}. I hope that helps. Thanks for calling the Magic 8-ball hotline. Please call again whenever you need help making a decision in life. Goodbye.",
}
].to_json
else
render json:
[{:action => 'talk', :text => 'I did not recognize your selection. Please call back and try again.'}].to_json
end
end
Zum Schluss geben wir die Details des Ereignisses zu Debugging-Zwecken in Ihrem Terminal aus.
# responses_controller.rb continued
def event
puts params
end
endAnmerkung:
Es gibt eine konstante Variable in Zeile 6 der Dateiresponses_controller.rbDatei, die Ihre ngrok-URL enthalten wird. Sie ist derzeit leer, weil Sie sie noch erstellen müssen.
Also lasst uns das jetzt schaffen, oder?
Externe Nutzung Ihrer App mitngrok
Das Ziel ist es nun, Ihre App nach außen zu bringen, damit Nexmo mit ihr kommunizieren kann. Da die App nur lokal läuft, ist sie nicht auf dem Rechner eines anderen Nutzers verfügbar. Das bedeutet, dass wir unseren lokalen Server irgendwie nach außen hin sichtbar machen müssen, damit Nexmo ihn erreichen kann.
Es gibt eine Menge verschiedener Möglichkeiten, dies zu tun, aber eine der einfachsten ist ngrok. Sie können sich diesen Artikel um einen tieferen Einblick in die Funktionsweise zu bekommen.
Aber hier ist die Quintessenz:
Öffnen Sie ein neues Terminalfenster
Führen Sie Folgendes in der Befehlszeile aus:
Hier verweist ngrok auf den Port 3000, da es davon ausgeht, dass Ihr lokaler Server auf
http://localhost:3000. Wenn Sie auf einem anderen Port laufen, müssen Sie den ngrok-Befehl anpassen.
Sie sollten nun eine ngrok-Protokollierungsschnittstelle in Ihrem Terminalfenster sehen.
Am oberen Rand der Schnittstelle befindet sich eine Zeile, die mit Forwarding beginnt und zwei URLs enthält. Die erste ist die von außen zugängliche ngrok-URL, sie endet mit ngrok.io endet und auf Ihren lokalen Server verweist.

Kopieren Sie diese URL und fügen Sie sie in Ihre responses_controller.rb Datei ein und aktualisieren Sie die NGROK_URL = "http://********.ngrok.io" auf diese URL (diejenige, die lokal auf Ihrem Rechner läuft gerade jetzt).

Hinweis: Speichern Sie Ihre
ngrok.ioURL an einem sicheren Ort speichern! Sie werden sie auch in den nächsten Schritten verwenden.
Damit Ihre Voice-App funktioniert, müssen Sie Ihren Nexmo Account, eine eingerichtete Telefonnummer und eine Voice-Applikation miteinander verbinden.
Kaufen Sie eine Nexmo-Telefonnummer
Klicken Sie auf dem Nexmo Dashboard auf den Menüpunkt
NumbersMenüpunkt auf der linken Seite.Klicken Sie auf die Option
Buy Numbersund Sie werden auf eine Seite weitergeleitet, auf der Sie das Land, die Merkmale, den Typ und die vier Ziffern, die die Nummer haben soll, auswählen können.
Wählen Sie das Land, in dem Sie sich gerade befinden, damit der Anruf lokal erfolgt. Wählen Sie unter Funktionen
Voiceund für die Art des Anrufs entweder Handy oder Festnetz.Klicken Sie auf
Searchum eine Liste der verfügbaren Telefonnummern anzuzeigen.Wählen Sie eine Zahl aus, indem Sie auf die orangefarbene
Buyklicken und dann erneut auf die orangefarbeneBuyklicken, sobald Sie in der Bestätigungsaufforderung sind.
Sie besitzen nun eine Nexmo-Telefonnummer. Ihr nächster Schritt ist die Erstellung einer Anwendung im Nexmo Dashboard.
Eine Nexmo-Anwendung erstellen
Klicken Sie im linken Menü auf den Menüpunkt
VoiceMenüpunkt.Wählen Sie die
Create an applicationOption. Sie werden zu einer Seite weitergeleitet, auf der Sie eine neue Nexmo-Anwendung einrichten können.Füllen Sie das Formular mit den folgenden Angaben aus:
-Application nameTextfeld eingebenmagic8-ball-voice-app-Event URLTextfeld geben Sie die gespeicherte ngrok URL ein:https://[ngrok url here]/event-Answer URLTextfeld geben Sie die gespeicherte ngrok-URL erneut ein:https://[ngrok url here]/answerWenn Sie alles eingegeben haben, klicken Sie auf die blaue
Create ApplicationSchaltfläche. [video width="1042" height="814" mp4="https://www.nexmo.com/wp-content/uploads/2019/05/create-application.mp4"]
Alles miteinander verbinden
Sie haben nun eine Nexmo Voice-Nummer und eine Anwendung, die Sie nur noch miteinander verknüpfen müssen.
Wählen Sie die Option
NumbersMenüoption im linken Menü und klicken Sie dann aufYour numbersum auf eine Seite zu gelangen, auf der die soeben erworbene Telefonnummer aufgeführt ist.Klicken Sie auf das Zahnradsymbol rechts auf der Seite.
Wählen Sie
Applicationunter demForward toBereich.Wählen Sie Ihre neue Nexmo-Anwendung aus der Dropdown-Liste unter dem
ApplicationBereich.Drücken Sie die blaue
OkTaste.
Ihre neue Nexmo-Voice-Nummer ist nun mit Ihrer neuen Nexmo-Anwendung verknüpft, und mit diesem letzten Schritt sind Sie bereit, sie auszuprobieren!
Ihre App ausführen
Während Ihr ngrok-Server noch in einem Fenster läuft, führen Sie rails s von einem anderen Fenster in Ihrem Terminal aus.
Dies sollte Ihren Rails-Server auf http://localhost:3000. Es gibt keine Ansichten in Ihrer Anwendung, so dass die einzige Möglichkeit, mit ihr zu interagieren, darin besteht, sie aufzurufen.
Jetzt kommt der lustige Teil!
Bereiten Sie die Frage vor, deren Beantwortung Ihnen allein zu schwierig war.
Wählen Sie Ihre neue Nexmo-Rufnummer von Ihrem eigenen Telefon aus.
Sie sollten hören, dass Ihre App den Anruf beantwortet und Sie die Aufforderung der
#answerController-Methode.
Experimentieren Sie ruhig mit verschiedenen Optionen und spielen Sie mit Ihrer Nexmo-App! Fügen Sie dem Array vielleicht ein paar alberne Antworten hinzu POSSIBLE_RESPONSES Array hinzuzufügen oder eine Option, um eine andere Antwort zu erhalten, wenn dem Anrufer die erste nicht gefällt. Herzlichen Glückwunsch! Sie haben jetzt eine voll funktionsfähige Magic 8-Ball Voice Anwendung unter Verwendung von Rails und der Nexmo Voice API.
Nächste Schritte
Wenn dies Ihr Interesse geweckt hat, mehr mit Voice zu machen, finden Sie hier einige Ideen, was Sie als nächstes ausprobieren können:
Sehen Sie sich diese hervorragende Einführung in beide SMS und Voice Anrufe mit Nexmo.
Werfen Sie einen Blick auf diese unterhaltsame Anleitung zum Einrichten einer Telefonkonferenz mit Nexmo Voice API, Ruby und Rails.
Wenn Sie sich nach noch mehr mehr Hellseherei in deinem Leben sehnst, dann sieh dir unbedingt dieses Tutorial an, wie man SMS-Glückskekse ohne Server mit Nexmo!
