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

如何用Node.js在Telegram以非Bot身份发消息供其他Bot接收?

解决方案

Telegram官方限制了Bot之间直接发送消息,所以你需要通过模拟普通用户会话来发送消息,这样目标Bot就能正常接收,且消息不会被标记为Bot发送。以下是Node.js的实现方案:

核心思路

放弃使用Bot API,改用Telegram的MTProto协议模拟普通用户身份发送消息。这种方式发送的消息和真实用户发送的完全一致,目标Bot可以正常读取,且不需要添加任何命令。

实现步骤

1. 获取普通用户API凭证

你需要先从Telegram官方获取普通用户的api_id和api_hash:

  • 用你的普通用户账号登录Telegram开发者平台
  • 创建新应用后,即可获取对应的api_id和api_hash(这不是Bot的token,是用户级别的API凭证)

2. 安装依赖

使用支持MTProto协议的Node.js库,推荐telegram包:

npm install telegram input

3. 编写发送代码

以下是完整的示例代码,实现模拟普通用户发送消息给目标Bot:

const { TelegramClient } = require('telegram');
const { StringSession } = require('telegram/sessions');
const input = require('input');

// 替换为你的用户API凭证
const apiId = 123456;
const apiHash = 'your_api_hash_here';
// 会话文件,用于保存登录状态,避免重复验证
const stringSession = new StringSession(''); 

(async () => {
    console.log('正在登录...');
    const client = new TelegramClient(stringSession, apiId, apiHash, {
        connectionRetries: 5,
    });
    await client.start({
        phoneNumber: async () => await input.text('请输入你的手机号:'),
        password: async () => await input.text('请输入你的账号密码(如果有):'),
        phoneCode: async () => await input.text('请输入收到的验证码:'),
        onError: (err) => console.log(err),
    });
    console.log('登录成功!');
    console.log('你的会话字符串:', client.session.save()); // 保存这个字符串,下次登录可直接复用

    // 发送消息给目标Bot,替换为目标Bot的用户名(比如@your_target_bot)或者chat_id
    await client.sendMessage('@your_target_bot', { message: '需要原样传输的消息内容' });
    console.log('消息发送完成');
})();

4. 后续优化

  • 首次运行后,保存输出的会话字符串,下次直接传入StringSession即可跳过手机号和验证码验证
  • 可将会话字符串存储在环境变量或配置文件中,避免硬编码泄露

注意事项

  • 必须使用普通用户的api_id和api_hash,不能用Bot token
  • 遵守Telegram服务条款,禁止用此方式发送垃圾消息或进行违规操作
  • 确保你的普通用户账号状态正常,未被封禁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:12:48