https://d226lax1qjow5r.cloudfront.net/blog/blogposts/interactive-voice-response-node-red-dr/ivr-featured-image.png

Cómo crear un IVR con Node-RED y las API de Nexmo

Publicado el May 18, 2021

Tiempo de lectura: 16 minutos

Un IVR o Respuesta de Voz Interactiva es un menú de opciones que se presenta a la persona que llama. La persona que llama navega por ese menú utilizando los números de su teclado para enviar señales DTMF (multifrecuencia bitono).

Cada opción del IVR puede dirigir la llamada por un camino diferente, por ejemplo desviándola a un destino concreto, reproduciendo una información grabada o incluso activando otro servicio, como un SMS.

Los IVR son el método de navegación fundamental de las Voice Call Applications. Pueden tener múltiples niveles, en los que la selección de una opción presenta al usuario más opciones, ¡y esto puede llegar hasta una profundidad infinita!

Para este tutorial vamos a crear un IVR de un solo nivel con tres rutas posibles:

  1. Desviar la llamada a un número específico

  2. Enviar la llamada al buzón de voz

  3. Enviar un SMS a la persona que llama

Dependencias

Requisitos previos

Antes de empezar, necesitarás algunas cosas:

  • Node.js y Node-RED instalados si estás 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.

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 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ás un número virtual habilitado para voz. Vaya a Numbers > Comprar Numbers para conseguir uno.

Animation showing purchasing a number in the 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-nexmo

  • Ngrok: node-red-contrib-ngrok

  • Correo 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 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 haga su servidor local 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, abra las propiedades del nodo ngrok propiedades del nodo y especifique el número de puerto (1880 para Nodo-RED) y la Región.

[
    {
        "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": ""
    }
]

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.

Using Ngrok with Nodered

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.

Creating a 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.

Linking a number to an application in Nexmo

Consejo extra: Utilice un comment para anotar el número Nexmo vinculado a tu aplicación, así lo tendrás siempre a mano.

Registro de eventos de llamada

Mientras se construyen flujos, es bastante útil ver los 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! Esto también ayudará a la depuración más adelante, si es necesario.

Conectar un http in a un nodo http response así como a un nodo debug nodo, para que puedas ver los eventos de llamada en la barra lateral 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 también el valor por defecto.

Creating an IVR event webhook

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

Definining an 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 correspondientes nodos verde oscuro bajo la paleta Nexmo en tu editor Node-RED o echa un vistazo a la Referencia NCCO para obtener más información.

En este caso, probablemente querrá saludar a la persona que llama y explicarle las diferentes rutas que podría tomar, y luego escuchar su opinión. Para ello, tendrá que añadir un nodo talk seguido de un nodo input nodo.

Añádalos a su espacio de trabajo y conéctelos entre los botones voice webhook y return ncco nodos.

Creating an IVR answer url

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.

En este tutorial implementaremos 3 rutas:

  1. conectarse con un ser humano

  2. dejar un mensaje de voz

  3. recibir un SMS con un enlace de reserva en línea, así que vamos a añadir el Text{}en consecuencia. Por ejemplo "Hola, se ha puesto en contacto con X, pulse 1 para conectarse, pulse 2 para dejar un mensaje o pulse 3 para reservar en línea".

También puede personalizar aún más la experiencia seleccionando un Voice Name o utilizando etiquetas SSML.

Asegúrese de marcar también la casilla Irrumpir que permite a la persona que llama enviar su entrada antes de que el texto haya terminado de leerse. Es muy útil en un IVR y evita que la gente tenga que escuchar una larga lista de opciones.

Defining a talk action for the IVR

input

A continuación, configuramos el nodo input nodo.

Una vez que el usuario ha introducido el número requerido de dígitos, éstos serán enviados como un nuevo webhook, por lo que necesitamos configurar esa ruta.

En el campo URL {} introduzca la dirección completa de su instancia de NodeRED seguida de /input1 (TU_URL/entrada1) y, a continuación, establezca Method en GET. Si más adelante creáramos un segundo nivel para nuestro IVR, tendríamos que enviar esa entrada a una dirección diferente, por ejemplo /input2.

Aprovechemos esta oportunidad para pasar el número de la persona que llama actualizando el campo URL {} a YOUR_URL/input1?from={{msg.call.from}}. Puede sernos útil más adelante si queremos mantener un registro de estos números.

Deje Submit on Hash sin marcar por ahora - esto haría que la entrada fuera enviada por el usuario pulsando la tecla # por ejemplo, para obtener un número de cuenta. Mantenga el valor por defecto de Time Outpero establezca Max Digits a 1. Esto asegura que el usuario sólo pueda pulsar una única tecla antes de que se envíe la entrada, dejándonos con un máximo de 9 opciones en nuestro menú.

Providing an input for the IVR Answer action

Manejar la entrada

Después de que la persona que llama ha enviado su entrada, tenemos que escucharlo en el nuevo webhook para el evento de entrada.
En primer lugar, tendremos que implementar este endpoint para capturar el valor de entrada y, a continuación, en función de este valor, continuar con la ruta elegida por la persona que llama.

Para tomar una decisión basada en el valor de entrada, utilizaremos un nodo switch y para cada una de las opciones construiremos la NCCO conectando nodos de acción, cerrados por un nodo de salida. return NCCO nodo de salida.

voice webhook

Empiece añadiendo un nodo voice webhook nodo a su espacio de trabajo. En las propiedades del nodo, seleccione POST como método y escriba /input en el campo URL de respuesta.

Si conectara un debug nodo después de él, tras finalizar y ejecutar el flujo, verías los parámetros devueltos a la /input URL:

Name Description
uuid The unique ID of the Call leg for the user initiating the input.
conversation_uuid The unique ID for this conversation.
timed_out Returns true if this input timed out based on the value of Time Out.
dtmf The numbers input by your caller, in order.

En nuestro caso de uso, estamos intentando obtener el valor dtmf ya que ésta es la ruta elegida por el autor de la llamada.

Echando un vistazo más de cerca a la barra lateral de depuración en la finalización, podemos ver que va a estar en la dtmf del objeto call anidado dentro del objeto msg por lo que podemos referenciarlo como {{msg.call.dtmf}} en los otros nodos de esta ruta.

switch

A continuación, separaremos las distintas rutas en función del valor {{msg.call.dtmf}} de la siguiente manera:

  1. está vacío -> vuelve a leer las opciones

  2. No es una de las opciones dadas (contiene 0, 4, 5, 6, 7, 8, 9) -> vuelve a leer las opciones

  3. = 1 -> conectar llamada

  4. = 2 -> enviar al buzón de voz

  5. = 3 -> enviar enlace de reserva en línea a través de SMS a la persona que llama.

Para ello, añada un nodo switch a su lienzo, en su editor de nodos establezca Property en {{msg.call.dtmf}}y defina reglas para los cinco casos mencionados.

Building an IVR switch

Ruta 1 y 2: Entrada no válida

Conecta las dos primeras salidas del switch en la entrada talk entrada del nodo. De este modo, si la persona que llama da una entrada no válida (no 1, 2 o 3), se repetirá el mensaje TTS inicial, enumerando las opciones disponibles.

Defining an invalid IVR input

Ruta 3: Conectar al llamante

Para desviar la llamada entrante, tenemos que conectarla a un nuevo punto final, en este caso, un número de teléfono. Para ello, necesitamos una connect acción. Opcionalmente, también podríamos añadir un nodo talk para notificar a la persona que llama que se está realizando la conexión.

Conectar un talk al nodo switch tercera salida del nodo, y luego sigue con un connect y un nodo return ncco nodo.

En primer lugar, notifiquemos a la persona que llama que está siendo conectada. En las talk propiedades del nodo, establezca Text {} a algo como Por favor, espere mientras le conectamos. o el mensaje que prefieras. Siéntete libre de personalizar esta experiencia seleccionando un Voice Name o utilizando [etiquetas SSML](/voice/voice-api/concepts/customizing-tts).

A continuación, abra el editor de nodos connect editor de nodos, seleccione Phone como Endpoint y 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.

Defining an IVR switch when connected

Si quieres echar un vistazo al producto acabado, llama a tu número Nexmo y pruébalo. Sólo asegúrate de no pulsar 2 o 3ya que aún no hemos implementado esas rutas.

También puede consultar nuestra entrada de blog [Desviar una llamada a través de un proxy de voz con Node-RED](https://developer.vonage.com/en/blog/forward-call-via-voice-proxy-node-red-dr) para obtener una explicación más detallada de esta ruta.

Ruta 4: Enviar al buzón de voz

El siguiente caso que vamos a tratar es cuando la persona que llama pulsa 2para dejar un mensaje de voz.
Si quieres construir el buzón de voz desde cero, dirígete a nuestro tutorial [Build Your Own Voicemail With Node-RED and the Nexmo Voice API](https://developer.vonage.com/en/blog/build-voicemail-node-red-voice-api-dr) para una guía paso a paso.

De lo contrario, importe desde el Portapapeles el siguiente archivo JSON a su Editor Node-RED:

[
    {
        "id": "1a10292a.0468d7",
        "type": "talk",
        "z": "5b66a8fe.c283c",
        "text": "Please leave your message at the tone.",
        "voicename": "",
        "bargein": false,
        "loop": "",
        "level": "",
        "x": 150,
        "y": 140,
        "wires": [
            [
                "9f6c7f15.1e4d48"
            ]
        ]
    },
    {
        "id": "9f6c7f15.1e4d48",
        "type": "record",
        "z": "5b66a8fe.c283c",
        "format": "mp3",
        "channel": "",
        "endonsilence": "3",
        "endonkey": "",
        "timeout": "",
        "beepstart": true,
        "eventurl": "YOUR_URL/record?from={{msg.call.from}}",
        "eventmethod": "post",
        "x": 360,
        "y": 140,
        "wires": [
            [
                "f5ae270b.51ba6"
            ]
        ]
    },
    {
        "id": "3062ef0c.58d478",
        "type": "http in",
        "z": "5b66a8fe.c283c",
        "name": "",
        "url": "/record",
        "method": "post",
        "upload": false,
        "swaggerDoc": "",
        "x": 230,
        "y": 300,
        "wires": [
            [
                "5b9e35c2.78611c",
                "a0e2a9ff.c666d8",
                "200966c.00b679a"
            ]
        ]
    },
    {
        "id": "200966c.00b679a",
        "type": "http response",
        "z": "5b66a8fe.c283c",
        "name": "",
        "statusCode": "",
        "headers": {},
        "x": 510,
        "y": 300,
        "wires": []
    },
    {
        "id": "5b9e35c2.78611c",
        "type": "getrecording",
        "z": "5b66a8fe.c283c",
        "creds": "",
        "filename": "recordings/{{msg.req.query.from}}_{{msg.payload.timestamp}}.mp3",
        "x": 460,
        "y": 360,
        "wires": [
            [
                "1c3d166.591956a"
            ]
        ]
    },
    {
        "id": "a0e2a9ff.c666d8",
        "type": "debug",
        "z": "5b66a8fe.c283c",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "x": 470,
        "y": 240,
        "wires": []
    },
    {
        "id": "a4651c0b.926068",
        "type": "e-mail",
        "z": "5b66a8fe.c283c",
        "server": "smtp.gmail.com",
        "port": "465",
        "secure": true,
        "tls": true,
        "name": "",
        "dname": "",
        "x": 930,
        "y": 360,
        "wires": []
    },
    {
        "id": "1c3d166.591956a",
        "type": "change",
        "z": "5b66a8fe.c283c",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "'Voicemail from ' & msg.req.query.from",
                "tot": "jsonata"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 720,
        "y": 360,
        "wires": [
            [
                "a4651c0b.926068"
            ]
        ]
    },
    {
        "id": "5a0c6126.26ff9",
        "type": "return ncco",
        "z": "5b66a8fe.c283c",
        "name": "",
        "x": 770,
        "y": 140,
        "wires": []
    },
    {
        "id": "f5ae270b.51ba6",
        "type": "talk",
        "z": "5b66a8fe.c283c",
        "text": "Thank you, good bye!",
        "voicename": "",
        "bargein": false,
        "loop": "",
        "level": "",
        "x": 550,
        "y": 140,
        "wires": [
            [
                "5a0c6126.26ff9"
            ]
        ]
    }
]

Hay un par de cosas que tendrás que hacer para que esto funcione.

  1. En primer lugar, conecte la switch 4ª salida del nodo al nodo talk nodo.

  2. A continuación, en las propiedades del nodo record propiedades del nodo sustituya TU_URL por la dirección en la que aloja el editor Node-RED (YOUR_URL/record?from={{msg.call.from}}).

  3. En el nodo Get Recording nodo bajo Credenciales de Nexmo seleccione su aplicación Voice en el menú desplegable.

  4. En el nodo email nodo, establezca To a la dirección de correo electrónico a la que desea enviar las grabaciones de voz y, a continuación, proporcione las credenciales de su cliente de correo electrónico en los campos Userid y Password y .

Visite Desplieguey tu buzón de voz estará listo y funcionando. ¡Pruébalo!

Defining an IVR voicemail

Ruta 5: Enlace por SMS

La última ruta que tenemos que construir es para el caso en que la persona que llama pulsa 3para recibir un enlace de reserva en línea por SMS.

En primer lugar, vamos a Importar desde el portapapeles el siguiente fragmento:

[
    {
        "id": "a69bd1e4.39586",
        "type": "sendsms",
        "z": "5b66a8fe.c283c",
        "creds": "",
        "to": "{{msg.call.from}}",
        "fr": "",
        "text": "This is supposed to be your link :)",
        "unicode": false,
        "x": 550,
        "y": 660,
        "wires": [
            [
                "3fd04afe.60abf6"
            ]
        ]
    },
    {
        "id": "3fd04afe.60abf6",
        "type": "debug",
        "z": "5b66a8fe.c283c",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "x": 750,
        "y": 660,
        "wires": []
    },
    {
        "id": "2af4d230.bb1bbe",
        "type": "talk",
        "z": "5b66a8fe.c283c",
        "text": "Your message is on its way!",
        "voicename": "",
        "bargein": false,
        "loop": "",
        "level": "",
        "x": 350,
        "y": 600,
        "wires": [
            [
                "a69bd1e4.39586",
                "6f1df801.8db2e8"
            ]
        ]
    },
    {
        "id": "6f1df801.8db2e8",
        "type": "return ncco",
        "z": "5b66a8fe.c283c",
        "name": "",
        "x": 610,
        "y": 600,
        "wires": []
    }
]

Después de añadirlo a su espacio de trabajo, conecte la última salida del nodo switch a la entrada del nodo talk del nodo.

defining the path for the IVR sms

A continuación, veamos con más detalle cada uno de los nodos de esta ruta.

talk

Utilizamos el nodo talk para informar a la persona que llama de que algo está sucediendo. Siéntete libre de ser creativo con [nombres de voz personalizados]((/voice/voice-api/guides/text-to-speech#voice-names)) o [etiquetas SSML]((/voice/voice-api/concepts/customizing-tts)), pero un simple "¡Su mensaje está en camino! también es suficiente.

return NCCO

Le sigue un nodo return NCCO para cerrar también esta ruta y enviar nuestro "conjunto de instrucciones" de vuelta a la API Nexmo. No hay configuración necesaria aquí.

Send SMS

El nodo Send SMS hace el trabajo pesado de esta ruta, ya que es el que envía el SMS.
Puedes configurar este nodo haciendo doble clic sobre él y rellenando los parámetros que aparecen a continuación. Encontrarás API KEY y API SECRET haciendo clic en el botón de edición situado junto a Nexmo Credentialsdespués de seleccionar Añadir nuevo nexmobasic en el menú desplegable.

KEY DESCRIPTION
API KEY Your Nexmo API key, shown in your [account overview](${CUSTOMER_DASHBOARD_URL}/getting-started-guide).
API SECRET Your Nexmo API secret, shown in your [account overview](${CUSTOMER_DASHBOARD_URL}/getting-started-guide).
TO The number you are sending the SMS to. In this case {{msg.call.from}}, the caller.
FROM The number or text shown on a handset when it displays your message. You can set a custom alphanumeric FROM to better represent your brand, if this feature is [supported in your country](https://help.nexmo.com/hc/en-us/articles/115011781468). Otherwise, add one of your Nexmo numbers.
TEXT The content of your message. Time to get creative :)

An IVR sms  node

El nodo debug es completamente opcional, pero resulta útil cuando quieres ver más detalles en la barra lateral de depuración.

Quizá quieras echar un vistazo a nuestra guía [Cómo enviar mensajes SMS con Node-RED](https://developer.vonage.com/en/blog/send-sms-messages-node-red-dr) para saber más sobre el uso de la SMS API.

¡Pruébelo!

¡Enhorabuena! Acaba de crear un Menú de Respuesta de Voz Interactiva totalmente funcional. Por fin ha llegado el momento de probarlo, así que ¡disfrútelo!

Wha tthe final IVR looks like

¿Y ahora qué?

Recursos

Pruebe con otro tutorial.

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.