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

如何使用Python Requests向Telegram Bot API发送BytesIO音频文件对象?

Telegram 语音消息发送代码修复方案

原代码存在的问题

  • 使用了错误的API端点:发送语音需要调用sendVoice接口,而非文本消息的sendMessage
  • data变量末尾多了逗号,导致其变成元组类型,requests无法正确解析该参数
  • 手动设置Content-Type: multipart/form-data是多余的,requests在传递files参数时会自动生成正确的请求头,手动设置可能引发格式冲突
  • BytesIO对象未指定文件名,Telegram无法识别文件类型,需要明确带后缀的文件名(如voice.ogg)

修复后的代码

import requests
from io import BytesIO

def send_voice_msg(chat_id: int, voice_file: BytesIO) -> None:
    token = TELEGRAM_BOT_TOKEN
    # 更换为正确的sendVoice接口
    url = f"https://api.telegram.org/bot{token}/sendVoice"
    # 移除多余逗号,确保data是字典类型
    data = {"chat_id": chat_id}
    # 给BytesIO对象指定文件名,让Telegram识别文件类型
    files = {'voice': ('voice.ogg', voice_file)}
    
    try:
        r = requests.post(url, data=data, files=files, timeout=3)
        # 检查响应状态,确认发送是否成功
        r.raise_for_status()
        print("语音消息发送成功")
    except requests.exceptions.RequestException as err:
        print(f"发送失败: {err}")
        # 可选:打印响应内容辅助排查问题
        # print(r.json() if r.content else "无响应内容")

额外说明

  • 确保voice_file是Telegram支持的音频格式(推荐OGG编码,采样率不超过48kHz)
  • 如果需要给语音添加说明文本,可在data字典中加入caption字段,例如data = {"chat_id": chat_id, "caption": "这是一条语音消息"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:00:42