https://d226lax1qjow5r.cloudfront.net/blog/blogposts/twitter-interactive-voice-response-dr/tweet-to-talk.png

Erstellung einer Twitter IVR mit Text-to-Speech und der Nexmo Voice API

Zuletzt aktualisiert am May 13, 2021

Lesedauer: 4 Minuten

Ich bin ein bisschen süchtig nach Twitter. Wie viele andere Technikbegeisterte bin ich beigetreten, als Twitter bei der SXSW 2007 in der Beliebtheit explodierte, und es ist immer noch eine hervorragende Möglichkeit, um zu verfolgen, was auf Festivals oder Konferenzen passiert.

Aber das Internet auf Konferenzen ist normalerweise nicht besonders gut. Sie können zwar immer noch per SMS tweeten, aber ohne Datenverbindung können Sie den Konferenz-Hashtag nicht verfolgen oder nach Tweets in der Nähe suchen, um herauszufinden, wo die beste Afterparty stattfindet. Aber selbst wenn Sie keine Datenverbindung haben, können Sie wahrscheinlich immer noch Anrufe tätigen. Lassen Sie uns einen Twitter-Bot einrichten, den wir per Telefonanruf steuern können und der uns die Tweets vorliest!

Bevor wir loslegen

Bevor wir loslegen, benötigen Sie einige Dinge.

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.

Steuerung unseres Bots mit DTMF

Vielleicht gibt es mehrere Hashtags, denen wir folgen möchten, oder wir möchten die neuesten Tweets von verschiedenen Konten abrufen können. Wir brauchen also eine Möglichkeit, unserem Bot mitzuteilen, welchen Stream er uns vorlesen soll.

Dazu verwenden wir die Zweiton-Mehrfrequenzsignalisierung (DTMF). Wenn Sie eine Nummer auf Ihrem Telefon wählen, ist der Ton, den Sie hören, DTMF. Mit der Nexmo input Aktion bitten wir den Benutzer, eine bestimmte Nummer zu drücken, und variieren dann die Aktion, die wir je nach der eingegebenen Nummer durchführen. Wenn Sie schon einmal eine Kundenhotline anrufen mussten, haben Sie wahrscheinlich schon einmal ein interaktiven Sprachdialogsystem (IVR)kennengelernt, das wir jetzt erstellen werden.

Wenn ein Nutzer anruft, lesen wir ihm eine Liste der verfügbaren Eingaben vor, fordern ihn auf, eine Auswahl zu treffen, und nutzen dann die Twitter-API und Text-to-Speech, um ihm die relevanten Tweets vorzulesen.

Erstellung eines interaktiven Sprachdialogsystems mit Python und Flask

Wenn ein Benutzer unsere virtuelle Nummer anruft, fordert Nexmo unser Nexmo-Anrufsteuerungsobjekt (NCCO). Das NCCO ist eine JSON-Datei, die eine Liste von Aktionen enthält, die Nexmo durchführen soll, wenn jemand unsere Nummer anruft. Schauen wir uns ein Beispiel an.

[
  {
    "action": "talk", 
    "bargeIn": "true", 
    "text": "Welcome to Nexmo's talking Twitter. Please select from the following options. To hear the latest breaking news press 1. For showbiz gossip press 2. If you'd like to hear the latest #API tweets press 3. Or for tweets by Aaron Bassett press 4.", 
    "voice_name": "Amy"
  }, 
  {
    "action": "input", 
    "eventUrl": [
      "https://example.com/ivr/"
    ], 
    "maxDigits": 1
  }
]

Der obige NCCO hat zwei Aktionen: Erstens verwenden wir Text-to-Speech, um dem Anrufer mitzuteilen, welche Optionen er hat; wir setzen bargeIn auf true, so dass der Anrufer die Nummer jederzeit drücken kann, ohne sich die gesamte Nachricht anzuhören, wenn er bereits weiß, welche Option er möchte. Die nächste Aktion erfasst die Nummer, die der Benutzer drückt, und sendet sie als POST an unsere eventUrl. Diese eventUrl gibt einen weiteren NCCO zurück, der Nexmo mitteilt, was als nächstes zu tun ist.

Umwandlung von Tweets in Sprache

Wenn unser Anrufer eine Nummer eingibt, wird diese als Teil einer POST-Anfrage an unseren /ivr/ Endpunkt gesendet. Mit ein paar Conditionals (komm schon Guido, lass lass uns doch einfach eine switch-Anweisung haben!) können wir die Eingaben des Benutzers mit unserer Liste möglicher Tweets vergleichen und jeden Tweet als eine talk Aktion in unserem neuen NCCO zurückgeben. Wir verwenden Text-to-Speech, um dem Benutzer die Tweets vorzulesen.

Wenn der Benutzer einen Wert eingegeben hat, den wir nicht kennen, wird eine kurze Nachricht abgespielt, die besagt, dass die Eingabe nicht verstanden wurde, und dann wird der Prozess von vorne begonnen.

Probieren Sie es selbst aus

view on Github

Der Beispielcode verwendet Python und Flask, daher empfehle ich Ihnen, eine neue virtuelle Python-Umgebung zu erstellen, damit Sie den Code klonen und die Abhängigkeiten installieren können.

git clone git@github.com:nexmo-community/nexmo-call-twitter.git
cd nexmo-call-twitter/
pip install -r requirements.txt

Es ist eine kleine Konfiguration erforderlich; in der Datei app.py setzen Sie die event_url auf Ihre ngrok-URL, gefolgt von /ivr/und stellen Sie sicher, dass Sie die erforderlichen Twitter-Variablen in Ihrer Umgebung. Details zum Erstellen einer eine neue Twitter-Anwendung erstellt, finden Sie in der python-twitter Dokumentation.

export TWITTER_CONSUMER_KEY=
export TWITTER_CONSUMER_SECRET=
export TWITTER_ACCESS_KEY=
export TWITTER_ACCESS_SECRET=

Sobald Sie alle erforderlichen Variablen gesetzt haben, können Sie die Flask-Anwendung starten. Starten wir sie im Entwicklungsmodus; auf diese Weise erhalten wir eine schöne Debug-Ausgabe, falls etwas schief geht. Sie müssen ein paar weitere Umgebungsvariablen für Flask erstellen.

export FLASK_APP=app.py
export FLASK_DEBUG=1

Und wenn sie einmal eingestellt sind, können wir unsere Anwendung mit ausführen:

flask run

Besuchen Sie http://127.0.0.1:5000 in Ihrem Webbrowser aufzurufen. Wenn alles richtig läuft, sollten Sie unseren NCCO sehen. Aber um diesen Server für die Nexmo Voice APIzu erreichen, muss er öffentlich sein. Stellen Sie also sicher, dass ngrok läuft und auf den richtigen Port zeigt.

Sie müssen auch Ihre Nexmo-Sprachapplikation konfigurieren. Am einfachsten geht das über unseren Voice-Anwendungsmanagement im Nexmo Dashboard. Die Ereignis-URL spielt in diesem Beispiel keine Rolle, da wir nicht mit Webhooks arbeiten werden, also setzen Sie sie und Ihre Antwort-URL auf Ihre ngrok-URL.

screenshot of Nexmo voice application screenscreenshot of Nexmo voice application screen

Wenn Sie Ihre Voice-Anwendung erstellt/konfiguriert haben, vergessen Sie nicht, eine Telefonnummer mit ihr zu verknüpfen!

Probieren Sie es aus

Um es auszuprobieren, rufen Sie einfach die virtuelle Nexmo-Nummer an, die Sie mit Ihrer neuen Voice-Anwendung verknüpft haben. Sie sollten die Einführungsnachricht mit Ihren verschiedenen Optionen hören. Versuchen Sie, verschiedene Numbers oder sogar eine nicht erkannte Nummer einzugeben und hören Sie auf die verschiedenen Nachrichten, die Sie zurückbekommen.

Verwendung Ihrer eigenen Datenquellen

Bearbeiten Sie das Beispiel und ändern Sie die Twitter-Konten oder Hashtags, von denen Sie Tweets abrufen möchten. Vergessen Sie aber nicht, Ihre einleitende Nachricht zu aktualisieren, um Ihre Änderungen wiederzugeben.

Natürlich müssen Sie Ihre Nachrichten nicht unbedingt von Twitter beziehen. Sie können jede beliebige Datenquelle nutzen, um herauszufinden wie sich Ihre Aktien entwickelnund haben immer einen praktischen Vorrat an Vaterwitzenoder sogar überprüfen, was in den Hacker-Nachrichten.

ncco = []

topstories = requests.get('https://hacker-news.firebaseio.com/v0/topstories.json').json()
for x in range(0, 5):
    story = requests.get(
        'https://hacker-news.firebaseio.com/v0/item/{id}.json'.format(
            id=topstories[x]
        )
    ).json()

    ncco.append({
        'action': 'talk',
        'text': story['title']
    })

Tatsächlich können Sie jeden beliebigen Code ausführen. Wir haben alle schon von ChatOps gehört, aber was ist mit IVROps?

Drücken Sie 1, um das Gerät aus- und wieder einzuschalten.

IT Crowd: Have you tried switching it off and back on again?IT Crowd: Have you tried switching it off and back on again?

Obwohl Sie vielleicht eine Authentifizierung einbauen sollten...

[
    {
        "action": "talk",
        "text": "Please enter your PIN followed by the hash key"
    },
    {
        "action": "input",
        "submitOnHash": "true",
        "eventUrl": ["https://example.com/verifypin/"]
    }
]

Teilen Sie:

https://a.storyblok.com/f/270183/150x150/a3d03a85fd/placeholder.svg
Aaron BassettVonage Ehemalige

Aaron war ein Entwickler-Befürworter bei Nexmo. Aaron ist ein erfahrener Software-Ingenieur und Möchtegern-Digitalkünstler, der häufig Dinge mit Code oder Elektronik entwickelt, manchmal auch beides. Wenn er an etwas Neuem arbeitet, erkennt man das in der Regel am Geruch von brennenden Bauteilen in der Luft.