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

Enregistrer un message téléphonique avec Java

Publié le May 12, 2021

Temps de lecture : 11 minutes

Introduction

Dans un précédent tutoriel, nous vous avons montré comment Recevoir un appel téléphonique avec Java et répondre en utilisant la synthèse vocale. Nous pouvons également permettre aux utilisateurs de laisser un message et de récupérer ce message enregistré.

Conditions préalables

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.

Vous utiliserez Gradle pour gérer vos dépendances et exécuter votre application. En outre, vous devrez vous assurer qu'une copie du JDK est installée. J'utiliserai le JDK 8 dans ce tutoriel.

Enfin, vous aurez besoin du CLI de Vonage de Vonage. Vous l'utiliserez pour acheter un numéro de téléphone et configurer votre Account Vonage pour qu'il pointe vers votre nouvelle application.

Enregistrer un message téléphonique avec Java

Ce tutoriel vous guidera à travers les étapes suivantes :

  1. Utilisation de Gradle pour créer un nouveau projet Java.

  2. Utilisation de l'outil Spark pour contrôler l'appel.

  3. Achat d'un numéro et configuration de votre Account Vonage pour utiliser ce numéro avec votre application.

Utiliser Gradle pour configurer un nouveau projet Java

Vous utiliserez Gradle pour gérer vos dépendances et pour créer et exécuter votre application Java.

La commande gradle init --type=java-application créera tous les dossiers dont vous aurez besoin ainsi qu'une classe d'exemple dans laquelle vous écrirez votre code.

À partir de la ligne de commande, créez un nouveau projet Java avec les commandes suivantes :

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

Utilisation du cadre Spark pour contrôler l'appel

Vous utiliserez le framework Spark pour recevoir un appel HTTP émis par Vonage lorsque votre numéro reçoit un appel, et pour recevoir la requête que Vonage envoie après l'enregistrement du message.

Ajouter les dépendances

Ajoutez ce qui suit au bloc dependencies dans votre fichier build.gradle de votre fichier :

// Spark Framework
implementation 'com.vonage:client:[6.1.0,7.0.0)'
//Vonage Client
implementation "com.sparkjava:spark-core:2.6.0"

Votre bloc dependencies devrait ressembler à ceci :

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 créera la classe App dans le dossier src/main/java dans le dossier À l'intérieur de cette classe se trouvent un getGreeting et une méthode main et une méthode Vous n'aurez pas besoin de la méthode getGreeting vous n'en aurez pas besoin, alors n'hésitez pas à la supprimer.

Définir l'itinéraire de réponse

Tout d'abord, vous définirez la route qui sera utilisée pour répondre à l'appel. Lorsqu'un appel est reçu, Vonage envoie une demande à une URL webhook prédéfinie. Il s'attend à recevoir un objet de contrôle d'appel de Vonage (NCCO) contenant une liste d'actions à exécuter.

Lorsque l'appel téléphonique est pris, votre application demandera à Vonage d'exécuter trois actions :

  1. A talk pour accueillir l'appelant et lui indiquer comment laisser un message.

  2. A record qui demandera à Voice API de commencer l'enregistrement.

  3. A talk action pour les remercier d'avoir laissé un message.

Il s'agit du BCN résultant que votre application créera :

[
  {
    "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"
  }
]

Ajoutez ce qui suit à la méthode main de la classe App en veillant à résoudre toutes les importations :

/*
* 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();
};

L'action record possède quelques propriétés différentes. Par exemple, vous pouvez définir l'url de l'événement qui recevra une demande lorsque l'enregistrement est terminé, terminer l'enregistrement en appuyant sur une touche spécifique et émettre un signal sonore au début de l'enregistrement.

Définir la route des enregistrements

L'action record possède une propriété appelée eventUrl qui est utilisée pour communiquer la fin de l'enregistrement. Voici un exemple des paramètres de retour envoyés à l'url de l'événement :

{
  "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"
}

Le client Java de Client Java de Vonage possède une classe appelée RecordEvent qui peut être utilisée pour désérialiser le JSON envoyé à eventUrl. Pour l'instant, vous allez envoyer le fichier recording_url à la console.

Ajoutez ce qui suit à la méthode main de la classe App en résolvant les importations éventuelles :

/*
* 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 "";
};

Enregistrer les itinéraires

Jusqu'à présent, vous avez défini deux itinéraires :

  • La première route répondra à Vonage avec un NCCO lorsque Vonage répondra à l'appel entrant.

  • La deuxième route enregistrera l'URL d'enregistrement lorsque Vonage aura terminé l'enregistrement du message.

Afin d'utiliser ces routes, nous devons configurer Spark. Votre application écoutera sur le port 3000et les routes seront configurées sur /webhooks/answer et /webhooks/recordings.

Ajoutez ce qui suit à la méthode main de la classe App de la classe :

Spark.port(3000);
Spark.get("/webhooks/answer", answerRoute);
Spark.post("/webhooks/recordings", recordingRoute);

Achat d'un numéro

Vous aurez besoin d'un numéro Vonage pour recevoir des appels téléphoniques. Si vous n'avez pas de numéro, vous pouvez utiliser le CLI de Vonage pour en acheter un.

Recherchez d'abord un numéro disponible avec la fonction Voice fonction

vonage numbers:search --features=VOICE US

Une fois que vous avez sélectionné un numéro qui vous plaît, vous pouvez l'acheter avec :

vonage numbers:buy 1201XXXXXXX US

Notez le numéro que vous achetez. Vous aurez besoin de ce numéro pour relier votre application et pour les tests.

Exposer votre application

Afin d'envoyer une requête HTTP à votre application, Vonage a besoin de connaître l'URL sur laquelle tourne votre application.

Au lieu de configurer votre réseau local ou d'héberger votre application sur un service externe, vous pouvez utiliser ngrok pour exposer votre application à l'internet en toute sécurité.

Téléchargez ngrok et exécutez la commande suivante :

ngrok http 3000

Prenez note de l'adresse de réexpédition, car vous en aurez besoin lorsque vous configurerez votre Account. Dans l'image suivante, l'adresse de réexpédition est la suivante 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

Configurer votre Account Vonage

Si vous n'avez pas d'application, vous pouvez utiliser le CLI de Vonage pour en créer une en utilisant votre adresse de transfert ngrok :

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

Vous pouvez également transmettre votre propre clé publique avec --public_keyfile. Plus d'instructions ici

Après avoir exécuté cette commande, vous verrez apparaître un identifiant d'application. Par exemple : notreal-1111-2222-3333-appid. Vous aurez besoin de cet identifiant pour relier votre numéro de téléphone à l'application.

Vous pouvez utiliser le CLI de Vonage pour lier votre numéro de téléphone et votre application :

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

Cette commande demande à Vonage de créer une nouvelle application sur votre Account. L'application enverra une demande à la première URL lorsqu'elle recevra un appel téléphonique. L'application enverra des demandes à la deuxième URL lorsque l'état de l'appel changera.

Testez votre application

Démarrez votre application avec la commande gradle run dans votre répertoire record-a-message dans votre répertoire.

Appelez votre numéro Vonage et testez votre application. Vous entendrez le message suivant : "Veuillez laisser un message après la tonalité, puis appuyez sur #. Une fois que vous aurez entendu le bip, laissez un message et appuyez ensuite sur #. Vous devriez alors entendre "Merci pour votre message. Au revoir" et l'URL de l'enregistrement s'affichera sur votre console.

Conclusion

En quelques lignes de code, vous avez créé une application capable de recevoir un appel téléphonique, d'enregistrer un message et d'afficher l'URL de cet enregistrement.

Consultez notre documentation sur Vonage Developer pour en savoir plus sur les points suivants flux d'appels ou sur Objets de contrôle d'appel de Vonage. Voir nos Exemples de démarrage rapide de Vonage pour Java pour des exemples de code complets sur ce tutoriel et d'autres.

Partager:

https://a.storyblok.com/f/270183/150x150/a3d03a85fd/placeholder.svg
Steve CrowAnciens de Vonage

Steve est un mathématicien autoproclamé et le roi du sarcasme. Il aime aussi les lévriers, les puzzles tortueux et les jeux de société européens. Lorsqu'il ne parle pas de mathématiques à des personnes qui n'en font pas, ou de Java à des personnes qui n'en font pas, on peut le trouver en train de siroter un café et de bidouiller du code.