Uma estrutura Python para criar aplicativos Slack rapidamente com os recursos mais recentes da plataforma. Leia o guia de primeiros passos e veja nossos exemplos de código para aprender como construir aplicativos usando Bolt. Os documentos do módulo Python estão disponíveis aqui.
# Python 3.6+ required
python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install slack_bolt
Crie um aplicativo Bolt para Python chamando um construtor, que é uma exportação de nível superior. Se preferir, você pode criar um aplicativo assíncrono.
import logging
logging . basicConfig ( level = logging . DEBUG )
from slack_bolt import App
# export SLACK_SIGNING_SECRET=***
# export SLACK_BOT_TOKEN=xoxb-***
app = App ()
# Add functionality here
if __name__ == "__main__" :
app . start ( 3000 ) # POST http://localhost:3000/slack/events
export SLACK_SIGNING_SECRET= ***
export SLACK_BOT_TOKEN=xoxb- ***
python app.py
# in another terminal
ngrok http 3000
Se você usar o modo Socket para executar seu aplicativo, SocketModeHandler
estará disponível para ele.
import os
from slack_bolt import App
from slack_bolt . adapter . socket_mode import SocketModeHandler
# Install the Slack app and get xoxb- token in advance
app = App ( token = os . environ [ "SLACK_BOT_TOKEN" ])
# Add functionality here
if __name__ == "__main__" :
# Create an app-level token with connections:write scope
handler = SocketModeHandler ( app , os . environ [ "SLACK_APP_TOKEN" ])
handler . start ()
Execute o aplicativo desta forma:
export SLACK_APP_TOKEN=xapp- ***
export SLACK_BOT_TOKEN=xoxb- ***
python app.py
# SLACK_SIGNING_SECRET is not required
# Running ngrok is not required
Os aplicativos normalmente reagem a uma coleção de eventos recebidos, que podem corresponder a eventos, ações, atalhos, comandos de barra ou solicitações de opções da API de eventos. Para cada tipo de solicitação, existe um método para construir uma função de ouvinte.
# Listen for an action from a Block Kit element (buttons, select menus, date pickers, etc)
app . action ( action_id )( fn )
# Listen for dialog submissions
app . action ({ "callback_id" : callbackId })( fn )
# Listen for slash commands
app . command ( command_name )( fn )
# Listen for an event from the Events API
app . event ( event_type )( fn )
# Listen for a custom step execution from a workflow
app . function ( callback_id )( fn )
# Convenience method to listen to only `message` events using a string or re.Pattern
app . message ([ pattern ,])( fn )
# Listen for options requests (from select menus with an external data source)
app . options ( action_id )( fn )
# Listen for a global or message shortcuts
app . shortcut ( callback_id )( fn )
# Listen for view_submission modal events
app . view ( callback_id )( fn )
A forma recomendada de usar esses métodos são os decoradores:
@ app . event ( event_type )
def handle_event ( event ):
pass
A maior parte da funcionalidade do aplicativo estará dentro das funções do ouvinte (os parâmetros fn
acima). Essas funções são chamadas com um conjunto de argumentos, cada um dos quais pode ser usado em qualquer ordem. Se quiser acessar argumentos de um único objeto, você pode usar args
, uma instância slack_bolt.kwargs_injection.Args
que contém todos os argumentos disponíveis para esse evento.
Argumento | Descrição |
---|---|
body | Dicionário que contém todo o corpo da solicitação (superconjunto de payload ). Alguns dados acessórios só estão disponíveis fora da carga útil (como trigger_id e authorizations ). |
payload | Conteúdo do evento de entrada. A estrutura da carga útil depende do ouvinte. Por exemplo, para um evento da API de eventos, payload será a estrutura do tipo de evento. Para uma ação de bloqueio, será a ação da lista actions . O dicionário payload também pode ser acessado por meio do alias correspondente ao ouvinte ( message , event , action , shortcut , view , command ou options ). Por exemplo, se você estivesse construindo um ouvinte message() , você poderia usar os argumentos payload e message de forma intercambiável. Uma maneira fácil de entender o que há em uma carga útil é registrá-la . |
context | Contexto do evento. Este dicionário contém dados sobre o evento e o aplicativo, como o botId . O middleware pode adicionar contexto adicional antes que o evento seja transmitido aos ouvintes. |
ack | Função que deve ser chamada para confirmar que seu aplicativo recebeu o evento de entrada. ack existe para todas as ações, atalhos, envios de visualização, comandos de barra e solicitações de opções. ack retorna uma promessa que é resolvida quando concluída. Leia mais em Reconhecimento de eventos. |
respond | Função utilitária que responde a eventos recebidos se contiver um response_url (atalhos, ações e comandos de barra). |
say | Função utilitária para enviar uma mensagem ao canal associado ao evento recebido. Este argumento só está disponível quando o ouvinte é acionado para eventos que contêm um channel_id (os mais comuns são eventos message ). say aceita strings simples (para mensagens de texto simples) e dicionários (para mensagens contendo blocos). |
client | Cliente da API Web que usa o token associado ao evento. Para instalações de espaço de trabalho único, o token é fornecido ao construtor. Para instalações em vários espaços de trabalho, o token é retornado usando a biblioteca OAuth ou manualmente usando a função authorize . |
logger | A instância logging.Logger integrada que você pode usar em middleware/ouvintes. |
complete | Função utilitária usada para sinalizar a conclusão bem-sucedida de uma execução de etapa personalizada. Isso instrui o Slack a prosseguir com as próximas etapas do fluxo de trabalho. Este argumento só está disponível com o ouvinte .function e .action ao lidar com execuções de etapas de fluxo de trabalho personalizadas. |
fail | Função utilitária usada para sinalizar que uma etapa personalizada não foi concluída. Isso diz ao Slack para interromper a execução do fluxo de trabalho. Este argumento só está disponível com o ouvinte .function e .action ao lidar com execuções de etapas de fluxo de trabalho personalizadas. |
Se preferir criar seu aplicativo com asyncio, você pode importar a biblioteca AIOHTTP e chamar o construtor AsyncApp
. Em aplicativos assíncronos, você pode usar o padrão assíncrono/aguardar.
# Python 3.6+ required
python -m venv .venv
source .venv/bin/activate
pip install -U pip
# aiohttp is required
pip install slack_bolt aiohttp
Em aplicativos assíncronos, todos os middleware/ouvintes devem ser funções assíncronas. Ao chamar métodos utilitários (como ack
e say
) dentro dessas funções, é necessário usar a palavra-chave await
.
# Import the async app instead of the regular one
from slack_bolt . async_app import AsyncApp
app = AsyncApp ()
@ app . event ( "app_mention" )
async def event_test ( body , say , logger ):
logger . info ( body )
await say ( "What's up?" )
@ app . command ( "/hello-bolt-python" )
async def command ( ack , body , respond ):
await ack ()
await respond ( f"Hi <@ { body [ 'user_id' ] } >!" )
if __name__ == "__main__" :
app . start ( 3000 )
Se você quiser usar outro framework Web assíncrono (por exemplo, Sanic, FastAPI, Starlette), dê uma olhada nos adaptadores integrados e seus exemplos.
A documentação contém mais informações sobre conceitos básicos e avançados do Bolt para Python. Além disso, todos os documentos do módulo Python desta biblioteca estão disponíveis aqui.
Se você ficar preso, estamos aqui para ajudar. A seguir estão as melhores maneiras de obter assistência para resolver seu problema:
[email protected]