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

Telegram Bot重复发送同一条语音消息故障求助

故障原因分析
  • 你的Bot代码未处理voice类型的消息,导致处理这条语音消息时抛出未捕获的异常,进程崩溃或无法向Telegram返回成功确认。
  • Telegram的推送机制是:如果未收到服务器的成功响应(比如200 OK),会认为消息未被处理,持续重试推送同一条更新,这就是你看到重复收到相同message_id的原因。
  • 代码逻辑大概率只针对text类型消息做了处理,完全忽略了voice等其他消息类型,触发了逻辑中断。
解决方法

1. 紧急恢复Bot接收新消息

调用Telegram Bot API的getUpdates接口,设置offset参数为日志里的update_id + 1(即916674357 + 1 = 916674358),跳过这条未处理的语音消息更新,让Bot能继续接收后续的新消息:

# 替换<你的Bot Token>为实际token
curl "https://api.telegram.org/bot<你的Bot Token>/getUpdates?offset=916674358"

2. 修复代码,添加消息类型分支处理

在消息处理逻辑中新增对voice类型的判断分支,即使只是简单忽略或回复提示,也要避免异常。以下是Python示例(根据你使用的开发框架调整):

def process_message(message):
    chat_id = message['chat']['id']
    # 处理文本消息
    if 'text' in message:
        # 原有的文本消息处理逻辑
        pass
    # 新增处理语音消息
    elif 'voice' in message:
        # 回复用户提示或直接忽略
        send_message(chat_id, "暂不支持语音消息,请发送文本。")
    # 统一处理其他未支持的消息类型
    else:
        send_message(chat_id, "暂不支持该类型消息,请发送文本。")

3. 添加全局异常捕获

在处理更新的入口处添加异常捕获,确保即使某个消息处理出错,Bot进程不会崩溃,并且能向Telegram返回成功响应(webhook模式下):

def handle_webhook_update(update):
    try:
        process_message(update['message'])
        # webhook模式必须返回200 OK,告诉Telegram消息已处理
        return "OK", 200
    except Exception as e:
        print(f"消息处理失败: {str(e)}")
        # 即使出错也返回200,避免Telegram重复推送
        return "Error handled", 200

4. 检查Webhook配置(如果使用webhook模式)

确认你的服务器在处理任何更新时,都返回200 OK状态码。如果之前因为异常返回了500等错误码,Telegram会持续重试推送同一条消息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 13:23:14