
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.
Aufnehmen einer Telefonnachricht mit Java
Lesedauer: 10 Minuten
Einführung
In einem früheren Tutorial haben wir Ihnen gezeigt, wie man Telefonanrufe mit Java entgegennehmen und mit Text-to-Speech zu antworten. Wir können Benutzern auch erlauben, eine Nachricht zu hinterlassen und diese aufgezeichnete Nachricht dann abzurufen.
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.
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.
Schließlich benötigen Sie die Vonage CLI installiert sein. Damit erwerben Sie eine Telefonnummer und konfigurieren Ihr Vonage-Konto so, dass es auf Ihre neue Anwendung verweist.
Aufnehmen einer Telefonnachricht mit Java
In dieser Anleitung werden Sie durch die folgenden Schritte geführt:
Gradle zum Einrichten eines neuen Java-Projekts verwenden.
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 werden Gradle verwenden, um Ihre Abhängigkeiten zu verwalten und um Ihre Java-Anwendung zu erstellen und auszuführen.
Der Befehl gradle init --type=java-application erstellt alle Ordner, die Sie benötigen, sowie eine Beispielklasse, in der Sie Ihren Code schreiben werden.
Erstellen Sie in der Befehlszeile ein neues Java-Projekt mit den folgenden Befehlen:
Verwendung des Spark-Frameworks zur Steuerung des Aufrufs
Sie verwenden das Spark-Framework, um einen HTTP-Anruf zu empfangen, der von Vonage getätigt wird, wenn ein Anruf auf Ihrer Nummer eingeht, und um die Anfrage zu empfangen, die Vonage sendet, nachdem die Nachricht aufgezeichnet wurde.
Hinzufügen der Abhängigkeiten
Fügen Sie den folgenden Text zum dependencies Block in Ihrer build.gradle Datei hinzu:
// Spark Framework
implementation 'com.vonage:client:[6.1.0,7.0.0)'
//Vonage Client
implementation "com.sparkjava:spark-core:2.6.0"Ihr dependencies Block sollte wie folgt aussehen:
dependencies {
testImplementation 'junit:junit:4.12'
implementation 'com.vonage:client:[6.1.0,7.0.0)'
implementation "com.sparkjava:spark-core:2.6.0"
}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.
Definieren Sie die Antwortroute
Zunächst legen Sie die Route fest, über die der Anruf entgegengenommen werden soll. Wenn ein Anruf eingeht, sendet Vonage eine Anfrage an eine vordefinierte Webhook-URL. Es erwartet den Empfang eines Vonage-Anrufsteuerungsobjekt (NCCO) mit einer Liste von Aktionen, die ausgeführt werden sollen.
Wenn der Anruf entgegengenommen wird, weist Ihre Anwendung Vonage an, drei Aktionen auszuführen:
A
talkAktion, um den Anrufer zu begrüßen und ihm mitzuteilen, wie er eine Nachricht hinterlassen kann.A
recordAktion, die die Voice API anweist, mit der Aufnahme zu beginnen.A
talkAktion, um ihnen für das Hinterlassen einer Nachricht zu danken.
Dies ist die resultierende NCCO, die Ihre Anwendung erstellen wird:
[
{
"text": "Please leave a message after the tone, then press #. We will get back to you as soon as we can.",
"action": "talk"
},
{
"endOnSilence": 3,
"endOnKey": "#",
"beepStart": true,
"eventUrl": [
"http://your-web-address/webhooks/recordings"
],
"action": "record"
},
{
"text": "Thank you for your message. Goodbye",
"action": "talk"
}
]Fügen Sie Folgendes zur main Methode der App Klasse hinzu, wobei darauf zu achten ist, dass alle Importe aufgelöst werden:
/*
* Route to answer and connect incoming calls with recording.
*/
Route answerRoute = (req, res) -> {
String recordingUrl = String.format("%s://%s/webhooks/recordings", req.scheme(), req.host());
TalkAction intro = new TalkAction.Builder("Please leave a message after the tone, then press #. We will get back to you as soon as we can.")
.build();
RecordAction record = new RecordAction.Builder()
.eventUrl(recordingUrl)
.endOnSilence(3)
.endOnKey('#')
.beepStart(true)
.build();
TalkAction outro = new TalkAction.Builder("Thank you for your message. Goodbye").build();
res.type("application/json");
return new Ncco(intro, record, outro).toJson();
};
Die record Aktion hat einige verschiedene Eigenschaften. Sie können zum Beispiel die Ereignis-URL definieren, an die eine Anfrage gesendet wird, wenn die Aufnahme beendet ist, die Aufnahme bei einem bestimmten Tastendruck beenden und einen Signalton zu Beginn der Aufnahme abspielen.
Definieren Sie die Aufzeichnungsroute
Die record Aktion hat eine Eigenschaft namens eventUrl die verwendet wird, um mitzuteilen, wann die Aufzeichnung beendet ist. Im Folgenden finden Sie ein Beispiel für die Rückgabeparameter, die an die Ereignis-Url gesendet werden:
{
"start_time": "2020-01-01T12:00:00Z",
"recording_url": "https://api.nexmo.com/media/download?id=aaaaaaaa-bbbb-cccc-dddd-0123456789ab",
"size": 12345,
"recording_uuid": "aaaaaaaa-bbbb-cccc-dddd-0123456789ab",
"end_time": "2020-01-01T12:01:00Z",
"conversation_uuid": "bbbbbbbb-cccc-dddd-eeee-0123456789ab",
"timestamp": "2020-01-01T14:00:00.000Z"
}Der Vonage Java-Klient hat eine Klasse namens RecordEvent die verwendet werden kann, um das JSON zu deserialisieren, das an eventUrl. Für den Moment werden Sie die Ausgabe von recording_url auf der Konsole ausgeben.
Fügen Sie Folgendes zur main Methode der App Klasse hinzu, wobei alle Importe aufgelöst werden:
/*
* Route which prints out the recording URL it is given to stdout.
*/
Route recordingRoute = (req, res) -> {
RecordEvent recordEvent = RecordEvent.fromJson(req.body());
System.out.println(recordEvent.getUrl());
res.status(204);
return "";
};
Registrierung der Routen
Bis zu diesem Punkt haben Sie zwei Routen definiert:
Die erste Route antwortet Vonage mit einem NCCO, wenn Vonage den eingehenden Anruf entgegennimmt.
Die zweite Route protokolliert die Aufnahme-URL, wenn Vonage die Aufnahme der Nachricht beendet hat.
Um diese Routen nutzen zu können, müssen wir Spark konfigurieren. Ihre Anwendung wird auf Port 3000hören, und die Routen werden auf /webhooks/answer und /webhooks/recordings.
Fügen Sie Folgendes zur main Methode der App Klasse hinzu:
Spark.port(3000);
Spark.get("/webhooks/answer", answerRoute);
Spark.post("/webhooks/recordings", recordingRoute); Kauf einer Nummer
Sie benötigen eine Vonage-Nummer, um Anrufe entgegennehmen zu können. Wenn Sie noch keine Nummer haben, können Sie über die Vonage CLI eine Nummer erwerben
Suchen Sie zunächst nach einer verfügbaren Nummer mit Voice Funktion
Sobald Sie eine Nummer ausgewählt haben, die Ihnen gefällt, können Sie die Nummer mit kaufen:
Notieren Sie sich die Nummer, die Sie erwerben. 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.
Laden Sie ngrok herunter 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 running in terminal with forwarding address http://99cad2de.ngrok.io
Konfigurieren Sie Ihren Vonage Account
Wenn Sie noch keine Anwendung haben, können Sie mit der Vonage CLI eine Anwendung mit Ihrer ngrok-Weiterleitungsadresse erstellen:
Sie können auch Ihren eigenen öffentlichen Schlüssel mit --public_keyfile. Mehr Anleitung hier
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 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 record-a-message Verzeichnis.
Rufen Sie Ihre Vonage-Nummer an und testen Sie Ihre Anwendung. Sie hören die Nachricht: "Bitte hinterlassen Sie eine Nachricht nach dem Ton und drücken Sie dann #. Sobald Sie den Signalton hören, hinterlassen Sie eine Nachricht und drücken Sie dann #. Sie sollten dann hören: "Vielen Dank für Ihre Nachricht. Auf Wiedersehen", und die URL der Aufzeichnung wird auf Ihrer Konsole angezeigt.
Schlussfolgerung
Mit ein paar Zeilen Code haben Sie eine Anwendung erstellt, die einen Anruf entgegennehmen, eine Nachricht aufzeichnen und dann die URL zu dieser Aufnahme anzeigen kann.
In unserer Dokumentation zu Vonage Developer erfahren Sie mehr über Anruffluss oder Vonage Anrufsteuerungsobjekte. Siehe unsere Vonage 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.
