
Teilen Sie:
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.
Tastatur-Eingabe (DTMF) mit Java verarbeiten
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:
Verwendung von Gradle um ein neues Java-Projekt einzurichten.
Die Verwendung des Spark Framework zur Steuerung des Aufrufs.
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:
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:
Und dann kaufen Sie eine der verfügbaren Numbers:
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:
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
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:
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:
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:
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.
