¿Está Watson? Que se ponga

By 22/09/2017

Alejandro Delgado
Telco Cloud and Cognitive Technical Leader – Executive IT Architect en IBM Hybrid Cloud

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

Chatbot - Conversation

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?

  1. Una cuenta de Bluemix (ya la tenemos del ejercicio de Ana, si no, vamos bluemix.net y nos creamos una)
  2. 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)
  3. 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:

Chat - Conversation

¡Empezamos!

Desplegar Voice Gateway en K8S se resume en cinco pasos:

  1. Nos descargamos el repositorio de GitHub.
  2. Crear un cluster de Kubernetes en Bluemix.
  3. Instalar una serie de interfaces de línea de comandos (CLI), si no los tienes instalados.
  4. Aplicar unas políticas de red.
  5. Modificar el fichero de configuración con nuestros parámetros y credenciales.

1.- DESCARGA

En clone or Download, descargamos el zip.

Asistente - Conversation

2.- Crear el cluster de Kubernetes

En el catálogo de bluemix:

Con la versión lite, podemos desplegar:

API - Conversation

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!

[autopilot_shortcode]