JavaScript

Crear un servidor webhook

Cuando se recibe una llamada entrante, Vonage realiza una solicitud a una URL de acceso público de tu elección, que denominamos answer_url. Necesitas crear un servidor webhook que sea capaz de recibir esta petición y devolver un OCN que contiene un connect que desviará la llamada al del usuario app. Esto se hace extrayendo el usuario de destino del archivo to y devolverlo en su respuesta.

Nuevo proyecto

Cree un nuevo directorio de proyecto en un destino de su elección y cambie a él:

mkdir vonage-tutorial cd vonage-tutorial

Dentro de la carpeta, inicializa un nuevo proyecto Node.js ejecutando este comando:

npm init -y

Añadir dependencias

A continuación, instale las dependencias necesarias:

npm install express localtunnel --save

Crear el archivo del servidor

Dentro de la carpeta del proyecto, cree un archivo llamado server.js y añadir el código como se muestra a continuación - por favor, asegúrese de reemplazar SUBDOMAIN con un valor real. El valor utilizado formará parte de las URL que establecerás como webhooks en el siguiente paso.

'use strict';

const subdomain = 'SUBDOMAIN';

const express = require('express')
const app = express();
app.use(express.json());

app.get('/voice/answer', (req, res) => {
  console.log('NCCO request:');
  console.log(`  - caller: ${req.query.from_user}`);
  console.log(`  - callee: ${req.query.to}`);
  console.log('---');
  let ncco = [{"action": "talk", "text": "No destination user - hanging up"}];
  const username = req.query.to;
  if (username) {
    ncco = [
      {
        "action": "talk",
        "text": "Connecting you to " + username
      },
      {
        "action": "connect",
        "endpoint": [
          {
            "type": "app",
            "user": username
          }
        ]
      }
    ]
  }
  res.json(ncco);
});

app.all('/voice/event', (req, res) => {
  console.log('EVENT:');
  console.dir(req.body);
  console.log('---');
  res.sendStatus(200);
});

if(subdomain == "SUBDOMAIN") {
  console.log('\n\t🚨🚨🚨 Please change the SUBDOMAIN value');
  return false;
}
app.listen(3000);

const localtunnel = require('localtunnel');
(async () => {
  const tunnel = await localtunnel({ 
      subdomain: subdomain, 
      port: 3000
    });
  console.log(`App available at: ${tunnel.url}`);
})();

NOTA: Recuerde sustituir SUBDOMAIN con una cadena aleatoria de su elección de entre 4 y 20 caracteres alfanuméricos (letras y números, no guiones bajos ni guiones).

Hay 2 partes en el código del servidor anterior:

El servidor Express

La primera parte crea un Express y lo hace disponible localmente en el puerto 3000. El servidor expone 2 rutas:

  1. /voice/answer es el answer_url que mencionamos antes. Devuelve un JSON que contiene el usuario de destino de la llamada.

    Obsérvese que el user se extrae del req.query.to que Vonage envía como parte de la solicitud. Luego, la NCCO creada dinámicamente reenvía la llamada al teléfono de destino utilizando un connect acción.

  2. La segunda, /voice/eventestablecerás como destino para que Vonage te notifique todo lo que ocurra durante la llamada - - a esto lo llamamos el event_url.

En localtunnel integración

La segunda parte del código del servidor anterior, expone la función Express para que sea accesible por los servidores de Vonage.

NOTA: localtunnel es una librería JavaScript que expone tu localhost al mundo para que puedas probarlo y compartirlo sin problemas. No hay necesidad de meterse con DNS o desplegar para que otros prueben sus cambios.

Iniciar el servidor

Ahora puede iniciar el servidor ejecutando, en el terminal, el siguiente comando:

node server.js

Aparecerá un aviso indicándole que el servidor ya está disponible:

App available at: https://SUBDOMAIN.loca.lt

Tenga a mano la ventana del terminal, ya que necesitará la URL en el siguiente paso.