Seguridad cognitiva

Escrito por Patricio Julian Gerpe Lazzaro en Planeta Chatbot.

Tabla de contenidos

Introducción

En este tutorial voy a explicar cómo desarrollar un prototipo de chatbot, o agente virtual de diálogo para responder consultas típicas de un banco que pueda funcionar cuando un usuario escribe a una página de Facebook. Para ello integraremos IBM Watson con FB Messenger usando Stamplay.

Vamos a necesitar:

– Una cuenta de Bluemix

– Una cuenta de Facebook y una página de Facebook.

– Una cuenta en Stamplay.

Nota: Durante el transcurso del tutorial es recomendable que mantengas abierta en pestañas separadas de tu navegador estas páginas ya que vas a precisar pasar información de una a la otra.

1- Bluemix y IBM Watson

Bluemix es la plataforma computación en la nube (Cloud Computing) de IBM. En la misma se pueden utilizar diferentes servicios y tecnologías en forma de alquiler. (Pagamos por uso). En nuestro caso usaremos uno de los servicios cognitivos de IBM: Watson ConversationWatson conversation es una tecnología conversacional que nos permitirá diseñar nuestro propio chatbot. Un chatbot es un software que automatiza tareas a través de interacciones con el usuario en formato de texto.

Para ello, vamos a crearnos una cuenta gratuita en Bluemix. Necesitamos entrar a https://www.ibm.com/cloud-computing/bluemix/ y hacemos clic en “Crear cuenta gratuita”.

Llenamos nuestros datos y hacemos clic en “crear cuenta”.

Una vez que activamos nuestra cuenta haciendo clic en el link que nos llega a nuestro correo. Nos identificamos y en el panel principal nos dirigimos hacia abajo hasta donde dice “servicios”. Allá apretamos “Crear servicio”.

Bajamos hasta encontrar “Watson” y hacemos clic en “Conversation”.

Inventamos un nombre cualquiera para nuestro servicio y le damos a “Crear”.

Una vez creado nuestro servicio, el navegador nos re-direccionará al panel del mismo, vamos hacia abajo hasta encontrar el botón de “Launch tool”.

Ingresamos con nuestro IBM ID. Necesitamos crear un “Workspace”, para eso le damos a “Create”.

Le ponemos un nombre cualquiera, seleccionamos idioma español y damos a “Create”.

¿Cómo funciona Watson Conversation? — Conceptos clave

Bueno, como muchas de estas tecnologías funciona a través del procesamiento de lenguaje natural. El motor es entrenado con un banco de datos de consultas que vamos armando, idealmente con consultas de usuarios reales.

Uteraciones e Intenciones

Cada consulta (input) es llamada declaración, o también “uteración”, anglicismo de la palabra inglesa “utterance”. Como Botmaster (programador del chatbot), nuestro desafío consistirá en identificar las intenciones (intents) típicas de nuestros usuarios para poder diseñar respuestas automáticas a dichas consultas. Por ejem: Si usuario dice “kiero cambiar pass”, la intención será “Cambiar de clave” y la respuesta que debamos programar será un mensaje con el link para ejecutar dicha operación. Una intención se define como el propósito del usuario al escribir una uteración determinada.

Entidades

En caso de querer profundizar nuestro análisis contextual, podemos detectar y extraer ciertas entidades dentro de la uteraciones de nuestros usuarios. Las entidades representan un termino o objeto específico que es relevante al analizar el contexto de cierta intención. Veremos un ejemplo de uso más adelante en este tutorial.

Corpus: nuestra data de entrenamiento

Será considerado bien entrenado un modelo que, teniendo suficientes data de entrenamiento con uteraciones, pueda identificar la intención del usuario incluso con faltas de ortografía o sinónimos. Para entrenar a nuestro chatbot, precisaremos de ejemplos reales de la lengua en cuestión dentro del dominio elegido, al conjunto de esos ejemplos se lo llama “corpus”.

Dominio y alcance

Aun así, es importante remarcar que cada bot suele operar dentro de un dominio especifico, es decir que responderá efectivamente preguntas que sean coherentes al contexto de conocimiento del bot, en nuestro caso, el bancario. El alcance de nuestro chatbot, será determinado por la cantidad de las consultas y problemas que pueda resolverles a nuestros usuarios dentro del dominio del mismo, así como el grado de resolución que brinda a las mismas (Calidad de resolución- A qué nivel soluciona la consulta del usuario.) Para medir esta última, se pueden elaborar consultas de satisfacción a los usuarios.

¡Manos a la obra!

Dicho sea esto, ahora tenemos que empezar a crear nuestras intenciones. En este caso, programaremos a nuestro chatbot con un alcance de resolución de 3 diferentes consultas dentro del contexto bancario: (1) Cuando un usuario quiere cambiar de clave, (2) cuando un usuario quiere entrar al homebanking y (3) cuando un usuario quiere pagar sus facturas. Para ello, crearemos 3 diferentes intenciones correspondientes a las mismas: #CambioDeClave, #Homebanking y #PagoFacturas.

Para comenzar hacemos clic en “Create new”.

Escribimos el nombre de nuestra intención (intent name) y abajo vamos agregando uteraciones para nuestra intención.

Para que Watson comience a funcionar como mínimo necesitaremos 5 uteraciones, personalmente, yo recomiendo tener más de 20.

En este caso, no contamos con nuestro propio banco de consultas reales de usuarios así que manualmente iremos escribiendo algunas posibilidades. Es importante cubrir varias posibilidades diferentes y parafrasearse a uno mismo, usar muchos sinónimos y neologismos propios de la lengua de nuestros usuarios, incluso la jerga misma de la industria en la que el chatbot funciona.

Sobre todo, es importante ponerse en los zapatos del usuario y pensar como haría esa consulta y que frases utilizaría. Una vez escritas nuestras uteraciones le damos a “Create”.

Repetimos el proceso con las intenciones #Homebanking y #PagoFacturas.

Una vez creadas nuestras intenciones hacemos clic en la solapa “Dialog” y le damos a “Create”.

Nodos de conversación

Ahora vamos a programar las respuestas. Para ello necesitamos crear nodos de conversación. Un nodo de conversación es una acción que será desencadenada a partir de una condición preestablecida por nosotros como botmasters. Dicho de otra manera, un nodo de conversación es una unidad de interacción entre el usuario y nuestro bot. Un nodo puede desencadenar a otro, funcionando de manera iterativa.

En este caso armaremos 4 nodos diferentes. 3 por cada intención y uno será nuestra fallback response, es decir la respuesta que se ejecutará en el caso que una consulta este fuera del alcance de resolución de nuestro chatbot, o que, se encuentre directamente fuera de su dominio. En Watson Conversation este nodo se desencadena con la condición por defecto “anything_else”.

Comenzamos dándole clic a “Create”. A nuestro nuevo nodo le vamos asignar una condición. Para ello, en “Triggered by” escribimos “#CambioDeClave”. Lo cual quiere decir que este nodo será desencadenado en tanto que Watson, al recibir una uteración del usuario, haya interpretado que la intención del usuario es cambiar de clave.

Repetimos con la intención #Homebanking.

Ahora para #PagoFacturas vamos a ir un poco más alla. Y aplicar entidades. En este caso vamos usar entidades para detectar si el usuario quiere pagar cierta factura en particular. (Por ejemplo: Gas o luz)

Para eso vamos a la solapa “Entidades” y apretamos “Create”.

Creamos una nueva entidad con el nombre @tipoFactura , y creamos dos valores para dicha entidad “gas” y “luz”. A cada una le asignamos “sinónimos” o palabras que hacen referencia a dicho concepto. En el caso de la luz, usaremos Edesur, Edenor o Electricidad, y en el caso del gas usaremos MetroGas. También podes incluir variaciones con faltas de ortografía para mejorar el modelo.

Volvemos a la solapa de dialogo. Y creamos un nuevo nodo. En condición escribimos #PagoFacturas , agregamos una más apretando “+” y escribimos @tipoFactura:Gas. Esto que quiere decir que las respuestas que escribamos a continuación se ejecutarán en tanto Watson haya entendido que la intención del usuario es pagar facturas y haya extraido de la uteración del usuario la entidad “Gas”. Un ejemplo de uteración podría ser: “Quiero pagar el gas”. Hacemos lo mismo con el caso @tipoFactura:Luz.

Ahora hacemos clic en “Create another response” . Y ahora a ese nodo le asignamos la condición #PagoFacturas. Y escribimos unas respuestas para dicha intención. (Esto seria para cuando el usuario quiere pagar facturas pero no especifica cual de ellas quiere pagar).

Tips! → Humanizando tu bot:

A- Repertorio de respuestas

Para evitar que suene muy automático y robótico. Tenemos la posibilidad de configurar varias respuestas y ejecutarlas de manera aleatoria. Esto nos servirá para el cometido de “humanizar” nuestro sistema de respuestas.

B- Asertividad es importante

Hacemos lo mismo con las otras dos. En nuestra fallback response debemos escribir una respuesta que comunique de manera asertiva al usuario que su consulta se encuentra por momento fuera del alcance del chatbot. Usar el humor y la empatía son activos muy importantes a la hora de diseñar una fallback response.

Ejem.: “¡Querido humano! 😎, entiendo que quieres resolver tu problema, te recuerdo, tal como escribí al presentarme que puedo ayudarte a (1) 🔐 Cambiar de clave, (2) 💻 Entrar al homebanking y (3) 💸 Realizar pago de facturas. Aún no me han enseñado a responder tu pregunta. Pero no te preocupes entreno día a día y sigo mejorando, ahora mismo te dejo en contacto con un operador humano que podrá ayudarte. 😉”

C- Cercania y humor

El uso de Emojis es muy recomendable, en especial cuando el rango etario de usuarios es joven, ya que mejora la experiencia de usuario haciendola más amigable y sacandole una sonrisa al usuario.

Recomiendo este sitio para copiar y pegar emojis: http://getemoji.com/

D- Interacciones Humanas

Tal como en una conversación con un operador humano. A veces la intención del usuario no necesariamente consiste en realizar una operación sino más bien en realizar una interacción humana tal como puede ser saludar, preguntar cómo estas, agradecer, etc. Entrenar a nuestro bot para saber responder a interacciones humanas típicas proporciona un diferencial que definitivamente deberiamos tener en cuenta como Botmasters.

A modo de ejemplo, vamos a usar nuestro caso para crear una nueva intención denominada “#Saludo”.

En respuesta al saludo, es conveniente programar al bot para que responda el saludo y le recuerde al usuario el alcance del mismo. Finalmente invitandolo a que consulte sobre una de las operaciones de alcance que nuestro bot. Ejem.:
“¡Hola humano! 😎 Soy BotBanco, tu asistente bancario. Te recuerdo que estoy entrenado para ayudarte a (1) Cambiar tu clave, (2) Entrar al Homebanking y (3) Pagar tus facturas de luz y gas. ¿Cuál de estas 3 operaciones queres realizar?

Ahora que tenemos nuestro bot listo, ¡Pasemos a integrarlo a Facebook Messenger1

2. Configurando Facebook Messenger

Vamos a https://developers.facebook.com/ e ingresamos con nuestra cuenta de Facebook.

Una vez autentificados vamos a “Mis aplicaciones” y le damos a “Agregar una aplicación”.

Le damos un nombre a nuestra aplicación, seleccionamos la categoría aplicaciones para Messenger y después apretamos “Crear identificador de la aplicación”.

Al crear el identificador, nos re direccionamos al panel de la aplicación. Ahí vamos a productos -> Messenger. Seleccionamos una página web en donde queramos que nuestro bot funcione.

3- Integración con Stamplay.

Nos creamos una cuenta en Stamplay:

Cuando creamos nuestra cuenta nos autentificados. Nos re-direccionados a nuestro panel de usuario y allá le damos a “+”.

Hacemos click en “Blueprint”.

Elegimos “Watson for restaurant reservation”, que es la plantilla más acercada a lo que nosotros queremos desarrollar.

Escribimos un nombre para nuestro proyecto y después le damos a “Next”.

En “Connect to our messenger account” copiamos nuestro token generado en Facebook Developers y lo pegamos en donde dice “Page Access token”.

Para las credenciales de IBM Watson. Entramos a nuestro servicio, y vamos a la solapa “Credenciales de servicio”. Apretamos en “ver credenciales” y finalmente copiamos y pegamos usuario y contraseña en la página de Stamplay.

Luego apretamos “Connect” y escribimos nuestra cuenta de Gmail. Una vez autentificados le damos “Next”.

Copiamos la “Callback URL” que nos aparece al conectar los otros servicios.

Volvemos a Facebook Developer y seleccionamos “Configurar webhooks”:

Pegamos la Callback URL en “URL de devolución de llamada” y en “Verify Token” escribimos “stamplay”. Tildamos messages y messages postbaks. Finalmente apretamos “Verificar y guardar”.

Ahora volvemos a Bluemix a la ventana de Watson Conversation le damos al menú punteado y ponemos “View details”.

Copiamos el Workspace ID:

Volvemos a Stamplay y pegamos el ID en donde dice “Workspace ID”.

Dale “Next” y listo. ¡Ya tenemos la integración hecha!

Podemos hacer algunas mejoras a nuestro chatbot, tales como agregar botoneras. En esta ocasión voy a explicarles como agregar una botonera para la intención de pago de cuentas. Para ello vamos al editor de Stamplay , entramos a nuestra app y le damos a la solapa “flows”.

Nos desplazamos hacia abajo hasta llegar al final. En donde dice “Update Object Records(Conversation)” hacemos clic en “+” y seleccionamos “Condition”.

En “Property” seleccionamos “IBM Watson Conversation”.

En la ventana que nos aparece seleccionamos la linea que contiene “intent”.

En “Condition Value” escribimos “PagoFacturas” y le damos “And”.

Nuevamente seleccionamos “IBM Watson Conversation” en property, pero esta vez seleccionamos la linea que dice “value”.


En condition value vamos a poner “Gas”.

Ahora le damos a “Save” y nuevamente hacemos clic en “+”. Seleccionamos “Nested step” → “Action”.

Ahora buscamos “Messenger” y hacemos clic en el logo de Messenger.

Elegimos “Send button template” y le damos a “Continue”.

Le damos a “Continue”. En “User ID” escribimos “{{kiJn.message.body.sender.id}}” y en el primer“Message” escribimos “{{uXuT.text.output.text.[0]}}”.

De esta manera se estarán pasando los parametros de la API de Watson al bot de FB Messenger.

En el segundo “Message”

Escribimos:

[{
“type”:”web_url”,
“url”:”
http://www.metrogas.com.ar/«,
“title”:”Pagar gas”
}]

Esta última linea lo que hace es agregar un botón al final del mensaje con un link a Metrogas para pagar las facturas. (Es un ejemplo didáctico )

Le damos a “Save”. En “Send button template” damos clic a “+” y volvemos a repetir este proceso. Con la diferencia que en el último “Condition Value” escribimos “Luz” en lugar de “Gas”.

Nuevamente repetimos el proceso agregando una acción. (Apretando “+” → “Nested Step” → Action → Messenger → “Send Button Template”)

Llenamos los campos con la misma información. Solo cambiamos el segundo “Message” con la información para pagar facturas. (Ejem.: Un link a la página de Edesur)

Le damos a “Save” y ahora agregamos otra condición debajo de el último paso que modificamos. Le damos a “Condition” y seleccionamos “IBM Watson Conversation” para “Property”. Nuevamente seleccionamos la linea que dice “Intent”.

En “Condition Value” nuevamente escribimos “PagoFacturas” y le damos a “Save”. Agregamos un paso más (“+” → “Neeted Step” → Action → “Messenger” → “Send Button Template”)

Llenamos nuevamente los campos con los mismos valores pero en el second “Message” escribimos:

“[{
“type”:”web_url”,
“url”:”
http://www.metrogas.com.ar/«,
“title”:”Pagar gas”
}, {
“type”:”web_url”,
“url”:”
http://www.edesur.com.ar«,
“title”:”Pagar luz”
}]

Y le damos al botón verde que dice “Save”.

De esta manera, cuando el usuario no especifique que quiere pagar, el chatbot le dará un menu con opciones.

Finalmente vamos al último paso modificado y le damos a “+” → “Outside Step” → “Condition”:

En este caso setearemos que en caso de tener otra intención que no sea pagar vamos enviar un texto sin botonera. Para ello repetimos el proceso pero escribiendo las demas intenciones tal como se muestra en la imagen. (ATENCION en lugar de AND hay que elegir OR al agregar condiciones.)

Finalmente agregamos un último efecto al final. (“+” → Neeted Step” → “Action” → Messenger → Send text message.)

Repetimos el proceso como con las demas acciones solo que en esta no tenemos el segundo campo de “Message” ya que no hay botonera.

Nos debería quedar un flujo de la siguiente manera:

Ahora vamos a nuestra página de Facebook y tocamos el botón “agregar un botón”:

Vamos a la solapa contactarnos y seleccionamos “enviar mensaje”.

Activamos la respuesta instantánea (también llamado mensaje de bienvenida) y escribimos un mensaje en cual explicamos al usuario el alcance de nuestro chatbot e invitamos al mismo a que haga su consulta. Podemos agregar personalización, de manera tal que el chatbot salude al usuario por su nombre.

¡IMPORTANTE!

Todos los chatbots de Facebook Messenger al crearse estan configurados para ser usados de manera privada. Es decir que solo el botmaster puede usarlos. Esto es así, ya que de esa manera se puede dedicar un tiempo sustancial para realizar testing y evitar consumos innecesarios de APIs.

Para que otros usuarios usen tu chatbot podes:

1- Invitar a usuarios de prueba.

2- Hacer público tu bot.

Invitando usuarios de prueba:

Vamos a https://developers.facebook.com , ingresamos a nuestra aplicación. Vamos a la solapa “Roles” y hacemos clic en “Agregar evaluadores”.

Podemos agregar a un amigo nuestro o incluso cualquier otro usuario de facebook:

<

Solicitando la aprobación para hacer público nuestro chatbot:

Vamos a la solapa “Messenger”, y en “Revisión de la aplicación para Messenger” hacemos clic en “Agregar a la solicitud” para “pages_messaging” y “pages_messaging_subscriptions”.

Para esta última alternativa precisamos esperar la aprobación de Facebook que tarda un poco menos de una semana.

¡Listo, nuestro chatbot esta listo para ser probado!

Nota: Recorda que en Stamplay, con cuenta gratuita tenes un limite de 5k de llamadas de API y 100 ejecuciones de flow permitidas. Por otra parte en Watson versión gratuita tenes 1k de llamadas de API.

Espero que les haya sido útil.

Fuentes y referencias

Autor: Patricio Julian Gerpe

Founder peer IAAR | TEDx Speaker

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *