WebClient#files_upload_v2() to use given filename as the default title value - Thanks @seratch @mattprWebClient / AsyncWebClientWe've received many reports on the performance issue of the existing files.upload API (refer to #1191 #1165 for details). So, to cope with the problem, our platform team decided to unlock a new way to upload files to Slack via public APIs. To utilize the new approach, developers need to implement the following steps on their code side:
WebClient#files_getUploadURLExternal() method to receive a URL to use for each fileWebClient#files_completeUploadExternal() method with the pairs of file ID and title to complete the whole process, plus share the files in a channelWebClient#files_info() method for each fileWe do understand that writing the above code requires many lines of code. Also, the existing WebClient#files_upload() users have to take a certain amount of time for migration. To mitigate the pain, we've added a wrapper method named WebClient#files_upload_v2() on the SDK side.
Also, in addition to the performance improvements, another good news is that 3rd party apps can now upload multiple files at a time!
See the following code examples demonstrating how the wrapper method works:
import os
from slack_sdk import WebClient
client = WebClient(token=os.environ["SLACK_BOT_TOKEN"])
# Legacy way
response = client.files_upload(
file="./logo.png",
title="New company logo",
channels=["C12345"],
initial_comment="Here is the latest version of our new company logo :wave:",
)
response.get("file") # returns the full metadata of the uploaded file
# New way - the same parameters works in most cases
response = client.files_upload_v2(
file="./logo.png",
title="New company logo",
# Note that channels still works but going with channel="C12345" is recommended
# channels=["C111", "C222"] is no longer supported. In this case, an exception can be thrown
channels=["C12345"],
initial_comment="Here is the latest version of our new company logo :wave:",
)
response.get("file") # returns the full metadata of the uploaded file
# New way with multiple files!
response = client.files_upload_v2(
file_uploads=[
{
"file": "./logo.png",
"title": "New company logo",
},
{
"content": "Minutes ....",
"filename": "team-meeting-minutes-2022-03-01.md",
"title": "Team meeting minutes (2022-03-01)",
},
],
channel="C12345",
initial_comment="Here is the latest version of our new company logo :wave:",
)
response.get("files") # returns the full metadata of all the uploaded files
When migrating to the v2 method, please note that the new method requires both UPDATE: Since v3.23.0, files:write and files:read scopes. If your existing apps have only files:write scope for uploading files, you need to add files:read to the scopes plus re-install the app to issue an updated token.files:read scope is no longer required.
__all__ to __init__.py - Thanks @seratch @kezabelledomain to team.info API parameters - Thanks @seratchMainly for the deprecation notice in the PyPI package page: https://pypi.org/project/slackclient/
Here is the list of issues for the release.
user_ids parameter bug in conversations.inviteShared API method - Thanks @seratch