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

Node.js开发的Telegram Bot部署Render遇409 Conflict错误求助

Telegram Bot部署到Render出现409冲突错误的解决方案

问题描述

用Node.js开发的Telegram Bot在本地运行正常,但部署到Render平台后,构建成功但启动服务时抛出错误:

ETELEGRAM: 409 Conflict: terminated by other getUpdates request; make sure that only one bot instance is running

已确认没有其他Bot实例在运行。

核心原因

  1. Polling模式的局限性:Render作为云平台,实例启动/重启时可能存在短暂的进程重叠,Polling模式会持续向Telegram服务器请求更新,旧进程未完全终止时会和新进程产生冲突。
  2. 残留Webhook配置:如果之前用过Webhook模式,残留的配置会和当前Polling模式冲突。
  3. 代码顺序问题:原代码中openai实例在使用之后才定义,会导致运行时错误。

解决方案

1. 切换到Webhook模式(推荐)

云平台更适合使用Webhook模式替代Polling,避免长连接和实例冲突。修改步骤:

  • 在Render的部署设置中,获取你的服务域名(比如https://your-bot.onrender.com)
  • 修改Bot初始化代码,使用Webhook替代Polling

2. 初始化前清理旧Webhook

在创建Bot实例前,先调用deleteWebhook清理可能残留的配置,避免冲突。

3. 调整代码顺序

将openai实例的定义移到使用它的代码之前,避免运行时未定义错误。

修改后的完整代码

import TelegramBot from "node-telegram-bot-api";
import { Configuration, OpenAIApi } from "openai";
import { config } from "dotenv";
import express from 'express';

config();

// 先初始化OpenAI实例,避免使用时未定义
const openai = new OpenAIApi(new Configuration({
    apiKey: process.env.CHATGPT_API
}));

const TOKEN = process.env.TELEGRAM_TOKEN;
const WEBHOOK_URL = process.env.WEBHOOK_URL; // 在Render环境变量中设置为你的服务域名

const bot = new TelegramBot(TOKEN);

// 清理旧的Webhook配置,再设置新Webhook
bot.deleteWebhook().then(() => {
    bot.setWebHook(`${WEBHOOK_URL}/bot${TOKEN}`);
});

let firstMsg = true;

bot.on('message', (message) => {
    if (firstMsg) {
        bot.sendMessage(message.chat.id, `Hello ${message.chat.first_name}, use "/prompt" followed by your query`);
        firstMsg = false;
    }
});

bot.onText(/\/prompt (.+)/, (msg, match) => {
    const chatId = msg.chat.id;
    const messageText = match[1];

    openai.createChatCompletion({
        model: "gpt-3.5-turbo",
        messages: [{ role: "user", content: messageText }]
    }).then(res => {
        const result = res.data.choices[0].message.content;
        bot.sendMessage(chatId, result);
    }).catch(err => {
        bot.sendMessage(chatId, "抱歉,处理请求时出错了:" + err.message);
    });
});

// 启动Express服务接收Webhook请求
const app = express();
app.use(`/bot${TOKEN}`, express.json());

app.post(`/bot${TOKEN}`, (req, res) => {
    bot.processUpdate(req.body);
    res.sendStatus(200);
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`Server running on port ${PORT}`);
});

额外配置说明

  • 安装依赖:执行npm install express添加Webhook所需的服务框架
  • Render环境变量:添加WEBHOOK_URL,值为你的Render服务域名(比如https://your-bot-name.onrender.com)
  • Render启动命令:确保启动命令为node your-file-name.js(替换为你的实际代码文件名)

内容的提问来源于stack exchange,提问作者The dumb coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:38:24