Construir um Slackbot acionado por banco de dados

Este tutorial pode incorrer em custos. Use o Estimador de custos para gerar uma estimativa do custo baseada em seu uso projetado.

Neste tutorial, você construirá um Slackbot que permite pesquisar e criar entradas em um banco de dados IBM Db2 SaaS de back-end. O Slackbot é suportado pelo serviço IBM® watsonx™ Assistant. Você integrará o Slack e o IBM® watsonx™ Assistant usando uma integração do Assistente. O IBM Db2 SaaS é disponibilizado para watsonx Assistant como extensão customizada.

A integração do Slack envia mensagens entre o Slack e o watsonx Assistant. Uma extensão customizada, escrita em Python e implementada como app Code Engine serverless, expõe uma API de REST com relação ao back-end de banco de dados.

Objetivos

  • Construa um chatbot usando o watsonx Assistant que interage com um back-end de banco de dados
  • Conectar o watsonx Assistant ao Slack usando uma integração
  • Crie e implemente um app de banco de dados Python para Code Engine
  • Acesse um banco de dados IBM Db2 SaaS por meio de uma extensão customizada do watsonx Assistant

Arquitetura*Diagrama de
do

  1. O usuário interage com o IBM® watsonx™ Assistant, por meio do Slack ou usando um cliente de bate-papo da web
  2. O chatbot utiliza uma extensão customizada com API de REST implementada como app Python no Code Engine
  3. O app de extensão customizada recupera dados do banco de dados IBM Db2 SaaS e inserte dados nele

Antes de Iniciar

Este tutorial requer:

  • CLI do IBM Cloud,
    • Plug-in do Code Engine,
  • git para clonar o repositório de código-fonte,
  • jq para consultar dados JSON.

Para evitar a instalação dessas ferramentas, é possível usar o Cloud Shell por meio do console do IBM Cloud.

Você encontrará instruções para fazer download e instalar essas ferramentas para o seu ambiente operacional no guia Introdução aos tutoriais.

Configurar serviços e implementar back-end

Nesta seção, você irá configurar os serviços necessários e implementar o app de back-end. Tudo isso pode ser realizado por meio da interface da linha de comandos (CLI) em um terminal.

  1. Clone o repositórioGitHub e navegue até o diretório clonado:

    git clone https://github.com/IBM-Cloud/slack-chatbot-database-watson
    cd slack-chatbot-database-watson
    
  2. Se você não estiver conectado, use ibmcloud login ou ibmcloud login --sso para fazer login interativamente. Não se esqueça de selecionar a região e o grupo de recursos com os quais trabalhar. Ele é usado para criar os serviços e ações. É possível listar seus grupos de recursos disponíveis usando ibmcloud resource groups.

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

    Use ibmcloud target -g default para alternar para o grupo de recursos padrão.

  3. Crie uma instância do IBM Db2 SaaS e nomeia-a eventDB. Adapte a região us-south à sua região, por exemplo eu-de.

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

    Também é possível usar outro plano diferente do plano grátis (lite). O plano grátis não está disponível em todos os locais. Espere o serviço ser provisionado. Veja a saída do comando acima para instruções. Também é possível executar o próximo comando para verificar o status:

    ibmcloud resource service-instance eventDB
    
  4. Para acessar o serviço de banco de dados por meio do app Code Engine posteriormente, ele precisa da autorização adequada. Assim, você cria credenciais de serviço e rotula-as como slackbotkey:

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

    O arquivo slackbotkey.json contém o service key também chamado service credentials.. Esse arquivo de texto não criptografado contém a senha administrativa e as sequências de conexão para a instância de serviço do eventDB

    A saída é armazenada no arquivo slackbotkey.json e necessária nesta etapa.. Execute este comando para extrair a URL de conexão do banco de dados:

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

    Ele será referenciado como $DB2_URI e poderá ser armazenado em uma variável shell se suportado em sua estação de trabalho ou shell de nuvem e exportado no caso de você estar executando o aplicativo 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
    

    A saída deve ter o seguinte formato: ibm_db_sa://username:password@database-hostname:port/bludb?Security=SSL; e está na variável shell DB2_URI.

  5. Crie uma instância do serviço watsonx Assistant. Use eventAssistant como nome e o plano Lite grátis. Adapte us-south ao seu local.

    ibmcloud resource service-instance-create eventAssistant conversation free us-south
    
  6. Implemente a imagem de contêiner pré-construída com a extensão customizada como app Code Engine. Primeiro, crie um projeto:

    ibmcloud ce project create --name slackbot
    

    Em seguida, selecione o projeto como o ativo:

    ibmcloud ce project select --name slackbot
    

    Em seguida, implemente o app nomeando-o slackbot-backend. Substitua o valor de API_TOKEN (MY_SECRET). Use seu próprio texto para MY_SECRET se desejar e faça substituições em todas as etapas futuras. Ele é usado para assegurar as chamadas para a API de 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 o URI informado para o app. Ele é referenciado nas próximas etapas como $APP_URL. É possível usar uma variável shell:

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

    Em vez de implementar uma imagem de contêiner pré-construída, também é possível construir e implementar sua própria imagem por meio do código fornecido. É possível modificar o comando create para construir a partir da origem: ibmcloud ce app create --name slackbot-backend --build-source . --min-scale 1 -e API_TOKEN=MY_SECRET -e DB2_URI="$DB2_URI" usando o Dockerfile localizado no repositório. Consulte a documentação do Code Engine sobre implementando seu app por meio do código-fonte local para obter detalhes adicionais. Como você não está usando a imagem de contêiner pública, mas a sua própria, também é necessário configurar um segredo de registro

  7. Teste a implementação chamando uma API de REST fornecida pelo app para (re)criar o esquema do banco de dados e inserir alguns registros de amostra.

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

    A solicitação acima deve retornar uma mensagem de erro de que a confirmação está ausente. Agora tente novamente com um parâmetro de consulta:

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

    A solicitação deve ter sucesso e indicar que o banco de dados foi recriado. Horário para outro teste:

    curl -X 'GET' "$APP_URL/events" -H 'accept: application/json' -H 'API_TOKEN: MY_SECRET'
    
  8. Observe o ID do Projeto que ele será necessário em uma etapa futura.

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

Criar um assistente

Nesta parte do tutorial, você trabalhará com o serviço watsonx Assistant. Primeiro, crie um novo assistente. Em seguida, crie a extensão customizada e a inclua no assistente. Posteriormente, você criará ações e as testará usando a visualização da web. Por fim, integre o chatbot ao Slack e realize mais testes.

  1. Na IBM Cloud Lista de recursos, abra a visão geral de seus serviços. Localize a instância do serviço watsonx Assistant sob a seção AI / Machine Learning. Clique em sua entrada para abrir os detalhes do serviço.

  2. Clique em Ativar o Watson Assistant para chegar à Ferramenta do watsonx Assistant.

  3. Na caixa de diálogo de boas-vindas, crie um novo assistente usando slackbot como nome do assistente e clique em Next para iniciar a personalização.

  4. Para a primeira pergunta sobre implantação, escolha Web.

  5. Para as outras perguntas, responda para sua função ou com Outro / Não tenho certeza no momento.

  6. Clique em Next para ter a oportunidade de personalizar a interface do usuário do bate-papo, se desejar.

  7. Clique em Próximo e finalize clicando em Criar.

    A nova página inclui um tour guiado que você pode desejar concluir se for novo no watsonx Assistant.

Incluir e configurar uma extensão customizada

Em seguida, você irá incluir e, em seguida, configurar uma extensão customizada para o watsonx Assistant e o assistente recém-criado.

  1. No painel na parte inferior esquerda, clique em Integrações e, em seguida, em Construir extensão customizada sob Extensões.
  2. No diálogo de várias etapas clique em Avançar e, em seguida, digite eventos como Nome da extensão e API para banco de dados de eventos como Descrição de extensão. Clique em Next (Avançar).
  3. Selecione e faça upload do arquivo local slackbot-openapi-spec.json e, em seguida, clique em Avançar.
  4. A última etapa permite que você revise a extensão com servidores e operações inclusos. Quando terminar, clique em Finish(Concluir).
  5. De volta à página Integrações, observe o novo tile Eventos na seção Extensões. Clique em Incluir nesse tile para configurar a extensão para o assistente.
  6. O novo diálogo começa com uma visão geral curta. Clique em Avançar para chegar à configuração real. No menu suspenso para Tipo de autenticação, selecione Autenticação de chave de API e digite sua Chave de API escolhida (substituição de MY_SECRET).
  7. Para Variáveis do servidor, use sua região de implementação, slackbot-backend como appname, e o Code Engine projetid do seu app. Depois disso, a URL gerada deve corresponder àquela do seu app Code Engine. Quando terminar, clique em Avançar para chegar à página de revisão e, depois, Concluir e Fechar para voltar à página Integrações.

Criar a primeira ação

Primeiro, você criará uma ação para recuperar informações sobre um único evento identificado por seu nome.

  1. No canto superior esquerdo, clique em Actions (Ações ) e, na página de boas-vindas, em Create action (Criar ação).

  2. Clique no bloco Iniciar do zero.

  3. No diálogo Nova ação, digite Mostre-me detalhes do evento como exemplo e clique em Salvar.

  4. A próxima tela mostra o editor de etapas para a ação com Etapa 1 aberta. Em Assistente diz, digite Qual é o nome do evento? Em seguida, para Definir resposta do cliente, escolha Texto livre como opção. Deixe E então como Continuar na próxima etapa.

  5. Clique em Nova etapa na parte inferior esquerda para incluir a Etapa 2. Deixe as primeiras partes (Assistente diz, Definir resposta do cliente) inalteradas, mas em E então selecione Use uma extensão. Nos menus suspensos, escolha a extensão de eventos e sua operação Registro de evento por nome. Posteriormente, Parâmetros mostrará as possíveis entradas. Usando a lista suspensa, designe Configurar short_name para o valor **Variáveis da etapa de ação > 1 Qual é o nome do evento. Ele se refere à entrada do cliente da etapa anterior. Clique em Apply (Aplicar ) para concluir essa etapa.

  6. Inclua uma Nova etapa. Na parte superior, mude a seleção para que a Etapa 3 seja executada com condição. Em Condições e Se, selecione 2 executada com sucesso. Isso se refere a um resultado do uso da extensão na etapa 2.

  7. Em Assistente diz, é possível compor a resposta com os detalhes do evento, referindo-se aos campos de saída da chamada da API para o aplicativo implementado. Use Eu tenho esses detalhes do evento: seguido da tecla Enter para ir até a próxima linha. O editor suporta o formato Markdown. Assim, use a tecla - para criar uma lista com marcadores. Inclua um item de lista com Nome: e, em seguida, clique no ícone Inserir uma variável. Na lista suspensa, selecione 2 body.shortname. Use a tecla Enter novamente para ir para uma nova linha com um item de lista. Inclua Local: com 2 body.location por meio do menu suspenso das variáveis. Repita para Inicia, Termina e Contato. Quando terminar, configure And then como Finalizar a ação.

  8. Para tratar erros na extensão, crie outra etapa com uma condição. Agora deixe a etapa reagir a 2 executada com sucesso como false. Deixe o Assistente dizer Desculpe, houve um problema e, em seguida, encerre a ação novamente.

    Para fins de simplicidade, nem todos os erros e condições como resultados vazios são tratados.

  9. Clique no ícone Salvar na parte superior direita e, em seguida, no X ao lado dele para fechar o editor de etapa.

  10. Na parte inferior direita, selecione Visualização para testar o diálogo.

  11. No bate-papo, digite show me event details e envie. O bot deve responder What is the event name? Agora digite Think e envie. Como o aplicativo de backend usa uma pesquisa curinga, ele deve encontrar o evento de amostra com o nome Think 2022 e retornar os detalhes (veja a captura de tela abaixo).

visualização de bate-papo mostrando detalhes do evento
visualização mostrando detalhes do evento

É possível clicar em Inspecionar para ver detalhes sobre como a extensão customizada é utilizada.. É possível verificar variáveis de entrada e saída e como a função de API da extensão é chamada.

Ação para reunir dados e inserir um novo registro

Semelhante à recuperação de um registro, é possível reunir entrada sobre um evento e incluir esses dados via extensão customizada.

  1. Mude para Ações e Criado por você. Clique em New action (Nova ação).

  2. Clique no bloco Iniciar do zero.

  3. No diálogo Nova ação, digite adicionar novo evento e Salvar.

  4. Use How do you want to name the event? para que o Assistente diga. O cliente responde com Free text novamente.

  5. Inclua uma Nova etapa e faça o Assistente dizer Onde está o evento?. Novamente, o cliente pode responder com Texto livre.

  6. Adicione outra etapa e pergunte Quando o evento começa, mas use Data para Definir resposta do cliente.

  7. Repita o mesmo procedimento, mas com When does the event end?

  8. Por último, em uma nova etapa, pergunte Qual é o URL (endereço da Web) do evento? e deixe o cliente responder com texto livre.

  9. Agora, para confirmar a entrada, crie uma nova etapa. Use Isso está correto? e como lista com marcadores mostre os dados reunidos. Adicione um item para Nome, Local, Início, Fim e Contato e use variáveis de ação relacionadas às etapas de entrada dos dados (veja a captura de tela abaixo). Use Confirmação como tipo de resposta ao cliente.

    Etapa de confirmação
    Etapa de confirmação

  10. Inclua uma nova etapa com a condição de que a confirmação anterior seja Não. O Assistente poderia dizer Ok, vamos começar de novo. Configure And then como Refazer etapas anterior(es) e selecione todas as etapas anteriores.

  11. Em uma nova etapa, que deve ser a etapa 8, reaja à confirmação sendo Sim. Sob And then selecione Use uma extensão. Configure a extensão de eventos com Inserir um novo registro de evento como operação. Combine os parâmetros com as variáveis de ação das etapas, por exemplo, shortname com . Como deseja nomear o evento?

  12. Crie uma nova etapa com a condição 8 Ran successfully sendo verdadeira. Deixe o Assistente dizer Um novo registro com ID VARIABLE foi criado. Para VARIABLE selecione 8 body.eid em eventos (Etapa 8). Termine a ação sob And then.

  13. Crie uma nova etapa com a condição para 8 Executado com sucesso ser falsa. Use algo como Parece que houve um problema ao criar o novo registro de evento para o Assistente dizer e encerrar a ação em E então. Salve e feche a ação com os ícones na parte superior direita.

  14. Salve a ação e, em seguida, teste a nova ação clicando em Preview (Visualizar ) à esquerda e usando o webchat. Digite adicionar novo evento e enviar. Quando solicitado pelo robô, insira minha conferência como nome, home office como localização, datas de escolha para início e término e use http://localhost como URL. Posteriormente, confirme se os dados estão corretos.

Ao criar um robô de bate-papo, você pode querer publicar um robô de bate-papo. É o lançamento controlado de uma versão que permite reverter as alterações e continuar com o desenvolvimento sem afetar o chatbot que está interagindo com clientes reais.

Integre com o Slack

Agora, você integrará o robô de bate-papo com o Slack.

  1. Na parte inferior esquerda, clique em Integrações.
  2. Na visão geral de integrações, na seção Canais, localize Slack e clique em Incluir.
  3. Siga as instruções passo a passo para integrar o ambiente Rascunho do seu robô de bate-papo ao Slack. Mais informações sobre isso estão disponíveis no tópico Integrando ao Slack.
  4. Depois de terminar, abra a área de trabalho do seu Slack. Inicie um bate-papo direto com o robô e diga Mostre-me detalhes do evento. Em seguida, semelhante acima, responda com Think quando um nome de evento for solicitado.

Slack com o eventbot
Slack com o eventbot

Remover recursos

Para limpar os recursos para este tutorial, acesse a Lista de recursos da IBM Cloud. Localize as instâncias de serviço do watsonx Assistant e do IBM Db2 SaaS e exclua-as. Da mesma forma, localize o projeto do Code Engine e exclua-o.

Dependendo do recurso, ele não é excluído imediatamente, mas retido (por padrão por 7 dias). É possível recuperar o recurso excluindo-o permanentemente ou restaurando-o dentro do período de retenção. Consulte este documento sobre como usar a recuperação de recurso.

Conteúdo relacionado

Aqui estão recursos adicionais sobre os tópicos abordados neste tutorial.