
Partager:
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.
Traiter les entrées au clavier (DTMF) avec Java
Temps de lecture : 10 minutes
Introduction
Dans un précédent tutoriel, nous vous avons montré comment créer une application qui peut Recevoir un appel téléphonique avec Java. Dans ce tutoriel, vous allez créer une application qui peut recevoir un appel téléphonique et répondre aux entrées de l'utilisateur en utilisant l Voice API de Vonage.
Conditions préalables
Pour suivre ce tutoriel, vous aurez besoin d'un Account Vonage. Inscrivez-vous maintenant si vous n'avez pas encore de compte.
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.
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.
Traiter les entrées utilisateur avec Java
Ce tutoriel vous guidera à travers les étapes suivantes :
Utilisation de Gradle pour créer un nouveau projet Java.
Utilisation de l'outil Spark pour contrôler l'appel.
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. À partir de la ligne de commande, créez un nouveau projet Java avec les commandes suivantes :
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.
Utilisation du cadre Spark pour contrôler l'appel
Vous utiliserez le logiciel Spark pour intercepter l'appel HTTP que Vonage utilise lorsque votre numéro reçoit un appel, et pour la requête que Vonage envoie lorsque l'entrée est reçue.
Ajouter les dépendances
Ajoutez ce qui suit à votre bloc dependencies dans votre fichier build.gradle fichier :
compile 'com.sparkjava:spark-core:2.7.2'
compile 'com.nexmo:client:4.0.1'Votre bloc dependencies devrait ressembler à ceci :
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'
} Configurer l'itinéraire de réponse
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.
Remplacer le contenu de la méthode main en résolvant les éventuels imports, par :
/*
* 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);
Ce code établira une route sur http://localhost:3000/webhooks/answer qui répondra de la manière suivante Objet de contrôle d'appel Nexmo (NCCO):
[
{
"text": "Hello please press any key to continue.",
"action": "talk"
},
{
"maxDigits": 1,
"action": "input",
"eventUrl": [
"http://localhost:3000/webhooks/dtmf"
]
}
]L'action de parler demandera à Vonage d'énoncer la propriété à l'appelant. text à l'appelant. L'action input demandera à Vonage de capturer un seul chiffre saisi par l'appelant et d'envoyer une requête POST à eventUrl avec cette information.
Un itinéraire sera également mis en place sur http://localhost:3000/webhooks/events que Vonage utilisera pour communiquer les changements d'état des appels.
Configuration de la route DTMF
Lorsque l'appelant appuie sur un chiffre de son appareil, un signal multifréquence à deux tons (DTMF) est créé. Vonage utilise ce signal DTMF pour déterminer quel ensemble de touches a été pressé. Une fois que cela se produit, Vonage envoie une requête POST à l'adresse eventUrl définie dans le InputNcco.
Voici un exemple de requête POST qui contient un corps JSON :
{
"dtmf": "5",
"timed_out": false,
"uuid": "some-uuid",
"conversation_uuid": "some-conversation",
"timestamp": "2018-08-14T19:59:02.528Z"
}Pour lire ces informations en Java, vous aurez besoin d'une classe qui convertira les propriétés JSON en propriétés Java. La bibliothèque Nexmo Java Client Library contient la classe InputEvent qui permet d'effectuer ce mappage.
Dans la main de la classe App ajoutez la route suivante sous la ligne 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();
};
Ensuite, enregistrez l'itinéraire en ajoutant ce qui suit à la fin de la méthode main à la fin de la méthode :
Spark.post("/webhooks/dtmf", inputRoute);Cet itinéraire répondra à la demande suivante NCCO:
[
{
"text": "You pressed 6, Goodbye.",
"action": "talk"
}
]où 6 est la propriété dtmf de la propriété du json envoyé à /webhooks/dtmf.
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 la fonction CLI de Vonage de Vonage pour en trouver un et l'acheter. Choisissez d'abord un numéro disponible à acheter :
Puis acheter l'un des Numbers disponibles :
Notez le numéro qui vous est attribué lors de l'achat. 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écharger ngrok et exécutez la commande suivante :
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
Configurer votre Account Vonage
Si vous n'avez pas d'application, vous pouvez utiliser le CLI de Vonage de Vonage pour en créer une à l'aide de votre ngrok pour en créer une :
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 relier votre numéro de téléphone et votre application :
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 handle-user-input dans votre répertoire.
Appelez votre numéro Vonage et testez votre Applications. Appuyez sur un chiffre du clavier de votre téléphone et vous entendrez le message suivant : "Vous avez appuyé sur le 6, au revoir", le 6 étant le chiffre que vous avez appuyé.
Conclusion
En quelques lignes de code, vous avez créé une application capable de recevoir un appel téléphonique, de capturer les données de l'utilisateur et d'y répondre. Expérimentez d'autres façons d'utiliser les données de l'utilisateur pour contrôler l'appel.
Consultez notre documentation sur Nexmo Developer où vous pourrez en apprendre davantage sur le flux d'appels ou les Objets de contrôle d'appel Nexmo. Voir nos Exemples de démarrage rapide Nexmo pour Java pour des exemples de code complets sur ce tutoriel et plus encore.
Partager:
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.
