Es posible que hayas oído o leído sobre la función Call Screening que Google lanzó para sus teléfonos Pixel en EE.UU. La idea es excelente: cuando recibes una llamada, el asistente virtual comienza a hablar, mientras tú ves esa conversación en forma de chat y puedes intervenir en cualquier momento. Esto es muy útil hoy en día, cuando casi , pero no deseas perder importantes llamadas de alguien que no está en tu lista de contactos. El único inconveniente es que esta funcionalidad está disponible solo en el teléfono Pixel y únicamente en EE.UU. Bueno, los obstáculos existen para ser superados, ¿verdad? Por eso decidimos explicar cómo crear una solución similar utilizando Voximplant y Dialogflow. Sigue leyendo.
Arquitectura
Propongo no perder tiempo en explicar cómo funcionan Voximplant y Dialogflow; si lo deseas, puedes encontrar información fácilmente en internet. Así que mejor hablemos sobre el concepto de nuestro Call Screening.
Supongamos que ya tienes un número de teléfono que usas diariamente y al que recibes llamadas importantes. En ese caso, necesitaremos un segundo número que se indicará en todas partes: en el correo, en la tarjeta de presentación, cuando llenas formularios en línea, etc. Este número estará conectado al sistema de procesamiento de lenguaje natural (en nuestro caso, Dialogflow) y redirigirá las llamadas a tu número principal, solo si así lo deseas. En forma de esquema, esto se vería así (la imagen es clickeable):
Entendiendo la arquitectura, podemos empezar con la implementación, pero con una salvedad: no vamos a crear una aplicación móvil para mostrar el diálogo entre Dialogflow y el llamante entrante; crearemos una simple aplicación webcon renderizado del diálogo para mostrar claramente el principio de funcionamiento de Call Screening. En esta aplicación habrá un botón Intervene, al pulsarlo, Voximplant conectará al llamante entrante con el destinatario marcado, si este último decide hablar por sí mismo.
Implementación
Inicia sesión en y crea una nueva aplicación, por ejemplo, screening:

Abre y compra un número que funcionará como intermediario:

A continuación, accede a la aplicación screening, en la sección «Números», pestaña «Disponibles». Aquí verás el número recién comprado. Conéctalo a la aplicación usando el botón «Adjuntar»; en la ventana que aparece, deja todos los valores por defecto y haz clic en «Adjuntar».
Dentro de la aplicación, ve a la pestaña «Escenarios» y crea el escenario myscreening; utilizaremos el código del artículo. . El código se modificará ligeramente, ya que necesitamos «ver» el diálogo entre el llamante y el asistente; todo el código se puede .
ATENCIÓN: necesitarás cambiar el valor de la variable server al nombre de tu servidor ngrok (los detalles sobre ngrok se explicarán más adelante). También debes insertar tus valores en la línea 31, donde your phone number es tu número principal (por ejemplo, el móvil personal), y voximplant number es el número que compraste recientemente.
outbound_call = VoxEngine.callPSTN(“YOUR PHONE NUMBER”, “VOXIMPLANT NUMBER”)La llamada callPSTN ocurrirá en el momento en que decidas intervenir en la conversación y hablar directamente con el abonado entrante.
Después de guardar el escenario, deberás vincularlo al número comprado. Para esto, aún dentro de tu aplicación, ve a la pestaña «Enrutamiento» para crear una nueva regla – botón «Nueva regla» en la esquina superior derecha. Indica un nombre (por ejemplo, allcalls), deja la máscara por defecto (.* – lo que significa que todas las llamadas entrantes serán tratadas con los escenarios seleccionados para esta regla) y especifica el escenario myscreening.

Guarda la regla.
Desde ahora, el número de teléfono está vinculado al escenario. Lo último que necesitas hacer es vincular el bot a la aplicación. Para esto, accede a la pestaña «Conector de Dialogflow», haz clic en el botón «Agregar agente de Dialogflow» en la esquina superior derecha y carga el archivo JSON de tu agente Dialogflow.

Si necesitas un agente para ejemplo/pruebas, puedes tomar el nuestro desde este enlace: . Pero no esperes mucho de él, es solo un ejemplo que puedes modificar como desees y compartir con confianza los resultados 🙂
Backend simple en NodeJS
Vamos a desplegar un backend sencillo en Node, por ejemplo, así:
Es una aplicación común que requiere solo dos comandos para iniciar:
npm install
node index.js
El servidor se iniciará en el puerto 3000 de su máquina, por lo que para conectarlo a la nube de Voximplant, utilizamos la herramienta ngrok. Cuando la instale , ejecútelo con el comando:
ngrok http 3000Verá el nombre de dominio que ngrok ha generado para su servidor local: cópielo y colóquelo en la variable server.
Cliente
La aplicación cliente parece un simple chat que puede.
Simplemente copie todos los archivos en un directorio de su servidor web y funcionará. En el archivo script.js, reemplace el valor de la variable server con el nombre de dominio de ngrok y el valor de la variable callee con el número que compró. Guarde el archivo y ejecute la aplicación en el navegador. Si todo está bien, verá la conexión WebSocket en la consola de desarrollador.
Demo
Puede ver la aplicación en acción en este video:

P. D. Si presiona el botón Intervene, la persona que llama será dirigida a mi número de teléfono, y si presiona Disconnect, ¿entonces...? Correcto, la llamada será desconectada.
Fuente: habr.com
