
Telegram 官方 Bot API 不支持获取群组历史消息;需使用 Telegram 的原生 MTProto API,配合用户账号登录后调用 messages.getHistory 方法实现。
telegram 官方 bot api 不支持获取群组历史消息;需使用 telegram 的原生 mtproto api,配合用户账号登录后调用 `messages.gethistory` 方法实现。
在 Telegram 生态中,存在两套完全独立的 API 体系:
Telegram Bot API(如 node-telegram-bot-api 所封装):面向机器人开发,权限受限,无法读取任意群组的历史消息(即使群组为公开),仅能响应自身被提及或收到的私聊/群聊事件,且仅限 bot 被添加后的新消息(且需开启 groupPrivacy 关闭模式,仍不支持回溯历史)。
Telegram Core API(MTProto):面向客户端开发(如 Telegram Desktop、Android 客户端),基于 MTProto 协议,允许完整访问已加入会话的消息历史——这正是 messages.getHistory 方法所属的 API 层。
✅ 正确实现路径如下:
注册 Telegram 用户应用
访问 my.telegram.org → 登录你的手机号 → 进入 “API development tools” → 创建新应用,获取 api_id 和 api_hash。使用支持 MTProto 的 Node.js 库
推荐使用 grammY(轻量、TypeScript 原生)或更底层的 telegram-client / telegraf(注意:Telegraf 默认是 Bot API,需搭配 @mtproto/core 才能走 MTProto)。
示例(使用 grammY + @mtproto/core):
import { Api, TelegramClient } from 'telegram';
import { StringSession } from 'telegram/sessions';
// 1. 使用字符串 session 持久化登录状态(首次运行需短信验证)
const session = new StringSession(''); // 保存后可复用,避免重复验证码
const client = new TelegramClient(session, YOUR_API_ID, 'YOUR_API_HASH', {
connectionRetries: 5,
});
async function fetchGroupHistory() {
await client.start({
phoneNumber: async () => await input.text('Enter phone number: '),
password: async () => await input.text('Enter password: '),
phoneCode: async () => await input.text('Enter SMS code: '),
onError: (err) => console.error(err),
});
// 2. 获取目标群组实体(支持 username 或 chat ID)
const entity = await client.getInputEntity('your_public_group_username'); // 如 'texample'
// 3. 分页拉取历史消息(max 100 条/次,需循环 offset)
let offsetId = 0;
const allMessages: Api.Message[] = [];
while (true) {
const result = await client.invoke(
new Api.messages.GetHistory({
peer: entity,
limit: 100,
offsetId,
offsetDate: 0,
addOffset: 0,
maxId: 0,
minId: 0,
})
);
if (result.messages.length === 0) break;
allMessages.push(...result.messages);
offsetId = result.messages[result.messages.length - 1].id;
}
console.log(`Fetched ${allMessages.length} messages`);
return allMessages;
}
fetchGroupHistory();
⚠️ 重要注意事项:
- 必须使用真实 Telegram 用户账号登录(非 Bot Token),并确保该账号已加入目标群组;
- 公开群组(public group)需确认其隐私设置未禁用“对非成员隐藏历史消息”(即 signatures 或 history_read 权限未被限制);
- 频繁调用可能触发 Telegram 限流(建议添加 await sleep(1000) 间隔);
- 存储和处理聊天数据需严格遵守 GDPR / 本地隐私法规,尤其涉及他人消息时务必获得明确授权;
- node-telegram-bot-api 等 Bot SDK 完全无法替代此流程——它与 MTProto 协议无兼容性。
? 总结:若项目必须获取历史消息,请放弃 Bot 方案,转向用户级 MTProto 客户端实现,并始终将账号安全、权限合规与反爬策略纳入设计前提。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











