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

如何用Node.js的Telegraf.js实现Telegram Bot按已存user_id发私信

基于Node.js + Telegraf实现向数据库已存user_id主动发私信的落地方案

核心可行性说明

Telegraf原生封装了Telegram Bot的全部官方接口能力,完全支持不依赖用户主动发消息触发、直接调用接口向指定user_id推送私信的能力,没有任何功能层面的阻碍。
必须满足的前置条件:所有接收主动推送的用户,必须此前主动给你的Bot发送过任意消息(也就是和Bot完成过首次交互),否则Telegram服务端会直接拒绝Bot的主动私信请求,返回403权限错误,这是Telegram平台的统一规则,不是框架的问题。

具体实现步骤

  • 初始化基础运行环境
    首先执行npm install telegraf完成框架安装,使用从BotFather获取的Bot Token完成实例初始化,基础启动代码如下:
const { Telegraf } = require('telegraf');
// 替换为你自己从BotFather获取的Bot身份凭证
const BOT_TOKEN = '你的BotToken';
const bot = new Telegraf(BOT_TOKEN);

// 启动Bot长连接,保持服务在线
bot.launch();
  • 封装核心能力方法
    实现两个通用方法:一个对接你的数据库,拉取所有已存储的目标user_id列表;一个封装单用户的消息发送逻辑,独立捕获异常,避免单个用户的发送故障影响全量推送流程。
    对应的参考实现代码:
// 对接数据库查询已存的目标user_id列表,替换为你实际的数据库查询逻辑
async function getTargetUserIdsFromDB() {
  // 示例返回的用户ID列表
  return [12345678, 87654321, 11223344];
}

// 单用户发送消息的封装,带独立异常捕获
async function sendToSingleUser(userId, messageContent) {
  try {
    await bot.telegram.sendMessage(userId, messageContent);
    console.log(`消息发送成功,用户ID:${userId}`);
  } catch (err) {
    // 捕获常见异常:用户未启动Bot、账号注销、用户屏蔽Bot、接口限流
    console.error(`消息发送失败,用户ID:${userId},错误:${err.message}`);
  }
}

// 批量推送触发入口,可对接后台接口、定时任务调用
async function triggerBroadcast(messageContent) {
  const targetUserList = await getTargetUserIdsFromDB();
  for (const userId of targetUserList) {
    await sendToSingleUser(userId, messageContent);
    // 简单节流:每次发送间隔300ms,避免触发平台限流
    await new Promise(resolve => setTimeout(resolve, 300));
  }
}

常见踩坑提示

  • 校验入库的user_id合法性:个人用户的user_id为纯正整数,群聊、频道的ID为负数开头,在存储用户ID的环节就需要做字段校验,避免把非个人账号ID加入推送列表
  • 遵守平台私信规则:用户和Bot的最后一次交互间隔超过24小时的,Bot无法主动向该用户发送非服务类的营销/通知消息,否则会被平台判定为垃圾信息,严重的会封禁Bot
  • 控制发送频率:批量推送时建议在两次发送之间保留200-500ms的间隔,单分钟发送量不要超过25条,避免触发平台限流,导致临时丧失发送权限
  • 不要省略异常捕获:批量发送时如果没有在单用户逻辑上加独立的try/catch,只要遇到一个发送失败的场景(比如用户注销、屏蔽Bot),整个循环就会中断,导致后续所有用户都收不到消息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 02:06:06