https://d226lax1qjow5r.cloudfront.net/blog/blogposts/handle-keypad-input-dtmf-with-java-dr/Handle-Keypad-Input-With-Java.png

Tastatur-Eingabe (DTMF) mit Java verarbeiten

Zuletzt aktualisiert am May 3, 2021

Lesedauer: 10 Minuten

Einführung

In einem früheren Tutorial haben wir Ihnen gezeigt, wie Sie eine Anwendung erstellen können, die Telefonanrufe mit Java entgegennehmen. In diesem Tutorial werden Sie eine Anwendung erstellen, die einen Telefonanruf entgegennehmen und auf Benutzereingaben reagieren kann, indem Sie die Vonage Voice API.

Voraussetzungen

Für diese Anleitung benötigen Sie einen Account bei Vonage. Melden Sie sich jetzt an, wenn Sie noch keinen Account haben.

Sie werden Folgendes verwenden Gradle verwenden, um Ihre Abhängigkeiten zu verwalten und Ihre Anwendung auszuführen. Außerdem müssen Sie sicherstellen, dass Sie eine Kopie des JDK installiert haben. In diesem Tutorial werde ich JDK 8 verwenden.

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.

Bearbeitung von Benutzereingaben mit Java

In dieser Anleitung werden Sie durch die folgenden Schritte geführt:

  1. Verwendung von Gradle um ein neues Java-Projekt einzurichten.

  2. Die Verwendung des Spark Framework zur Steuerung des Aufrufs.

  3. Kauf einer Nummer und Konfiguration Ihres Vonage-Accounts zur Nutzung dieser Nummer mit Ihrer Anwendung.

Gradle zum Einrichten eines neuen Java-Projekts verwenden

Sie verwenden Gradle zur Verwaltung Ihrer Abhängigkeiten und zur Erstellung und Ausführung Ihrer Java-Anwendung. Erstellen Sie in der Befehlszeile ein neues Java-Projekt mit den folgenden Befehlen:

mkdir handle-user-input cd handle-user-input gradle init --type java-application

Der Befehl gradle init --type java-application werden alle benötigten Ordner sowie eine Beispielklasse erstellt, in die Sie Ihren Code schreiben werden.

Verwendung des Spark-Frameworks zur Steuerung des Aufrufs

Sie verwenden die Spark Framework, um den HTTP-Aufruf abzufangen, den Vonage verwendet, wenn Ihre Nummer einen Anruf erhält, und für die Anfrage, die Vonage sendet, wenn eine Eingabe empfangen wird.

Hinzufügen der Abhängigkeiten

Fügen Sie den folgenden Text zu Ihrem dependencies Block in Ihrer build.gradle Datei hinzu:

compile 'com.sparkjava:spark-core:2.7.2'
compile 'com.nexmo:client:4.0.1'

Ihr dependencies Block sollte wie folgt aussehen:

dependencies {
    // This dependency is found on compile classpath of this component and consumers.
    compile 'com.google.guava:guava:23.0'
    compile 'com.sparkjava:spark-core:2.7.2'
    compile 'com.nexmo:client:4.0.1'

    // Use JUnit test framework
    testCompile 'junit:junit:4.12'
}

Einrichten der Antwortroute

Gradle erstellt die App Klasse im Ordner src/main/java Ordner. Innerhalb dieser Klasse befindet sich ein getGreeting und eine main Methode. Sie werden die getGreeting Methode nicht benötigen, also können Sie sie entfernen.

Ersetzen Sie den Inhalt der main Methode, wobei alle Importe aufgelöst werden, durch:

/*
* Route to answer incoming calls.
*/
Route answerRoute = (req, res) -> {
    TalkAction intro = new TalkAction
            .Builder("Hello. Please press any key to continue.")
            .build();

    InputAction input = new InputAction.Builder()
            .eventUrl(String.format("%s://%s/webhooks/dtmf", req.scheme(), req.host()))
            .maxDigits(1)
            .build();


    res.type("application/json");

    return new Ncco(intro, input).toJson();
};

/*
* Route to print out call event info.
*/
Route eventRoute = (req, res) -> {
    System.out.println(req.body());
    return "";
};

Spark.port(3000);
Spark.get("/webhooks/answer", answerRoute);
Spark.post("/webhooks/events", eventRoute);

Dieser Code richtet eine Route auf http://localhost:3000/webhooks/answer die mit folgendem Code antwortet Nexmo Call Control Object (NCCO):

[
  {
    "text": "Hello please press any key to continue.",
    "action": "talk"
  },
  {
    "maxDigits": 1,
    "action": "input",
    "eventUrl": [
      "http://localhost:3000/webhooks/dtmf"
    ]
  }
]

Die Gesprächsaktion wird Vonage anweisen, die Eigenschaft text Eigenschaft an den Anrufer zurückzusprechen. Die input-Aktion weist Vonage an, eine einzelne vom Anrufer eingegebene Ziffer zu erfassen und eine POST-Anfrage an eventUrl mit dieser Information zu senden.

Eine Route wird auch eingerichtet auf http://localhost:3000/webhooks/events eingerichtet, über die Vonage Änderungen des Anrufstatus übermittelt.

Einrichten der DTMF-Route

Wenn der Anrufer eine Ziffer auf seinem Gerät drückt, wird ein Dual-Tone Multi-Frequency (DTMF)-Signal erzeugt. Vonage verwendet dieses DTMF-Signal, um festzustellen, welcher Satz von Tasten gedrückt wurde. Sobald dies geschehen ist, sendet Vonage eine POST-Anfrage an die eventUrl die in der Datei InputNcco.

Hier ist ein Beispiel für eine POST-Anfrage, die einen JSON-Body enthält:

{
    "dtmf": "5",
    "timed_out": false,
    "uuid": "some-uuid",
    "conversation_uuid": "some-conversation",
    "timestamp": "2018-08-14T19:59:02.528Z"
}

Um diese Informationen in Java zu lesen, benötigen Sie eine Klasse, die die JSON-Eigenschaften auf Java-Eigenschaften abbildet. Die Nexmo Java Client Library enthält die InputEvent Klasse, die diese Zuordnung vornimmt.

In der main Methode der App Klasse fügen Sie die folgende Route unterhalb der eventRoute:

/*
* Route which returns NCCO saying which DTMF code was received.
*/
Route inputRoute = (req, res) -> {
    InputEvent event = InputEvent.fromJson(req.body());

    TalkAction response = new TalkAction
            .Builder(String.format("You pressed %s, Goodbye.", event.getDtmf()))
            .build();

    res.type("application/json");

    return new Ncco(response).toJson();
};

Als Nächstes registrieren Sie die Route, indem Sie Folgendes am Ende der main Methode:

Spark.post("/webhooks/dtmf", inputRoute);

Diese Route antwortet mit folgendem NCCO:

[
  {
    "text": "You pressed 6, Goodbye.",
    "action": "talk"
  }
]

wobei 6 die dtmf Eigenschaft der json-Datei ist, die an /webhooks/dtmf.

Kauf einer Nummer

Sie benötigen eine Vonage-Nummer, um Anrufe entgegennehmen zu können. Wenn Sie noch keine Nummer haben, können Sie die Vonage CLI verwenden, um eine Nummer zu finden und dann zu kaufen. Wählen Sie zunächst eine verfügbare Nummer zum Kauf aus:

vonage numbers:search US

Und dann kaufen Sie eine der verfügbaren Numbers:

vonage numbers:buy US

Notieren Sie sich die Nummer, die Ihnen beim Kauf zugewiesen wurde. Sie benötigen diese Nummer für die Verknüpfung Ihrer Anwendung und für Tests.

Ihre Anwendung offenlegen

Um eine HTTP-Anfrage an Ihre Anwendung senden zu können, muss Vonage die URL kennen, unter der Ihre Anwendung ausgeführt wird.

Anstatt Ihr lokales Netzwerk zu konfigurieren oder Ihre Anwendung bei einem externen Dienst zu hosten, können Sie mit ngrok verwenden, um Ihre Anwendung sicher dem Internet auszusetzen.

Herunterladen ngrok und führen Sie den folgenden Befehl aus:

ngrok http 3000

Notieren Sie sich die Weiterleitungsadresse, da Sie diese bei der Konfiguration Ihres Accounts benötigen. In der folgenden Abbildung lautet die Weiterleitungsadresse http://99cad2de.ngrok.io.

Screenshot of ngrok running in terminal with forwarding address http://99cad2de.ngrok.ioscreenshot of ngrok

Konfigurieren Sie Ihren Vonage Account

Wenn Sie nicht über eine Anwendung verfügen, können Sie die Vonage CLI verwenden, um eine zu erstellen, indem Sie Ihr ngrok Weiterleitungsadresse erstellen:

vonage apps:create "Receive Call Demo" http://your-ngrok-forwarding-address/webhooks/answer http://your-ngrok-forwarding-address/webhooks/events --keyfile private.key

Nachdem Sie diesen Befehl ausgeführt haben, wird eine Anwendungs-ID angezeigt. Zum Beispiel: notreal-1111-2222-3333-appid. Sie benötigen diese Anwendungs-ID, um Ihre Telefonnummer mit der Anwendung zu verknüpfen.

Sie können die Vonage CLI verwenden, um Ihre Telefonnummer und Ihre Anwendung zu verknüpfen:

vonage apps:link your-application-id --number=your-vonage-phone-number

Mit diesem Befehl wird Vonage angewiesen, eine neue Applikation auf Ihrem Account zu erstellen. Die Anwendung sendet eine Anfrage an die erste URL, wenn sie einen Anruf erhält. Die Anwendung sendet Anfragen an die zweite URL, wenn sich der Anrufstatus ändert.

Testen Sie Ihre Anwendung

Starten Sie Ihre Anwendung mit dem gradle run Befehl innerhalb Ihres handle-user-input Verzeichnis.

Rufen Sie Ihre Vonage-Nummer an und testen Sie Ihre Anwendung. Sie hören die Meldung "Hallo, bitte drücken Sie eine beliebige Taste, um fortzufahren". Drücken Sie eine Ziffer auf der Tastatur Ihres Telefons und Sie hören die Meldung "Sie haben 6 gedrückt, auf Wiederhören", wobei 6 die Zahl ist, die Sie gedrückt haben.

Schlussfolgerung

In wenigen Codezeilen haben Sie eine Anwendung erstellt, die einen Telefonanruf entgegennehmen, Benutzereingaben erfassen und mit diesen Eingaben reagieren kann. Experimentieren Sie mit anderen Möglichkeiten, wie Sie die Benutzereingaben zur Steuerung des Anrufs verwenden können.

Sehen Sie sich unsere Dokumentation auf Nexmo Entwickler wo Sie mehr erfahren können über Anruffluss oder Nexmo Call Control Objekte. Siehe unsere Nexmo Schnellstart Beispiele für Java für vollständige Code-Beispiele zu diesem Lernprogramm und mehr.

Teilen Sie:

https://a.storyblok.com/f/270183/150x150/a3d03a85fd/placeholder.svg
Steve CrowVonage Ehemalige

Steve ist ein selbsternannter Mathlet und König des Scharfsinns. Außerdem ist er ein Liebhaber von Windhunden, kniffligen Puzzles und europäischen Brettspielen. Wenn er nicht gerade mit Nicht-Mathematikern über Mathe und mit Nicht-Javaleuten über Java spricht, kann man ihn beim Kaffeetrinken und beim Hacken von Code antreffen.