Telegram Bot无法启动求助:Node.js+Telegraf开发启动异常
问题排查与解决方案
可能的原因分析
结合你的操作步骤、代码和报错情况,主要有两个核心原因:
1. Telegraf 3.39版本与高版本Node.js兼容性冲突
Telegraf 3.x是2020年的旧版本,其依赖的第三方包(如旧版node-fetch、abort-controller)无法适配Node.js v18+(包括你使用的v20.11.0)的内置API变更;即使降级到v16.10.0,该Node.js版本也存在部分细节与旧版Telegraf不兼容的问题。
2. 机器人Token无效或格式错误
你代码中写的'my token'如果未替换为BotFather提供的有效Token,会触发401 Unauthorized错误——这是Telegram Bot API最常见的启动报错之一,与Node.js版本无关。
分步解决方案
第一步:验证Token有效性
- 打开Telegram,向
@BotFather发送/mybots,选择你的机器人,确认Token格式为123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 - 将代码中的
'my token'替换为实际有效Token,确保无多余空格或引号错误
第二步:解决版本兼容性问题
方案A:升级Telegraf到最新稳定版(推荐)
Telegraf v4.x完全支持Node.js v16+,包括v20.11.0,操作步骤:
- 卸载旧版本:
npm uninstall telegraf
- 安装最新版:
npm install telegraf
- 修改
index.js代码(v4.x API有调整):
const { Telegraf } = require('telegraf') const bot = new Telegraf('你的有效机器人Token') // v4.x使用ctx(上下文对象)代替原msg参数 bot.command('start', (ctx) => { console.log(ctx.message); // 打印收到的消息内容 }) bot.launch() // 添加优雅退出处理(可选但推荐) process.once('SIGINT', () => bot.stop('SIGINT')) process.once('SIGTERM', () => bot.stop('SIGTERM'))
- 重新执行
npm start启动项目
方案B:降级Node.js到兼容版本
如果坚持使用Telegraf 3.39,可将Node.js降级到v14.x(如v14.21.3)或v16.x稳定版(如v16.20.2),通过nvm快速切换:
- 安装nvm(未安装的话)
- 安装指定版本:
nvm install 16.20.2
- 切换到该版本:
nvm use 16.20.2
- 删除旧依赖文件并重新安装:
rm -rf node_modules package-lock.json npm install
- 执行
npm start启动项目
内容的提问来源于stack exchange,提问作者Enzo
相关产品推荐
相关产品推荐

