通过Telegram API的getUpdates方法获取入群邀请链接失败
问题分析与解决方案
核心问题
你当前收到的是message类型的更新(包含new_chat_member/new_chat_members字段),而非Telegram API中携带invite_link的ChatMemberUpdated对象,因此无法提取到邀请链接。
原因说明
Telegram API里,invite_link字段仅存在于chat_member类型的更新(即ChatMemberUpdated对象)中,旧版的message类型更新(如new_chat_members)并不包含该字段。你虽然设置了allowed_updates: 'chat_member',但返回的是未处理的旧message更新,导致拿不到目标字段。
解决步骤
- 清空旧更新:把
offset设为最新的update_id + 1,确保后续获取的是新的chat_member类型更新,而非遗留的message更新。 - 正确解析ChatMemberUpdated对象:收到
chat_member类型更新时,从update.chat_member里提取invite_link字段。
修改后的代码示例
await client.getUpdates({ offset: 0, allowed_updates: ['chat_member'] }).then(async function(updates) { let latestOffset = 0; if (updates.length > 0) { // 获取最新offset,跳过旧更新 latestOffset = updates[updates.length - 1].update_id + 1; // 拉取最新的chat_member类型更新 const newUpdates = await client.getUpdates({ offset: latestOffset, allowed_updates: ['chat_member'] }); newUpdates.forEach(update => { // 判断是否为目标类型更新 if (update.chat_member) { const inviteLink = update.chat_member.invite_link; console.log("用户加入使用的邀请链接:", inviteLink); // 保存更新到文件 fs.appendFile('update.txt', JSON.stringify(update), function(err) { if (err) throw err; console.log('Saved!'); }); } }); } });
预期的ChatMemberUpdated结构示例
{ "update_id": 123456, "chat_member": { "chat": { /* 群组信息 */ }, "from": { /* 操作人信息 */ }, "date": 1690000000, "old_chat_member": { /* 旧成员状态 */ }, "new_chat_member": { /* 新成员状态 */ }, "invite_link": { "url": "https://t.me/xxx", /* 其他邀请链接属性 */ } } }
内容的提问来源于stack exchange,提问作者Yovanis Pineda Osorio
相关产品推荐
相关产品推荐

