https://a.storyblok.com/f/270183/1368x665/19c91eeff9/node-js_voiceproxy.png

Cómo construir un proxy de voz en Node.js usando Voice API

Publicado el November 28, 2024

Tiempo de lectura: 4 minutos

¿Alguna vez ha pedido comida a un servicio de reparto y ha tenido que dar al conductor acceso a su edificio? Puede que dude en compartir su número personal, pero quiere asegurarse de que la comida llega a su destino. Con las llamadas enmascaradas, tanto usted como el conductor pueden comunicarse sin revelar sus números de teléfono reales. El conductor ve un número temporal y usted también, lo que protege la privacidad de ambas partes.

Classified Ads App PreviewClassified Ads App Preview

En este tutorial, haremos precisamente eso y utilizaremos el servicio de Llamadas enmascaradas de Vonage. Implementaremos esta aplicación en Vonage Cloud Runtimeeliminando la necesidad de administrar servidores y alojarla por tu cuenta.

Requisitos previos

  • A Cuenta de desarrollador de Vonage

  • Un número de teléfono de Vonage. Puedes comprarlo usando el crédito gratuito que recibiste al crear una Account. Ve a tu Panel de API. En el panel izquierdo, en "Crear y administrar", ve a Numbers > Comprar Numbers. Busque un número de teléfono que cumpla sus requisitos (asegúrese de que "Voice" es una de las características) y haga clic en Comprar.

Por suerte, esto es muy fácil de hacer usando Voice API de Vonage porque tenemos una API de llamadas enmascaradas prediseñada en Code Hub que puedes implementar al instante. Veremos cómo tomar esta ruta.

Cómo crear e implantar su aplicación

Después de iniciar sesión en tu cuenta de desarrollador de Vonage, ve a la sección Llamadas enmascaradas avanzadas avanzadas. En la sección Implementar código haz clic en Desplegar nueva instancia.

Seleccione la Región y dé a su Instancia un nombre. Haga clic en Asignar un número y elige el número de teléfono de Vonage que deseas vincular a tu aplicación. Haz clic en Continuar. Tu pantalla ahora debería verse así:

Screenshot of Advanced Masked Calling application page with a new instance running with the buttons ‘Launch’, ‘View logs’ and ‘Delete’ next to them.Code Hub DeployedHaga clic en Inicie para ejecutar la aplicación. Se le pedirá que introduzca sus credenciales de usuario. Puede encontrar su clave y contraseña de API (su secreto de API) en su Panel de control de la API.

A continuación, verá su nueva aplicación en Instancias desplegadas. Haga clic en Iniciar para ejecutarla e ingresa tu clave y secreto de API de Vonage para ver la aplicación. Puedes ver la especificación de la API en la sección "API".

Una vez que hayas iniciado sesión, podrás ver la aplicación.

Screenshot of Masked Calling API browser applicationPhone Number Pairing

Aquí puedes añadir dos números de teléfono y establecer una fecha de caducidad para el tiempo que deseas que utilicen la función de enmascaramiento de llamadas. Haga clic en Añadiry aparecerán en la lista de números de teléfono emparejados. Si terminas añadiendo más números de teléfono emparejados y quieres encontrar un par específico, escribe el número de teléfono que buscas y haz clic en Busca en para encontrar su pareja.

Cuando cualquiera de estos números llame al número de Vonage vinculado a esta aplicación (puedes confirmar el número vinculado en la sección Configuración de la aplicación del navegador), el destinatario verá la llamada como proveniente del número de Vonage, no del número real de la persona que llama. Del mismo modo, la persona que llama marca el número de Vonage y tampoco sabrá el número real del destinatario.

Pruébelo

Suponiendo que haya indicado su propio número de teléfono como Número de teléfono 1usa tu teléfono personal para llamar al número de teléfono de Vonage vinculado a esta aplicación. La persona que posee Número de teléfono 2 debería recibir una llamada con el número de teléfono de Vonage en lugar de tu número real. ¡Inténtalo ahora!

Cómo personalizar el código

Si decides que quieres personalizar la aplicación prediseñada directamente en Vonage Cloud Runtime, ve a la sección Obtener código en la pestaña Llamadas enmascaradas avanzadas y haz clic en Crear un nuevo entorno de desarrollo. Seleccione su regiónAsigne a su espacio de trabajo un nombrey elige el número de teléfono de Vonage que deseas vincular a esta aplicación.

Screenshot of the Masked Calling API project on Vonage Cloud RuntimeMasked Calling READMEUna vez abierto el espacio de trabajo, verás que la aplicación de ejemplo está lista para funcionar. Sin embargo, puedes hacer tus propios cambios en el código directamente desde este IDE.

Para ejecutar el proyecto actualizado, abra el Terminal y ejecute este comando:

npm run

Una vez que esté listo para desplegarlo, ejecute este comando:

vcr deploy
Así es como funciona el flujo de llamadas:
  • El usuario añade números de teléfono (numberOne, numberTwo) y establece la caducidad (expiryTime) del emparejamiento en el sitio web (front-end).

  • pairNumbers crea el par y establece el vencimiento.

async function pairNumbers(numberOne, numberTwo, expiryTime, state) {
   try {
       await state.set(numberOne, numberTwo);
       await state.set(numberTwo, numberOne);

       const expirySeconds = getTimeInSeconds(expiryTime);
       await state.expire(numberOne, expirySeconds);
       await state.expire(numberTwo, expirySeconds);


       await state.mapSet('pairs', { [numberOne]: JSON.stringify({ numberTwo, expiryTime }) });
   } catch (e) {
       return false
   }
}
  • El punto final onCall punto final se activa después de esperar una llamada entrante al número de Vonage.

await voice.onCall('/onCall');
await voice.onCallEvent('/onCallEvent');
  • findPair recupera números emparejados.

async function findPair(number, state) {
   const numbersSet = new Set();
   let pairObj = await state.mapGetValue('pairs', number);


   if (!pairObj) {
       // The pair is stored using the other number
       let pairedNumber = await state.get(number);
       numbersSet.add(pairedNumber);
       pairObj = await state.mapGetValue('pairs', pairedNumber);
   }
  • Si el par existe y no ha caducado, conecte la llamada.

app.post('/onCall', async (req, res, next) => {
   try {
       const pairedNumber = await state.get(req.body.from);


       if (!pairedNumber) {
           res.json([{
               action: 'talk',
               text: 'This number has not been configured yet.'
           }]);
           return;
       }
  • Si no hay ningún par o un par caducado, se tratará en consecuencia (por ejemplo, la persona que llama escuchará el mensaje de error).

app.post('/onCall', async (req, res, next) => {
   try {
       const pairedNumber = await state.get(req.body.from);


       if (!pairedNumber) {
           res.json([{
               action: 'talk',
               text: 'This number has not been configured yet.'
           }]);
           return;
       }
  • Tras la expiración, el par se elimina automáticamente.

app.delete('/pairs', validateRequestMiddleware, async (req, res, next) => {
   try {
       const numberOne = req.body.number_one;
       const numberTwo = req.body.number_two;


       if (!numberOne || !numberTwo) {
           res.sendStatus(400);
           return;
       }


       await state.delete(numberOne);
       await state.delete(numberTwo);
       await state.mapDelete('pairs', [numberOne, numberTwo]);
       res.sendStatus(200);
   } catch (e) {
       next(e);
   }
});

Puedes incluir este código de trabajo en tu propia aplicación. Sin embargo, si decides no implementar tu proyecto en Vonage Cloud Runtime, debes tener en cuenta algunos aspectos. Consulte la documentación para implementar un enfoque que no utilice Vonage Cloud Runtime.

Únete a la fiesta

Y así de fácil, ¡has implementado un proxy de voz en Vonage Cloud Runtime! Puedes mejorar aún más la aplicación agregando tus propias funciones. Nuestra comunidad de desarrolladores está creciendo en Slacky nos encantaría que formes parte de ella. Si terminas probando este tutorial, me encantaría conocer tu opinión. No dudes en etiquetarme en Xantes conocido como Twitter, y seguir a nuestro equipo allí también. ¡Feliz programación!

Compartir:

https://a.storyblok.com/f/270183/384x384/b68093ec17/diana-pham.png
Diana PhamDefensor del Desarrollador

Diana es desarrolladora de Vonage. Le gusta comer ostras frescas.