Como construir um Slackbot em Python no Ubuntu 20.04

O autor selecionou a Tech Education Fund para receber uma doação como parte do programa Write for DOnations.

Introdução

O Slack é uma plataforma de comunicação projetada para a produtividade no trabalho. Ele inclui recursos como mensagens diretas, canais públicos e privados, chamadas de voz e de vídeo e integrações de bot. Um Slackbot é um programa automatizado que pode executar uma variedade de funções no Slack, desde o envio de mensagens até acionar tarefas para alertar em determinados eventos.

Neste tutorial, você irá construir um Slackbot na linguagem de programação Python. O Python é uma linguagem popular que se orgulha da simplicidade e da legibilidade. O Slack fornece uma API Python Slack rica para integração com o Slack para executar tarefas comuns, como enviar mensagens, adicionar emojis às mensagens e muito mais. O Slack também fornece uma API de eventos Slack para Python para integração com eventos no Slack, permitindo que você realize ações em eventos como mensagens e menções.

Como uma prova de conceito divertida que irá demonstrar o poder do Python e suas APIs Slack você irá construir um CoinBot; um Slackbot que monitora um canal e, quando acionado, irá jogar uma moeda para você. Em seguida, você pode modificar seu CoinBot para atender a qualquer número de aplicações um pouco mais práticas.

Observe que este tutorial usa o Python 3 e não é compatível com o Python 2.

Pré-requisitos

Para seguir este guia, você vai precisar do seguinte:

  • Um Workspace Slack em que você tenha a capacidade de instalar aplicativos. Se você criou o workspace você tem essa habilidade. Se você ainda não tiver um, você pode criar um no site do Slack.

  • (Opcional) Um servidor ou um computador com um endereço IP público para desenvolvimento. Recomendamos uma instalação nova do Ubuntu 20.04, um usuário não-root com privilégios sudo, e o SSH habilitado. Você pode seguir este guia para inicializar seu servidor e completar esses passos.

Você pode querer testar este tutorial em um servidor que tenha um endereço IP público. O Slack precisará ser capaz de enviar eventos, como mensagens para seu bot. Se você estiver testando em uma máquina local, você precisará fazer o encaminhamento de tráfego de porta através do firewall para o sistema local. Se você estiver procurando uma maneira de desenvolver em um servidor em nuvem, confira este tutorial How To Use Visual Studio Code for Remote Development via the Remote-SSH Plugin.

Passo 1 — Criando o Slackbot na UI do Slack

Primeiro crie sua aplicação Slack no painel de controle da API do Slack. Faça login em seu workspace no Slack através de um navegador Web e navegue até o Painel de Controle da API. Agora, clique no botão Create an App.

Create Your Slack App

Em seguida, você será solicitado a inserir o nome da sua aplicação e selecionar um workspace de desenvolvimento do Slack. Para este tutorial, nomeie sua aplicação como CoinBot e selecione um workspace a que você tenha acesso como admin. Depois de ter feito isto, clique no botão Create App.

Name Your Slack App and Select a Workspace

Depois que sua aplicação for criada, você será apresentado ao seguinte painel padrão da aplicação. Este painel é onde você gerencia sua aplicação definindo permissões, subscrevendo a eventos, instalando a aplicação em workspaces, e muito mais.

Default Slack App Panel

Para que sua aplicação seja capaz de enviar mensagens em um canal, você precisa conceder permissões à aplicação para enviar mensagens. Para fazer isso, clique no botão Permissions no painel de controle.

Select the Permissions Button in the Control Panel

Quando você chegar à página OAuth & Permissions, desça até encontrar a seção Scopes da página. Em seguida, encontre a subseção Bot Token Scopes no escopo e clique no botão Add an OAuth Scope.

Select the Add an OAuth Scope Button

Clique naquele botão e então digite chat:write. Selecione essa permissão para adicioná-la ao seu bot. Isso permitirá que a aplicação poste mensagens em canais que ela possa acessar. Para mais informações sobre as permissões disponíveis, consulte a Documentação do Slack.

Add the chat:write Permission

Agora que você adicionou a permissão adequada, é hora de instalar sua aplicação em seu workspace do Slack. Role para trás na página OAuth & Permissions e clique no botão Install App to Workspace no topo.

Install App to Workspace

Clique neste botão e revise as ações que a aplicação pode executar no canal. Uma vez satisfeito, clique no botão Allow para terminar a instalação.

Install App to Workspace

Uma vez que o bot está instalado, você será apresentado a um Token Bot User OAuth Access para que sua aplicação use ao tentar executar ações no workspace. Vá em frente e copie este token; você precisará dele mais tarde.

Save the Access Token

Por fim, adicione seu bot recém-instalado em um canal dentro de seu workspace. Se você ainda não criou um canal, você pode usar o #general que é criado por padrão em seu workspace do Slack. Localize a aplicação na seção Apps da barra de navegação em seu cliente Slack e clique nela. Depois de ter feito isso, abra o menu Details no lado superior direito. Se o seu cliente Slack não estiver em tela cheia, ele se parecerá com um i em um círculo.

Click on the App Details Icon

Para terminar de adicionar sua aplicação a um canal, clique no botão More representado por três pontos na página de detalhes e selecione Add this app to a channel…. Digite seu canal no modal que aparece e clique em Add.

Add App to a Channel

Agora, você criou com sucesso sua aplicação e a adicionou a um canal dentro do seu workspace do Slack. Depois de escrever o código para sua aplicação, ele será capaz de postar mensagens naquele canal. Na próxima seção, você irá começar a escrever o código Python que irá alimentar o CoinBot.

Passo 2 — Configurando o seu ambiente de desenvolvedor Python

Primeiro vamos configurar seu ambiente Python para que você possa desenvolver o Slackbot.

Abra um terminal e instale o python3 e as ferramentas relevantes em seu sistema:

  • sudo apt install python3 python3-venv

Em seguida, você irá criar um ambiente virtual para isolar seus pacotes Python da instalação de sistema do Python. Para fazer isso, primeiro crie um diretório no qual você irá criar seu ambiente virtual. Crie um novo diretório em ~/.venvs:

  • mkdir ~/.venvs

Agora, crie seu ambiente virtual Python:

  • python3 -m venv ~/.venvs/slackbot

Em seguida, ative seu ambiente virtual para que você possa usar sua instalação do Python e instalar pacotes:

  • source ~/.venvs/slackbot/bin/activate

Seu prompt de shell irá agora mostrar o ambiente virtual entre parênteses. Eles se parecerão com isso:

Agora, use o pip para instalar os pacotes Python necessários em seu ambiente virtual:

  • pip install slackclient slackeventsapi Flask

slackclient e slackeventsapi facilitam a interação do Python com as APIs do Slack. O Flask é um micro framework Web popular que você irá usar para implantar sua aplicação:

Agora que você tem seu ambiente de desenvolvimento configurado, você pode começar a escrever seu Slackbot Python:

Passo 3 — Criando a classe de mensagens Slackbot no Python

As mensagens no Slack são enviadas através de um payload JSON especificamente formatado. Este é um exemplo do JSON que seu Slackbot irá criar e enviar como uma mensagem:

{    "channel":"channel",    "blocks":[       {          "type":"section",          "text":{             "type":"mrkdwn",             "text":"Sure! Flipping a coin....nn"          }       },       {          "type":"section",          "text":{             "type":"mrkdwn",             "text":"*flips coin* The result is Tails."          }       }    ] } 

Você pode criar manualmente este JSON e enviá-lo, mas em vez disto, vamos construir uma classe Python que não só faz a criação deste payload, mas também simula uma jogada de moeda.

Primeiro use o comando touch para criar um arquivo chamado coinbot.py:

  • touch coinbot.py

Em seguida, abra o arquivo com o nano ou com o seu editor favorito:

  • nano coinbot.py

Agora, adicione as seguintes linhas de código para importar as bibliotecas relevantes para sua aplicação. A única biblioteca que você precisa para esta classe é a biblioteca random da Python Standard Library. Esta biblioteca nos permitirá simular uma jogada de moeda.

Adicione as seguintes linhas ao coinbot.py para importar todas as bibliotecas necessárias:

coinbot.py

# import the random library to help us generate the random numbers import random 

Em seguida, crie sua classe CoinBot e uma instância desta classe para criar o payload da mensagem. Adicione as seguintes linhas ao coinbot.py para criar a classe CoinBot:

coinbot.py

... class CoinBot: 

Agora, faça a indentação e crie as constantes, construtores e métodos necessários para sua classe. Primeiro vamos criar a constante que irá armazenar a base de seu payload de mensagem. Esta seção especifica que esta constante é do tipo section e que o texto é formatado através de markdown. Ele também especifica qual texto você deseja exibir. Você pode ler mais sobre as diferentes opções de payload na documentação oficial de payload de mensagem do Slack.

Acrescente as seguintes linhas ao coinbot.py para criar o modelo base para o payload:

coinbot.py

...     # Create a constant that contains the default text for the message     COIN_BLOCK = {         "type": "section",         "text": {             "type": "mrkdwn",             "text": (                 "Sure! Flipping a coin....nn"             ),         },     } 

Em seguida, crie um construtor para sua classe para que você possa criar uma instância separada do seu bot para cada requisição. Não se preocupe com sobrecarga de memória aqui; o coletor de lixo do Python irá limpar essas instâncias uma vez que elas não forem mais necessárias. Este código define o canal recipiente com base em um parâmetro passado para o construtor.

Acrescente as seguintes linhas ao coinbot.py para criar o construtor:

coinbot.py

...     # The constructor for the class. It takes the channel name as the a     # parameter and sets it as an instance variable.     def __init__(self, channel):         self.channel = channel 

Agora escreva o código que simula jogar uma moeda. Vamos gerar aleatoriamente um ou zero, representando caras ou coroas respectivamente.

Acrescente as seguintes linhas ao coinbot.py para simular jogar uma moeda e retornar o payload trabalhado:

coinbot.py

...     # Generate a random number to simulate flipping a coin. Then return the     # crafted slack payload with the coin flip message.     def _flip_coin(self):         rand_int =  random.randint(0,1)         if rand_int == 0:             results = "Heads"         else:             results = "Tails"          text = f"The result is {results}"          return {"type": "section", "text": {"type": "mrkdwn", "text": text}}, 

Por fim, crie um método que crie e retorne o payload completo da mensagem, incluindo os dados do seu construtor, chamando seu método _flip_coin.

Acrescente as seguintes linhas ao coinbot.py para criar o método que irá gerar o payload finalizado:

coinbot.py

...     # Craft and return the entire message payload as a dictionary.     def get_message_payload(self):         return {             "channel": self.channel,             "blocks": [                 self.COIN_BLOCK,                 *self._flip_coin(),             ],         } 

Agora você concluiu a classe CoinBot e ela está pronta para testes. Antes de continuar, verifique se seu arquivo finalizado, coinbot.py, contém o seguinte:

coinbot.py

# import the random library to help us generate the random numbers import random  # Create the CoinBot Class class CoinBot:      # Create a constant that contains the default text for the message     COIN_BLOCK = {         "type": "section",         "text": {             "type": "mrkdwn",             "text": (                 "Sure! Flipping a coin....nn"             ),         },     }      # The constructor for the class. It takes the channel name as the a     # parameter and then sets it as an instance variable     def __init__(self, channel):         self.channel = channel      # Generate a random number to simulate flipping a coin. Then return the     # crafted slack payload with the coin flip message.     def _flip_coin(self):         rand_int =  random.randint(0,1)         if rand_int == 0:             results = "Heads"         else:             results = "Tails"          text = f"The result is {results}"          return {"type": "section", "text": {"type": "mrkdwn", "text": text}},      # Craft and return the entire message payload as a dictionary.     def get_message_payload(self):         return {             "channel": self.channel,             "blocks": [                 self.COIN_BLOCK,                 *self._flip_coin(),             ],         } 

Salve e feche o arquivo.

Agora que você tem uma classe Python pronta para fazer o trabalho para seu Slackbot, vamos garantir que esta classe produza um payload útil de mensagem e que você possa enviá-la para seu workspace.

Passo 4 — Testando sua mensagem

Agora, vamos testar se esta classe produz um payload adequado. Crie um arquivo chamado coinbot_test.py:

  • nano coinbot_test.py

Agora, adicione o código a seguir: Certifique-se de alterar o nome do canal na instanciação da classe coinbot coin_bot = coinbot("#YOUR_CHANNEL_HERE"). Este código irá criar um cliente Slack no Python que enviará uma mensagem para o canal que você especificar onde você já instalou a aplicação:

coinbot_test.py

from slack import WebClient from coinbot import CoinBot import os  # Create a slack client slack_web_client = WebClient(token=os.environ.get("SLACK_TOKEN"))  # Get a new CoinBot coin_bot = CoinBot("#YOUR_CHANNEL_HERE")  # Get the onboarding message payload message = coin_bot.get_message_payload()  # Post the onboarding message in Slack slack_web_client.chat_postMessage(**message) 

Salve e feche o arquivo.

Antes que você possa executar este arquivo, você precisará exportar o token Slack que você salvou no Passo 1 como uma variável de ambiente:

  • export SLACK_TOKEN="your_bot_user_token"

Agora, teste este arquivo e verifique se o payload é produzido e enviado executando o seguinte script em seu terminal. Certifique-se de que seu ambiente virtual esteja ativado. Você pode verificar isso vendo o texto (slackbot) na frente do seu prompt bash. Ao executar este comando, você receberá uma mensagem do seu Slackbot com os resultados de uma jogada de moeda:

  • python coinbot_test.py

Verifique o canal em que você instalou sua aplicação e verifique se o bot realmente enviou a mensagem de jogada da moeda. Seu resultado será cara ou coroa.

Coin Flip Test

Agora que você verificou que seu Slackbot pode jogar uma moeda, criar uma mensagem, e entregar a mensagem, vamos criar um Flask para executar perpetuamente esta aplicação e fazer com que ela simule uma jogada de moeda e compartilhe os resultados sempre que ela vir certo texto nas mensagens enviadas no canal.

Passo 5 — Criando uma aplicação Flask para executar seu Slackbot

Agora que você tem uma aplicação em funcionamento que pode enviar mensagens para seu workspace do Slack, você precisa criar um processo de longo prazo para que seu bot possa ouvir as mensagens enviadas no canal e responder a elas se o texto cumprir determinados critérios. Você irá usar o framework Web Python Flask para executar este processo e ouvir eventos em seu canal.

Nesta seção, você irá executar seu aplicativo Flask a partir de um servidor com um endereço IP público para que a API Slack possa lhe enviar eventos. Se você estiver executando isso localmente em sua estação de trabalho pessoal, você precisará encaminhar a porta de seu firewall pessoal para a porta que irá estar em execução em sua estação de trabalho. Essas portas podem ser as mesmas e este tutorial será configurado para usar a porta 3000.

Primeiro ajuste suas configurações de firewall para permitir o tráfego através da porta 3000:

  • sudo ufw allow 3000

Agora, verifique o status do ufw:

  • sudo ufw status

Você verá uma saída como esta:

OutputStatus: active  To                         Action      From --                         ------      ---- OpenSSH                    ALLOW       Anywhere 3000                       ALLOW       Anywhere OpenSSH (v6)               ALLOW       Anywhere (v6) 3000 (v6)                  ALLOW       Anywhere (v6) 

Agora, crie o arquivo para sua aplicação Flask. Nomeie este arquivo app.py:

  • touch app.py

Em seguida, abra este arquivo em seu editor de texto favorito:

  • nano app.py

Agora, adicione as seguintes statements de importação: Você irá importar as seguintes bibliotecas pelas seguintes razões:

  • import os – Para acessar variáveis de ambiente
  • import logging – Para registrar os eventos da aplicação
  • from flask import Flask – Para criar uma aplicação Flask
  • from slack import WebClient – Para enviar mensagens via Slack
  • from slackeventsapi import SlackEventAdapter – Para receber eventos do Slack e processá-los
  • from coinbot import CoinBot – Para criar uma instância de seu CoinBot e gerar o payload da mensagem.

Adicione as seguintes linhas ao app.py para importar todas as bibliotecas necessárias:

app.py

import os import logging from flask import Flask from slack import WebClient from slackeventsapi import SlackEventAdapter from coinbot import CoinBot 

Agora, crie sua aplicação Flask e registre um adaptador de eventos Slack para sua aplicação Slack no endpoint /slack/events. Isso irá criar uma rota em sua aplicação Slack onde os eventos do Slack serão enviados e ingeridos. Para fazer isso, você precisará obter outro token de sua aplicação Slack, o que você fará mais tarde no tutorial. Depois de obter esta variável, você irá exportá-la como uma variável de ambiente chamada SLACK_EVENTS_TOKEN. Vá em frente e escreva seu código para lê-lo ao criar o SlackEventAdapter, mesmo que você não tenha definido o token ainda.

Acrescente as seguintes linhas ao app.py para criar a aplicação Flask e registrar o adaptador de eventos dentro desta aplicação:

app.py

... # Initialize a Flask app to host the events adapter app = Flask(__name__)  # Create an events adapter and register it to an endpoint in the slack app for event ingestion. slack_events_adapter = SlackEventAdapter(os.environ.get("SLACK_EVENTS_TOKEN"), "/slack/events", app) 

Em seguida, crie um objeto Web client que permitirá que sua aplicação execute ações no workspace, especificamente para enviar mensagens. Isso é semelhante ao que você fez quando você testou seu arquivo coinbot.py anteriormente.

Acrescente a seguinte linha ao app.py para criar este slack_web_client:

app.py

... # Initialize a Web API client slack_web_client = WebClient(token=os.environ.get("SLACK_TOKEN")) 

Agora, crie uma função que pode ser chamada, que irá criar uma instância do CoinBot, e então usar esta instância para criar um payload de mensagem e repassá-lo para o Slack web client para entrega. Esta função terá um único parâmetro, channel, que irá especificar qual canal recebe a mensagem.

Acrescente as seguintes linhas ao app.py para criar esta função:

app.py

... def flip_coin(channel):     """Craft the CoinBot, flip the coin and send the message to the channel     """     # Create a new CoinBot     coin_bot = CoinBot(channel)      # Get the onboarding message payload     message = coin_bot.get_message_payload()      # Post the onboarding message in Slack     slack_web_client.chat_postMessage(**message) 

Agora que você criou uma função para lidar com os aspectos de mensagens da sua aplicação, crie uma que monitora os eventos do Slack para uma determinada ação e então execute seu bot. Você irá configurar sua aplicação para responder com os resultados de uma simulação de jogada de moeda quando ela vir a frase “Hey Sammy, Flip a coin”. Você vai aceitar qualquer versão disso; caso você não queira impedir que a aplicação responda.

Primeiro decore sua função com a sintaxe @slack_events_adapter.on que permite que sua função receba eventos. Especifique que você só deseja os eventos message e faça com que sua função aceite um parâmetro payload contendo todas as informações necessárias do Slack. Depois de ter este payload, você irá fazer um parse do texto e analisá-lo. Então, se ele receber a frase de ativação, sua aplicação irá enviar os resultados de uma simulação de jogada de moeda.

Acrescente o seguinte código ao app.py para receber, analisar e agir sobre mensagens recebidas:

app.py

# When a 'message' event is detected by the events adapter, forward that payload # to this function. @slack_events_adapter.on("message") def message(payload):     """Parse the message event, and if the activation string is in the text,     simulate a coin flip and send the result.     """      # Get the event data from the payload     event = payload.get("event", {})      # Get the text from the event that came through     text = event.get("text")      # Check and see if the activation phrase was in the text of the message.     # If so, execute the code to flip a coin.     if "hey sammy, flip a coin" in text.lower():         # Since the activation phrase was met, get the channel ID that the event         # was executed on         channel_id = event.get("channel")          # Execute the flip_coin function and send the results of         # flipping a coin to the channel         return flip_coin(channel_id) 

Por fim, crie uma seção main que irá criar um logger para que você possa ver os detalhes internos da sua aplicação, bem como lançar a aplicação em seu endereço IP externo na porta 3000. Para ingerir os eventos do Slack, como quando uma nova mensagem é enviada, você deve testar sua aplicação em um endereço IP voltado para o público.

Acrescente as seguintes linhas ao app.py para configurar sua seção main:

app.py

if __name__ == "__main__":     # Create the logging object     logger = logging.getLogger()      # Set the log level to DEBUG. This will increase verbosity of logging messages     logger.setLevel(logging.DEBUG)      # Add the StreamHandler as a logging handler     logger.addHandler(logging.StreamHandler())      # Run your app on your externally facing IP address on port 3000 instead of     # running it on localhost, which is traditional for development.     app.run(host='0.0.0.0', port=3000) 

Agora você concluiu a aplicação Flask e ela está pronta para testes. Antes de seguir em frente, verifique se seu arquivo finalizado, o app.py contém o seguinte:

app.py

import os import logging from flask import Flask from slack import WebClient from slackeventsapi import SlackEventAdapter from coinbot import CoinBot  # Initialize a Flask app to host the events adapter app = Flask(__name__) # Create an events adapter and register it to an endpoint in the slack app for event injestion. slack_events_adapter = SlackEventAdapter(os.environ.get("SLACK_EVENTS_TOKEN"), "/slack/events", app)  # Initialize a Web API client slack_web_client = WebClient(token=os.environ.get("SLACK_TOKEN"))  def flip_coin(channel):     """Craft the CoinBot, flip the coin and send the message to the channel     """     # Create a new CoinBot     coin_bot = CoinBot(channel)      # Get the onboarding message payload     message = coin_bot.get_message_payload()      # Post the onboarding message in Slack     slack_web_client.chat_postMessage(**message)   # When a 'message' event is detected by the events adapter, forward that payload # to this function. @slack_events_adapter.on("message") def message(payload):     """Parse the message event, and if the activation string is in the text,     simulate a coin flip and send the result.     """      # Get the event data from the payload     event = payload.get("event", {})      # Get the text from the event that came through     text = event.get("text")      # Check and see if the activation phrase was in the text of the message.     # If so, execute the code to flip a coin.     if "hey sammy, flip a coin" in text.lower():         # Since the activation phrase was met, get the channel ID that the event         # was executed on         channel_id = event.get("channel")          # Execute the flip_coin function and send the results of         # flipping a coin to the channel         return flip_coin(channel_id)  if __name__ == "__main__":     # Create the logging object     logger = logging.getLogger()      # Set the log level to DEBUG. This will increase verbosity of logging messages     logger.setLevel(logging.DEBUG)      # Add the StreamHandler as a logging handler     logger.addHandler(logging.StreamHandler())      # Run our app on our externally facing IP address on port 3000 instead of     # running it on localhost, which is traditional for development.     app.run(host='0.0.0.0', port=3000) 

Salve e feche o arquivo.

Agora que seu app Flask está pronto para atender sua aplicação, vamos testá-la.

Passo 6 — Executando sua aplicação Flask

Por fim, junte tudo e execute sua aplicação.

Primeiro, adicione a aplicação em execução como um handler autorizado para seu Slackbot.

Navegue até a seção Basic Information da sua aplicação na UI do Slack Desça até você encontrar a seção App Credentials.

Slack Signing Secret

Copie o Signing Secret e exporte-o como a variável de ambiente SLACK_EVENTS_TOKEN:

  • export SLACK_EVENTS_TOKEN="MY_SIGNING_SECRET_TOKEN"

Com isso, você tem todos os tokens de API necessários para executar sua aplicação. Consulte o Passo 1 se você precisar relembrar como exportar seu SLACK_TOKEN. Agora, você pode iniciar sua aplicação e verificar se ela está realmente em execução. Certifique-se de que seu ambiente virtual esteja ativado e execute o seguinte comando para iniciar sua aplicação Flask:

  • python3 app.py

Você verá uma saída como esta:

(slackbot) [20:04:03] sammy:coinbot$ python app.py  * Serving Flask app "app" (lazy loading)  * Environment: production    WARNING: This is a development server. Do not use it in a production deployment.    Use a production WSGI server instead.  * Debug mode: off  * Running on http://0.0.0.0:3000/ (Press CTRL+C to quit) 

Para verificar se sua aplicação está ativa, abra uma nova janela de terminal e faça um curl no endereço IP do seu servidor com a porta correta em /slack/events:

  • curl http://YOUR_IP_ADDRESS:3000/slack/events

O curl retornará o seguinte:

OutputThese are not the slackbots you're looking for. 

Receber a mensagem These are not the slackbots you're looking for. indica que sua aplicação está funcionando normalmente.

Agora, deixe esta aplicação Flask em execução enquanto você termina de configurar sua aplicação na UI do Slack.

Primeiro conceda à sua aplicação as permissões apropriadas para que ela possa ouvir mensagens e responder de acordo. Clique em Event Subscriptions na barra lateral da UI e alterne o botão de opção Enable Events.

Enable Events Button

Depois de ter feito isso, digite seu endereço IP, porta e o endpoint /slack/events no campo Request URL. Não se esqueça do prefixo do protocolo HTTP. O Slack fará uma tentativa de se conectar ao seu endpoint. Depois de ter feito isso com sucesso você verá uma marca de verificação verde com a palavra Verified ao lado dela.

Event Subscriptions Request URL

Em seguida, expanda Subscribe to bot events e adicione a permissão message.channels à sua aplicação. Isso permitirá que sua aplicação receba mensagens do seu canal e as processe.

Subscribe to bot events permissions

Depois de ter feito isso, você verá o evento listado em sua seção Subscribe to bot events. Em seguida, clique no botão verde Save Changes no canto inferior direito.

Confirm and Save changes

Depois de fazer isso, você verá uma faixa amarela no topo da tela lhe informando que você precisa reinstalar sua aplicação para que as seguintes alterações sejam aplicadas. Sempre que você alterar permissões você precisará reinstalar sua aplicação. Clique no link reinstall your app nessa faixa para reinstalar sua aplicação.

Reinstall your app banner

Você verá uma tela de confirmação resumindo as permissões que seu bot terá e perguntando se você deseja permitir a instalação. Clique no botão verde Allow para terminar o processo de instalação.

Reinstall confirmation

Agora que você fez isso, sua aplicação deve estar pronta. Volte para o canal em que você instalou o CoinBot e envie uma mensagem contendo a frase Hey Sammy, Flip a coin nela. Seu bot irá jogar uma moeda e responder com os resultados. Parabéns! Você criou um Slackbot!

Hey Sammy, Flip a coin

Conclusão

Quando você terminar de desenvolver sua aplicação e estiver pronto para movê-la para a produção, será necessário implantá-la em um servidor. Isso é necessário porque o servidor de desenvolvimento Flask não é um ambiente de produção seguro. Você estará melhor servido se implantar sua aplicação usando um WSGI e talvez até mesmo protegendo um nome de domínio e dando ao seu servidor um registro DNS. Existem muitas opções para implantar aplicações Flask, algumas das quais estão listadas abaixo:

  • Deploy your Flask application to Ubuntu 20.04 using Gunicorn and Nginx
  • Deploy your Flask application to Ubuntu 20.04 using uWSGI and Nginx
  • Deploy your Flask Application Using Docker on Ubuntu 18.04

Há muito mais maneiras de implantar sua aplicação do que apenas essas. Como sempre, quando se trata de implantações e infraestrutura, faça o que funciona melhor para você.

De qualquer forma, agora você tem um Slackbot que você pode usar para jogar uma moeda para ajudá-lo a tomar decisões, como o que comer para o almoço.

Também é possível acessar este código base e modificá-lo para atender às suas necessidades, seja para suporte automatizado, gerenciamento de recursos, fotos de gatos ou o que você imaginar. Você pode ver a documentação completa da API do Python Slack aqui.