Slackプラットフォームは、アプリを構築するためのいくつかのAPIを提供します。各Slack APIは、プラットフォームから機能の一部を提供するため、ニーズに合ったものだけを選択できます。このSDKは、SlackのAPIごとに対応するパッケージを提供します。独立して使用すると小さくて強力で、一緒に使用するとシームレスに動作します。
Slack Pythonの使用に関する包括的なドキュメントは、https://tools.slack.dev/python-slack-sdk/にあります。
チーム用のカスタムアプリを構築する場合でも、サードパーティのサービスをSlackワークフローに統合する場合でも、Slack Developer Kit for Pythonを使用すると、Pythonの柔軟性を活用して、プロジェクトをできるだけ早く稼働させることができます。
Python Slack SDKは、次の相互作用を可能にします。
slack_sdk.web
:Web APIメソッドを呼び出すためslack_sdk.webhook
:ペイロードで着信するwebhooksとresponse_url
sを利用するためslack_sdk.signature
:Slack APIサーバーからの受信要求を確認するためslack_sdk.socket_mode
:ソケットモードの接続を介してメッセージを受信して送信するためslack_sdk.audit_logs
:監査ログAPIを使用するためslack_sdk.scim
:SCIM APIを利用するためslack_sdk.oauth
:Slack Oauthフローを実装するためslack_sdk.models
:使いやすいビルダーを使用してブロックキットUIコンポーネントを構築するためslack_sdk.rtm
:RTM APIを利用するためイベントAPIとインタラクティブ機能を使用する場合は、Pythonライブラリのボルトを確認してください。トークンと認証の詳細については、AUTHガイドをご覧ください。
SlackClientをお探しですか?ウェブサイトは前と同じようにここに住んでいます。ただし、SlackClientプロジェクトは現在メンテナンスモードにあり、このslack_sdk
は後継者です。 slack_sdk v3に移行する時間がある場合は、移行ガイドに従って、更新後もアプリが動作し続けることを確認してください。
このライブラリには、Python 3.6以降が必要です。 Python 2が必要な場合は、SlackClient -v1.xを使用してください。 Pythonのバージョンを確認する方法がわからない場合は、以下を使用して確認できます。
注:コマンドの前に
python3
使用して、正しいPythonパスを確実に使用する必要がある場合があります。たとえば、python3 --version
python --version
-- or --
python3 --version
Pypiを使用して、Python用のSlack開発者キットをインストールすることをお勧めします。
$ pip install slack_sdk
このチュートリアルを作成して、10分以内に基本的なSlackアプリを作成しました。一般的なプログラミング知識とPythonの基本が必要です。 Slack Web APIおよびRTM APIとの対話に焦点を当てています。それを使用して、このSDKの使用方法をアイデアしてください。
開始するためにチュートリアルを読んでください!
Slackは、さまざまな方法でSlackと対話するアプリケーションを構築する機能を提供するWeb APIを提供します。この開発キットは、そのAPIとの相互作用を簡単にするモジュールベースのラッパーです。ここには、より一般的な用途のいくつかを備えた基本的な例がありますが、利用可能な方法の完全なリストはこちらから入手できます。より詳細な例は、ガイドに記載されています。
最も一般的なユースケースの1つは、Slackにメッセージを送信することです。アプリとして、またはユーザーとしてメッセージを送信する場合、この方法は両方を行うことができます。例では、チャネル名を指定しますが、可能な場合はchannel_id
を使用することをお勧めします。また、アプリのボットユーザーがまだチャンネルにない場合は、コードスニペットを実行する前にボットユーザーを招待します(または、パブリックチャンネルに投稿するためにchat:write.public
to botトークンスコープを追加してください)。
import os
from slack_sdk import WebClient
from slack_sdk . errors import SlackApiError
client = WebClient ( token = os . environ [ 'SLACK_BOT_TOKEN' ])
try :
response = client . chat_postMessage ( channel = '#random' , text = "Hello world!" )
assert response [ "message" ][ "text" ] == "Hello world!"
except SlackApiError as e :
# You will get a SlackApiError if "ok" is False
assert e . response [ "ok" ] is False
assert e . response [ "error" ] # str like 'invalid_auth', 'channel_not_found'
print ( f"Got an error: { e . response [ 'error' ] } " )
# Also receive a corresponding status_code
assert isinstance ( e . response . status_code , int )
print ( f"Received a response status_code: { e . response . status_code } " )
ここでは、Slackからの応答が成功したものであり、メッセージがassert
Statementを使用して送信したものであることを確認します。
ファイルをスラックにアップロードするプロセスを変更して、はるかに簡単で簡単になりました。これで、API呼び出しにファイルへのパスを直接含めるだけで、そのようにアップロードできます。
import os
from slack_sdk import WebClient
from slack_sdk . errors import SlackApiError
client = WebClient ( token = os . environ [ 'SLACK_BOT_TOKEN' ])
try :
filepath = "./tmp.txt"
response = client . files_upload_v2 ( channel = 'C0123456789' , file = filepath )
assert response [ "file" ] # the uploaded file
except SlackApiError as e :
# You will get a SlackApiError if "ok" is False
assert e . response [ "ok" ] is False
assert e . response [ "error" ] # str like 'invalid_auth', 'channel_not_found'
print ( f"Got an error: { e . response [ 'error' ] } " )
files_upload_v2
メソッドの詳細については、こちらをご覧ください。
このSDKのAsyncWebClient
は、非同期要求のためにフードの下でAIOHTTPを必要とします。
import asyncio
import os
from slack_sdk . web . async_client import AsyncWebClient
from slack_sdk . errors import SlackApiError
client = AsyncWebClient ( token = os . environ [ 'SLACK_BOT_TOKEN' ])
async def post_message ():
try :
response = await client . chat_postMessage ( channel = '#random' , text = "Hello world!" )
assert response [ "message" ][ "text" ] == "Hello world!"
except SlackApiError as e :
assert e . response [ "ok" ] is False
assert e . response [ "error" ] # str like 'invalid_auth', 'channel_not_found'
print ( f"Got an error: { e . response [ 'error' ] } " )
asyncio . run ( post_message ())
Sanic/Jupyter NotebookなどのAsyncioイベントループを呼び出すフレームワークを使用している場合。
import os
from slack_sdk . web . async_client import AsyncWebClient
from slack_sdk . errors import SlackApiError
client = AsyncWebClient ( token = os . environ [ 'SLACK_BOT_TOKEN' ])
# Define this as an async function
async def send_to_slack ( channel , text ):
try :
# Don't forget to have await as the client returns asyncio.Future
response = await client . chat_postMessage ( channel = channel , text = text )
assert response [ "message" ][ "text" ] == text
except SlackApiError as e :
assert e . response [ "ok" ] is False
assert e . response [ "error" ] # str like 'invalid_auth', 'channel_not_found'
raise e
from aiohttp import web
async def handle_requests ( request : web . Request ) -> web . Response :
text = 'Hello World!'
if 'text' in request . query :
text = " t " . join ( request . query . getall ( "text" ))
try :
await send_to_slack ( channel = "#random" , text = text )
return web . json_response ( data = { 'message' : 'Done!' })
except SlackApiError as e :
return web . json_response ( data = { 'message' : f"Failed due to { e . response [ 'error' ] } " })
if __name__ == "__main__" :
app = web . Application ()
app . add_routes ([ web . get ( "/" , handle_requests )])
# e.g., http://localhost:3000/?text=foo&text=bar
web . run_app ( app , host = "0.0.0.0" , port = 3000 )
RTMとWebクライアントの両方でサポートされているssl
オプションを渡すことにより、カスタムSSLコンテキストを提供するか、検証を無効にすることができます。
ASYNCリクエストについては、AIOHTTP SSLドキュメントを参照してください。
同期リクエストについては、urllib SSLドキュメントを参照してください。
RTMとWebクライアントの両方でサポートされているAsyncリクエストを行うときにプロキシがサポートされ、 proxy
オプションを渡します。
Asyncリクエストについては、AIOHTTPプロキシドキュメントを参照してください。
同期要求の場合、 HTTPS_PROXY
env変数またはproxy
オプションの設定が機能します。
Asyncクライアントを使用して、パフォーマンスブーストをお探しですか?オプションの依存関係(AIODNS)をインストールすると、クライアントによるDNSの解決を加速することができます。 「オプション」と呼ばれる追加として含めました:
$ pip install slack_sdk[optional]
import os
from slack_sdk import WebClient
from ssl import SSLContext
sslcert = SSLContext ()
# pip3 install proxy.py
# proxy --port 9000 --log-level d
proxyinfo = "http://localhost:9000"
client = WebClient (
token = os . environ [ 'SLACK_BOT_TOKEN' ],
ssl = sslcert ,
proxy = proxyinfo
)
response = client . chat_postMessage ( channel = "#random" , text = "Hello World!" )
print ( response )
Slack_sdkのSlackClient V2.xからv3.xに移行している場合は、移行ガイドをフォローして、更新後もアプリが動作し続けることを確認してください。
ここで移行ガイドをご覧ください!
SlackClientのV1.xからV2.Xに移行している場合は、移行ガイドに従って、更新後もアプリが動作し続けることを確認してください。
ここで移行ガイドをご覧ください!
あなたが立ち往生しているなら、私たちは助けにここにいます。以下は、問題を通じて支援を受けるための最良の方法です。
Github Issue Trackerを使用して、バグを報告したり、機能を要求したりします。 PythonにSlack Developer Kitを使用してヘルプを取得するためにSlack Communityにアクセスするか、一般的に仲間のSlack開発者と結合してください。
みんなからの貢献を歓迎します!有益で協力的な方法で貢献する方法については、寄稿者のガイドをご覧ください。