No contexto de hospedagem de alto desempenho e das ferramentas de desenvolvimento versáteis, a Kinsta se destaca como uma plataforma líder que atende ao WordPress, aplicativos, bancos de dados e até mesmo à hospedagem gratuita de site estático.
O Slack, conhecido por seus comandos Slash, integra-se perfeitamente aos aplicativos e serviços hospedados na Kinsta, permitindo que os usuários automatizem tarefas e aumentem significativamente a eficiência.
Este guia explica como você pode configurar a comunicação em tempo real entre o Slack e um aplicativo Python hospedado na Kinsta. Ao aproveitar os comandos Slash, os usuários do aplicativo ganham a capacidade de criar, consultar e excluir produtos com rapidez.
Essa integração permite que eles atualizem dinamicamente o inventário de produtos, garantindo respostas rápidas às necessidades dos clientes.
Entendendo os comandos do Slack
Os comandos do Slack são atalhos baseados em texto. Eles começam com uma barra (/
) seguida de uma palavra-chave específica e um parâmetro opcional.
Os comandos do Slack acionam ações ou interagem diretamente com integrações na interface do Slack. Por exemplo, /remind
permite que você defina lembretes diretamente por meio de notificações do Slack.
Com as integrações do Slack, você pode configurar comandos personalizados para seus aplicativos. Neste tutorial, sua equipe pode consultar sem esforço o inventário do nosso aplicativo de produto usando o comando Slash /check_inventory
e outros comandos.
Ao integrar o Slack aos seus aplicativos, você promove uma interação perfeita e fluxos de trabalho simplificados em um local de trabalho moderno. Ele aprimora a comunicação e a produtividade por meio de:
- Um hub de comunicação centralizado – O Slack funciona como um espaço unificado para as equipes. A integração de aplicativos ao Slack consolida os canais, mantendo as conversas e as informações em um só lugar e aumentando a eficiência.
- Atualizações em tempo real – Os aplicativos integrados fornecem alertas instantâneos sobre eventos importantes, garantindo que todos se mantenham informados e reajam rapidamente a mudanças ou atualizações.
- Fluxos de trabalho simplificados – As integrações automatizam tarefas como notificações de ferramentas de gerenciamento de projetos ou ações de acionamento no software de CRM, reduzindo o trabalho manual.
- Colaboração aprimorada – Os membros da equipe que acessam aplicativos diretamente do Slack promovem uma colaboração perfeita. Eles podem compartilhar, editar arquivos e discutir projetos com facilidade, promovendo o trabalho em equipe em todas as funções.
Como criar um aplicativo Python na Kinsta
Vamos criar e implantar um aplicativo de gerenciamento de produtos na Kinsta. Em seguida, integre ao Slack para explorar os comandos Slash. Os usuários podem adicionar, excluir e consultar os produtos do inventário por meio de comandos Slash no Slack.
Pré-requisitos
Para acompanhar este guia, presumimos que você tenha:
- Conhecimento básico de Python
- Uma conta do Slack
Primeiro, vamos configurar um projeto Python na Kinsta. Para fazer isso, siga as etapas abaixo:
- Visite o template Python da Kinsta no GitHub.
- Selecione Usar este template > Criar um novo repositório para copiar o código inicial em um repositório dentro da sua conta GitHub.
- Quando seu repositório estiver pronto, faça login ou crie uma conta para visualizar seu painel MyKinsta.
- Autorize a Kinsta com seu provedor Git (Bitbucket, GitHub ou GitLab).
- Clique em Aplicativos na barra lateral esquerda e, em seguida, clique em Adicionar aplicativo.
- Selecione o repositório e o branch dos quais você deseja implantar.
- Atribua um nome exclusivo ao seu aplicativo e escolha um local de centro de dados.
- Em seguida, configure seu ambiente de build. Selecione a configuração da máquina de build padrão com a opção Nixpacks recomendada para esta demonstração.
- Use todas as configurações padrão e, em seguida, clique em Criar aplicativo.
A implantação normalmente leva alguns minutos e, se for bem-sucedida, você receberá um link para o aplicativo junto com um painel contendo informações sobre a implantação.
Como configurar a integração do Slack em um aplicativo Python
Vamos começar criando um aplicativo do Slack e, em seguida, configurar os comandos do Slack que seriam conectados ao seu aplicativo Python por meio de alguns tokens. Vamos configurar um aplicativo do Slack:
- Acesse o painel de controle da API do Slack.
- Clique em Create New App e escolha From Scratch.
- Dê um nome ao seu aplicativo Slack (por exemplo, product-inventory).
- Selecione o espaço de trabalho e clique em Create App.
Agora, para a autenticação:
- Habilite o Socket Mode na barra lateral do painel do Slack.
- Gere um token no nível do aplicativo digitando um nome de token e clicando em Generate.
- Salve esse token em nível de aplicativo para configurar variáveis de ambiente posteriormente.
Como configurar os comandos Slash
Para configurar os comandos Slash do seu aplicativo:
- Navegue até a seção Features em Basic Information no painel da API do Slack. Escolha Slash Commands.
- Clique em Create New Command para configurar um novo comando.
- Na página Create New Command, preencha os detalhes do seu novo comando do Slack. Por exemplo, digite
/hi
no campo Comando. Opcionalmente, adicione uma breve descrição como “Says hello!” (Diz olá!) e forneça uma dica de uso. Clique em Save. - Na seção Instalar aplicativo da barra lateral, clique em Install to Workspace.
- Acesse o token OAuth do usuário do bot indo para OAuth & Permissions na barra lateral. Salve esse token para referência futura.
Como adicionar tokens à implantação de aplicativos da Kinsta
- Vá para a seção Variáveis de ambiente em Configurações da implantação do seu aplicativo no MyKinsta.
- Clique em Adicionar variável de ambiente.
- Para a Chave 1, SLACK_BOT_TOKEN, cole o token OAuth do usuário do bot no Valor 1. Para a Chave 2, SLACK_APP_TOKEN, cole o token no nível do aplicativo no Valor 2.
- Certifique-se de que ambas as opções estejam marcadas e clique em Implantar agora para que a Kinsta possa reimplantar seu aplicativo com as variáveis de ambiente.
Como implementar a comunicação em tempo real
Para esta demonstração, você usa o template Python da Kinsta, que contém os seguintes arquivos:
- Procfile – Especifica os comandos para executar seu aplicativo.
- requirements.txt – Lista as dependências necessárias para o aplicativo Python.
- server.py – O arquivo principal do aplicativo Python, que lida com a funcionalidade ou as operações do lado do servidor.
A Kinsta cria automaticamente um processo com base no Procfile na raiz do repositório ao implantar um aplicativo. O Procfile contém o seguinte código.
web: python server.py
Esse comando executa o código que o server.py contém. A Kinsta também instala as dependências do Python em requirements.txt durante a implantação e a reimplantação.
Agora, vamos usar o framework Bolt para configurar a comunicação em tempo real com seu aplicativo. Adicione as seguintes linhas ao seu arquivo requirements.txt para instalar automaticamente o Bolt no seu aplicativo Python quando você atualizar o repositório.
slack-bolt==1.18.0
slack-sdk==3.23.0
Além disso, adicione a biblioteca psycopg2
ao arquivo requirements.txt. Ela será usada para que você se conecte a um banco de dados Postgres.
psycopg2-binary==2.9.9
Como implantar um banco de dados Postgres com a Kinsta
O aplicativo de inventário de produtos precisa de uma maneira de manter os dados dos produtos que o comandos Slash adiciona ao banco de dados. Para criar um armazenamento de dados persistente, você pode usar o banco de dados hospedado da Kinsta.
- Primeiro, implante um banco de dados Postgres no seu painel Kinsta navegando até a seção Bancos de dados na barra lateral do painel MyKinsta.
- Clique em Criar um banco de dados. Configure os detalhes do banco de dados inserindo um nome e selecionando o tipo de banco de dados. Selecione a opção PostgreSQL e configure o tamanho que você deseja. Um nome de usuário e uma senha do banco de dados são gerados automaticamente:
- Clique em Continuar para concluir a configuração do banco de dados. Aguarde até que o banco de dados PostgreSQL seja criado.
Quando você for bem-sucedido, para obter a string de conexão para acesso externo ao banco de dados, navegue até a seção Conexões externas do painel do banco de dados implantado e copie a string de conexão externa.Agora, você pode usar essa string de conexão para se conectar ao banco de dados a partir do seu aplicativo Python.
- No seu projeto Python, crie um arquivo db.py no diretório do projeto para as funções de inicialização do banco de dados. Adicione o seguinte código:
import psycopg2 import os # get connection string from environment variable connection_string = os.environ.get("DATABASE_CONNECTION_STRING") def get_conn(): # create connection conn = psycopg2.connect(connection_string) # Return connection to the database return conn def init_db(): # get connection conn = get_conn() # get cursor cur = conn.cursor() cur.execute(""" DROP TABLE IF EXISTS products; CREATE TABLE products ( id INTEGER PRIMARY KEY, name TEXT UNIQUE NOT NULL, quantity INTEGER NOT NULL ); """) cur.close() conn.commit() conn.close()
Quando a função
get_conn()
é chamada, ela cria e retorna uma conexão com o banco de dados Kinsta implantado usando sua string de conexão externa.A função
init_db()
obtém uma conexão com o banco de dados, define o esquema do banco de dados e cria a tabela, além de confirmar as alterações. Você só deve chamar a funçãoinit_db()
uma vez ao configurar inicialmente o servidor de aplicativos. Use a funçãoget_conn()
nas chamadas subsequentes para obter uma conexão com o banco de dados.
Como implementar os manipuladores do comando Slash
Agora, crie o código do servidor de aplicativos.
- Exclua o conteúdo do arquivo server.py e importe as seguintes bibliotecas:
import os from slack_bolt import App from slack_bolt.adapter.socket_mode import SocketModeHandler from db import get_conn, init_db from psycopg2 import DatabaseError
Elas são necessárias para a funcionalidade do aplicativo Slack, conexões de banco de dados e tratamento de erros.
- Adicione o seguinte código ao arquivo server.py após as instruções de importação:
# Initialize your app with your bot token app = App( token=os.environ.get("SLACK_BOT_TOKEN"), )
A classe
App
deslack_bolt
é usada para criar uma instância do aplicativo Slack. Ela inicializa o aplicativo com o token OAuth do usuário do bot recuperado da variável de ambienteSLACK_BOT_TOKEN
. - Em seguida, implante um manipulador para o comando Slash
/hi
que você adicionou ao seu aplicativo Slack anteriormente. Adicione as seguintes linhas ao arquivo server.py.# The hi command simply sends back a greeting @app.command("/hi") def send_hello(ack, respond, command): # Acknowledge command request ack() respond(f"Hello!")
O
@app.command()
cria um ouvinte para a string de comando passada como argumento e mapeia a seguinte função para as solicitações desse comando Slash. A funçãosend_hello()
lida com a lógica da solicitação.O código também passa as variáveis de solicitação
ack
,respond
ecommand
para que a função as utilize. Chameack
para confirmar a solicitação do comando Slash, pois essa é a primeira etapa antes de continuar o processamento, e chamerespond
para enviar uma resposta de texto.Quando o usuário digitar o comando Slash
/hi
no seu espaço de trabalho do Slack, ele receberá a resposta “Hello!” - Volte ao painel do aplicativo Slack e adicione os seguintes comandos.
Comando Descrição curta Dica de uso /add_product
Adicionar um produto ao inventário. product_id, product_name, product_quantity /check_inventory
Verificar se há um produto com um ID correspondente no inventário. product_id /delete_product
Excluir do inventário o produto com o ID correspondente. product_id Agora, sua página comando Slash deve se parecer com a seguinte captura de tela, contendo uma lista de comandos e seus detalhes.
- Adicione o manipulador
/add_product
ao arquivo server.py.# command to add products @app.command("/add_product") def add_product(ack, respond, command, request): #Acknowledge command request ack() # Extract payload from request payload = request.body['text'] id, name, quantity = [i.strip() for i in payload.split(",")] # conn object conn = None try: # get conn conn = get_conn() # get cursor cur = conn.cursor() # Insert product into the database cur.execute( "INSERT INTO products (id, name, quantity) VALUES (%s, %s, %s)", (int(id), name, int(quantity)) ) # close communication with postgresql cur.close() # commit changes conn.commit() # Response respond(f"""Added product to inventory: id - {id}, name - {name}, quantity - {quantity} """) except DatabaseError: # Send a response respond(f"Product with ID {id} exists in inventory!") finally: # close connection if conn is not None: conn.close()
request.body
acessa a carga útil completa da solicitação que o Slack envia durante o processo de tratamento.Quando um usuário digita o comando Slash
/add_product
, o aplicativo envia o seguinte exemplo de payload JSON como uma solicitação POST.{ 'token': , 'team_id': , 'team_domain': , 'channel_id': , 'channel_name': , 'user_id': , 'user_name': , 'command': '/add_product', 'text': '1, notebook, 5', 'api_app_id': , 'is_enterprise_install': , 'response_url': , 'trigger_id': }
Os campos
command
etext
estão incluídos.command
contém o comando Slash acionado, enquantotext
contém seu texto adicional. Por exemplo, se o usuário digitar o comando/add_product 1, notebook, 5
,text
conterá “1, notebook, 5”.O manipulador
add_product
extrai o ID, o nome e a quantidade do produto da solicitação do usuário e se conecta ao banco de dados usando a função auxiliarget_conn()
. Ele também executa uma operação SQL de inserção para adicionar o produto ao banco de dados. Se o ID do produto já existir no banco de dados, o código tratará o erro e responderá que o ID já existe. - Agora, adicione o restante dos manipuladores de comando ao arquivo server.py.
# command to check inventory for a product_id @app.command("/check_inventory") def check_inventory(ack, respond, command, request): # Acknowledge command request ack() # Extract payload from request id = request.body['text'].strip() # Get a database connection conn = None try: # get conn conn = get_conn() # get cursor cur = conn.cursor() # Fetch matching product with ID from database cur.execute( "SELECT * FROM products WHERE id=%s", (int(id),) ) product = cur.fetchone() # close comms cur.close() if product is None: respond(f"No product with matching ID {id} found.") else: # Deconstruct tuple if the product exists _, name, quantity = product respond(f"""Product with ID {id} found: name - {name}, quantity - {quantity} """) except Exception as e: print("Connection error: %s", e) finally: # close connection if conn is not None: conn.close() # command to delete the matching product_id from inventory @app.command("/delete_product") def delete_product(ack, respond, command, request): #Acknowledge command request ack() # Extract payload from request id = request.body['text'].strip() # Get connection conn = None try: # Get connection conn = get_conn() # get cursor cur = conn.cursor() # Insert the product into the database cur.execute( "DELETE FROM products WHERE id = %s", (int(id),) ) cur.close() conn.commit() # Response respond(f"Product with ID {id} deleted from inventory!") except Exception as e: print("Connection error: %s", e) finally: # close connection if conn is not None: conn.close()
Esses dois manipuladores de comando consultam e excluem o ID do produto correspondente no inventário, respectivamente.
Como executar o servidor
- Para reunir a inicialização do banco de dados e a conexão do soquete, adicione as seguintes linhas ao arquivo server.py.
# Start your app if __name__ == "__main__": # Initialize database on start init_db() # Connect socket handler = SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]) handler.start()
Você deve inicializar o
SocketModeHandler
com seu token no nível do aplicativo. Use oSLACK_APP_TOKEN
para acessar a variável de ambiente implantada no aplicativo Kinsta. - Confirme as alterações em seu repositório remoto para implantá-las automaticamente na Kinsta. Agora, o server.py inicializa o banco de dados e estabelece a conexão de soquete. A Kinsta acionará uma reimplantação automática do seu aplicativo Python.
Teste e solucione problemas do seu aplicativo
Você pode testar seu aplicativo no Slack usando os comandos Slash configurados.
-
- Vá para o espaço de trabalho associado ao seu aplicativo. Digite o caractere de barra (‘/’) para exibir os comandos do aplicativo:
- Teste cada comando de barra. Por exemplo, digite
/hi
. Você receberá a resposta “Hello!” - Teste o que acontece quando você adiciona o mesmo produto duas vezes. Execute o comando de barra
/add_product 1, notepad, 2
duas vezes.Como mostra a captura de tela acima, o primeiro comando funcionou. Ele adicionou um novo produto. O segundo comando solicitou a resposta de que o ID já existe.
- Tente consultar o ID do produto que acabamos de adicionar. Digite
/check_inventory 1
.A consulta retornou o produto com o ID correspondente.
- Por fim, tente excluir o produto que você adicionou. Digite
/delete_product 1
.
Como solucionar problemas
Ao configurar e implantar o aplicativo, você pode encontrar erros que precisam ser resolvidos para que o aplicativo funcione corretamente. Tente os seguintes métodos para detectar e corrigir erros típicos.
-
-
- Verifique seus tokens: Certifique-se de que você configurou corretamente o token no nível do aplicativo com o escopo
connections:write
para habilitar o acesso usando o Socket Mode. Além disso, use os tokens corretos para a classe do aplicativo. O token de usuário do bot começa comxoxb-<...>
. Use o token em nível de aplicativo (xapp-<...>
) para a classeSocketModeHandler
. - Verifique seus comandos de barra: Certifique-se de que você configurou os comandos Slash no painel do seu aplicativo Slack e configurou os manipuladores corretos no código do servidor de aplicativos.
- Use um melhor tratamento de erros: Verifique se a lógica do seu aplicativo trata corretamente os erros, por exemplo, ao executar operações do banco de dados.
- Verifique seus tokens: Certifique-se de que você configurou corretamente o token no nível do aplicativo com o escopo
-
Resumo
Neste guia, você aprendeu a criar um aplicativo Python com comunicação em tempo real por meio dos comandos Slash do Slack. Você também aprendeu a implantar o aplicativo na Kinsta.
A integração de um aplicativo hospedado na Kinsta com o Slack permite que os usuários façam alterações usando rapidamente os comandos Slash, aumentando a interatividade e a eficiência do fluxo de trabalho e oferecendo acesso imediato a dados em tempo real. Agora, a equipe pode adicionar, excluir ou verificar o inventário de produtos sem sair da plataforma de comunicações, aumentando a produtividade durante um dia de trabalho agitado.
A PaaS da Kinsta oferece ainda mais possibilidades – você pode conectar aplicativos e bancos de dados, implantando soluções de Full-Stack para empresas e negócios. E a melhor parte? Seus primeiros US$20 são por nossa conta!
Deixe um comentário