IBM Cloud Docs
Creación de un Slackbot controlado por base de datos

Creación de un Slackbot controlado por base de datos

Esta guía de aprendizaje puede incurrir en costes. Utilice Estimador de costes para generar una estimación del coste basada en el uso previsto.

En esta guía de aprendizaje, va a crear un Slackbot que permite buscar y crear entradas en una base de datos IBM Db2 SaaS de fondo. Slackbot tiene el soporte del servicio IBM® watsonx™ Assistant. Integrará Slack y IBM® watsonx™ Assistant utilizando una integración de Assistant. IBM Db2 SaaS está disponible para watsonx Assistant como extensión personalizada.

La integración de Slack envía mensajes entre Slack y watsonx Assistant. Una extensión personalizada, escrita en Python y desplegada como una aplicación Code Engine sin servidor, expone una API REST en el programa de fondo de la base de datos.

Objetivos

  • Crear un chatbot utilizando watsonx Assistant que interactúa con un programa de fondo de base de datos
  • Conexión de watsonx Assistant con Slack mediante una integración
  • Crear y desplegar una aplicación de base de datos Python en Code Engine
  • Acceder a una base de datos IBM Db2 SaaS mediante una extensión personalizada de watsonx Assistant

de arquitectura del

  1. El usuario interactúa con IBM® watsonx™ Assistant, ya sea a través de Slack o utilizando un cliente de chat web
  2. El chatbot utiliza una extensión personalizada con la API REST desplegada como una aplicación Python en Code Engine
  3. La aplicación de extensión personalizada recupera e inserta datos en una base de datos IBM Db2 SaaS

Antes de empezar

Esta guía de aprendizaje requiere:

  • CLI de IBM Cloud,
    • plugin de Code Engine,
  • git para clonar el repositorio de código fuente,
  • jq para consultar los datos JSON.

Para evitar la instalación de estas herramientas puede utilizar el Cloud Shell en la consola de IBM Cloud.

Encontrará instrucciones para descargar e instalar estas herramientas para su entorno operativo en la guía de Iniciación a las guías de aprendizaje.

Configurar servicios y desplegar el programa de fondo

En esta sección, va a configurar los servicios necesarios y desplegar la aplicación de fondo. Todo esto se puede realizar desde la interfaz de línea de mandatos (CLI) en un terminal.

  1. Clona el repositorio deGitHub y navega hasta el directorio clonado:

    git clone https://github.com/IBM-Cloud/slack-chatbot-database-watson
    cd slack-chatbot-database-watson
    
  2. Si no está conectado, utilice ibmcloud login o ibmcloud login --sso para conectarse de forma interactiva. Asegúrese de seleccionar la región y el grupo de recursos con los que trabajar. Se utiliza para crear los servicios y las acciones. Puede ver una lista de los grupos de recursos con el mandato ibmcloud resource groups.

    ibmcloud target -r <region> -g <resource group>
    

    Utilice ibmcloud target -g default para conmutar al grupo de recursos predeterminado.

  3. Cree una instancia de IBM Db2 SaaS y llámela eventDB. Adapte la región us-south a su región, por ejemplo eu-de.

    ibmcloud resource service-instance-create eventDB dashdb-for-transactions free us-south
    

    También puede utilizar un plan que no sea el plan gratuito (lite). El plan gratuito no está disponible en todas las ubicaciones. Espere a que se suministre el servicio. Consulte la salida del mandato anterior para obtener instrucciones. También puede ejecutar el siguiente mandato para comprobar el estado:

    ibmcloud resource service-instance eventDB
    
  4. Para acceder al servicio de base de datos desde la aplicación Code Engine más adelante, necesitará la autorización adecuada. Por lo tanto, cree las credenciales de servicio y etiquételas como slackbotkey:

    ibmcloud resource service-key-create slackbotkey Manager --instance-name eventDB --output json > slackbotkey.json
    

    El archivo slackbotkey.json contiene service key también denominado service credentials. Este archivo de texto simple contiene la contraseña administrativa y las series de conexión para la instancia de servicio de eventDB.

    La salida se almacena en el archivo slackbotkey.json y es necesaria en este paso. Ejecute este mandato para extraer el URL de conexión de base de datos:

    jq -r '.credentials.connection.db2 | "ibm_db_sa://" + (.authentication.username + ":" + .authentication.password + "@" + .hosts[0].hostname + ":" + (.hosts[0].port | tostring) + "/" + .database + "?Security=SSL;")' slackbotkey.json
    

    Se hará referencia a él como $DB2_URI y se puede almacenar en una variable de shell si está soportada en la estación de trabajo o en el shell de nube y se exportará en caso de que esté ejecutando la aplicación localmente.

     export DB2_URI=$(jq -r '.credentials.connection.db2 | "ibm_db_sa://" + (.authentication.username + ":" + .authentication.password + "@" + .hosts[0].hostname + ":" + (.hosts[0].port | tostring) + "/" + .database + "?Security=SSL;")' slackbotkey.json)
     echo $DB2_URI
    

    La salida debe tener el formato siguiente: ibm_db_sa://username:password@database-hostname:port/bludb?Security=SSL; y está en la variable de shell DB2_URI.

  5. Cree una instancia del servicio watsonx Assistant. Utilice eventAssistant como nombre y el plan Lite gratuito. Adapte us-south a su ubicación.

    ibmcloud resource service-instance-create eventAssistant conversation free us-south
    
  6. Despliegue la imagen de contenedor predefinida con la extensión personalizada como una aplicación Code Engine. En primer lugar, cree un proyecto:

    ibmcloud ce project create --name slackbot
    

    A continuación, seleccione el proyecto como activo:

    ibmcloud ce project select --name slackbot
    

    A continuación, despliegue la aplicación llamándola slackbot-backend. Sustituya el valor de API_TOKEN (MY_SECRET). Utilice su propio texto para MY_SECRET si desea y realiza sustituciones en todos los pasos futuros. Se utiliza para proteger las llamadas a la API REST.

    ibmcloud ce app create --name slackbot-backend --image icr.io/solution-tutorials/tutorial-slack-chatbot-database:latest --min-scale 1 -e API_TOKEN=MY_SECRET -e DB2_URI="$DB2_URI"
    

    Anote el URI notificado para la aplicación. En los pasos siguientes se hace referencia a él como $APP_URL. Puede utilizar una variable de shell:

    APP_URL=$(ibmcloud ce app get -n slackbot-backend --output json | jq -r .status.url)
    echo $APP_URL
    

    En lugar de desplegar una imagen de contenedor predefinida, también puede crear y desplegar su propia imagen desde el código proporcionado. Puede modificar el mandato create para compilar desde el origen: ibmcloud ce app create --name slackbot-backend --build-source . --min-scale 1 -e API_TOKEN=MY_SECRET -e DB2_URI="$DB2_URI" utilizando el Dockerfile que se encuentra en el repositorio. Consulte la documentación de Code Engine sobre el despliegue de la app desde el código fuente local para obtener más detalles. Puesto que no está utilizando la imagen de contenedor público, sino la suya propia, también debe configurar un secreto de registro.

  7. Pruebe el despliegue llamando a una API REST proporcionada por la aplicación para (re-)crear el esquema de base de datos e insertar varios registros de ejemplo.

    curl -X 'POST' "$APP_URL/database/recreate" -H 'accept: application/json' -H 'API_TOKEN: MY_SECRET'
    

    La solicitud anterior debe devolver un mensaje de error que indica que falta la confirmación. Ahora vuelva a intentarlo con un parámetro de consulta:

    curl -X 'POST' "$APP_URL/database/recreate?confirmation=True" -H 'accept: application/json' -H 'API_TOKEN: MY_SECRET'
    

    La solicitud debe ser satisfactoria e indicar que la base de datos se ha vuelto a crear. Puede hacer otra prueba:

    curl -X 'GET' "$APP_URL/events" -H 'accept: application/json' -H 'API_TOKEN: MY_SECRET'
    
  8. Anote el ID de proyecto que se necesitará en un paso futuro.

    ibmcloud ce app get -n slackbot-backend --output json |  jq -r .metadata.namespace
    

Crear un asistente

En esta parte del tutorial vas a trabajar con el servicio watsonx Assistant. En primer lugar, cree un nuevo asistente. A continuación, cree la extensión personalizada y añádala al asistente. Después creará acciones y las probará utilizando la vista previa web. Por último, integrará el chatbot con Slack y se realizarán más pruebas.

  1. En la Lista de recursos de IBM Cloud, abra la visión general de los servicios. Localice la instancia del servicio watsonx Assistant en la sección AI/ Machine Learning. Pulse su entrada para abrir los detalles del servicio.

  2. Pulse Iniciar asistente de Watson para acceder a la herramienta watsonx Assistant.

  3. En el cuadro de diálogo de bienvenida, crea un nuevo asistente utilizando slackbot como nombre de asistente y, a continuación, haz clic en Siguiente para empezar a personalizar.

  4. Para la primera pregunta sobre el despliegue elija Web.

  5. Para las demás preguntas responda para su función o con Otro / No estoy seguro en este momento.

  6. Haga clic en Siguiente para personalizar la interfaz de chat si lo desea.

  7. Pulse Siguiente y finalice pulsando Crear.

    La nueva página incluye una visita guiada que puede realizar si no está familiarizado con watsonx Assistant.

Añadir y configurar una extensión personalizada

A continuación, va a añadir y configurar una extensión personalizada en watsonx Assistant y el asistente que se acaba de crear.

  1. En el panel de control de la parte inferior izquierda, pulse Integraciones y, a continuación, seleccione Crear extensión personalizada en Extensiones.
  2. En el diálogo de varios pasos, pulse Siguiente y, a continuación, especifique events como Nombre de extensión y API para base de datos de sucesos como Descripción de extensión. Pulse Siguiente.
  3. Seleccione y cargue el archivo local slackbot-openapi-spec.json y, a continuación, pulse Siguiente.
  4. El último paso le permitirá revisar la extensión con los servidores y las operaciones que se han incluido. Una vez hecho esto, haga clic en Finalizar.
  5. En la página Integraciones, anote el nuevo mosaico events en la sección Extensiones. Pulse Añadir en ese mosaico para configurar la extensión del asistente.
  6. El nuevo diálogo se inicia con una breve visión general. Pulse Siguiente para acceder a la configuración real. En el menú desplegable de Tipo de autenticación, seleccione autenticación de clave de API y especifique la Clave de API que ha elegido (la sustitución de MY_SECRET).
  7. Para las Variables de servidor, utilice el valor region del despliegue, slackbot-backend como appname y el projectid de Code Engine de la aplicación. Posteriormente, el URL generado debe coincidir con el de la aplicación Code Engine. Cuando termine, pulse Siguiente para ir a la página de revisión, y seleccione Finalizar y Cerrar para volver a la página Integraciones.

Crear la primera acción

En primer lugar, va a crear una acción para recuperar información sobre un suceso individual identificado por su nombre.

  1. En la parte superior izquierda, haga clic en Acciones y en la página de bienvenida en Crear acción.

  2. Haga clic en el mosaico Empezar de cero.

  3. En el diálogo Nueva acción, especifique Mostrarme detalles del suceso como ejemplo y pulse Guardar.

  4. La siguiente pantalla muestra el editor de pasos para la acción con el Paso 1 abierto. En el campo El asistente dice:, escriba ¿Cuál es el nombre del suceso?. A continuación, para Definir la respuesta del cliente, seleccione Texto libre como opción. Deje Y luego como Continuar en el paso siguiente.

  5. Pulse Nuevo paso en la parte inferior izquierda para añadir el Paso 2. Deje intactas las primeras partes (El asistente dice:, Definir la respuesta del cliente), pero en Y luego, seleccione Utilizar una extensión. En los menús desplegables, seleccione la extensión events y su operación Registro de sucesos por nombre. Posteriormente, Parámetros mostrará las entradas posibles. Utilizando el desplegable, asigne para Establecer nombre_corto el valor **Variables de paso de acción > 1. ¿Cuál es el nombre del evento Hace referencia a la entrada de cliente del paso anterior. Haga clic en Aplicar para finalizar este paso.

  6. Añada un Nuevo paso. En la parte superior, cambie la selección para que El paso 3 se realice con la condición. En Condiciones y Si, seleccione 2 Se ha ejecutado satisfactoriamente. Hace referencia a un resultado de la utilización de la extensión en el paso 2.

  7. En El asistentes dice:, puede redactar la respuesta con los detalles del suceso haciendo referencia a los campos de salida de la llamada de API a la aplicación desplegada. Utilice Tengo estos detalles de suceso: seguido de la clave Enter para ir a la línea siguiente. El editor da soporte al formato Markdown. Por lo tanto, utilice la tecla - para crear una lista con viñetas. Añada un elemento de lista con Nombre: y, a continuación, pulse el icono Insertar una variable. En el menú desplegable, seleccione 2 body.shortname. Vuelva a utilizar la tecla Enter para llegar a una nueva línea con un elemento de lista. Añada Ubicación: con 2 body.location desde el menú desplegable de variables. Repita los pasos para Comienza, Termina y Contacto. Cuando termine, establezca Y luego en Finalizar la acción.

  8. Para manejar errores en la extensión, cree otro paso con una condición. Ahora deje que el paso reaccione a 2 Se ha ejecutado satisfactoriamente como false. Deje que el Asistente diga Lo sentimos, se ha producido un problema y vuelva a finalizar la acción.

    A efectos de simplicidad, no se manejan todos los errores y condiciones como, por ejemplo, los resultados vacíos.

  9. Pulse el icono Guardar de la parte superior derecha y, a continuación, pulse X al lado para cerrar el editor de pasos.

  10. En la parte inferior derecha, seleccione Vista previa para probar el diálogo.

  11. En la conversación, escriba show me event details y envíelo. El bot debe responder ¿Cuál es el nombre del evento?. Ahora escriba Think y envíela. Dado que la aplicación backend utiliza una búsqueda con comodines, debería encontrar el evento de muestra con el nombre Think 2022 y devolver los detalles (véase la captura de pantalla siguiente).

vista previa de conversación que muestra los detalles del suceso
vista previa que muestra los detalles del suceso

Puede pulsar Inspeccionar para ver detalles sobre cómo se utiliza la extensión personalizada. Puede comprobar las variables de entrada y salida y cómo se invoca la función de API de la extensión.

Acción para recopilar datos e insertar un nuevo registro

De forma similar a la recuperación de un registro, es posible recopilar datos de entrada sobre un suceso y añadirlos a través de la extensión personalizada.

  1. Cambie a Acciones y Creado por usted. Pulse Nueva acción.

  2. Haga clic en el mosaico Empezar de cero.

  3. En el diálogo Nueva acción, especifique añadir nuevo suceso y Guardar.

  4. Utilice ¿Cómo quiere nombrar el evento? para Asistente dice. El cliente vuelve a responder con Texto libre.

  5. Añada un Nuevo paso y haga que el Asistente diga ¿Dónde está el suceso?. De nuevo, el cliente puede responder con Texto libre.

  6. Añada otro paso y pregunte ¿Cuándo comienza el evento?, pero utilice Fecha para Definir la respuesta del cliente.

  7. Repite lo mismo pero con ¿Cuándo termina el evento?

  8. Por último, en un nuevo paso, pregunte ¿Cuál es la URL (dirección web) del evento? y deje que el cliente responda con Texto libre.

  9. Ahora, para confirmar la entrada, cree un nuevo paso. Utilice ¿Es esto correcto? y, como una lista con viñetas, muestre los datos recopilados. Añada un elemento para Nombre, Ubicación, Inicio, Fin y Contacto y utilice variables de Acción relativas a los pasos de entrada de los datos (véase la captura de pantalla siguiente). Utilice Confirmación como tipo de respuesta del cliente.

    Paso de confirmación
    Paso de confirmación

  10. Añada un nuevo paso con la condición de que la confirmación anterior sea No. El Asistente podría decir Muy bien, vamos a empezar. Establezca Y luego en Volver a preguntar los pasos anteriores y seleccione todos los pasos anteriores.

  11. En un nuevo paso, que debe ser el paso 8, reaccione a la confirmación como . En Y luego, seleccione Utilizar una extensión. Configure la extensión de sucesos con Insertar un nuevo registro de sucesos como operación. Haga coincidir los parámetros con las variables de acción de los pasos, por ejemplo, shortname con . ¿Cómo desea llamar al suceso?

  12. Crear un nuevo paso con una condición 8 Ran con éxito ser verdad. Deje que el Asistente diga Se ha creado un nuevo registro con la VARIABLE ID. Para VARIABLE, seleccione 8 body.eid en events (Paso 8). Finalice la acción en Y luego.

  13. Crear un nuevo paso con la condición para 8 Ran con éxito siendo falsa. Utilice algo como Parece que hubo un problema al crear el nuevo registro de eventos para que el Asistente diga y finalice la acción en Y entonces. Guarde y cierre la acción con los iconos de la parte superior derecha.

  14. Guarde la acción y, a continuación, pruebe la nueva acción haciendo clic en Vista previa a la izquierda y utilizando el webchat. Escriba add new event y envíela. Cuando el bot se lo solicite, especifique mi conferencia como nombre, oficina de casa como ubicación, seleccione las fechas de inicio y finalización, y utilice http://localhost como URL. Posteriormente, confirme que los datos son correctos.

Cuando cree un chatbot, es posible que desee publicar un chatbot. Se trata de la liberación controlada de una versión que permite deshacer los cambios y continuar con el desarrollo sin afectar al chatbot que interactúa con clientes reales.

Integrar con Slack

Ahora, integrará el chatbot con Slack.

  1. En la parte inferior izquierda, pulse Integraciones.
  2. En la visión general de integraciones, en la sección Canales, localice Slack y pulse Añadir.
  3. Siga las instrucciones paso a paso para integrar el entorno Borrador de su chatbot con Slack. Encontrará más información sobre este tema en el apartado Integración con Slack.
  4. Cuando termine, abra el espacio de trabajo de Slack. Comience un chat directo con el bot y diga Mostrarme detalles del suceso. Igual que antes, responda con Think cuando se le solicite un nombre de suceso.

Slack con el eventbot
Slack con el eventbot

Eliminación de recursos

Para limpiar los recursos de esta guía de aprendizaje, vaya a la Lista de recursos de IBM Cloud. Localice las instancias de servicio de watsonx Assistant y IBM Db2 SaaS y suprímalas. De forma similar, localice el proyecto Code Engine y suprímalo.

En función del recurso, es posible que no se suprima de inmediato sino que se retenga (durante 7 días de forma predeterminada). Puede reclamar el recurso suprimiéndolo de forma permanente o lo puede restaurar dentro del periodo de retención. Consulte este documento sobre cómo utilizar una reclamación de recurso.

Contenido relacionado

Aquí hay recursos adicionales sobre los temas que se describen en esta guía de aprendizaje.