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

Telegraf.js中bot.reaction()监听Telegram Bot消息反应失效问题

解决Telegraf.js监听消息反应失效的问题

核心原因

Telegraf默认不会请求message_reaction类型的更新,Telegram服务器不会主动推送这类事件给Bot,这是最常见的失效原因。此外还需检查Bot权限与对话环境。

解决方案步骤

1. 显式指定允许接收的更新类型

在bot.launch()中添加allowedUpdates配置,包含消息反应相关的更新类型:

bot.launch({
  allowedUpdates: ['message', 'message_reaction', 'message_reaction_count']
});

说明:Telegraf默认的allowedUpdates仅包含基础消息类型,必须手动添加message_reaction和message_reaction_count,才能让Telegram服务器推送反应事件。

2. 验证Bot在对话中的权限

  • 如果是群聊/超级群:确保Bot已被添加到对话中,且拥有「读取消息」的权限(群管理员可在Bot的权限设置中开启)。
  • 如果是私聊:确保用户与Bot有过对话(发送过至少一条消息),否则无法接收反应事件。

3. 用通用监听排查事件是否可达

先放弃特定表情的监听,改用全局反应事件监听,验证是否能收到更新:

bot.on('message_reaction', (ctx) => {
  console.log('收到反应更新:', ctx.update.message_reaction);
});

如果控制台能输出日志,说明事件已正常接收,再排查bot.reaction("👍")的匹配问题(比如表情编码是否一致,可尝试用Unicode编码"\u{1F44D}"替代 emoji 字符)。

4. 确认Bot API版本兼容性

消息反应功能要求Telegram Bot API版本≥6.0,Telegraf 4.16+已支持该版本。可通过以下代码验证当前连接的API版本:

bot.telegram.getWebhookInfo().then(info => {
  console.log('当前Bot API版本:', info.api_version);
});

若版本低于6.0,需检查是否有代理或环境限制导致无法连接最新API服务器。

修正后的完整示例代码

const {Telegraf} = require('telegraf');
const dotenv = require('dotenv');

dotenv.config();
const BOT_TOKEN = process.env.BOT_TOKEN || '';
const bot = new Telegraf(BOT_TOKEN);

// 全局监听所有反应事件
bot.on('message_reaction', (ctx) => {
  console.log('收到反应:', ctx.update.message_reaction);
});

// 监听特定👍反应
bot.reaction("👍", (ctx) => {
  console.log("用户添加了👍反应");
});

// 显式指定允许的更新类型
bot.launch({
  allowedUpdates: ['message', 'message_reaction', 'message_reaction_count']
});

console.log(`Bot已启动,Token: ${BOT_TOKEN}`);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:42:41