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

Render部署Telegram Bot失败,报409冲突错误求助

解决Telegram Bot在Render平台部署后409冲突错误的问题

问题现象

在Render平台部署Telegram Bot,构建成功后初期运行正常,但数分钟后部署失败,持续抛出以下错误:

telebot.apihelper.ApiTelegramException: A request to the Telegram API was unsuccessful. Error code: 409. Description: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running

用户编写的核心代码如下(省略非关键部分):

import pandas as pd
from datetime import datetime, date
import src.visualization.visualize as vz
import src.auxiliary.auxiliary as aux
import src.data.wrangling as w
import src.data.database as db
import os

import telebot

API = os.getenv("API_KEY")
bot = telebot.TeleBot(API)

@bot.message_handler(commands=["IBOVESPA", "SP500", "NASDAQ"])
def responder(mensagem):
    # 省略通用计算代码
    if condition:
        bot.send_photo(
            mensagem.chat.id,
            photo = photo
        )
        
    else:
        # 省略通用代码
        bot.send_message(
            mensagem.chat.id,
            aux.create_answer(assets)
        )
        bot.send_photo(
            mensagem.chat.id,
            photo = photo
        )

def verificar(mensagem):
    return True

def calculating_msg(mensagem, date):
    bot.send_message(
        mensagem.chat.id, 
        "通用回复内容"
    )

@bot.message_handler(func=verificar)
def responder(mensagem):
    text= ( 
            "对任意消息的标准回复"
        )
    bot.reply_to(mensagem, text)

bot.polling()

补充信息

  • 已尝试撤销旧API密钥并使用新生成的密钥,问题未解决
  • 本地运行仅收到Matplotlib线程警告,功能正常:

\src\visualization\visualize.py:34: UserWarning: Starting a Matplotlib GUI outside of the main thread will likely fail.
fig = plt.figure(figsize=(15, 8))
WARNING: QApplication was not created in the main() thread.

核心原因

错误409的本质是同一个Bot的API密钥被多个实例同时调用getUpdates接口,Render平台可能存在以下触发场景:

  1. Render的部署/重启机制启动了多个进程
  2. 默认的bot.polling()参数设置导致重复连接请求

解决步骤

1. 调整bot.polling()参数,避免冲突

修改代码末尾的bot.polling(),添加参数确保单实例独占连接:

bot.polling(none_stop=True, timeout=60, long_polling_timeout=60, allowed_updates=None)
  • none_stop=True:网络中断后自动重试,避免进程意外退出
  • 合理设置超时参数,减少频繁请求触发Telegram的冲突检测
  • allowed_updates=None:只监听Bot需要的更新类型,降低请求频率

2. 配置Render平台,确保仅运行单实例

  • 在Render服务的启动命令中,明确只启动一个Bot进程:
python bot.py
  • 禁用Render默认的HTTP健康检查(Telegram Bot是长连接服务,HTTP检查不适用),避免因检查失败重复启动进程
  • 若必须保留健康检查,可添加简单的HTTP端点,但需确保不干扰Bot主进程的运行

3. 修复Matplotlib线程警告(可选,避免潜在崩溃)

虽然警告不影响当前功能,但长期运行可能导致进程异常,建议修改可视化代码:
在src/visualization/visualize.py的开头添加非交互式后端设置:

import matplotlib
matplotlib.use('Agg')  # 必须在导入plt前设置
import matplotlib.pyplot as plt

确保所有图形生成操作在主线程完成,或使用线程锁控制图形创建流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:05:15