#slack #slack-api
Вопрос:
Я использую Slack Bolt Python SDK для сбора файлов, загруженных пользователем. Когда пользователь загружает файл в приложение slack bot, бот распознает событие, и полученное тело выглядит следующим образом:
{'token': 'xxxxxxxxxxxx',
'team_id': 'Ttttttttt',
'enterprise_id': 'Eeeeee',
'api_app_id': 'Aaaaaaaa',
'event': {'type': 'message',
'text': '',
'files': [{'id': 'Fffffff',
......
'mode': 'snippet',
'is_external': False,
'external_type': '',
'is_public': False,
'public_url_shared': False,
'display_as_bot': False, 'username': '',
'url_private': 'https://url/file.xlsx',
'url_private_download': 'https://url2/file.xlsx',
'permalink': 'https://url3/file.xlsx',
'permalink_public': 'https://url3',
......
Учитывая возвращенное значение, как я могу получить файл и сохранить его? Я пробовал что-то вроде
file_path = body['event']['files'][0]['url_private_download']
urllib.request.urlretrieve (file_path, "./temple.xlsx")
Но сохраненный файл не в формате xlsx, а в формате html. Кто-нибудь может сказать мне, как правильно сохранить файл? Заранее спасибо.
Ответ №1:
Вы должны указать заголовок авторизации при отправке запроса на загрузку файла:
Authorization: Bearer A_VALID_TOKEN
A_VALID_TOKEN-это токен OAuth, который имеет files.read
область действия.
Вы можете прочитать больше здесь: https://api.slack.com/types/file#auth
Похоже, что html-файл, который вы получаете, является просто ответом по умолчанию от Slack, когда не предоставляется токен аутентификации.