You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Slack Webclient API下载音频文件时获取HTML而非音频的问题

问题分析与解决

你遇到的问题核心是:Slack的私有文件链接需要身份验证,直接用requests.get()请求时未携带认证信息,服务器返回的是登录页面的HTML;而浏览器因保存了登录Cookie,能正常访问音频文件。

解决方法

方法1:使用Slack官方WebClient的files_download方法(推荐)

这是Slack API提供的标准下载方式,自动处理认证逻辑,代码更简洁可靠:

from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

# 初始化WebClient,替换为你的Bot Token
client = WebClient(token="xoxb-YOUR-BOT-TOKEN")

@app.event("app_mention")
def handle_starting_events(body, say, logger):
    if ('files' in body["event"]) and (body["event"]['files'][0]['mimetype'] == 'audio/webm'):
        file_id = body["event"]['files'][0]['id']
        try:
            # 调用官方接口下载文件
            response = client.files_download(file=file_id)
            # 保存文件,注意使用对应格式的后缀名
            with open('audio_message.webm', 'wb') as f:
                f.write(response.body)
            say("音频文件已成功下载!")
        except SlackApiError as e:
            logger.error(f"下载失败: {e.response['error']}")

方法2:给requests请求添加认证头

如果坚持使用requests,需在请求头中携带Slack Token(Bot Token或User Token均可),格式为Authorization: Bearer <你的Token>:

import requests

@app.event("app_mention")
def handle_starting_events(body, say, logger):
    if ('files' in body["event"]) and (body["event"]['files'][0]['mimetype'] == 'audio/webm'):
        audiourl = body["event"]['files'][0]['url_private_download']
        # 添加认证头,替换为你的Token
        headers = {"Authorization": "Bearer xoxb-YOUR-BOT-TOKEN"}
        response = requests.get(audiourl, headers=headers)
        
        if response.status_code == 200:
            # 保存为webm格式,避免后缀名混淆
            with open('audio_message.webm', 'wb') as f:
                f.write(response.content)
        else:
            logger.error(f"请求失败,状态码: {response.status_code}")

额外提示:你代码中把音频文件保存为video.mp4,但实际是webm格式,建议修改为对应后缀名,避免播放时出现格式不兼容问题。

内容的提问来源于stack exchange,提问作者Digger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:17:27