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

如何让aiogram框架开发的机器人实现回复音频消息的功能?

aiogram音频消息处理功能修正方案

原有代码错误点

  • 未先判断消息类型是否为音频,直接访问音频属性会触发异常
  • aiogram的Message对象中音频属性为小写audio,不是大写开头的Audio
  • 仅实现了时长判断逻辑,无回复音频的相关代码

完整实现代码

from aiogram import Bot, Dispatcher, types
from aiogram.types import ContentType

# 替换为你的机器人token
BOT_TOKEN = "your_bot_token_here"

bot = Bot(token=BOT_TOKEN)
dp = Dispatcher(bot)

# 装饰器过滤仅接收音频消息
@dp.message(content_types=ContentType.AUDIO)
async def process_audio(message: types.Message):
    # 时长判断逻辑
    if message.audio.duration <= 60:
        # 示例1:回复文本提示
        await message.reply("已收到时长60秒以内的音频")
        # 示例2:回复自定义音频(三选一即可)
        # 方式a:传本地音频文件
        # await message.answer_audio(audio=types.InputFile("test.mp3"))
        # 方式b:传已上传过的音频file_id,性能更高
        # await message.answer_audio(audio="your_audio_file_id")
        # 示例3:原样返回用户发送的音频
        # await message.answer_audio(audio=message.audio.file_id)
    else:
        await message.reply("音频时长超过60秒,不符合要求")

if __name__ == "__main__":
    from aiogram import executor
    executor.start_polling(dp, skip_updates=True)

注意事项

  • 如果你需要给用户发送音频,优先使用file_id的方式:你可以先手动给机器人发送一次目标音频,打印message.audio.file_id获取对应id,后续直接调用即可,无需重复上传本地文件
  • 上述代码适用于aiogram 2.x版本,如果你使用3.x版本,仅需要调整路由注册和服务启动逻辑即可,音频属性调用规则不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:39:01