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

使用PyTelegramBotAPI+Flask配置Webhook时遇Error 429请求过多问题

解决PyTelegramBotAPI配置Webhook时的Error 429问题

核心问题分析

你的代码存在几个直接触发请求超限的点:

  1. Flask Debug模式的重复执行:开启debug=True时,Flask会启动主进程+重载进程两个实例,全局作用域的bot.set_webhook()会被执行两次,短时间内向Telegram API发送重复的Webhook设置请求,触发429限流规则。
  2. Webhook设置时机错误:bot.set_webhook()放在全局代码块中,每次Flask启动(包括自动重载)都会执行,进一步增加不必要的API请求频次。

具体修复方案

1. 调整Webhook设置时机,仅在主进程执行

将bot.set_webhook()移到if __name__=="__main__":代码块内,确保只执行一次:

app = Flask(__name__)
API_KEY="*api key*"
bot = telebot.TeleBot(API_KEY, parse_mode=None)
SECRET = "1234"

@app.route(f"/{SECRET}", methods=['POST'])
def handle_webhook():
    update = telebot.types.Update.de_json(
        request.stream.read().decode("utf-8"))
    main(update)
    return "ok"

def main(update):
    bot.process_new_updates([update])
    # 你的机器人逻辑代码

if __name__=="__main__":
    # 仅在主进程初始化时设置Webhook
    bot.set_webhook(f"*ngrok URL*/{SECRET}")
    app.run(debug=True)

2. 禁用Flask Debug模式(测试阶段可选)

如果不需要自动重载功能,直接关闭debug模式,避免多进程重复执行:

if __name__=="__main__":
    bot.set_webhook(f"*ngrok URL*/{SECRET}")
    app.run(debug=False)

3. 优化Webhook设置逻辑(可选)

先检查当前Webhook地址是否与目标一致,仅在不一致时调用设置接口,减少无效API请求:

if __name__=="__main__":
    current_webhook = bot.get_webhook_info().url
    target_webhook = f"*ngrok URL*/{SECRET}"
    if current_webhook != target_webhook:
        bot.set_webhook(target_webhook)
    app.run(debug=True)

额外排查点

  • 每次重启ngrok后,务必同步更新代码中的ngrok URL,避免Telegram向无效地址发送请求后反复重试,间接导致你的请求量被放大。
  • 可以临时注释main函数内的机器人逻辑代码,仅保留bot.process_new_updates调用,测试是否还会触发429报错,排除逻辑代码隐性循环的可能性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:45:09