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
- O usuário interage com o IBM® watsonx™ Assistant, por meio do Slack ou usando um cliente de bate-papo da web
- O chatbot utiliza uma extensão customizada com API de REST implementada como app Python no Code Engine
- 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,
gitpara clonar o repositório de código-fonte,jqpara 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.
-
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 -
Se você não estiver conectado, use
ibmcloud loginouibmcloud login --ssopara 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 usandoibmcloud resource groups.ibmcloud target -r <region> -g <resource group>Use
ibmcloud target -g defaultpara alternar para o grupo de recursos padrão. -
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-southTambé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 -
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.jsonO arquivo slackbotkey.json contém o
service keytambém chamadoservice 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 eventDBA saída é armazenada no arquivo
slackbotkey.jsone 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.jsonEle 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_URIA 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. -
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 -
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 slackbotEm seguida, selecione o projeto como o ativo:
ibmcloud ce project select --name slackbotEm 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_URLEm 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 oDockerfilelocalizado 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 -
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' -
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.
-
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.
-
Clique em Ativar o Watson Assistant para chegar à Ferramenta do watsonx Assistant.
-
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.
-
Para a primeira pergunta sobre implantação, escolha Web.
-
Para as outras perguntas, responda para sua função ou com Outro / Não tenho certeza no momento.
-
Clique em Next para ter a oportunidade de personalizar a interface do usuário do bate-papo, se desejar.
-
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.
- No painel na parte inferior esquerda, clique em Integrações e, em seguida, em Construir extensão customizada sob Extensões.
- 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).
- Selecione e faça upload do arquivo local slackbot-openapi-spec.json e, em seguida, clique em Avançar.
- A última etapa permite que você revise a extensão com servidores e operações inclusos. Quando terminar, clique em Finish(Concluir).
- 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.
- 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).
- 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.
-
No canto superior esquerdo, clique em Actions (Ações ) e, na página de boas-vindas, em Create action (Criar ação).
-
Clique no bloco Iniciar do zero.
-
No diálogo Nova ação, digite Mostre-me detalhes do evento como exemplo e clique em Salvar.
-
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.
-
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.
-
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.
-
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
Enterpara 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 teclaEnternovamente 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. -
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.
-
Clique no ícone Salvar na parte superior direita e, em seguida, no X ao lado dele para fechar o editor de etapa.
-
Na parte inferior direita, selecione Visualização para testar o diálogo.
-
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).
É 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.
-
Mude para Ações e Criado por você. Clique em New action (Nova ação).
-
Clique no bloco Iniciar do zero.
-
No diálogo Nova ação, digite adicionar novo evento e Salvar.
-
Use How do you want to name the event? para que o Assistente diga. O cliente responde com Free text novamente.
-
Inclua uma Nova etapa e faça o Assistente dizer Onde está o evento?. Novamente, o cliente pode responder com Texto livre.
-
Adicione outra etapa e pergunte Quando o evento começa, mas use Data para Definir resposta do cliente.
-
Repita o mesmo procedimento, mas com When does the event end?
-
Por último, em uma nova etapa, pergunte Qual é o URL (endereço da Web) do evento? e deixe o cliente responder com texto livre.
-
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 -
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.
-
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?
-
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.
-
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.
-
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.
- Na parte inferior esquerda, clique em Integrações.
- Na visão geral de integrações, na seção Canais, localize Slack e clique em Incluir.
- 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.
- 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.
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.