
Compartir:
Julia está comprometida con la capacitación de los desarrolladores mediante la creación de tutoriales, guías y recursos prácticos. Con experiencia en divulgación y educación, su objetivo es hacer que la tecnología sea más accesible y mejorar la experiencia general de los desarrolladores. A menudo se la puede encontrar en eventos de la comunidad local.
Desviar una llamada a través de un proxy de voz con Node-RED
Tiempo de lectura: 10 minutos
Nota: Es posible que algunas de las herramientas o métodos descritos en este artículo ya no reciban soporte o no estén actualizados. Para obtener contenido actualizado o soporte, consulta nuestras últimas publicaciones o contáctanos en el Slack de la comunidad de Vonage
En este tutorial vamos a utilizar el Nexmo Voice API para hacer llamadas privadas, mediante el desvío de una llamada a través de un proxy de voz, y como un bono adicional también vamos a añadir una función de grabación a la misma al final.
Si alguna vez te has preguntado cómo puedes ponerte en contacto con un conductor, un anfitrión de Airbnb o un mensajero sin saber su número, o simplemente te interesa hacer llamadas privadas, ¡síguenos y descubre cómo se hace!
Dependencias
Requisitos previos
Antes de empezar, necesitarás algunas cosas:
Node.js y Node-RED instalados, si está desarrollando localmente
Una forma de exponer tu servidor a Internet. Esto significa que está ejecutando una versión alojada de Node-RED, o utilizando un servicio de túnel como ngrok - ponte al día con esto Primeros pasos con Ngrok en Node-RED tutorial
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.
Obtener sus credenciales
Para utilizar los nodos Nexmo en Node-RED tendrás que proporcionar tus credenciales, así que es mejor que las tengas a mano. Vaya a su panel de control para encontrar tu clave y secreto API y anótalos.
A continuación, necesitará un número virtual habilitado para voz. Ir a Numbers > Comprar Numbers para conseguir uno.
Buy Number Nexmo Dashboard
Configuración del editor Node-RED
Acceda a su editor Node-RED apuntando su navegador a http://localhost:1880.
Una vez que tengas el editor abierto, necesitarás instalar los nodos Nexmo. Puede hacerlo en la Gestionar paleta buscando el paquete node-red-contrib-nexmo y haciendo clic en instalar.
Ahora debería ver todos los nodos Nexmo aparecer en la parte izquierda de su pantalla - en su paleta de nodos, entre otros nodos por defecto.
Exponga su servidor local a Internet
En caso de que no estés usando una versión alojada de Node-RED, la Voice API de Nexmo necesitará otra forma de acceder a tus puntos finales de webhook, así que vamos a haz que tu servidor local sea accesible a través de la Internet pública. Si está ejecutando Node-RED en un servidor web público en lugar de su máquina local, ya está todo listo para pasar a la sección Crear una Aplicación Nexmo Voice paso.
Una forma práctica de hacerlo es utilizando un servicio de tunelización como ngroky existe un nodo que puedes instalar directamente desde tu editor.
No dude en consultar también nuestro tutorial sobre Primeros pasos con Ngrok en Node-RED para obtener más información.
Una vez que haya instalado el nodo ngrok y reiniciado su editor, el nodo ngrok debería aparecer en su paleta de nodos. Toma las cadenas en o off para iniciar/detener el túnel, y muestra la dirección del host ngrok como msg.payload.
Importar de Portapapeles el siguiente fragmento, o intente crear esta ruta usted mismo.
[
{
"id": "faed0f7.1e524f",
"type": "inject",
"z": "5b8bbfc3.1a9f18",
"name": "",
"topic": "",
"payload": "on",
"payloadType": "str",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 190,
"y": 100,
"wires": [
[
"8a01baeb.6756d"
]
]
},
{
"id": "11051fa9.75bd1",
"type": "inject",
"z": "5b8bbfc3.1a9f18",
"name": "",
"topic": "",
"payload": "off",
"payloadType": "str",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 190,
"y": 160,
"wires": [
[
"8a01baeb.6756d"
]
]
},
{
"id": "8a01baeb.6756d",
"type": "ngrok",
"z": "5b8bbfc3.1a9f18",
"port": "1880",
"creds": "5a9e2b8c.173a2c",
"region": "ap",
"subdomain": "",
"name": "",
"x": 400,
"y": 140,
"wires": [
[
"93fd5675.743c1"
]
]
},
{
"id": "93fd5675.743c1",
"type": "debug",
"z": "5b8bbfc3.1a9f18",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 620,
"y": 140,
"wires": []
},
{
"id": "5a9e2b8c.173a2c",
"type": "ngrokauth",
"z": ""
}
]Llegados a este punto, tu editor debería tener un aspecto similar al siguiente:
ngrok path
Como último paso antes de pulsar Despliegueabra las propiedades del nodo ngrok y especifique el número de puerto (1880 para Nodo-RED) y la Región.
También puedes añadir tu authtoken para tu Account de ngrok si tienes uno. No te preocupes si no la tienes, omite este paso por ahora. El nodo advertirá que no está completamente configurado pero esto no es un problema.
ngrok properties
Visite Despliegue y pulse en inject del nodo, luego navega a la URL mostrada en el área de depuración (YOUR_URL para futuras referencias) para encontrar tu editor Node-RED en una dirección pública.
ngrok node-red
Crear una aplicación Nexmo Voice
Algunas de las API de Nexmo, incluida la Voice API, utilizan Nexmo Applications para mantener la información de seguridad y configuración necesaria para conectarse a los puntos finales de Nexmo.
En la paleta Nexmo Node-RED, varios nodos tienen la capacidad de crear estas Applications: getrecording, earmuff, mute, hangup, transfer, createcall, playaudio, playtts y playdtmf.
Arrastre cualquiera de estos nodos a su espacio de trabajo y haga doble clic sobre él para abrir las propiedades del nodo.
Junto al icono Nexmo Credentialsseleccione "Añadir nueva nexmovoiceapp..." en el menú desplegable y haga clic en el botón de edición. Rellene los siguientes datos y haga clic en Crear nueva aplicación.
| KEY | DESCRIPTION |
|---|---|
Name |
Choose a name for your Voice Application, for example "Nexmo Voice Application". |
API Key |
Your Nexmo API key, shown in your account overview. |
API Secret |
Your Nexmo API secret, shown in your account overview. |
Answer URL |
YOUR_URL/answer, you'll be hosting a Nexmo Call Control Object (NCCO) here. - more about this later on. |
Event URL |
YOUR_URL/event, you'll need to reference this when setting up the event handler. |
Node-RED creará entonces una nueva Nexmo Application en tu Account y rellenará los campos App ID y Private Key. Después de este paso, siéntase libre de eliminar el nodo Nexmo que utilizó, como un nexmovoiceapp que contiene todas las credenciales Nexmo que este flujo necesita.
create voice app
Establecer un Numbers para llamar
A continuación, tendrás que vincular tu número virtual a esta aplicación.
Encuentre la Aplicación Voice que acaba de crear en su Panel Nexmo navegando hasta Voice > Tus Applications.
Haga clic en el nombre de esta aplicación y, a continuación, en la sección Numbers haga clic en el botón Enlace situado junto al número virtual que ha alquilado anteriormente.
Si el número que desea utilizar ya está vinculado a otra aplicación, haga clic en Gestionar número y configúralo para desviar las llamadas entrantes a tu aplicación.
link number
Consejo extra: Utilice un comment para anotar el número Nexmo vinculado a tu aplicación, así lo tendrás siempre a mano.
Gestión de llamadas entrantes
Cuando recibes una llamada entrante, la Voice API de Nexmo realiza una petición GET solicitud a un punto final que usted defina, YOUR_URL/answery espera un conjunto de instrucciones sobre cómo gestionar la llamada.
Estas instrucciones vienen en forma de Objeto de Control de Llamada Nexmotambién conocidos como NCCOs. Hay un montón de acciones diferentes disponibles, encuentra los nodos correspondientes en la paleta Nexmo de tu editor Node-RED o echa un vistazo a la Referencia NCCO para obtener más información.
En este tutorial utilizaremos la acción connect para que cuando se reciba la llamada entrante, se conecte a un nuevo número de teléfono que especifiquemos.
Definir el punto final de Webhook para llamadas entrantes
Añadir un voice webhook y un nodo return ncco a su espacio de trabajo y conéctelos para definir un punto final de webhook.
A continuación, abra las propiedades del nodo voice webhook propiedades del nodo, seleccione GET como Method y escribe /answer en el campo URL y pulsa Despliegue.
inbound webhook
¡Genial! Ahora tienes un webhook que devuelve un NCCO a la API de Nexmo. En este punto no contiene ninguna acción, ¡así que vamos a añadir una!
Construir el objeto de control de llamadas Nexmo
Para desviar la llamada entrante, necesitamos conectarla a un nuevo endpoint. Para ello, necesitamos una connect acción.
Añade un nodo connect entre el nodo voice webhook y un return ncco nodos. Esto añadirá una acción de conexión a la OCNC.
Abra el connect editor de nodos, seleccione Phone como Endpointy escriba el número al que desea llamar en el campo Number {} campo.
Deje el campo From {} vacío para que el identificador de llamadas aparezca como desconocido, o rellénelo con uno de sus números virtuales Nexmo.

Para saber más sobre los demás parámetros y la connect acción, consulte la Referencia NCCO.
Registro de eventos de llamada
Por último, conecte un nodo http in a un nodo http response así como a un nodo debug para que puedas ver los eventos de llamada en el área de depuración.
En el nodo http nodo de entrada, seleccione POST como Method y rellene el campo URL con /event.
El nodo http response debe tener 200 como Status codepero no te preocupes, este es el valor por defecto también.
forward flow
Ahora llama a tu número Nexmo y sigue los eventos de tus llamadas en la barra lateral de depuración.
forward call events
Añadir una función de grabación
Al hacer llamadas telefónicas de negocios, a menudo es útil tener la opción de grabarlas también. Veamos cómo podemos transformar el flujo anterior para obtener una grabación de la conversación.
Actualizar la OCNC
En primer lugar, necesitaremos una record al objeto de control de llamadas de Nexmo.
La grabación comienza cuando se ejecuta la acción de grabación en la OCNC y finaliza cuando se cumple la condición sincrónica de la acción. Es decir End On Silence, timeOut o endOnKey.
Si no establece una condición sincrónica, la Voice API ejecuta inmediatamente la siguiente NCCO sin grabar.
En nuestro caso, esto significa que tenemos que añadir un nodo record antes del nodo connect y no End On Silence, Time Out o End On Key .
Añada un nodo record a tu flujo, entre los nodos voice webhook y connect .
Abra sus propiedades, rellene el campo URL {} con algo como YOUR_URL/recordseleccione POST como Method y elige un Format para el archivo de grabación. MP3. También puede marcar Beep Start para tener una indicación clara de cuándo comienza exactamente la grabación.
forwrad record node
Añadir manejador para el eventURL de grabación
A continuación, tenemos que añadir un controlador para la grabación eventURL -. YOUR_URL/record. De esta forma recibiremos el evento al finalizar la grabación, y podremos descargar dicha grabación a nuestra máquina.
Añade un http in y un nodo http response a tu espacio de trabajo y conéctalos. Considera también añadir un nodo debug para ver lo que llega a través del eventURL de grabación.
En el nodo http nodo de entrada, seleccione POST como Method y rellene el campo URL con /record.
El nodo http response debe tener 200 como Status codepero también es el valor por defecto.
forward record event
Descargar grabación
Una vez finalizada la grabación, Nexmo nos envía la URL de la grabación en el webhook del evento de grabación . El último paso es recuperar la grabación y descargarla.
Para este paso necesitaremos un nodo getrecording para obtener el audio de la grabación desde la URL proporcionada, y un nodo file para escribirlo en un archivo de nuestra máquina.
Añade un nodo getrecording nodo después del nodo /record http in y, en las propiedades del nodo, seleccione la aplicación de voz creada anteriormente en el menú desplegable Nexmo Credentials y proporciona una ruta absoluta como Filename {}.
forward get recording
Por último, añada un nodo file nodo después de getrecording. En su editor de nodos, asegúrese de que la opción ¿Crear directorio si no existe? esté marcada y seleccione sobrescribir o añadir a archivo en el menú Action desplegable. Deje el campo Filename vacío, ya que este valor se transferirá desde el nodo getrecording en {{msg.filename}}.
forward file node
¡Eso es todo! Consigue un segundo dispositivo o pídele a un amigo que llame a tu número Nexmo, mantén una conversación y, cuando hayas terminado, el archivo de grabación te estará esperando, ya domncargado en tu máquina. ¡Que aproveche!
forward recording download
¿Y ahora qué?
Lecturas complementarias
Pruebe con otro tutorial
Compartir:
Julia está comprometida con la capacitación de los desarrolladores mediante la creación de tutoriales, guías y recursos prácticos. Con experiencia en divulgación y educación, su objetivo es hacer que la tecnología sea más accesible y mejorar la experiencia general de los desarrolladores. A menudo se la puede encontrar en eventos de la comunidad local.
