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

如何使用node-telegram-bot-api获取Telegram上一条消息的ID

问题根因

Telegram Bot API 有明确的模式互斥规则:getUpdates 长轮询模式和 Webhook 推送模式不能同时运行。只要机器人配置过 Webhook 且处于生效状态,直接调用 getUpdates 接口就会返回你看到的409冲突错误。

要获取聊天上一条消息ID,根据你实际使用的机器人运行模式选对应方案即可,不需要绕路调用原生HTTP接口。


方案1:使用Webhook模式(推荐生产环境用)

Webhook模式下Telegram会主动把新消息推送到你的服务地址,你不需要主动拉取更新,只要在收到消息时本地维护各聊天的消息ID映射即可,实现稳定且不触发接口冲突:

  • 初始化一个键值缓存,key存聊天ID,value存对应聊天最新的消息ID
  • 每次收到新消息事件时,先从缓存里取该聊天对应的值,就是你要的上一条消息ID
  • 业务逻辑处理完成后,把当前新消息的ID更新到缓存里,供下一次消息进来时调用

对应node-telegram-bot-api实现代码:

const TelegramBot = require('node-telegram-bot-api');
const BOT_TOKEN = '替换成你的机器人Token';

// 初始化Webhook模式实例
const bot = new TelegramBot(BOT_TOKEN, {
  webHook: {
    port: 8443 // 替换成你服务实际监听的端口
  }
});
// 配置Webhook推送地址,替换成你自己服务的公网HTTPS地址
bot.setWebHook(`https://你的服务域名/bot${BOT_TOKEN}`);

// 缓存各聊天最新消息ID,多实例部署请替换成Redis等共享缓存
const lastMessageIdCache = new Map();

bot.on('message', (msg) => {
  const chatId = msg.chat.id;
  // 读取上一条消息ID
  const prevMessageId = lastMessageIdCache.get(chatId);
  
  // 这里写你的业务逻辑,prevMessageId就是你需要的上一条消息ID
  console.log(`聊天${chatId}上一条消息ID:`, prevMessageId);

  // 逻辑处理完更新缓存为当前消息ID
  lastMessageIdCache.set(chatId, msg.message_id);
});

方案2:切换到长轮询(Polling)模式

如果你不想用Webhook,打算用主动拉取的方式跑机器人,先删除已生效的Webhook再启动即可:

  1. 先调用删除Webhook的接口清除原有配置
  2. 开启长轮询后,同样可以用上面的缓存逻辑存消息ID,不需要手动调用getUpdates
    示例代码:
const TelegramBot = require('node-telegram-bot-api');
const BOT_TOKEN = '替换成你的机器人Token';

// 初始化长轮询模式实例,库会自动帮你处理Webhook清除和更新拉取
const bot = new TelegramBot(BOT_TOKEN, { polling: true });

const lastMessageIdCache = new Map();

bot.on('message', (msg) => {
  const chatId = msg.chat.id;
  const prevMessageId = lastMessageIdCache.get(chatId);
  // 业务逻辑直接用prevMessageId即可
  console.log(`聊天${chatId}上一条消息ID:`, prevMessageId);
  lastMessageIdCache.set(chatId, msg.message_id);
});

注意:你之前用的getUpdates?offset=-1只能拉取到还没被机器人消费过的最新一条更新,已经处理过的历史消息用这个接口拿不到,长期运行还是用本地缓存的方案最可靠。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:21:50