https://a.storyblok.com/f/270183/1368x665/2e08dd8ba9/25may_dev-blog_call-connect_voice-api.png

Conectar llamadas utilizando la Voice API de Vonage y Node.js

Publicado el May 20, 2025

Tiempo de lectura: 5 minutos

Introducción

En este tutorial, estableceremos una llamada entre dos números de teléfono y conectaremos otro número de teléfono a la llamada actual utilizando la Voice API de Vonage con la ayuda de las NCCOs.

Especificaremos un elemento NCCO en el objeto de destino para controlar la llamada especificando una URL. Utilizaremos el elemento conectar y hablar NCCO acciones.

Puede encontrar el código completo del repositorio de GitHub aquí.

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.

Requisitos previos

Antes de empezar a construir el proyecto, asegúrese de que dispone de:

Configurar la aplicación de Vonage

Crear una aplicación de voz de Vonage

Crear una nueva Applications: Vaya a Tus Applications en el panel de control y active la función Voice.

Una explicación en vídeo de cómo crear una aplicación de Vonage.

Adquirir y vincular un número de teléfono virtual

Adquiera un número virtual para su aplicación.

Para comprar un número de teléfono virtual, vaya a su panel API y siga los pasos que se indican a continuación.

Steps on how to purchase a phone number from the dashboard, from selecting the number and confirming the selection.Purchase a phone number

  1. Vaya a su Panel API

  2. Vaya a CONSTRUIR Y GESTIONAR > Numbers > Comprar Numbers.

  3. Elija los atributos necesarios y haga clic en Buscar

  4. Pulse el botón Comprar junto al número que desee y valide su compra

  5. Para confirmar que ha adquirido el número virtual, vaya al menú de navegación de la izquierda, en CONSTRUIR Y GESTIONAR, haga clic en Numbers y, a continuación, en Sus Numbers.

Vincule un número virtual a su aplicación.

Capacidad de Voice API

Iniciar una instancia de ngrok Tunelling

Ngrok es una herramienta que te permite exponer tu aplicación a Internet; la necesitarás para leer los webhooks de eventos de la Voice API de Vonage. Si no has usado ngrok antes, puedes comenzar aquí. He añadido los pasos para ejecutar una instancia debajo de la imagen.

Ejecute el siguiente comando para iniciar una instancia de túnel ngrok.

ngrok http 3000
ngrok                                                                 (Ctrl+C to quit)
                                                                                                 
👋 Goodbye tunnels, hello Agent Endpoints: https://ngrok.com/r/aep                               
                                                                                                 
Session Status                online                                                             
Account                       plan name                                         
Version                       3.22.0                                                             
Region                        Europe (eu)                                                        
Latency                       31ms                                                               
Web Interface                 http://127.0.0.1:4040                                              
Forwarding                    https://xyz.ngrok.app -> http://localhost:8000            
                                                                                                 
Connections                   ttl     opn     rt1     rt5     p50     p90                        
                              14      0       0.03    0.03    6.10    7.79  

Configurar los Webhooks

De vuelta en el panel de la API de Vonage, en tus aplicaciones, activa la opción Voice en capacidades y establece la URL pública de tu servidor desde ngrok como el punto final para mensajes entrantes y eventos. Debería verse así https://xyz.ngrok.com/answer para mensajes entrantes y https://xyz.ngrok.com/webhooks/status para el estado. Si desea aprender más sobre webhooks, está en nuestra documentación de Vonage.

Instalar las dependencias

Es hora de abrir nuestro editor de texto, crear un nuevo proyecto e instalar las dependencias necesarias. Utilizaremos el Vonage Voice SDK para Node.js, Vonage JWT SDK para Node.js, Expressy Dotenv.

Instálalos todos de una vezy ejecute el siguiente comando para añadir automáticamente estos paquetes a su archivo package.json en y al directorio node_modules de tu proyecto.

npm install @vonage/voice @vonage/jwt express dotenv

Implementar el código del lado del servidor

En el archivo src/server.jsinicia el proyecto importando los módulos necesarios. Configurarás Express para gestionar las peticiones HTTP entrantes.

// src/server.js

// Import dependencies

require("dotenv").config();

const express = require("express");

const { NCCOBuilder, Talk, Connect } = require("@vonage/voice");

const { verifySignature } = require("@vonage/jwt");

// Create Express app

const app = express();

// Parse request body

app.use(express.json());

app.use(express.urlencoded({ extended: false })););

Variables de entorno

Vamos a crear un archivo .env en que contiene todas las variables de entorno que utilizaremos para esta aplicación web. Las he listado y explicado a continuación. Puedes aprender más sobre usando variables de entorno en Node.js.

# .env

VONAGE_API_SIGNATURE_SECRET= this is the secret used to sign the request that corresponds to the signature secret associated with the API key included in the JWT claims. You can identify your signature secret on the Dashboard settings.

SECOND_PHONE_NUMBER= The phone number that will receive the control of the call

VONAGE_VIRTUAL_NUMBER= Your Vonage virtual number linked to the Vonage Application

> NOTA: Cuando introduzca un número de teléfono, no utilice el signo + ni el 00; empiece por el prefijo del país, por ejemplo 16600700000.

Crear la función de verificación JWT

Crea una función JWT para verificar si la llamada entrante proviene realmente de Vonage. Más información sobre verificar la solicitud.

// src/server.js

const verifyJWT = (req) => {

  // Verify if the incoming call came from Vonage

  const jwtToken = req.headers.authorization.split(" ")[1];

  if(!verifySignature(jwtToken, process.env.VONAGE_API_SIGNATURE_SECRET)) {

    console.error("Unauthorized request");

    throw new Error('Not a voice API request');

  }

  console.log('JWT verified');

}

Crear el punto final para gestionar las llamadas entrantes

Crearemos un /answer endpoint, al que hemos añadido la URL en el Dashboard de Vonage. Una vez que se realiza una llamada al teléfono virtual de Vonage que hemos comprado y vinculado a la aplicación, verificamos el JWT y agregamos una acción Talk: "Hola, esta es una llamada de prueba. La llamada se desviará en breve".

// src/server.js

// Endpoint to handle inbound calls

app.all("/answer", (req, res) => {

 console.log("Received inbound call...");

 verifyJWT(req);

 // Build the NCCO for handling the call

 const builder = new NCCOBuilder();

 // Add the Talk action to greet the caller

 builder.addAction(

   new Talk("Hello, this is a test call. The call will be forwarded shortly.")

 );

Conectar la llamada actual a otro número

A continuación, añadimos una acción NCCO que conecta otro número de teléfono a la llamada, de modo que se realiza una llamada a otro número de teléfono que luego se conecta a esta llamada existente.

// src/server.js

// Add the Connect action to forward the call to another number

 builder.addAction(

   new Connect(

     {

       type: "phone",

       number: process.env.SECOND_PHONE_NUMBER,

     },

     process.env.VONAGE_VIRTUAL_NUMBER

   )

 );

 let ncco = builder.build(); // Build the NCCO

 // Respond with the NCCO to control the call

 res.json(ncco);

});

Gestionar eventos de llamadas de Vonage

De forma similar a /answer que hemos visto antes, también hemos agregado una /webhooks/event URL bajo las capacidades de voz en el Panel de Vonage; podemos registrar información sobre los eventos para comprobar, por ejemplo, si la llamada ha sido rechazada, el estado de la llamada, su UUID, etc.

// src/server.js

app.all("/webhooks/event", (req, res) => {

 console.log("Received Event:", req.body);

 const { status } = req.body;

 if (status === "rejected") {

   console.error("Call rejected. Check error code and message.");

 }

 // Ensure response is in JSON format

 res.status(200).json({ success: true }); // This should be a valid JSON response

});

Añadir un puerto receptor

Por último, añadimos la parte del código para que el servidor escuche en un puerto especificado; para este ejemplo, lo hice en el puerto 3000.

// Listen on port 3000

app.listen(3000, () => {

  console.log("App listening on port 3000");

});

Ejecute y pruebe su código

Es hora de probar las cosas. Comience por ejecutar el archivo del servidor desde su terminal o símbolo del sistema.

node src/server.js

Asegúrese de que su archivo archivo .env contiene todas las variables de entorno configuradas, ngrok se está ejecutando y las URL correctas están configuradas en el panel de Vonage.

Llama al número de teléfono virtual que has comprado y vinculado a la aplicación. El primer número de teléfono configurado recibe la llamada, que se conecta al segundo número de teléfono, y allí deberías recibir una llamada.

Conclusión

Obtenga más información sobre los objetos de control de llamadas en este video de un minuto de desarrollo y la Voice API de Vonage Documentación de NCCO.

¿Tienes alguna pregunta o algo que compartir? Únete a la conversación en Slack de la comunidad de Vonagey mantente actualizado con el Boletín para desarrolladoressíguenos en X (antes Twitter)suscríbete a nuestro canal de YouTube para ver tutoriales en video, y sigue la página de página para desarrolladores de Vonage en LinkedInun espacio para que los desarrolladores aprendan y se conecten con la comunidad. Mantente conectado, comparte tu progreso y entérate de las últimas noticias, consejos y eventos para desarrolladores.

Lecturas complementarias

Gestionar una llamada entrante con Python

Crea un plan de escape con la Voice API de Vonage y consigue una llamada fantasma

Compartir:

https://a.storyblok.com/f/270183/400x400/3f6b0c045f/amanda-cavallaro.png
Amanda CavallaroDefensor del Desarrollador