https://d226lax1qjow5r.cloudfront.net/blog/blogposts/forward-phone-call-voice-proxy-java-dr/voice-proxy-java-feature.png

Desviar una llamada telefónica mediante Voice Proxy con Java

Publicado el May 13, 2021

Tiempo de lectura: 10 minutos

Introducción

Hacer llamadas telefónicas es una necesidad para algunos de nosotros. Pero cada vez que das a conocer tu número de teléfono, lo expones a desconocidos. El equilibrio entre seguridad y comodidad es una línea muy fina. ¿Y si pudieras ocultar tu número de teléfono dándoles otro al que llamar?

Un proxy de voz es una técnica que permite proteger la información privada entre interlocutores enmascarando el número de teléfono del otro tras un número de teléfono intermediario.

En este tutorial, aprenderás a proteger los números de teléfono de la persona que llama y de la persona que recibe la llamada creando un proxy de voz. Cuando una persona llame a tu número de Vonage, la llamada será enrutada a tu teléfono personal. La persona que te llame sólo necesitará saber tu número de Vonage y, como beneficio adicional, tú tampoco sabrás su número de teléfono.

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 11 en este tutorial, pero cualquier JDK 8 y superior debería funcionar.

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.

Desviar una llamada telefónica mediante Voice Proxy con Java

Este tutorial le guiará a través de los siguientes pasos:

  1. Uso de Gradle para configurar un nuevo proyecto Java.

  2. Uso de la plataforma Spark para controlar la llamada.

  3. 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, crea un nuevo proyecto Java con los siguientes comandos, aceptando cualquiera de las indicaciones por defecto de Gradle:

mkdir forward-phone-call cd forward-phone-call gradle init --type=java-application

Gradle creará la clase App clase en la carpeta src/main/java/forward/phone/call carpeta

Dentro de esta clase hay una clase getGreeting y main . No necesitarás el método getGreeting así que siéntete libre de eliminarlo.

Su clase App debe tener este aspecto:

/*
 * This Java source file was generated by the Gradle 'init' task.
 */
package forward.phone.call;

public class App {
    public static void main(String[] args) {
        // Future Code Goes Here
    }
}

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.

Añadir las dependencias

Añada lo siguiente al bloque dependencies del archivo build.gradle archivo:

// Spark Framework
implementation 'com.sparkjava:spark-core:2.8.0'

// Vonage Java Client
implementation 'com.nexmo:client:4.2.1'

El bloque dependencies debe tener este aspecto:

dependencies {
    implementation 'com.sparkjava:spark-core:2.8.0'
    implementation 'com.nexmo:client:4.2.1'
 
    // Use JUnit test framework
    testImplementation 'junit:junit:4.12'
}

Definir la ruta de respuesta

Cuando se recibe 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.

Utilizarás la connect para desviar las llamadas entrantes de Vonage a tu teléfono. La acción connect se utiliza para conectar llamadas a puntos finales como números de teléfono.

Esta es la OCN resultante que creará su aplicación:

[
    {
        "endpoint": [
            {
                "number": "16165551234",
                "type": "phone"
            }
        ],
        "from": "16165559876",
        "action": "connect"
    }
]

Utilizará las etiquetas ConnectAction y PhoneEndpoint de la biblioteca de clientes Java de Vonage para crear la OCNC anterior.

Esto requerirá dos variables, el número de teléfono al que deseas conectar las llamadas y el número de Vonage con el que deseas realizar la llamada.

En primer lugar, defina el número de teléfono al que desea conectar las llamadas añadiendo la siguiente constante a la clase App clase. El número de teléfono por el que lo sustituya debe empezar por un código de país y no debe ir precedido de ningún prefijo +:

private static final String YOUR_SECOND_NUMBER = "16165551234";

Vonage envía el parámetro to a tu webhook que contiene el número de Vonage al que se llamó. Puedes usar este mismo número para llamarte agregándolo como parámetro from parámetro.

Ahora define la ruta de respuesta añadiendo el siguiente código al método main de la clase App resolviendo cualquier importación:

/*
* Route to answer incoming calls with an NCCO response.
*/
Route answerRoute = (req, res) -> {
    String vonageNumber = req.queryParams("to");

    ConnectAction connect = ConnectAction.builder()
            .endpoint(PhoneEndpoint.builder(YOUR_SECOND_NUMBER).build())
            .from(vonageNumber)
            .build();

    res.type("application/json");

    return new Ncco(connect).toJson();
};

Registrar la ruta de respuesta

Para utilizar la ruta de respuesta, necesitas configurar Spark. Su aplicación escuchará en el puerto 3000y la ruta se configurará en /webhooks/answer.

Añade lo siguiente al método main de la clase App clase:

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

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.

En primer lugar, busque un número disponible con capacidad de voz (en este ejemplo, utilizamos EE.UU. para el código de país):

vonage numbers:search US --features=VOICE

Elija un número de la lista generada e insértelo en el siguiente comando:

vonage numbers:buy [NUMBER] US

Tome nota del número que se le asigna. 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:

ngrok http 3000

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

vonage apps:create "Forward Call Demo" --voice_event_url=http://your-ngrok-forwarding-address/webhooks/events --voice_answer_url=http://your-ngrok-forwarding-address/webhooks/answer

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:

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

Pruebe su aplicación

Inicie su aplicación con el comando gradle run dentro de su directorio forward-phone-call directorio.

Busca a un amigo, colega o un segundo teléfono y llama a tu número de Vonage. Tu otro teléfono debería comenzar a sonar. Al contestar el teléfono, ambos estarán conectados como si se hubieran llamado directamente.

Conclusión

En unas pocas líneas de código, has creado una aplicación que puede desviar llamadas telefónicas desde tu número de Vonage a tu teléfono personal.

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. También puedes echar un vistazo a la sección Conectar una llamada entrante para ver este ejemplo y más.

Compartir:

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

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.