Instructivo Watson Assistant
Instructivo Watson Assistant
Assistant
Keybe Version 5.1
2022
2
Contenido
Exoneración de responsabilidad ...................................................................................................................... 4
Introducción ................................................................................................................................................... 4
Ingresar a IBM y Edición de un Robot ............................................................................................................. 4
Ingresar a los servicios de IBM................................................................................................................... 5
Edición del texto y contenido de un robot ................................................................................................... 8
Panel de trabajo ......................................................................................................................................... 8
Estructura de un nodo ................................................................................................................................ 9
Tipos de respuesta ................................................................................................................................... 11
Respuesta en Text ................................................................................................................................ 11
Respuesta Image.................................................................................................................................. 13
Respuesta Option ................................................................................................................................. 13
Respuesta Audio .................................................................................................................................. 14
Respuesta Video .................................................................................................................................. 15
Almacenar Datos de Usuarios ....................................................................................................................... 17
¿Cuáles datos puede almacenar? .............................................................................................................. 17
Características de las variables de contexto .............................................................................................. 17
Duración de las variables de contexto................................................................................................... 17
¿Cómo almacena el robot? ....................................................................................................................... 18
Almacenar con extradata ...................................................................................................................... 18
Almacenar a campos principales .......................................................................................................... 24
Almacenar políticas, términos de acuerdo, etc. ..................................................................................... 27
Cambio en los estados del journey....................................................................................................... 28
Recomendaciones .................................................................................................................................... 29
Acciones con Variables de Contexto ............................................................................................................. 30
Asignación de asesores ............................................................................................................................ 30
Conexión del robot con horarios dentro de Keybe .................................................................................... 32
Cierre del chat .......................................................................................................................................... 34
Asignación automática de tags .................................................................................................................. 35
Casos a tener en cuenta en el uso de tags ........................................................................................... 40
Consulta de Información entre el Robot y Keybe ........................................................................................... 42
Ejemplo del código en $core .................................................................................................................... 45
WhatsApp: ........................................................................................................................................... 46
3
Facebook ............................................................................................................................................. 47
Instagram ............................................................................................................................................. 48
Web ..................................................................................................................................................... 50
Proactividades Keybe .................................................................................................................................... 52
Estructura ................................................................................................................................................. 52
Configuración de una campaña o disparador ............................................................................................ 54
Funcionamiento........................................................................................................................................ 56
Integraciones posibles desde el bot. ............................................................................................................. 58
4
Exoneración de responsabilidad
La presente documentación tiene como objetivo entregar las herramientas necesarias a los clientes de Keybe
S.A.S. para que intervengan en las modificaciones de los robots que sus marcas tienen conectados y que
previamente fueron desarrollados por el equipo de diseño de robots a la medida o bien, para que creen los
robots desde cero. Al recibir las credenciales y autorización para modificar el robot, cada cliente se hace
responsable de los posibles daños que sus modificaciones puedan generar en el robot. Keybe [Link]. no se hace
responsable del soporte en los casos en los que por una incorrecta modificación que realiza el cliente se vea
afectado el robot.
Para ver las reglamentaciones completas los invitamos a visitar el siguiente enlace, diligenciar el documento y
enviarlo a su agente comercial: [Link]
Introducción
Watson assistant es una herramienta de IBM que permite crear robots para chats, los cuales pueden ser
integrados a los servicios de Keybe para manejar los canales de redes sociales, WhatsApp y Web que se tengan
configurados en el aplicativo de Keybe.
Este instructivo explicará los elementos que se deben tener en cuenta a la hora de realizar un robot en esta
herramienta. De tal forma que se pueda aprovechar al máximo la integración con todas las posibilidades que
tenga Watson y el soporte que brindamos desde Keybe.
Puedes ver la documentación que ofrece Watson assistant con todas las funcionalidades que ofrece, pero
ten en cuenta que no todas son soportadas por nuestro aplicativo.
5
Para ingresar a IBM, seguir por el link [Link] o buscando IBM cloud en Google.
Realiza el log-In con el correo y la clave que generaste al momento de activar tu cuenta en IBM.
Al iniciar sesión, verán la página a continuación. Deben ingresar a los recursos disponibles, debe aparecer por
lo menos uno habilitado.
6
Dentro de la opción de Servicios y software encontrarán el servicio de Keybe al cual se les dio acceso.
Selecciona el servicio que aparece disponible y luego ingresa por la opción de Iniciar Watson Assistant.
Estando dentro del servicio, ingresa por el icono de Skills y selecciona el robot que te aparece en el panel.
Hay que recordar que este manual pretende servir de guía para la edición de textos y otro contenido
que comparte el robot con los usuarios, cualquier edición de otro elemento que no esté orientado a este
alcance es bajo la responsabilidad de la marca.
.
Panel de trabajo
Dentro del skill seleccionado, encontrará el siguiente panel de trabajo que funciona de la siguiente forma.
Para modificar el contenido del robot, permanecer en el panel de dialog y seleccionar el nodo a modificar.
El contenido a modificar depende de la versión del aplicativo donde se encuentra y no todas las
opciones disponibles en Watson son compatibles con Keybe.
.
Estructura de un nodo
Básicamente, los nodos se componen de:
1. Título: es una descripción breve del nodo y su función no es relevante para el funcionamiento de un
robot.
2. Evaluador de condiciones: comprende la o las condiciones que permiten a un usuario ingresar a este
nodo para ver el contenido o ejecutar las acciones dispuestas en el nodo.
3. Respuestas: En el assistant responds está todo el contenido de las respuestas que puede manejar el
bot. Hay que tener en cuenta que no todas las opciones que permite watson assistant son compatibles
con keybe asi que limitarse a las mencionadas en este manual.
10
Si solo se pretenda realizar cambios de textos básicos, bajo ningún motivo se deben modificar las
funciones o condiciones lógicas que aparecen en el if assistant recognizes. Hay que tener un mayor
entendimiento de las funciones del robot para configurar el if assistant recognizes.
Tipos de respuesta
Cada nodo tiene un límite de 5 respuestas que puede generar. Cada una de estas respuestas pueden ser en
forma de:
1. Text
2. Option
3. Image
4. Audio
5. Video
Respuesta en Text
Para los canales WSP, IG, FB, WEB. Es posible manejar todos los caracteres alfanuméricos, teniendo cuidado
con los caracteres especiales como $ y @ que son usado para procesar información dentro de Watson. De tal
manera que, si se desea escribir un correo o precio de un artículo, se debe llenar un carácter de escape como
se muestra en el ejemplo:
\$1.000
prueba\@[Link]
Evitar manipular las variables de contexto y entidades que se utilizan en las respuestas de algunos robots para
dar más dinamismo en la respuesta, algunos ejemplos que puedes encontrar son:
De igual manera, se recomienda no editar campos ubicados dentro de los caracteres especiales <??> ya que
aquí se está procesando una respuesta dinámica del robot y su edición sin conocimiento puede llevar a daños
del flujo del robot.
Si miras la imagen a continuación, verás un ejemplo de formas en las que puedes configurar los textos en una
respuesta:
1. Sequential: muestra los mensajes en orden, es decir, la primera vez que el usuario entra muestra la
primera línea, la segunda vez muestra la segunda y así sucesivamente en un ciclo indefinido.
2. Random: muestra una de las líneas de forma aleatoria cada que el usuario pasa por este nodo.
3. Multiline: Muestra toda la información escrita en cada línea en un mensaje en conjunto.
Si tienes dos assistants responds seguidos, se desplegarán en el chat como dos mensajes separados,
mientras que si usas el multiline de un assistant responds se verá como un solo mensaje pero con línea
nueva (espacio o párrafos).
Respuesta Image
Para los canales WSP, IG, FB, WEB. Se pueden usar imágenes desde que están ligadas a una URL sea que se
encuentren en páginas web o en un servicio como el Google cloud.
Title, description y alternative text no son soportados por la app de Keybe. Mantener vacíos.
Evitar el uso de Ñ y otras letras o caracteres no existentes en el idioma inglés. Las urls tienden a
reemplazar esos campos con una numeración codificada que entra en conflictos con Watson assistant.
Respuesta Option
Solo para el canal WEB se despliega botones funcionales. En WSP, IG y FB se muestra como un mensaje
adicional con el contenido de la List label.
Esta respuesta es muy sensible para la capacidad del robot ya que se trata de un menú de sugerencia con unos
campos definidos en sus respuestas (Value) y que se le presenta a los usuarios (List label). Cuando el usuario
selecciona una de las opciones configuradas, según la List label, viaja un valor de retorno a watson en forma de
Value, watson evalúa los nodos hijos y elije una respuesta.
Limitar la edición de esta opciones, si se desea agregar emojis no hay problema desde que estén separados
por un espacio respecto al texto.
14
Title, description y alternative text no son soportados por la app de Keybe. Mantener vacíos.
Si se modifica el contenido las opciones sin considerar las respuestas que evalúa el robot, se corre el
riesgo de dañar el flujo.
Respuesta Audio
Al igual que el Image, los campos de title, description y alternative text no son soportados por Keybe, así que
es preferible dejar vacíos. La condición de loop tampoco es soportada así que permanece en off.
Para su funcionamiento, se debe tener el archivo de audio en un servicio como Google cloud donde se puede
generar una URL pública la cual debe ir pegada en el Audio source.
Evitar el uso de Ñ y otras letras o caracteres no existentes en el idioma inglés. Las urls tienden a
reemplazar esos campos con una numeración codificada que entra en conflictos con Watson assistant.
.
15
Respuesta Video
Actualmente hay dos formas de manejar los videos dentro de keybe. Si el video se encuentra con URL de
YouTube, lo mejor es pegar la URL como texto en el Text del assistant responds. Cada canal genera el thumbnail
automático cuando identifica una URL de YouTube. Esta opción es como compartir un video desde el dispositivo,
se genera la ventana para ver el video sin mostrar la URL.
Solo está soportado para los canales WSP y WEB. Al igual que el Image, los campos de title, description y
alternative text no son soportados por keybe, así que es preferible dejar vací[Link] condición de Base height
tampoco es soportada así que permanece vacío.
Para su funcionamiento, se debe tener el archivo de video en un servicio como Google cloud donde se puede
generar una URL pública la cual debe ir pegada en el Audio source.
Evitar el uso de Ñ y otras letras o caracteres no existentes en el idioma inglés. Las urls tienden a
reemplazar esos campos con una numeración codificada que entra en conflictos con Watson assistant.
.
16
En esta sección veras los campos más utilizados en el almacenamiento de la información, como los diferentes
canales afectan la toma de datos de tu usuario y aspectos importantes para tener en cuenta a la hora de almacenar
la información.
• Nombre
• Celular
• Correo
• Ciudad
• Necesidad
Los tipos de campos pueden ser numéricos o textos y también reciben campos de fechas o patrones
como el caso de correos. También pueden incluir diferentes tipos de formatos de fechas y números, todo
depende de la forma de almacenar la información desde Watson.
Las conversaciones entre los usuarios permanecen abiertas indefinidamente. Esto quiere decir que si el usuario
A, escribe el día de hoy por el canal que se encuentre activo el robot, esté recordará la conversación al día
siguiente, semana siguiente, mes que viene, etc.
18
.
Almacenar con extradata
Son los que aparecen en la sección de campos adicionales en los detalles del usuario y deberían estar creados
en Información adicional de las personas de tu marca, que se encuentra en el panel de Configura/Aplicativos,
si se desea observar en los detalles de todos los usuarios disponibles de la base de datos y para manejarlos
dentro del módulo de CONECTA/personas. Puedes ver en los detalles del usuario como lo muestra la imagen
a continuación.
Se utiliza la misma estructura para almacenar la información en los detalles principales del usuario. A
continuación se muestra un ejemplo de una estructura que pretende almacenar un nombre que se pregunta al
usuario y se seguirán los siguientes pasos a partir de este ejemplo.
Para almacenar la información del robot y que esta aparezca en los detalles del usuario dentro del aplicativo de
Keybe, debemos almacenar la información dentro de una variable de contexto.
Variable de contexto es un campo que definimos dentro del robot, el cual almacena la respuesta del
usuario. Solo tiene acceso el robot y existe mientras la conversación con el usuario exista.
20
Este paso ocurre entre los Nodos 1 y 2 descritos en el ejemplo anterior y se ve así:
Una vez se tenga la información almacenada en la variable de contexto, se ejecutan los Nodos 3 y 4 de guardar
extradata y true porque sí.
En el Nodo 3 que dice Guardar extradata, debes poner en el JSON editor el código que se muestra a
continuación.
{
"output": {
"generic": []
},
"actions": [
{
"name": "saveExtradata",
"type": "client",
"parameters": {
"field": "Nombre Usuario",
"value": "<? $nombre_usuario ?>"
},
"result_variable": "api_save_extradata"
}
]
}
{
"output": {
"generic": []
},
"actions": [
{
"name": "saveExtradata",
"type": "client",
"parameters": {
"field": "Nombre Usuario",
"value": "<? $nombre_usuario ?>"
},
"result_variable": "api_save_extradata"
},
{
"name": "saveExtradata",
"type": "client",
"parameters": {
"field": "Otro Dato",
"value": "<? $otro_dato ?>"
},
"result_variable": "api_save_extradata"
}
]
}
Los campos de “output“ y “context“ pertenecen a Watson y no son relevantes para la acción de guardar extradata,
solo se muestra un ejemplo del código completo como aparece en Watson.
• "actions": Obligatorio.
• "name": siempre debe llevar "saveExtradata"
• "type": siempre debe llevar "client"
• "parameters": Obligatorio.
• "field": título del campo con el que se desea que aparezca en los detalles del usuario "Nombre Usuario"
• "value": donde se almacena el valor del robot y almacenado en la variable de contexto "<? $nombre_usuario
?>" alternativamente si es un dato fijo se puede dejar entre comillas sin los caracteres especiales <??>
que son usados para que Watson utilice el valor contenido en la variable de contexto $nombre_usuario.
Hay que recordar que el nodo “true porque si” es un nodo que se necesita para darle manejo a la acción
de guardar extradata y no lleva ningún tipo de configuración a parte de “jump to” o “skip user input”.
.
23
En el nodo 5 de “Hacer otra cosa“ solo es para simbolizar el paso a otro punto de la conversación.
El resultado de esta acción se debe ver reflejado en los detalles del usuario como se muestra en la imagen a
continuación:
Los campos de extradata son editables, lo que quiere decir que cada vez que un usuario almacene un
nombre diferente, la extradata cambiará su valor, siempre y cuando el título sea el mismo.
Ej. primera interacción con el robot se almacena Mar, segunda interacción se ingresa Maria, haciendo que se
reemplace Mar por Maria.
Los campos predefinidos por Keybe y que comprenden: Nombre, Apellido, teléfono y correo. Estos campos se
almacenan como muestra la imagen a continuación.
Este almacenamiento funciona con el mismo paso 0 y paso 1 que se describen en el almacenamiento de
extradata. La diferencia se presenta en el action que funciona como se muestra a continuación.
25
{
"output": {
"generic": []
},
"actions": [
{
"name": "changeUserInfo",
"type": "client",
"parameters": {
"name": "Harry",
"email": "ejemplo@[Link]",
"phone": "+573100000001", // solo surgirá para canales que no sean de whatsapp
"lastName": "Potter",
"countryCode": "57"
},
"result_variable": "api_save_extradata"
}
],
"context": {}
}
• "actions": Obligatorio.
• "name": Siempre debe llevar "ChangeUserInfo"
• "parameters": Obligatorio.
• "name": Opcional, en el ejemplo está con un nombre fijo, pero puede llevar la variable de contexto para
que sea dinámico el dato que toma del cliente adicionando por ejemplo <? $nombre_usuario ?>
• "lastName": Opcional, en el ejemplo está con un apellido fijo, pero puede llevar la variable de contexto
para que sea dinámico el dato que toma del cliente adicionando por ejemplo <? $apellido_usuario ?>
• "email": Opcional, en el ejemplo está con un correo fijo, pero puede llevar la variable de contexto para
que sea dinámico el dato que toma del cliente adicionando por ejemplo <? $correo_usuario ?>
• "phone": Opcional, en el ejemplo está con un teléfono fijo, pero puede llevar la variable de contexto
para que sea dinámico el dato que toma del cliente adicionando por ejemplo <? $celular_usuario ?>
Solo utilizar los campos “name“, “lastName“, “email“, “phone“ si se va a almacenar información en
ellos ya que dejarlos vacíos los guardaría de esta forma, reemplazando la información que se tenga del
usuario en sus detalles y perdiendo los datos anteriores.
Especial cuidado con “phone“ ya que no debe funcionar en robots con canales de WhatsApp por el tema
de estar ligado la cuenta del usuario a su número telefónico.
.
26
Almacenar Nombre
{
"output": {
"generic": []
},
"actions": [
{
"name": "changeName",
"type": "client",
"parameters": {
"value": "<? $captura_nombre ?>"
},
"result_variable": "api_save_extradata"
}
],
"context": {}
}
Almacenar Apellido
{
"output": {
"generic": []
},
"actions": [
{
"name": "changeLastName",
"type": "client",
"parameters": {
"value": "<? $apellido_usuario ?>"
},
"result_variable": "api_save_extradata"
}
],
"context": {}
}
27
Almacenar Correo
{
"output": {
"generic": []
},
"actions": [
{
"name": "changeEmail",
"type": "client",
"parameters": {
"value": "<? $correo ?>"
},
"result_variable": "api_save_extradata"
}
],
"context": {}
}
• "actions": Obligatorio.
• "name": Siempre debe llevar "updateUserHabeasData"
• "parameters": Obligatorio.
• "habeasData": La condición del campo que debe quedar almacenada según la respuesta del usuario.
o "accepted": Acepta las políticas de datos.
o “unkown": Sin definir, así se crean por defecto cuando un usuario habla por primera vez por
alguno de los canales de la marca.
o “rejected": Rechaza la política de datos.
o “blacklisted": El usuario queda marcado en la lista negra.
{
"output": {
"generic": []
},
"actions": [
{
"name": "updateUserHabeasData",
"type": "client",
"parameters": {
"habeasData": "accepted" // 'accepted', 'unknown', 'rejected', 'blacklisted'
},
"result_variable": "api_save_extradata"
}
],
"context": {}
}
28
1. "actions": Obligatorio.
2. "name": Siempre debe llevar "call_integration"
3. "parameters": Obligatorio.
4. "journeyId": el ID del estado del journey que se le debe asignar al usuario cuando pase por este action.
Por defecto se puede configurar desde Keybe que la primera conversación de un usuario inicie con
determinado estado de journey o ninguno.
5. "serviceName": Campo obligatorio y siempre debe se “keybe" sin importar el nombre de la marca.
6. "serviceAction": Campo obligatorio y siempre debe se “updateJourney" sin importar el nombre de la
marca.
7. "result_variable": Campo obligatorio, a diferencia de los almacenamientos de información, los
call_integrations si generan respuesta en el result_variable. El campo puede ser el que deseen pero se
recomienda usar “result" para que todos los call_integrations tengan la misma estructura.
El resultado solo está disponible 1 paso en el proceso del robot asi que si desean utilizar esta respuesta
en otras partes del flujo, deben ser almacenados en una variable de contexto.
.
29
{
"output": {
"generic": []
},
"actions": [
{
"name": "call_integration",
"type": "client",
"parameters": {
"journeyId": 3260,
"serviceName": "keybe",
"serviceAction": "updateJourney"
},
"result_variable": "result"
}
],
"context": {}
}
Los IDs de los journey se pueden obtener creando los estados desde CONFIGURA/Estado
Recomendaciones
Analiza que tipo de información es relevante para tu marca y como puede ser utilizada para métricas o decisiones
estratégicas. Hay que entender que el usuario no desea entregar toda la información en la mayoría de los casos
y hacer un flujo conversacional prolongado puede llevar a la mala experiencia de usuario.
Siempre piensa en tu usuario y considera si este estaría dispuesto a continuar con el flujo si apareciera esta
pregunta.
30
Asignación de asesores
La asignación de asesores funciona creando una variable de contexto de nombre askHelp con un valor de true.
Imagen: Nodo conectar con asesor con nodo hijo ASK HELP.
Imagen: Try it out de pedir asesor y Manage Context de watson, donde se almacenan las variables de
contexto..
Se puede revisar el Manage Context de la conversación para validar que la variable de contexto fue generada
por Watson.
• Panel de la izquierda: Conversación queda en bandeja de espera por asesor simbolizado por el icono
de reloj y la etiqueta de Sin Asesor se mantiene hasta que algún asesor tome la conversación.
• Panel del centro: se muestra el mensaje de “Esperando ayuda del agente…”(al usuario no le aparece
este mensaje).
32
El horario fuera de línea de esta marca, por ejemplo, detonaría un mensaje de ausencia para el día domingo
todo el día, martes entre las 12:00 y las 14:00 hrs y entre las 17:30 y las 6:00 hrs.
Dentro del bot, los parámetros que se procesan para la variable de contexto $core son offline para fuera de línea
y online para en línea. Estos mismos parámetros se cambian manualmente dentro de la variable $core creada
en el manage context, con la finalidad de verificar en el try out que el flujo y los mensajes queden bien
configurados.
En el if assistant recognizes se ingresa $[Link] != null para el nodo en el que se ingresa el mensaje de
ausencia por Asesor Offline.
Un nodo hijo se configura con skip user input y usando la variable de contexto askHelp, también la siguiente
variable de contexto para cierre de chats endChat.
En el nodo inferior, se agrega otro nodo con un true que es lo mismo que decir, cuando el horario no esté fuera
de línea. A este se le puede predeterminar un mensaje de conexión con asesor y/o directamente el askHelp.
34
La lógica contraria podría realizarse, anteponiendo $[Link] != null. Esta manera se puede detallar con
claridad en la imagen que sigue.
El ingresar como valor “Cerrado por IA” se verá reflejado dentro del aplicativo así:
Imagen: Visualización del valor “Cerrado por IA” en Keybe versión 5.1.
35
También se puede configurar el $endChat directamente en el if assistant recognizes del nodo. Esta forma
ocasiona que no se tenga claridad dentro de Keybe si el chat fue cerrado por el robot y no fue otro el motivo.
Así que la forma recomendada es la anterior.
En el ejemplo siguiente dentro del módulo CONFIGURA, se observa que se ingresan dos tags, “ventas” y
“garantía”.
36
Los tags pasan a ser asignados a los asesores ingresados al aplicativo dando clic el tag y añadiendo al o los
asesores designados.
39
Al ingresar a editar cada administrador, al final del panel como se observa en la siguiente imagen, se encuentra
un menú que despliega las posibles etiquetas a asignar. Múltiples etiquetas pueden ser asignadas por asesor.
Dentro de IBM Watson, usualmente asignamos una nueva variable de contexto llamada $tagsla cual se va a
encargar de llevar el valor del tag ingresado en Keybe. Para el caso anterior donde se tiene etiquetas
“serviciocliente” y “compra”, estas tal cual son ingresadas a Keybe de la misma manera que esta escrita en la
variable de contexto $tags de Watson. Importante que estas etiquetas sean escritas en minúscula y que no
contengan carácteres especiales como tildes y la letra ñ.
Cada tag es activado en la parte del flujo que es requerido. Por ejemplo, para un menú principal que despliega
a dos partes una de ventas y otra de atencion al cliente, en el nodo que direcciona a la siguiente parte de cada
flujo se activa el valor del tag.
Estos tags deben ser reiniciados, es decir, dejando el valor del tag vacío y ubicados al inicio y al final del flujo
del bot.
Estos casos deben tenerse en cuenta siempre y cuando desde Keybe la opción de asignar automáticamente
conversaciones para los asesores esté habilitada:
1. Si el robot no tiene programado tags y la variable tags no existe, es decir, no se ha asignado dentro
del robot, la conversación puede ser asignada a cualquier agente.
2. Si el robot tiene tags programados y estos están actualizados dentro de Keybe, pero existen asesores
que no tienen asignados tags, la conversación desborda al agente con el tag correspondiente. Si
todos los asesores se encuentran fuera de horario laboral, la conversación se va al reloj. Solamente,
cuando entre el primer asesor con el tag correspondiente la primera conversación entrante le será
asignada.
3. Si la opción por la que entra la persona no actualiza el tag pero trae un tag de una conversación
anterior, cuando conecte con asesor, se conectará con el agente del tag último identificado.
41
4. Si el valor de tags dentro del robot se encuentra vacío, puede conectar con cualquier asesor
indiferente de si este tiene tags asignados dentro de Keybe o no.
5. Cuando se tiene un tag que se envía desde el robot pero no se tiene creado en Keybe, la
conversacion es dirigida al reloj, a la espera por atención.
42
El siguiente nodo hijo ubicado por debajo del verificador del $core se activa siempre que la condición de arriba
no se cumple, en este caso, capturaría el nombre de un usuario del cual no tenemos almacenado dicho dato.
Es justo recordar que el nombre del usuario puede ser modificado cuando disponga un administrador
del negocio en Keybe.
La configuración del nodo que verifica los datos que se encuentran ya cargados en el aplicativo es la siguiente:
$core["conversation_context"] &&
$core["conversation_context"].user &&
$core["conversation_context"].[Link]
Siempre usar la forma de condiciones lógicas del if assistant recognizes como se acaba de mostrar,
cuando se evalúan elementos del $core o una lista/objeto creado desde las variables de contexto. Un error
en el manejo de la información daña el flujo conversacional.
La siguiente tabla muestra las expresiones usadas para capturar el nombre del usuario y ser aplicadas como
variables de contexto dentro del diálogo de flujo del robot. En “The set context” se ingresan las siguientes:
Variable Value
$lista_nombre "<? $core['conversation_context'].[Link](' ') ?>"
"<? $lista_nombre[0].substring(0,1).toUpperCase() +
$nombre_usuario
$lista_nombre[0].substring(1).toLowerCase() ?>"
La variable lista_nombre se encarga de separar los nombres por un espacio, y la variable nombre_usuario de
pasar cada nombre de esa lista a la primera letra con mayúscula.
También se puede realizar esta misma validación con información que fue previamente capturada por el robot y
que está almacenada en extradata o campos personalizados de información.
Por ejemplo, el nodo ejemplo “1.2 Validar Empresa” contiene un nodo que valida consultando en la extradata el
campo personalizado de información que es “Empresa”. Este es el nombre del campo, el cual se verá reflejado
en el panel de información del usuario en Conversa, en Keybe.
45
$core["conversation_context"] &&
$core["conversation_context"].user &&
$core["conversation_context"].[Link] &&
$core['conversation_context'].[Link]('data','[Link] == ''Empresa''').size()!=0 &&
Otros casos de uso para esta expresión filter() pueden ser consultados en la documentación de Watson
[Link]
WhatsApp:
{
"online": {
"offline": false
},
"mediaType": "chat",
"media": null,
"conversation_context": {
"appUUID": "XXXXAAAAA44444",
"companyUUID": "XXXXAAAAA44444",
"channel": "gupshup_wp",
"user": {
"email": "prueba@[Link]",
"name": "Harry Potter",
"UUID": "XXAA44",
"verified": false,
"terms": false,
"id": 333333,
"appUUID": "XXXXAAAAA44444,
"country": "CO",
"countryCode": "57",
"createdAt": "Sat Jan 29 2022 [Link] GMT-0500 (Colombia Standard Time)",
"createdById": 0,
"createdByName": "Hagrid",
"customId": "XXXXAAAAA44444",
"fullName": "Harry Potter",
"habeasData": "accepted",
"habeasDataIp": "",
"habeasDataSetAt": "Fri May 27 2022 [Link] GMT-0500 (Colombia Standard Time)",
"habeasDataSetById": 0,
"habeasDataSetByName": "Harry Potter",
"habeasDataURL": "",
"habeasDocument": "XXXXAAAAA44444",
"identificationType": "identification_card",
"image": "",
"isInvited": false,
"journeyId": 2633,
"lastName": "",
"phone": "3100000000",
"registerChannel": "other",
"type": "imported",
"updatedById": 0,
"updatedByName": "Hermion",
"userId": "XXXXXX",
"journey": {},
"business": [
{}
],
"extraData": [
{
"field": "Casa",
"value": "Gryffindor",
"access": "app",
47
"userTransactionId": "XXXXAAAAA44444",
"jobId": "XXXXAAAAA44444"
},
{
"field": "Edad",
"value": "18",
"access": "app",
"userTransactionId": "XXXXAAAAA44444",
"jobId": "XXXXAAAAA44444",
"updatedById": "XXXXAAAAA44444"
}
],
"location": {}
}
}
}
Facebook
{
"facebookMessenger": {
"name": "facebookMessenger"
},
"online": {
"offline": false
},
"mediaType": "chat",
"conversation_context": {
"appUUID": "XXXXAAAAA44444",
"companyUUID": "XXXXAAAAA44444",
"channel": "facebookMessenger",
"user": {
"email": "",
"name": "Harry Potter",
"UUID": "XXXXXX",
"verified": true,
"terms": false,
"id": 1111111,
"appUUID": "XXXXAAAAA44444",
"country": "",
"countryCode": "",
"createdAt": "Fri Jan 07 2022 [Link] GMT-0500 (Colombia Standard Time)",
"customId": "3b2d0ec9-bd31-49c5-8593-8dfac558a9c9",
"fullName": "Harry Potter",
"habeasData": "accepted",
"habeasDataIp": "",
"habeasDataSetAt": "Wed May 11 2022 [Link] GMT-0500 (Colombia Standard Time)",
"habeasDataSetById": 0,
"habeasDataSetByName": "Harry Potter",
"identificationType": "citizen_card",
"image": "XXXXAAAAA44444",
"isInvited": false,
"lastName": "",
48
"phone": "",
"registerChannel": "facebookMessenger",
"type": "standard",
"updatedById": 0,
"updatedByName": "Keybe API KB ",
"userId": "XXXXXX",
"journey": {},
"auths": [
{}
],
"extraData": [
{
"field": "Casa",
"value": "Gryffindor",
"access": "app",
"userTransactionId": "XXXXAAAAA44444",
"jobId": "XXXXAAAAA44444"
},
{
"field": "Edad",
"value": "18",
"access": "app",
"userTransactionId": "XXXXAAAAA44444",
"jobId": "XXXXAAAAA44444",
"updatedById": "XXXXAAAAA44444"
}
],
"location": {}
}
}
}
Instagram
{
"instagram": {
"name": "instagram"
},
"online": {
"offline": false
},
"mediaType": "text",
"conversation_context": {
"appUUID": "XXXXAAAAA44444",
"companyUUID": "XXXXAAAAA44444",
"channel": "instagram",
"user": {
"email": "",
"name": "Harry Potter",
"UUID": "XXXXXX",
"verified": true,
"terms": false,
"id": 1111111,
49
"appUUID": "XXXXAAAAA44444",
"country": "",
"countryCode": "",
"createdAt": "Tue Nov 23 2021 [Link] GMT-0500 (Colombia Standard Time)",
"customId": "XXXXAAAAA44444",
"fullName": "Harry Potter",
"habeasData": "accepted",
"habeasDataIp": "",
"habeasDataSetAt": "Wed May 11 2022 [Link] GMT-0500 (Colombia Standard Time)",
"habeasDataSetById": 0,
"habeasDataSetByName": "Harry Potter",
"identificationType": "citizen_card",
"image": "XXXXAAAAA44444",
"isInvited": false,
"lastName": "",
"phone": "",
"registerChannel": "instagram",
"type": "standard",
"updatedById": 0,
"updatedByName": "Keybe API",
"userId": "XXXXXX",
"journey": {},
"auths": [
{}
],
"extraData": [
{
"field": "Casa",
"value": "Gryffindor",
"access": "app",
"userTransactionId": "XXXXAAAAA44444",
"jobId": "XXXXAAAAA44444"
},
{
"field": "Edad",
"value": "18",
"access": "app",
"userTransactionId": "XXXXAAAAA44444",
"jobId": "XXXXAAAAA44444",
"updatedById": "XXXXAAAAA44444"
}
],
"location": {}
}
}
}
50
Web
{
"web": {
"name": "web"
},
"online": {
"offline": false
},
"mediaType": "chat",
"media": "",
"conversation_context": {
"appUUID": "XXXXAAAAA44444",
"companyUUID": "XXXXAAAAA44444",
"channel": "web",
"user": {
"email": "prueba@[Link]",
"name": "Harry Potter",
"UUID": "XXXXXX",
"verified": false,
"terms": false,
"id": 1111111,
"appUUID": "XXXXAAAAA44444",
"country": "CO",
"countryCode": "57",
"createdAt": "Sat Jan 29 2022 [Link] GMT-0500 (Colombia Standard Time)",
"createdById": 0,
"createdByName": "Hagrid",
"customId": "e6213ab2-58c6-4c40-9ada-74caa2b01216",
"fullName": "Harry Potter",
"habeasData": "accepted",
"habeasDataIp": "",
"habeasDataSetAt": "Fri May 27 2022 [Link] GMT-0500 (Colombia Standard Time)",
"habeasDataSetById": 0,
"habeasDataSetByName": "Harry Potter",
"habeasDataURL": "",
"habeasDocument": "XXXXAAAAA44444",
"identificationType": "identification_card",
"image": "",
"isInvited": false,
"lastName": "",
"phone": "3100000001",
"registerChannel": "other",
"type": "imported",
"updatedById": 0,
"updatedByName": "Hagrid",
"userId": "XXXXXX",
"journey": {},
"business": [
{}
],
"extraData": [
{
"field": "Casa",
51
"value": "Gryffindor",
"access": "app",
"userTransactionId": "XXXXAAAAA44444",
"jobId": "XXXXAAAAA44444"
},
{
"field": "Edad",
"value": "18",
"access": "app",
"userTransactionId": "XXXXAAAAA44444",
"jobId": "XXXXAAAAA44444",
"updatedById": "XXXXAAAAA44444"
}
],
"location": {},
"company": {
"address": "",
"url": "XXXXXXXXX",
"phone": "111111111111",
"name": "XXXXXXXX"
}
}
}
}
Todos estos campos pueden ser evaluados desde el robot, para esta explicación nos centraremos en los datos
del usuario así como la información disponible como extraData.
En el campo $core.['conversation_context'].user llegan los detalles de los campos principales del perfil de
cada usuario, asi como los detalles de la extraData o como se conocen en el aplicativo de keybe La
Información Adicional de la marca.
52
Proactividades Keybe
Si se hará uso de las proactividades de Keybe (campañas masivas y disparadores), enviando mensajes de
WhatsApp a los usuarios, la configuración de un nodo que maneje esas proactividades es obligatorio.
Las acciones de almacenamiento de información no son compatibles con las productividades de campañas
masivas ni los disparadores.
Estructura
El nodo que manejara las proactividades se debe anteponer a todos los existentes en el flujo del robot.
En el siguiente ejemplo suponemos una campaña donde se enviará al usuario un bono con las opciones de si
desea aceptarlo o no.
Puede haber múltiples plantillas evaluadas para manejar diferentes campañas ejemplo. generico_1,
generico_2, factura_1, etc.
La configuración de los Else son el elemento más importante de la configuración del $core. Deben
estar siempre.
Funcionamiento
Como bien se mencionaba antes, cuando el robot recibe la respuesta del usuario es cuando se reinicia la
conversación. Motivo por el cual todos los nodos que evalúan hasta la respuesta de “sí” y “no”, de forma que
todo se encuentran en skip user input, es decir, se evalúa en un solo paso (Reinicio, proactivity_type,
'generico_1' y respuesta del usuario).
El Else se usa entonces como un seguro en caso de que el usuario responda algo diferente a lo esperado, para
evitar que se encuentre con un action como saveExtradata con el cual no es compatible. Mirar sección de
almacenamiento de la información en keybe.
El Else puede hacer saltos a menú principal o el nodo de saludo desde que no existan action de saveExtradata.
De igual manera, no puede haber estos actions en los nodos que evalúan la proactividad.
57
Un Webhook permite conectar el robot con un programa externo. Para realizar esta conexión es necesario contar
con una URL desde la cual se va a realizar la solicitud POST y a la cual va a ser enviada determinada información
desde el robot.
Una vez que se tiene configurada la URL en la opción de Webhooks, cualquier petición que se realice
en el robot incluso en el “try it” se envía realmente al Webhook, puesto que esta petición no llega a Keybe
sino que se envía directamente desde Watson.
59
Al tener configurada la URL como se muestra en la imagen anterior, lo siguiente es configurar la petición que
desea hacerse desde los nodos de dialogo. Desde la opción “Customize” se puede activar el nodo de dialogo
tipo Webhook:
Una vez activada la configuración tipo Webhook, la apariencia del nodo cambia y ahora contiene una sección
llamada “Parameters” desde la cual se definen los elementos clave que van a enviarse a través del Webhook. El
campo Key contiene el nombre del campo, mientras que el campo value contiene el valor que asume este
campo. Es posible enviar un valor estático (ej. El campo Teléfono) , un valor basado en una variable de contexto
previamente creada en un nodo anterior (ej. El campo Respuesta) , o un valor extraído de la variable $core (ej.
El campo Nombre)
60
El webhook al recibir la información clave opcionalmente retorna una respuesta. Con dicha información o con
otras cláusulas lógicas (true or false) el robot puede ejecutar diferentes acciones desde el Assistent responds.
61
Para más información visitar: Cómo realizar una llamada mediante programa desde el diálogo |
Documentos de IBM Cloud.
Otro tipo de integraciones se realizan por por medio de Call-Integration. Algunos ejemplos de plataformas con
las que Keybe ha realizado integraciones son Woocomerce y Shopify.
Los Call-integrations requieren previa cotización y desarrollo por parte del equipo de tecnología de Keybe. Por
medio de los Call-integrations es posible enviar y recibir información entre el robot y una plataforma web.
Los Call integration se configuran con el formato tipo JSON disponible en los nodos de dialogo. Dentro del
objeto: “parameters” del JSON se envían los datos que van a ser analizados por el sitio web con el cual se hizo
la integración. El nodo que contiene el Call-integration debe configurarse seguido de un nodo hijo en TRUE;
62
luego del nodo hijo en TRUE se realiza la validación de la respuesta que envía de regreso el call-integration. La
respuesta llega en forma de variable de contexto (precedida por el símbolo pesos $).
Ya sea vía Webhook o Call-integration, lo que estas herramientas permiten es consultar información externa que
pueda ser analizada por el robot en función de determinar la respuesta que llega al usuario final (ej. consultar
el estado de un pedido a través del número de guía). O bien enviar información que pueda ser almacenada en
bases de datos externas del cliente (Ej. Almacenar cuando y sí un usuario acepta las políticas de tratamiento de
datos.)