
Conectar llamadas utilizando la Voice API de Vonage y Node.js
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:
Node.js versión 20+ y npm instalado en su máquina.
Ngrok para crear un túnel seguro a su localhost.
Un editor de texto y conocimientos básicos de JavaScript.
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.
Purchase a phone number
Vaya a su Panel API
Vaya a CONSTRUIR Y GESTIONAR > Numbers > Comprar Numbers.
Elija los atributos necesarios y haga clic en Buscar
Pulse el botón Comprar junto al número que desee y valide su compra
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 3000ngrok (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.jsAsegú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
