Telegraf:用 Node.js 写 Telegram 机器人,就靠它了

telegraf 在 GitHub 上拿到了 9K 多 Star。

这是一个专门用来开发 Telegram 机器人的 Node.js 框架,支持完整的 Bot API 7.1,TypeScript 类型齐全,体积极小,部署方式灵活。

1、 它解决什么问题

自己从零写一个 Telegram 机器人,光是对接 Bot API 就够喝一壶的。HTTP 请求要自己拼,webhook 要自己接,消息类型十几种每种都要处理,回调查询、内联模式、文件上传一个比一个麻烦。

Telegraf 把这些全封装好了。你只需要关心业务逻辑,消息怎么收、怎么回、怎么转,框架都帮你处理了。

正文顶部截图

2、 怎么用

装包:

npm install telegraf

写一个最简单的机器人:

const { Telegraf } = require('telegraf')
const { message } = require('telegraf/filters')

const bot = new Telegraf(process.env.BOT_TOKEN)
bot.start((ctx) => ctx.reply('Welcome'))
bot.help((ctx) => ctx.reply('Send me a sticker'))
bot.on(message('sticker'), (ctx) => ctx.reply('👍'))
bot.hears('hi', (ctx) => ctx.reply('Hey there'))
bot.launch()

十几行代码,一个能响应命令、处理贴纸的机器人就跑起来了。

3、 核心能力

Telegraf 的设计围绕两个类展开:TelegrafContext

Telegraf 负责接收更新、分发给对应的处理器。Context 是每条消息的上下文对象,里面包含了更新内容、机器人信息,还有一堆快捷方法,比如 ctx.reply()ctx.leaveChat()ctx.answerCbQuery(),不用每次都去调底层的 Telegram API。

中间件机制和 Koa 类似,用 await next() 串联,可以在消息到达最终处理器之前做日志、鉴权、数据提取这些事情。

webhook 模式也内置了,直接在 bot.launch() 里配置域名和端口就行,兼容 express、fastify、koa 等主流 HTTP 框架。AWS Lambda、Firebase、Cloudflare Workers 这些 serverless 平台也有对应的集成方案。

README区域截图

4、 TypeScript 支持

Telegraf 本身用 TypeScript 写的,类型定义完整。如果你有自定义中间件往 Context 上挂属性,可以通过泛型扩展类型:

interface MyContext extends Context {
  myProp?: string
}

const bot = new Telegraf<MyContext>('TOKEN')
bot.use((ctx, next) => {
  ctx.myProp = ctx.chat?.first_name?.toUpperCase()
  return next()
})

编辑器里该有的提示一个不少。

5、 适合谁用

  • 想用 JavaScript 或 TypeScript 给 Telegram 写机器人的人
  • 需要把机器人部署到 serverless 平台的场景
  • 已有 Node.js 后端服务、想加一个 Telegram 通知或交互入口的团队

文件处理也是开箱即用的,file_id、本地路径、URL、Buffer、ReadStream 都能直接发,不用自己转来转去。

知或交互入口的团队

文件处理也是开箱即用的,file_id、本地路径、URL、Buffer、ReadStream 都能直接发,不用自己转来转去。

更多推荐