
Crea un plan de escape con la Voice API de Vonage y consigue una llamada fantasma
Tiempo de lectura: 8 minutos
Visión general
En este tutorial, le mostraré cómo utilizar la Voice API de Vonage para crear una manera sutil de excusarte de una situación en la que preferirías no estar. Puedes activar una llamada fantasma enviando un SMS a un número virtual.
El código de este proyecto proyecto está en GitHub.
Requisitos previos
Antes de empezar a construir el proyecto, asegúrese de que dispone de:
Node.js y npm instalados en su máquina.
Ngrok para crear un túnel seguro a su localhost.
Un editor de texto y conocimientos básicos de JavaScript.
Utilice Ngrok para exponer su servidor local
Ngrok expone sus webhooks locales en la Internet pública y le permite recibir llamadas externas en ellos:
Inicie ngrok con
ngrok http 3000.Anote la dirección de reenvío HTTPS (por ejemplo,
https://xyz.ngrok.com).
Configuración de la aplicación de Vonage
Después de registrarte en una Account de Vonage:
Crear una nueva Applications: Vaya a Tus Applications en el panel de control y activa las funciones de Voz y Mensajes.
Generar credenciales: Crear un par de claves pública/privada para la autenticación de la API; esto descargará un archivo
private.keyque se añadirá a la carpeta de nuestro proyecto.Vincular un número virtual: Adquiera y vincule un número virtual a su aplicación.
Configure Webhooks: Configure la URL pública de su servidor desde ngrok como punto final para los mensajes entrantes y los eventos. debería tener el siguiente aspecto: https://xyz.ngrok.com/inbound para los entrantes y https://xyz.ngrok.com/event para los eventos.
Messages Inbound and Status URLs
Implantación en el servidor
Configuración inicial del proyecto
Cree un nuevo directorio de proyecto: Abra su terminal y navegue hacia donde desea crear su nuevo proyecto. A continuación, utilice el siguiente comando para crear y cambiar a un nuevo directorio para su proyecto:
mkdir vonage-ghost-call && cd vonage-ghost-callInicializa un proyecto Node.js: En el directorio de tu nuevo proyecto, inicializa un proyecto Node.js. Esto creará un archivo
package.jsonque gestiona las dependencias y scripts de tu proyecto. Usa el comandonpm initpara especificar detalles o pulse Intro para aceptar los valores predeterminados. La bandera-yrellena automáticamente los valores por defecto sin preguntar por los detalles.npm init -yInstalar las dependencias: Ahora, es el momento de instalar las dependencias necesarias para el proyecto:
express: Un framework web para Node.js.dotenv: Se utiliza para cargar variables de entorno desde un.envarchivo.@vonage/server-sdk: El SDK del servidor de Vonage para Node.js.@vonage/voice: El SDK de la Voice API de Vonage.
Para instalarlos todos de una vez, ejecute el siguiente comando, que añadirá automáticamente estos paquetes a su archivo
package.jsony los añadirá al directorionode_modulesde tu proyecto.npm install express dotenv @vonage/server-sdk @vonage/voice
Crear el archivo de variables de entorno
Cree un archivo .env en su proyecto y añada el siguiente entorno que se encuentra en el fragmento de código siguiente.
En
VONAGE_KEYyVONAGE_SECRETse pueden encontrar en el Panel de Vonage.
Vonage DashboardLa dirección
VONAGE_APPLICATION_IDse encuentra en la aplicación que ha creado, que se encuentra en la sección Aplicaciones de Vonage.La dirección
FROM_IMPORTANT_FRIENDes el número de teléfono de la llamada.La dirección
ANSWER_URLdetermina cómo gestionar una llamada y a quién conectar la llamada. Para ello, ejecuta una OCNC que utiliza numerosas funciones de la Voice API; un valor de ejemplo podría serhttps://raw.githubusercontent.com/nexmo-community/ncco-examples/gh-pages/text-to-speech.json.La dirección
PRIVATE_KEY_PATHes la ruta del archivoprivate.keyque descargamos anteriormente cuando generamos el par de claves pública/privada para la autenticación de la API.
Implementar el código del lado del servidor
En su index.js archivoinicia el proyecto importando los módulos necesarios. Configurarás Express para manejar las solicitudes HTTP entrantes y configurarás el cliente de Vonage con las credenciales almacenadas en tus variables de entorno:
// Import dependencies
require('dotenv').config();
const express = require('express');
const { Vonage } = require('@vonage/server-sdk');
const app = express();
// Middleware for parsing incoming requests
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
// Initialize Vonage API client with environment variables
const vonage = new Vonage({
apiKey: process.env.VONAGE_KEY,
apiSecret: process.env.VONAGE_SECRET,
applicationId: process.env.VONAGE_APPLICATION_ID,
privateKey: process.env.PRIVATE_KEY_PATH
}); Gestión de mensajes SMS entrantes
El servidor está a la escucha de nuevos mensajes SMS. Cuando el servidor recibe un nuevo mensaje SMS, realiza una llamada saliente al número de teléfono que envió el mensaje SMS. Esto está contenido en la /inbound del servidor.
// Route to handle inbound SMS
app.post('/inbound', (req, res) => {
const { from } = req.body;
const requesterNumber = from;
// Function to trigger an outbound call
triggerOutboundCall(requesterNumber);
res.status(200).end();
});
// Server listens to a specified port
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`App listening on port ${PORT}`));
Llamada saliente sin OCN
Si necesita realizar una llamada saliente con un mensaje pregrabado, puede realizar la llamada sin especificar un OCN. Voice API le permite iniciar directamente una llamada saliente y reproducir un archivo de audio para el destinatario sin necesidad de configurar una lógica avanzada de control de llamadas.
function triggerOutboundCall(requesterNumber) {
const ANSWER_URL = process.env.ANSWER_URL; // URL to NCCO JSON
vonage.voice.createOutboundCall({
to: [{ type: type: 'phone', number: requesterNumber }],
from: { type: 'phone', number: process.env.FROM_IMPORTANT_FRIEND },
answer_url: [ANSWER_URL]
}, handleResponse);
}
function handleResponse(err, resp) {
if (err) console.error(err);
else console.log(resp);
}En esta configuración, ANSWER_URL apunta a un archivo JSON que dicta el flujo de llamadas. Por ejemplo:
[
{
"action": "talk",
"voiceName": "Amy",
"text": "There's an urgent need for you elsewhere. Please excuse yourself."
}
] Llamada saliente con la OCN
Para una experiencia de llamada más personalizada, NCCO ofrece una mayor flexibilidad. Esto es especialmente útil para los flujos de llamadas dinámicos.
async function makeCallWithNCCO(requesterNumber) {
const ncco = [
{
"action": "talk",
"voiceName": "Amy",
"text": "Hey, sorry to bother you, but I need your help; an urgent unforeseen circumstance has happened."
}
];
try {
const resp = await vonage.calls.create({
to: [{ type: 'phone', requesterNumber }],
from: { type: 'phone', number: process.env.FROM_IMPORTANT_FRIEND },
ncco
});
console.log(resp);
} catch (err) {
console.error(err);
}
}Esta función makeCallWithNCCO crea dinámicamente el flujo de llamadas basándose en las especificaciones NCCO.
En este ejemplo, la variable ncco contiene una matriz de acciones para controlar la llamada. La acción talk acción lee un mensaje cuando se contesta la llamada.
Pasos para ejecutar la aplicación
Asegúrese de que
.envtiene todas las credenciales.Inicie el servidor ejecutando el comando
node index.jscomando.Envía un SMS a tu número virtual para activar la llamada fantasma.
La aplicación realizará una llamada con el método que elijas: ¡prepárate para tener un motivo para salir de esa situación en la que no querías estar!
Conclusión
Hoy, has aprendido cómo evitar la conveniencia personal. Enviando un mensaje SMS, puedes desencadenar una llamada que proporcione una razón plausible para salir de esa situación en la que no quieres estar usando JavaScript, Node.js y la Voice API de Vonage.
El código de este proyecto proyecto está en GitHub.
Únase al debate y comparta sus ideas con nosotros en la Comunidad de desarrolladores de Vonage en Slack o síguenos en X, antes conocido como Twitter¡!