https://d226lax1qjow5r.cloudfront.net/blog/blogposts/make-text-to-speech-phone-calls-node-red-dr/make-tts-calls-featured-1.png

Cómo hacer llamadas de texto a voz con Node-RED

Publicado el May 20, 2021

Tiempo de lectura: 11 minutos

Este es el cuarto artículo de la serie de tutoriales "Primeros pasos con Nexmo y Node-RED".

En los tutoriales anteriores has aprendido cómo enviar y recibir mensajes SMS de forma programática utilizando la API Nexmo y cómo manejar las llamadas entrantes. A continuación, aprenderás sobre las llamadas salientes y, al final de este artículo, habrás realizado tu primera llamada telefónica de texto a voz (TTS) con Node-RED.

Requisitos previos

Antes de empezar, necesitarás algunas cosas:

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.

This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.

Obtener sus credenciales

Para interactuar con la Voice API, tendrás que tener en cuenta un par de cosas. Una vez que haya creado una Account de Nexmo, vaya al panel de control para encontrar tu clave y secreto API. A continuación, necesitarás un número virtual habilitado para Voice. Ir a Numbers > Comprar Numbers para conseguir uno.

A screenshot example of buying a nexmo number in the dashboard

Configuración del editor Node-RED

En primer lugar, tendrá que instalar el tiempo de ejecución y el editor. Esto puede hacerse en tu máquina local, en un ordenador de placa única (por ejemplo, Raspberry Pi), o en una serie de opciones alojadas en la nube. Este ejemplo utilizará tu máquina local, así que una vez que hayas instalado Node-RED globalmente, simplemente escribe el siguiente comando en tu terminal para empezar.

node-red

A continuación, puede acceder al editor Node-RED dirigiendo su navegador a http://localhost:1880.

Una vez que tengas tu editor abierto, necesitarás instalar los nodos Nexmo. Puedes hacerlo en la Gestionar paleta buscando el paquete node-red-contrib-nexmo y haciendo clic en instalar.

Showing how to install Nexmo on Node-Red

Ahora debería ver todos los nodos Nexmo aparecer en el lado izquierdo de su pantalla, entre los otros nodos por defecto.

Haz una llamada de texto a voz con Node-RED

Creación de una aplicación Nexmo

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.

Dado que el objetivo final es realizar una llamada saliente, utilice el nodo createcall que realizará una llamada saliente utilizando la OCNC creada anteriormente.

Una vez que lo tenga en su espacio de trabajo, haga doble clic en el nodo createcall para abrir el editor de nodos. Junto al nodo 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 Create New Application.

KEY DESCRIPTION
Name Choose a name for your Voice Application, for example TTS call Node-RED.
API Key Your Nexmo API key, shown in your account overview.
API Secret Your Nexmo API secret, shown in your account overview.
Answer URL The URL that Nexmo makes a request to when handling inbound calls. Won't need one for this tutorial, so use http://example.com for now.
Event URL Nexmo will send call events (e.g. ringing, answered) to this URL. If you’d like to receive events about the progress of your call, make sure your server is exposed to the internet, then use YOUR_URL/event for this field.\

\

Si no, puede utilizar http://example.com, que responderá con 200 OK.

\

También puede anular este eventURL para un nodo específico createCall en sus propiedades.

Node-RED creará una nueva Nexmo Application en tu Account y rellenará los campos App ID y Private Key para que los guardes. Ahora puedes encontrar esta aplicación en tu Panel Nexmo bajo Voice > Tus Applications.

Showing how to create a voice application

Construir el Objeto de Control de Llamada Nexmo (NCCO)

Las llamadas de Nexmo se controlan mediante Objetos de control de llamadas Nexmotambién conocidos como NCCOs. Un NCCO define una lista de acciones a seguir cuando se gestiona una llamada. Hay muchas acciones diferentes disponibles, encuentra los nodos correspondientes bajo la paleta Nexmo en tu editor Node-RED o consulta la Referencia NCCO para obtener más información.

En este tutorial, utilizaremos la acción talk acción.

Una vez que la OCNC esté lista, se pasará al nodo createcall que se utilizará para realizar la llamada saliente. Este nodo createcall nodo toma 3 tipos de entrada para NCCO en el Answer campo: JSON, URL o msg.ncco. Dependiendo de cuál elija, hay 3 formas correspondientes de construir la NCCO, como sigue.

msg.ncco

Arrastre y suelte el nodo talk en su área de trabajo, haga doble clic sobre él para abrir las propiedades del nodo y establezca el campo Text{} con el mensaje que desea que se lea cuando se responda a la llamada. Fíjate en el signo {} junto a la etiqueta Text que indica que este valor puede establecerse dinámicamente utilizando la plantilla plantillas Mustache. También puede seleccionar un Voice Nameconsulte la Guía de texto a voz para consultar la lista completa de opciones.

A continuación, conecte talk al nodo createcall y en las propiedades del nodo createcall propiedades del nodo seleccione msg.ncco en el menú Answer del menú desplegable.

Example how to create the talk message ncco

JSON

Si prefieres escribir tu OCNC como JSON, en lugar de utilizar los nodos de acción, puedes hacerlo en el nodo createcall nodo. Abra las propiedades del nodo y seleccione JSON en el campo Answer campo. Despliega el editor JSON y pega el fragmento que aparece a continuación:

[
    {
        "action": "talk",
        "text": "This is a text to speech message from Nexmo"
    }
]

Asegúrese de que ha establecido talk como action, pero siéntase libre de personalizar el text.

Example on how to create talk json ncco

Respuesta URL

Alternativamente, puede servir la NCCO en un AnswerURL. En este caso, también tendrás que exponer tu servidor local a Internet.

Arrastre y suelte el nodo talk a su espacio de trabajo, luego conéctelo a un nodo de voice webhook nodo de entrada y un return NCCO nodo de salida. A continuación, en el nodo voice webhook seleccione GET como método y escriba algo como /answer en el campo URL de respuesta.

Por último, vaya a las propiedades del nodo talk y establezca el campo Text{} con el mensaje que desea que se lea cuando se responda a la llamada. Fíjate en el signo {} junto a la etiqueta Text que indica que este valor puede establecerse dinámicamente utilizando la plantilla plantillas Mustache.

También puede seleccionar un Voice NameConsulte la Guía de texto a voz para ver la lista completa de opciones.

Example showing how to create a talk answer url ncco

Exponer su servidor local a Internet

A continuación tendrás que exponer tu servidor local a Internet, para que Nexmo pueda acceder a él. Si está ejecutando Node-RED en un servidor web público en lugar de su máquina local, puede saltarse esta etapa.

De lo contrario, una forma conveniente de hacerlo es utilizando un servicio de tunelización como ngrok.

Descargue e instale ngroky ejecútelo en el terminal para iniciar un túnel en el puerto 1880.

./ngrok http 1880

Navegue hasta la URL mostrada, para encontrar su Editor Node-RED.

Por último, vaya a las createcall propiedades del nodo, seleccione URL en el menú Answer y rellene el campo con YOUR_URL/answer

Ngrok update answer call url

Realización de la llamada saliente

A continuación, echemos un vistazo a las propiedades del nodo createcall propiedades del nodo. Para realizar realmente la llamada saliente, hay que rellenar algunos datos más.

En primer lugar, seleccione Phone en el menú Endpoint del menú desplegable. Esto desviará la llamada a un número de teléfono, que puede especificar en el campo de texto situado junto a la etiqueta Number{} etiqueta.

Observe el signo {} que significa que Plantillas Mustache para estos campos. Puede introducir aquí un número de teléfono, o pasarlo dinámicamente utilizando un nodo inject y, en este caso, referenciarlo con {{msg.payload}}.

Pasando al siguiente paso, configure uno de sus números virtuales como From{} número.

Añade un nodo inject al flujo y conéctalo como entrada para createcall. En las propiedades del nodo, selecciona Number en el menú desplegable Payload y rellena el campo de texto situado junto a él con el número de teléfono al que deseas llamar en formato E.164. Por ejemplo 447401234567.

Para tener una idea más clara de lo que ocurre al realizar la llamada, conecte la salida de createcalla un nodo debug nodo.

Ahora pulse Despliegue y haz clic en el botón inject tu teléfono debería estar sonando en cualquier momento.

Making a TTS call with the talk NCCO

Opcional: Webhook de eventos

Si quieres recibir eventos sobre el progreso de tu llamada, también puedes configurar un webhook de eventos. En primer lugar, tendrás que configurar un controlador de eventos y, a continuación, exponer tu servidor local a Internet.

Configurar un manejador para el evento URL

Conectar un http nodo de entrada a un nodo http response así como a un nodo debug nodo, para que pueda ver su recibo de entrega en el área de depuración.

En el nodo http nodo de entrada, seleccione POST como Method y rellene el campo URL con algo como /event. El nodo http response debe tener 200 como Status codepero no te preocupes, este es también el valor por defecto.

Even handler TTS

Exponer su servidor local a Internet

A continuación tendrás que exponer tu servidor local a Internet, para que Nexmo pueda acceder a él. Si estás ejecutando Node-RED en un servidor web público, o has optado por servir la NCCO en un AnswerURL, puedes saltarte este paso.

De lo contrario, una forma conveniente de hacerlo es utilizando un servicio de tunelización como ngrok.

Descargue e instale ngroky ejecútelo en el terminal para iniciar un túnel en el puerto 1880.

./ngrok http 1880

Navegue hasta la URL mostrada, para encontrar su Editor Node-RED.

Ngrok nodered TTS Outbound call

Actualizar la URL del evento

Por último, abra las propiedades del nodo createcall propiedades del nodo y rellene el campo Event URL con YOUR_URL/event.

Update event url TTS

Visite Despliegue y haga clic en el botón inject su teléfono sonará en cualquier momento. Ahora también puedes seguir el flujo de tu llamada en la barra lateral de depuración.

¿Y ahora qué?

Compartir:

https://a.storyblok.com/f/270183/372x373/36054b72d0/julia-biro.png
Julia BiroDefensor del Desarrollador

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.