Package: slack-sdk
Python Slack SDKThe Slack platform offers several APIs to build apps. Each Slack API delivers part of the capabilities from the platform, so that you can pick just those that fit for your needs. This SDK offers a corresponding package for each of Slack’s APIs. They are small and powerful when used independently, and work seamlessly when used together, too.Comprehensive documentation on using the Slack Python can be found athttps://slack.dev/python-slack-sdk/Whether you're building a custom app for your team, or integrating a third party service into your Slack workflows, Slack Developer Kit for Python allows you to leverage the flexibility of Python to get your project up and running as quickly as possible.ThePython Slack SDKallows interaction with:slack_sdk.web: for calling theWeb API methodsslack_sdk.webhook: for utilizing theIncoming Webhooksandresponse_urls in payloadsslack_sdk.signature: forverifying incoming requests from the Slack API serverslack_sdk.socket_mode: for receiving and sending messages overSocket Modeconnectionsslack_sdk.audit_logs: for utilizingAudit Logs APIsslack_sdk.scim: for utilizingSCIM APIsslack_sdk.oauth: for implementing theSlack OAuth flowslack_sdk.models: for constructingBlock KitUI components using easy-to-use buildersslack_sdk.rtm: for utilizing theRTM APIIf you want to use ourEvents APIand Interactivity features, please check theBolt for Pythonlibrary. Details on the Tokens and Authentication can be found in ourAuth Guide.slackclient is in maintenance modeAre you looking forslackclient? The website is liveherejust like before. However, the slackclient project is in maintenance mode now and thisslack_sdkis the successor. If you have time to make a migration to slack_sdk v3, please followour migration guideto ensure your app continues working after updating.Table of contentsRequirementsInstallationGetting started tutorialBasic Usage of the Web ClientSending a message to SlackUploading files to SlackAsync usageWebClient as a scriptWebClient in a frameworkAdvanced OptionsSSLProxyDNS performanceExampleMigrating from v1SupportDevelopmentRequirementsThis library requires Python 3.6 and above. If you require Python 2, please use ourSlackClient - v1.x. If you're unsure how to check what version of Python you're on, you can check it using the following:Note:You may need to usepython3before your commands to ensure you use the correct Python path. e.g.python3 --versionpython--version

--or--

python3--versionInstallationWe recommend usingPyPIto install the Slack Developer Kit for Python.$pipinstallslack_sdkGetting started tutorialWe've created thistutorialto build a basic Slack app in less than 10 minutes. It requires some general programming knowledge, and Python basics. It focuses on the interacting with Slack's Web and RTM API. Use it to give you an idea of how to use this SDK.Read the tutorial to get started!Basic Usage of the Web ClientSlack provide a Web API that gives you the ability to build applications that interact with Slack in a variety of ways. This Development Kit is a module based wrapper that makes interaction with that API easier. We have a basic example here with some of the more common uses but a full list of the available methods are availablehere. More detailed examples can be found inour guide.Sending a message to SlackOne of the most common use-cases is sending a message to Slack. If you want to send a message as your app, or as a user, this method can do both. In our examples, we specify the channel name, however it is recommended to use thechannel_idwhere possible. Also, if your app's bot user is not in a channel yet, invite the bot user before running the code snippet (or addchat:write.publicto Bot Token Scopes for posting in any public channels).importosfromslack_sdkimportWebClientfromslack_sdk.errorsimportSlackApiErrorclient=WebClient(token=os.environ['SLACK_BOT_TOKEN'])try:response=client.chat_postMessage(channel='#random',text="Hello world!")assertresponse["message"]["text"]=="Hello world!"exceptSlackApiErrorase:# You will get a SlackApiError if "ok" is Falseasserte.response["ok"]isFalseasserte.response["error"]# str like 'invalid_auth', 'channel_not_found'print(f"Got an error:{e.response['error']}")# Also receive a corresponding status_codeassertisinstance(e.response.status_code,int)print(f"Received a response status_code:{e.response.status_code}")Here we also ensure that the response back from Slack is a successful one and that the message is the one we sent by using theassertstatement.Uploading files to SlackWe've changed the process for uploading files to Slack to be much easier and straight forward. You can now just include a path to the file directly in the API call and upload it that way.importosfromslack_sdkimportWebClientfromslack_sdk.errorsimportSlackApiErrorclient=WebClient(token=os.environ['SLACK_BOT_TOKEN'])try:filepath="./tmp.txt"response=client.files_upload_v2(channel='C0123456789',file=filepath)assertresponse["file"]# the uploaded fileexceptSlackApiErrorase:# You will get a SlackApiError if "ok" is Falseasserte.response["ok"]isFalseasserte.response["error"]# str like 'invalid_auth', 'channel_not_found'print(f"Got an error:{e.response['error']}")More details on thefiles_upload_v2method can be foundhere.Async usageAsyncWebClientin this SDK requiresAIOHttpunder the hood for asynchronous requests.AsyncWebClient in a scriptimportasyncioimportosfromslack_sdk.web.async_clientimportAsyncWebClientfromslack_sdk.errorsimportSlackApiErrorclient=AsyncWebClient(token=os.environ['SLACK_BOT_TOKEN'])asyncdefpost_message():try:response=awaitclient.chat_postMessage(channel='#random',text="Hello world!")assertresponse["message"]["text"]=="Hello world!"exceptSlackApiErrorase:asserte.response["ok"]isFalseasserte.response["error"]# str like 'invalid_auth', 'channel_not_found'print(f"Got an error:{e.response['error']}")asyncio.run(post_message())AsyncWebClient in a frameworkIf you are using a framework invoking the asyncio event loop like : sanic/jupyter notebook/etc.importosfromslack_sdk.web.async_clientimportAsyncWebClientfromslack_sdk.errorsimportSlackApiErrorclient=AsyncWebClient(token=os.environ['SLACK_BOT_TOKEN'])# Define this as an async functionasyncdefsend_to_slack(channel,text):try:# Don't forget to have await as the client returns asyncio.Futureresponse=awaitclient.chat_postMessage(channel=channel,text=text)assertresponse["message"]["text"]==textexceptSlackApiErrorase:asserte.response["ok"]isFalseasserte.response["error"]# str like 'invalid_auth', 'channel_not_found'raiseefromaiohttpimportwebasyncdefhandle_requests(request:web.Request)->web.Response:text='Hello World!'if'text'inrequest.query:text="\t".join(request.query.getall("text"))try:awaitsend_to_slack(channel="#random",text=text)returnweb.json_response(data={'message':'Done!'})exceptSlackApiErrorase:returnweb.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=barweb.run_app(app,host="0.0.0.0",port=3000)Advanced OptionsSSLYou can provide a custom SSL context or disable verification by passing thessloption, supported by both the RTM and the Web client.For async requests, see theAIOHttp SSL documentation.For sync requests, see theurllib SSL documentation.ProxyA proxy is supported when making async requests, pass theproxyoption, supported by both the RTM and the Web client.For async requests, seeAIOHttp Proxy documentation.For sync requests, setting eitherHTTPS_PROXYenv variable or theproxyoption works.DNS performanceUsing the async client and looking for a performance boost? Installing the optional dependencies (aiodns) may help speed up DNS resolving by the client. We've included it as an extra called "optional":$pipinstallslack_sdk[optional]Exampleimportosfromslack_sdkimportWebClientfromsslimportSSLContextsslcert=SSLContext()# pip3 install proxy.py# proxy --port 9000 --log-level dproxyinfo="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)Migrating from v2If you're migrating from slackclient v2.x of slack_sdk to v3.x, Please follow our migration guide to ensure your app continues working after updating.Check out the Migration Guide here!Migrating from v1If you're migrating from v1.x of slackclient to v2.x, Please follow our migration guide to ensure your app continues working after updating.Check out the Migration Guide here!SupportIf you get stuck, we’re here to help. The following are the best ways to get assistance working through your issue:Use ourGithub Issue Trackerfor reporting bugs or requesting features.
Visit theSlack Communityfor getting help using Slack Developer Kit for Python or just generally bond with your fellow Slack developers.ContributingWe welcome contributions from everyone! Please check out ourContributor's Guidefor how to contribute in a
helpful and collaborative way.