
Compartir:
Steve se autoproclama matemático y rey de la sátira. También le gustan los galgos, los rompecabezas enrevesados y los juegos de mesa europeos. Cuando no está hablando de matemáticas con gente que no es matemática o de Java con gente que no es de Java, se le puede encontrar tomando café y hackeando código.
Manejar la entrada de teclado (DTMF) con Java
Tiempo de lectura: 10 minutos
Introducción
En un tutorial anterior, le mostramos cómo crear una aplicación que puede Recibir una llamada telefónica con Java. En este tutorial, crearás una aplicación que puede recibir una llamada telefónica y responder a la entrada del usuario utilizando la Voice API de Vonage.
Requisitos previos
Para realizar este tutorial, necesitarás una Account de Vonage. Regístrate ahora si aún no tienes una Account.
Utilizará Gradle para gestionar tus dependencias y ejecutar tu aplicación. Adicionalmente, necesitarás asegurarte de que tienes una copia del JDK instalada. Yo usaré JDK 8 en este tutorial.
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.
Manejar las entradas del usuario con Java
Este tutorial le guiará a través de los siguientes pasos:
Uso de Gradle para configurar un nuevo proyecto Java.
Uso de la plataforma Spark para controlar la llamada.
Comprar un número y configurar tu cuenta de Vonage para usar ese número con tu aplicación.
Uso de Gradle para crear un nuevo proyecto Java
Utilizará Gradle para gestionar tus dependencias y crear y ejecutar tu aplicación Java. Desde la línea de comandos, crea un nuevo proyecto Java con los siguientes comandos:
El comando gradle init --type java-application creará todas las carpetas que necesites, así como una clase de ejemplo en la que escribirás tu código.
Uso del marco Spark para controlar la llamada
Utilizará el módulo Spark para interceptar la llamada HTTP que Vonage utiliza cuando tu número recibe una llamada, y para la solicitud que Vonage envía cuando se recibe la entrada.
Añadir las dependencias
Añada lo siguiente a su bloque dependencies en el archivo build.gradle archivo:
compile 'com.sparkjava:spark-core:2.7.2'
compile 'com.nexmo:client:4.0.1'El bloque dependencies debe tener este aspecto:
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'
} Configurar la ruta de respuesta
Gradle creará la clase App clase en la carpeta src/main/java carpeta. Dentro de esta clase hay un getGreeting y un método main método. No necesitarás el método getGreeting así que siéntete libre de eliminarlo.
Sustituya el contenido del método main resolviendo cualquier importación, por
/*
* 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);
Este código creará una ruta en http://localhost:3000/webhooks/answer que responderá con lo siguiente Objeto de Control de Llamada Nexmo (NCCO):
[
{
"text": "Hello please press any key to continue.",
"action": "talk"
},
{
"maxDigits": 1,
"action": "input",
"eventUrl": [
"http://localhost:3000/webhooks/dtmf"
]
}
]La acción de hablar le indicará a Vonage que diga la text propiedad a la persona que llama. La acción de entrada le indicará a Vonage que capture un solo dígito que ingrese la persona que llama y que envíe una solicitud POST a eventUrl con esta información.
También se creará una ruta en http://localhost:3000/webhooks/events que Vonage utilizará para comunicar los cambios de estado de las llamadas.
Configurar la ruta DTMF
Cuando la persona que llama presiona un dígito en su dispositivo, se crea una señal de multifrecuencia de doble tono (DTMF). Vonage utiliza esta señal DTMF para determinar qué conjunto de teclas se presionaron. Una vez que esto sucede, Vonage envía una solicitud POST a la carpeta eventUrl definido en el archivo InputNcco.
He aquí un ejemplo de solicitud POST que contiene un cuerpo JSON:
{
"dtmf": "5",
"timed_out": false,
"uuid": "some-uuid",
"conversation_uuid": "some-conversation",
"timestamp": "2018-08-14T19:59:02.528Z"
}Para leer esta información en Java, necesitará una clase que mapee las propiedades JSON a propiedades Java. La Nexmo Java Client Library contiene la InputEvent para realizar este mapeo.
En el main de la clase App añada la siguiente ruta debajo de 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();
};
A continuación, registre la ruta añadiendo lo siguiente al final del método main método:
Spark.post("/webhooks/dtmf", inputRoute);Esta ruta responderá con lo siguiente OCN:
[
{
"text": "You pressed 6, Goodbye.",
"action": "talk"
}
]donde 6 es la propiedad dtmf propiedad del json enviado a /webhooks/dtmf.
Comprar un Numbers
Necesitarás un número de Vonage para recibir llamadas telefónicas. Si no tienes un número, puedes usar la CLI de Vonage para encontrar y luego comprar uno. Primero elige un número disponible para comprar:
Y luego compre uno de los Numbers disponibles:
Tome nota del número que se le asigna en el momento de la compra. Necesitará este número para vincular su solicitud y para las pruebas.
Cómo exponer su aplicación
Para enviar una solicitud HTTP a tu aplicación, Vonage necesita conocer la URL en la que se ejecuta tu aplicación.
En lugar de configurar su red local o alojar su aplicación en un servicio externo, puede utilizar ngrok para exponer tu aplicación a Internet de forma segura.
Descargar ngrok y ejecute el siguiente comando:
Tome nota de la dirección de reenvío, ya que la necesitará cuando configure su Account. En la siguiente imagen, la dirección de reenvío es http://99cad2de.ngrok.io.
screenshot of ngrok
Configura tu cuenta de Vonage
Si no tienes una aplicación, puedes utilizar la CLI de Vonage para crear una usando tu ngrok dirección de reenvío:
Tras ejecutar este comando, se le mostrará un identificador de aplicación. Por ejemplo: notreal-1111-2222-3333-appid. Necesitará este identificador de aplicación para vincular su número de teléfono a la aplicación.
Puedes utilizar la CLI de Vonage para vincular tu número de teléfono y aplicación:
Este comando le indica a Vonage que cree una nueva aplicación en tu Account. La aplicación enviará una solicitud a la primera URL cuando reciba una llamada telefónica. La aplicación enviará solicitudes a la segunda URL cuando cambie el estado de la llamada.
Pruebe su aplicación
Inicie su aplicación con el comando gradle run dentro de su directorio handle-user-input directorio.
Haz una llamada a tu número de Vonage y prueba tu aplicación. Escucharás el mensaje "Hola, presiona cualquier tecla para continuar", presiona un dígito en el teclado de tu teléfono y escucharás el mensaje "Presionaste 6, adiós", donde 6 es el número que presionaste.
Conclusión
En unas pocas líneas de código has creado una aplicación que puede recibir una llamada telefónica, capturar la entrada del usuario y responder con esa entrada. Experimenta con otras formas de utilizar la entrada del usuario para controlar la llamada.
Consulte nuestra documentación en Desarrollador Nexmo donde podrá obtener más información sobre flujo de llamadas o Objetos de control de llamadas Nexmo. Vea nuestros Ejemplos de inicio rápido de Nexmo para Java para ejemplos de código completos sobre este tutorial y mucho más.
Compartir:
Steve se autoproclama matemático y rey de la sátira. También le gustan los galgos, los rompecabezas enrevesados y los juegos de mesa europeos. Cuando no está hablando de matemáticas con gente que no es matemática o de Java con gente que no es de Java, se le puede encontrar tomando café y hackeando código.
