
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.
Grabar un mensaje telefónico con Java
Tiempo de lectura: 10 minutos
Introducción
En un tutorial anterior, le mostramos cómo Recibir una llamada telefónica con Java y responder usando texto a voz. También podemos permitir a los usuarios dejar un mensaje y luego recuperar ese mensaje grabado.
Requisitos previos
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.
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.
Por último, necesitarás la CLI de Vonage instalada. La usarás para comprar un número de teléfono y configurar tu cuenta de Vonage para que apunte a tu nueva aplicación.
Grabar un mensaje telefónico 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ás Gradle para gestionar tus dependencias y para crear y ejecutar tu aplicación Java.
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.
Desde la línea de comandos, cree un nuevo proyecto Java con los siguientes comandos:
Uso del marco Spark para controlar la llamada
Utilizarás el framework Spark para recibir una llamada HTTP realizada por Vonage cuando tu número reciba una llamada, y para recibir la solicitud que Vonage envía después de que el mensaje haya sido grabado.
Añadir las dependencias
Añada lo siguiente al bloque dependencies del archivo build.gradle archivo:
// Spark Framework
implementation 'com.vonage:client:[6.1.0,7.0.0)'
//Vonage Client
implementation "com.sparkjava:spark-core:2.6.0"El bloque dependencies debe tener este aspecto:
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 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.
Definir la ruta de respuesta
Primero, definirás la ruta que se utilizará para responder la llamada. Cuando se reciba una llamada, Vonage enviará una solicitud a una URL de webhook predefinida. Espera recibir un objeto de control de llamadas de Vonage (NCCO) que contiene una lista de acciones a ejecutar.
Cuando se responda la llamada telefónica, tu aplicación le indicará a Vonage que ejecute tres acciones:
A
talkacción para saludar a la persona que llama e indicarle cómo dejar un mensaje.A
recordque ordenará a la Voice API que inicie la grabación.A
talkacción para agradecerles que hayan dejado un mensaje.
Esta es la OCN resultante que creará su aplicación:
[
{
"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"
}
]Añade lo siguiente al método main de la clase App asegurándote de resolver todas las importaciones:
/*
* 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();
};
La acción record tiene varias propiedades. Por ejemplo, puede definir la url del evento al que se enviará una solicitud cuando finalice la grabación, finalizar la grabación al pulsar una tecla específica y reproducir un pitido al inicio de la grabación.
Definir la ruta de grabaciones
La acción record tiene una propiedad llamada eventUrl que se utiliza para comunicar cuándo finaliza la grabación. El siguiente es un ejemplo de los parámetros de retorno enviados a la url del evento:
{
"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"
}El cliente Java de Vonage tiene una clase llamada RecordEvent que puede utilizarse para deserializar el JSON enviado a eventUrl. Por ahora, vas a enviar el archivo recording_url a la consola.
Añade lo siguiente al método main de la clase App resolviendo cualquier importación:
/*
* 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 "";
};
Registrar las rutas
Hasta este punto has definido dos rutas:
La primera ruta responderá a Vonage con una NCCO cuando Vonage responda la llamada entrante.
La segunda ruta registrará la URL de grabación cuando Vonage finalice la grabación del mensaje.
Para utilizar estas rutas, necesitamos configurar Spark. Tu aplicación escuchará en el puerto 3000y las rutas se configurarán en /webhooks/answer y /webhooks/recordings.
Añade lo siguiente al método main de la clase App clase:
Spark.port(3000);
Spark.get("/webhooks/answer", answerRoute);
Spark.post("/webhooks/recordings", recordingRoute); 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 comprar uno.
Primero busque un número disponible con Voice función
Una vez seleccionado el número que te gusta, puedes comprarlo con:
Tome nota del número que adquiere. 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.
Descargue 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 running in terminal with forwarding address http://99cad2de.ngrok.io
Configura tu cuenta de Vonage
Si no tienes una aplicación, puedes usar la CLI de Vonage para crear una usando tu dirección de reenvío ngrok:
También puede pasar su propia clave pública con --public_keyfile. Más instrucciones aquí
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 usar 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 record-a-message directorio.
Haz una llamada a tu número de Vonage y prueba tu aplicación. Escucharás el mensaje: "Por favor, deja un mensaje después del tono y luego presiona #. Nos comunicaremos contigo lo antes posible". Una vez que escuches el tono, deja un mensaje y luego presiona #. Deberá oír "Gracias por su mensaje. Adiós" y la URL de la grabación aparecerá en su consola.
Conclusión
En unas pocas líneas de código has creado una aplicación que puede recibir una llamada telefónica, grabar un mensaje y luego mostrar la URL de esa grabación.
Consulta nuestra documentación sobre Vonage Developer donde podrás obtener más información sobre flujo de llamadas o Objetos de control de llamadas de Vonage. Consulta nuestros Ejemplos de inicio rápido de Vonage para Java para ver ejemplos de código completos sobre este tutorial y 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.
