如何通过Telegram API获取invite_link?排查入群链接获取失败问题
问题描述
我需要获取新成员加入Telegram群组时使用的邀请链接。根据Telegram官方API文档,监听chat_member更新事件时,返回的ChatMemberUpdated对象应该包含可选的invite_link字段,但使用node-telegram-bot-api编写代码后,即使确认成员是通过非主邀请链接入群,打印的ChatMemberUpdated数据中始终没有这个字段。
相关Telegram API文档片段
ChatMemberUpdated 对象代表聊天成员状态的变更
字段 类型 描述 chat Chat 用户所属的聊天 from User 导致状态变更的操作者 date Integer 状态变更的Unix时间戳 old_chat_member ChatMember 聊天成员的旧状态信息 new_chat_member ChatMember 聊天成员的新状态信息 invite_link ChatInviteLink 可选。用户加入聊天时使用的邀请链接,仅在通过邀请链接加入的事件中存在 via_join_request Boolean 可选。如果用户是发送直接加入请求并被管理员批准后加入,则为True via_chat_folder_invite_link Boolean 可选。如果用户是通过聊天文件夹邀请链接加入,则为True
我的代码
const TelegramBot = require('node-telegram-bot-api'); require('dotenv').config(); const token = process.env.BOT_TOKEN; const bot = new TelegramBot(token, { polling: true }); bot.on('chat_member', (msg) => { const newMemberInviteLink = msg.invite_link ? msg.invite_link : "Unknown Invite Link"; console.log(newMemberInviteLink); })
返回的ChatMemberUpdated数据
Received update: { chat: { id: -1002225700353, title: 'TestReferralChatgroup', username: 'TestReferralChatgroup', type: 'supergroup' }, from: { id: 5189356713, is_bot: false, first_name: 'rii', last_name: 'un', username: 'LilKimbom' }, date: 1721558379, old_chat_member: { user: { id: 5189356713, is_bot: false, first_name: 'rii', last_name: 'un', username: 'LilKimbom' }, status: 'left' }, new_chat_member: { user: { id: 5189356713, is_bot: false, first_name: 'rii', last_name: 'un', username: 'LilKimbom' }, status: 'member' } }
解决方案
1. 升级node-telegram-bot-api到最新版本
旧版本的库可能未适配Telegram API新增的invite_link字段,执行以下命令升级:
npm install node-telegram-bot-api@latest
2. 确保机器人拥有足够的权限
将机器人添加为群组管理员,并开启**"管理群组"**权限(至少需要能查看邀请链接相关事件的权限)。权限不足时,Telegram不会返回invite_link字段。
3. 修正代码并验证完整更新数据
在代码中打印完整的msg对象,确认字段是否存在;同时注意invite_link是嵌套对象,实际链接字符串在其invite_link属性下:
const TelegramBot = require('node-telegram-bot-api'); require('dotenv').config(); const token = process.env.BOT_TOKEN; const bot = new TelegramBot(token, { polling: true }); bot.on('chat_member', (msg) => { // 打印完整更新对象,确认字段存在情况 console.log('完整ChatMemberUpdated对象:', JSON.stringify(msg, null, 2)); const newMemberInviteLink = msg.invite_link ? msg.invite_link.invite_link : "Unknown Invite Link"; console.log('使用的邀请链接:', newMemberInviteLink); })
4. 确认触发场景符合要求
invite_link字段仅在用户主动通过邀请链接点击加入时才会返回。如果是管理员直接添加用户、用户通过聊天文件夹加入,或通过申请被批准加入,该字段不会出现(对应会有via_join_request或via_chat_folder_invite_link字段)。
内容的提问来源于stack exchange,提问作者FrankDoDev
相关产品推荐
相关产品推荐

