https://d226lax1qjow5r.cloudfront.net/blog/blogposts/record-a-phone-message-with-java-dr/ord-a-Phone-Message-with-Java.png

Aufnehmen einer Telefonnachricht mit Java

Zuletzt aktualisiert am May 12, 2021

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:

  1. Gradle zum Einrichten eines neuen Java-Projekts verwenden.

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

mkdir record-a-message cd record-a-message gradle init --type=java-application

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:

  1. A talk Aktion, um den Anrufer zu begrüßen und ihm mitzuteilen, wie er eine Nachricht hinterlassen kann.

  2. A record Aktion, die die Voice API anweist, mit der Aufnahme zu beginnen.

  3. A talk Aktion, 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

vonage numbers:search --features=VOICE US

Sobald Sie eine Nummer ausgewählt haben, die Ihnen gefällt, können Sie die Nummer mit kaufen:

vonage numbers:buy 1201XXXXXXX US

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:

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

vonage apps:create "Record Message Demo" --voice_answer_url=http://your-ngrok-forwarding-address/webhooks/answer --voice_event_url=http://your-ngrok-forwarding-address/webhooks/answer

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:

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

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.