¿Está Watson? Que se ponga
¿Qué hay detrás de este pequeño homenaje a Gila? En el momento que empezamos a desarrollar bots, agentes con los que somos capaces de interactuar de manera inteligente, que guardan el contexto de la conversación, la primera pregunta que nos asalta es ¿y no puedo llamarle por teléfono y que me atienda? Imaginemos que somos capaces de llamar a uno como el que ha publicado Ana hace unos días en el blog, sobre el asistente de cocina.
¿Qué necesitamos para esto? Lo primero, un número de teléfono al que llamar, lo segundo, un sistema que reciba la llamada, maneje la voz (escuchando y hablando) siendo capaz de llamar a nuestro entorno, y tercero un bot que escuche.
Vamos a centrarnos en la parte del manejo de la voz, y para esto utilizaremos IBM Voice Gateway, que nos va a solucionar la parte complicada.
Así pues, empezamos por instalarnos el VGW, y podemos elegir entre dos modelos de despliegue:
En Cloud, desplegándolo en Kubernetes en los servicios de contenedores de Bluemix (IBM® Bluemix® Container Service)
O en tus propios motores de Docker en una instalación on-premises.
Elegimos la de cloud, por sencillez, y para conseguir un despliegue homogéneo de toda la solución en el mismo entorno. ¿Qué nos hace falta?
- Una cuenta de Bluemix (ya la tenemos del ejercicio de Ana, si no, vamos bluemix.net y nos creamos una)
- Aprovisionar un servicio de Speech to text y otro de Text to Speech (los encontramos en el catálogo, dentro de los servicios de Watson)
- Recordar el servicio Conversation que creamos para el ejercicio de cocina (o creamos uno nuevo, o utilizamos el que viene de ejemplo)
Todo esto lo encontramos en el catálogo de Buemix:
¡Empezamos!
Desplegar Voice Gateway en K8S se resume en cinco pasos:
- Nos descargamos el repositorio de GitHub.
- Crear un cluster de Kubernetes en Bluemix.
- Instalar una serie de interfaces de línea de comandos (CLI), si no los tienes instalados.
- Aplicar unas políticas de red.
- Modificar el fichero de configuración con nuestros parámetros y credenciales.
1.- DESCARGA
En clone or Download, descargamos el zip.
2.- Crear el cluster de Kubernetes
En el catálogo de bluemix:
Con la versión lite, podemos desplegar:
Se quedará un tiempo desplegándose:
Navegando en Overview:
y en WorkerNodes:
3.- Command Line Interfaces – CLIs
Primero, el Bluemix CLI
Para verificar si lo tenemos instalado ejecutamos “bx — v”
bx –v
bx version 0.5.6+5b886b44-2017-08-14T08:50:13+00:00
Segundo, el plugin para el servicio de Contenedores
bx plugin install container-service -r Bluemix
Para verificarlo, “bx plugin list”
bx plugin list
Listando los plugins instalador…
Nombre de plugin | Versión |
IBM-Containers | 1.0.0 |
Tercero, Kubernetes CLI, descargarlo de:
Para OS y Linux, después de instalarlo, ejecutar:
mv /<path_to_file>/kubectl/usr/local/bin/kubectlchmod +x /usr/local/bin/kubectl
En el caso de Windows, desplegarlo en el mismo directorio que Bluemix CLI
Ahora podemos hacer login en Bluemix, por ejemplo en Frankfurt, donde tengo desplegados los servicios de Watson:
bx login -a api.eu-de.bluemix.net
Inicializarlo y listar el cluster que hemos creado, con “bx cs init” y “bx cs clusters”.
bx cs init
Using default API endpoint: https://eu-central.containers.bluemix.net
bx cs clusters
Name | ID | State | Created | Workers | Datacenter |
Mycluster | e9312fdf0cd14bf7808112bcb0691a** | normal | 2017-09-18T08:28:02+0000 | 1 | par01 |
Cuarto, Instalar y configurar Calico CLI:
Descargar Calico
La versión correspondiente para vuestro sistema operativo.
Se mueve al directorio usr/local/bin
mv /<path_to_file>/calicoctl /usr/local/bin/calicoctl
y se hace ejecutable:
chmod +x /usr/local/bin/calicoctl
y se verifica con “calicoctl versión”
calicoctl version
Client Version: | V1.5.0-rc1 |
Build date: | 2017-08-16T02:21:09+0000 |
Gut commit: | 118b8ae1 |
A partir de aquí, configuramos el fichero calicoctl.cfg, con los parámetros que sacamos del punto 2 que encontramos aquí.
Este ejemplo es el mío:
apiVersion: v1
kind: calicoApiConfig
metadata:
spec:
etcdEndpoints: https://169.50.XX.XX:32175
etcdKeyFile: /Users/alejandrodelgado/.bluemix/plugins/container-service/clusters/vozcluster-admin/admin-key.pem
etcdCertFile: /Users/alejandrodelgado/.bluemix/plugins/container-service/clusters/vozcluster-admin/admin.pem
etcdCACertFile: /Users/alejandrodelgado/.bluemix/plugins/container-service/clusters/vozcluster-admin/ca-par01-vozcluster.pem
4.- Aplicar las políticas de red
Cambiamos al directorio donde nos hemos descargado el Gateway desde github, y aplicamos las políticas
cd sample.voice.gateway/kubernetes/bluemixcalicoctl apply -f calico.yaml
5.- Modificar el fichero de despliegue con nuestras credenciales
Editamos el fichero deployment.json.
Y cambiamos especialmente, SpeechToText, las credenciales, la url que es la de Frankfurt, el modelo de STT la voz que queremos utilizar:
«name»: «WATSON_STT_USERNAME»,
«value»: «3e9ecef8-c2b5-4c57-XXXX-b3f40d4d87b4»
}, {
«name»: «WATSON_STT_PASSWORD»,
«value»: «eqI0FdrRzXXX»
}, {
«name»: «WATSON_STT_URL»,
«value»: «https://stream-fra.watsonplatform.net/speech-to-text/api»
}, {
«name» : «WATSON_STT_MODEL»,
«value» : «es-ES_NarrowbandModel»
TextToSpeech, lo mismo, la url credenciales, y que voz queremos usar:
«name»: «WATSON_TTS_USERNAME»,
«value»: «d11fee5d-2f3c-4ca4-XXXX-0c5e38a7453f»
}, {
«name»: «WATSON_TTS_PASSWORD»,
«value»: «aycX2fXXXXAf»
}, {
«name»: «WATSON_TTS_VOICE»,
«value»: «es-ES_LauraVoice»
}, {
«name»: «WATSON_TTS_URL»,
«value»: «https://stream-fra.watsonplatform.net/text-to-speech/api»
Y por último conversation, credenciales y URL:
«name»: «WATSON_CONVERSATION_WORKSPACE_ID»,
«value»: «e82e8cf9-daf4-XXXX-b95f-a3cb619b6da7»
}, {
«name»: «WATSON_CONVERSATION_USERNAME»,
«value»: «e8750272-e210-XXXX-833e-7674a62323fe»
}, {
«name»: «WATSON_CONVERSATION_PASSWORD»,
«value»: «u0YkFtxkXX03»
}, {
«name»: «WATSON_CONVERSATION_URL»,
«value»: «https://gateway-fra.watsonplatform.net/conversation/api»
¡y ya estamos listos para desplegar!
kubectl create -f deploy.json
¿Y cómo lo probamos?
Nos creamos una cuenta de prueba en Twilio.
Creamos un SIP Trunk:
Y sólo hay que crear un “origination” para conectarlo a nuestro voicegateway (puede no ser muy intuitivo):
Ponemos sip:cualquiercosa@IPdeVGW:5060;transport=tcp
Ahora compramos un número de teléfono:
Y se nos queda de esta manera:
¡¡¡¡y ya podemos llamar por teléfono!!!!
Llama a 954 05 90 13 y podrás ver/escuchar cómo funciona.
¿Quieres ver más casos? ¡Echa un vistazo a la web para desarrolladores!