https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-to-build-a-magic-8-ball-voice-app-with-ruby-dr/Magic-8-Ball_1200x600.jpg

Wie man eine Magic 8-Ball Voice App mit Ruby erstellt

Zuletzt aktualisiert am May 14, 2021

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.

magic eightball

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:

Erstellen einer Magic 8-Ball Voice App

Wie Sie Ihre App erstellen:

  1. Erstellen Sie die Rails-Anwendung

  2. Einrichten der Routen und des Controllers in der App

  3. Stellen Sie Ihre Anwendung nach außen mit ngrok

  4. Kaufen Sie eine Nexmo-Rufnummer

  5. Erstellen einer Nexmo Voice Anwendung

  6. Alles miteinander verbinden

  7. 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:

rails new magic8-ball-voice-app --api --skip-active-record

(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
end

Anmerkung:
Es gibt eine konstante Variable in Zeile 6 der Datei responses_controller.rb Datei, 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:

./ngrok http 3000

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.

ngrok

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).

updated ngrok

Hinweis: Speichern Sie Ihre ngrok.io URL 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 Numbers Menüpunkt auf der linken Seite.

  • Klicken Sie auf die Option Buy Numbers und 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.

    buy numbers

  • Wählen Sie das Land, in dem Sie sich gerade befinden, damit der Anruf lokal erfolgt. Wählen Sie unter Funktionen Voice und für die Art des Anrufs entweder Handy oder Festnetz.

  • Klicken Sie auf Search um eine Liste der verfügbaren Telefonnummern anzuzeigen.

  • Wählen Sie eine Zahl aus, indem Sie auf die orangefarbene Buy klicken und dann erneut auf die orangefarbene Buy klicken, 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 Voice Menüpunkt.

  • Wählen Sie die Create an application Option. 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 name Textfeld eingeben magic8-ball-voice-app -Event URL Textfeld geben Sie die gespeicherte ngrok URL ein: https://[ngrok url here]/event -Answer URL Textfeld geben Sie die gespeicherte ngrok-URL erneut ein: https://[ngrok url here]/answer

  • Wenn Sie alles eingegeben haben, klicken Sie auf die blaue Create Application Schaltflä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 Numbers Menüoption im linken Menü und klicken Sie dann auf Your numbers um 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 Application unter dem Forward to Bereich.

  • Wählen Sie Ihre neue Nexmo-Anwendung aus der Dropdown-Liste unter dem Application Bereich.

  • Drücken Sie die blaue Ok Taste.

    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 #answer Controller-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!

Teilen Sie:

https://a.storyblok.com/f/270183/250x250/708316e4e8/laurenlee.png
Lauren LeeVonage Ehemalige

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.