
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.
Crea tu propio buzón de voz con Node-RED y la Voice API de Nexmo
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
He evitado el buzón de voz durante la mayor parte de mi vida. La mayoría de las veces por una sencilla razón: nunca entendía el mensaje al 100%.
Me habría considerado afortunado si me hubieran dicho un número al que pudiera devolver la llamada, si el buzón de voz hubiera estado vacío o si hubieran pasado de su nombre de pila. En la mayoría de los casos, sin embargo, sería algo así:
"Hola Julia, soy Ted, estoy con didn't_really_get_the_name . Siento que no hayamos podido ponernos de acuerdo sobre esto; si eres como yo, estoy seguro de que estás siendo arrastrada en muchas direcciones diferentes y estás muy ocupada. Pero hazme un favor y, cuando oigas este mensaje, llámame y déjame un mensaje con lo que has decidido hacer sobre mi propuesta. En cualquier caso, me vendrá bien saberlo. Gracias de antemano por ello, y estaré esperando tu llamada..".
Ted... ¿Mosby? ¿Cilly? Tal vez, ¿Cassidy? Nunca lo sabremos.
Por suerte, crear tu propio buzón de voz en Node-RED es más rápido y sencillo que descifrar esos mensajes. Sigue leyendo para ver cómo funciona.
Qué va a construir
Este tutorial forma parte del curso "Introducción a Nexmo y Node-RED serie.
Estos artículos le muestran cómo empezar a utilizar las API de Nexmo, como SMS, Voice y Verify, así que no dude en consultarlos sobre la marcha o en caso de que desee añadir otra funcionalidad.
En este tutorial vamos a construir un servicio de correo de voz simple que permite a las personas que llaman para llegar a su número Nexmo y dejar un mensaje.
El mensaje de voz grabado se obtendrá de los servidores de Nexmo y se enviará a su dirección de correo electrónico.
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, tendrás que instalar los nodos Nexmoel nodo nodo Ngrok(si no está usando una versión alojada de Node-RED) y el nodo por defecto Nodo Email. Puede hacerlo en la paleta Gestionar paleta buscando los paquetes correspondientes y haciendo clic en instalar:
Nexmo:
node-red-contrib-nexmoNgrok:
node-red-contrib-ngrokCorreo electrónico:
node-red-node-email
Después de reiniciar Node-RED, debería ver que todos estos nodos aparecen 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 utilizando 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 [Crear una Aplicación Nexmo Voicepaso.
Una forma cómoda de hacerlo es utilizando un servicio de tunelización como ngroky existe un nodo para ello que acabas de añadir a tu paleta.
Toma las cuerdas en y off para iniciar/detener el túnel, y muestra la dirección del host ngrok como el archivo msg.payload. Echa un vistazo a nuestro tutorial sobre Primeros pasos con Ngrok en Node-RED para obtener más información.
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 si ya tienes una Account de ngrok. 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
Voice API de Nexmo utiliza Nexmo Applications para guardar la información de seguridad y configuración necesaria para conectarse a los terminales 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 a tu número virtual, 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.
En primer lugar, vamos a implementar este punto final.
Definir el punto final de Webhook para llamadas entrantes
Añadir un voice webhook y un nodo return ncco a tu espacio de trabajo y conéctalos 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 instrucción, ¡así que vamos a añadir algunas!
Construir el Objeto de Control de Llamada Nexmo (NCCO)
Las instrucciones esperadas por la API Nexmo vienen en forma de un Objeto de Control de Llamada Nexmotambién conocido como NCCO.
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 caso, probablemente querrás saludar a la persona que llama y luego empezar a grabar el mensaje. Para ello, tendrá que añadir un nodo talk seguido de un nodo record nodo.
Añádalos a su espacio de trabajo y conéctelos entre los botones voice webhook y return ncco nodos.
talk
A continuación, abra el editor de nodos talk y establezca el campo Text{} con el mensaje que quieres que se lea a la persona que llama. Por ejemplo: "¡Hola! Ha llamado a X, por favor deje un mensaje".
Si sientes nostalgia de los mensajes de voz de la vieja escuela, ya estás listo. Por otro lado, también puedes personalizar la experiencia seleccionando un Voice Name o utilizando las etiquetas etiquetas SSMLpara que suene más como una persona y menos como un robot.
record
En las record propiedades del nodo rellene el campo URL {} con YOUR_URL/record. Este va a ser el eventURL al que Nexmo devolverá un conjunto de parámetros, una vez finalizada la grabación.
Si echa un vistazo a la Referencia NCCO pronto se dará cuenta de que el número de llamada no es uno de ellos.
Afortunadamente, podemos obtener el número de teléfono de la persona que llama de la URL de respuesta y pasarlo como parámetro de consulta.
Actualice el campo URL {} campo a YOUR_URL/record?from={{msg.call.from}}. De esta forma podremos acceder al valor from a través del eventURL del registro haciendo referencia a msg.req.query.from.
Antes de pasar al siguiente paso, asegúrese de haber seleccionado POST como Method, MP3 como Format y que ha establecido un valor para End On Silence (por ejemplo, 3).
voicemail record
Si desea ver la OCN generada, vaya a YOUR_URL/answer. Verá un conjunto de acciones, o "instrucciones", en formato JSON que Nexmo utilizará para controlar el flujo de llamadas.
¿Listo para dar un paso más? Marque su número Nexmo para verlo en acción.
voicemail NCCO
Buscar grabación
En este punto, la persona que llama es recibida por un mensaje TTS seguido de un pitido y su mensaje queda grabado. El siguiente paso es recuperar la grabación de los servidores de Nexmo.
Registrar eventURL
En primer lugar, vamos a definir el eventURL de grabación donde esperamos que se envíen los parámetros de grabación al finalizar.
Añada un nodo http in nodo a su espacio de trabajo y, a continuación, conecte un nodo http response nodo, así como a un nodo debug nodo a él. De esta manera puedes empezar a registrar eventos en el área de depuración y obtener un poco más de información sobre lo que realmente está pasando.
Abra las http in propiedades del nodo, seleccione POST como Method y rellene el campo URL con /record.
El nodo http response debe tener 200 como Status codepero no te preocupes, este es el valor por defecto también.
Aunque los datos de grabación están llegando como msg.payloadseguimos teniendo el valor from valor almacenado en msg.req.query.from. Asegúrese de seleccionar complete msg object en el debug como Output.
Obtener grabación
Para recuperar la grabación, utilizaremos el nodo getrecording Nexmo.
Añade uno a tu lienzo, conéctalo al nodo /record http in y abre su editor de nodos.
Verá dos campos:
Nexmo Credentials- seleccione en el menú desplegable la aplicación de voz que creó anteriormente.Filename {}- Observe el signo{}en la etiqueta, lo que significa que este campo admite la plantilla plantillas Mustache y el valor puede establecerse dinámicamente. Esto nos da la oportunidad perfecta para incluir el número de la persona que llama y una marca de tiempo en el nombre del archivo, así que vamos a establecerlo enrecordings/{{msg.req.query.from}}_{{msg.payload.timestamp}}.mp3.

Nota, este nodo no escribe el audio en el disco, el campo filename está ahí para establecer el valor de msg.filename. A continuación, hay un par de rutas diferentes que puede tomar: subir el audio a su propio servidor, seguir con un nodo file y descargarlo a su ordenador, o utilizar un nodo e-mail y enviártelo a ti mismo.
Enviar grabación a una dirección de correo electrónico
Para este ejemplo utilizaremos el nodo por defecto Node-RED e-mail por defecto, que envía el msg.payload como un correo electrónico, con un asunto de msg.topic.
En nuestro caso, msg.payload es un búfer binario (la grabación) y se convertirá en un archivo adjunto. Si desea añadir un cuerpo a su correo electrónico configúrelo como msg.description utilizando un change en el flujo antes del nodo e-mail nodo.
El nombre del archivo será msg.filenameque ya hemos especificado.
Conectar un change nodo en getrecordingseguido de un nodo e-mail nodo. Encontrarás ambos en tu paleta de nodos, change en función y e-mail en social. A continuación, vamos a ver cómo configurarlos.
change
Abra las change y defina dos reglas utilizando la propiedad establecer .
En primer lugar, establezcamos msg.topicel asunto del correo electrónico.
En el campo superior, sustituya payload por topicy seleccione expression en el menú desplegable to que utiliza el formato JSONata de consulta y expresión. Para incluir el número de la persona que llama en el asunto del correo electrónico, rellene este campo con algo como 'Voicemail from ' & msg.req.query.from.
Haga clic en el botón añadir para definir una segunda regla. Esta vez estableceremos el valor de msg.descriptionel cuerpo del correo electrónico. Puedes utilizar una expresión de nuevo, o simplemente una cadena simple como "¡Eh, tienes buzón de voz!".
voicemail change
Pulse Hecho una vez que hayas terminado, y pasemos al e-mail ¡nodo!
e-mail
En el e-mail editor de nodos hay tres campos que debe rellenar: To - la dirección de correo electrónico del destinatario Userid y Password - sus datos de acceso al correo electrónico.
voicemail email
Una vez que haya terminado, pulse Hecho y Despliegue. Tu buzón de voz está listo y funcionando.
Registro de eventos de llamada
¡Una cosa más antes de irte! ¡Es bastante útil ver tus eventos de llamada en el área de depuración y tener una mejor comprensión de lo que realmente está pasando, así que vamos a añadir un webhook de eventos!
Conectar un http in a un nodo http response así como a un nodo debug nodo, para que pueda ver sus eventos de llamada en el área de depuración.
En el nodo http in nodo, 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.
voicemail flow
Ahora llama a tu número Nexmo y sigue los eventos de tus llamadas en la barra lateral de depuración.
¡Pruébelo!
¡Et voilà! Ha creado su propio servicio de buzón de voz y, con un poco de suerte, nunca más tendrá que soportar otro molesto buzón de voz. Llame a su número Nexmo y en breve recibirá un correo electrónico.

¿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.
