Telegram机器人(Bot)是自动化交互的强大工具,可用于客服、通知、娱乐等场景。Node.js作为高性能的JavaScript运行时,搭配丰富的npm生态,是开发Telegram机器人的绝佳选择。本文将带你从零开始,使用Node.js构建一个功能完整的Telegram机器人,并部署到云端,全程步骤清晰,代码可直接运行。
一、准备工作:创建Telegram机器人与获取Token
在写代码之前,我们需要先在Telegram中注册一个机器人,获取专属的API Token。
步骤1:找到BotFather
打开Telegram,在搜索栏输入@BotFather,进入官方机器人管理账号。
步骤2:创建新机器人
向BotFather发送/newbot命令,按照提示设置机器人名称和用户名(必须以bot结尾)。完成后,BotFather会返回一个API Token,形如123456:ABC-DEF...,请妥善保存,这个Token是机器人的唯一凭证。
二、搭建Node.js开发环境
确保你的电脑上已安装Node.js(建议版本18+)和npm包管理器。如果没有,请到Node.js官网下载安装。
初始化项目
创建项目目录并进入,执行以下命令生成package.json文件:
mkdir my-telegram-bot
cd my-telegram-bot
npm init -y三、选择并安装开发库
Node.js社区有两个主流的Telegram Bot库:node-telegram-bot-api和Telegraf。前者简单易用,后者功能强大且支持中间件。本指南以Telegraf为例,因为它更符合现代开发习惯,易扩展。
安装Telegraf:
npm install telegraf四、编写第一个Telegram机器人
在项目根目录创建index.js,写入以下代码:
const { Telegraf } = require('telegraf');
const bot = new Telegraf('YOUR_BOT_TOKEN');
bot.start((ctx) => {
ctx.reply('欢迎使用Node.js机器人!');
});
bot.on('text', (ctx) => {
ctx.reply(`你说了:${ctx.message.text}`);
});
bot.launch();
// 优雅关闭
process.once('SIGINT', () => bot.stop('SIGINT'));
process.once('SIGTERM', () => bot.stop('SIGTERM'));将YOUR_BOT_TOKEN替换为实际Token,然后运行node index.js。在Telegram中找到你的机器人,发送/start,即可收到回复。
五、核心功能实现
1. 处理命令
使用bot.command()注册自定义命令,如/help:
bot.command('help', (ctx) => {
ctx.reply('发送任意消息,我都会回复。');
});2. 发送图片和文件
可以通过ctx.replyWithPhoto()发送图片,ctx.replyWithDocument()发送文件:
bot.command('photo', (ctx) => {
ctx.replyWithPhoto('https://example.com/pic.jpg');
});3. 内联键盘与回调
创建内联键盘按钮,并监听点击事件:
const { Markup } = require('telegraf');
bot.command('menu', (ctx) => {
ctx.reply('请选择:', Markup.inlineKeyboard([
[Markup.button.callback('选项A', 'a')],
[Markup.button.callback('选项B', 'b')]
]));
});
bot.action('a', (ctx) => {
ctx.answerCbQuery();
ctx.editMessageText('你选择了A');
});
bot.action('b', (ctx) => {
ctx.answerCbQuery();
ctx.editMessageText('你选择了B');
});4. 设置命令菜单
为方便用户发现命令,可以向BotFather发送/setcommands并输入命令列表,例如:start - 启动机器人
help - 显示帮助
photo - 获取图片
六、部署到云端服务器
本地运行无法提供7x24小时服务,我们需要将机器人部署到服务器。
1. 上传代码到服务器
可使用Git或SCP将项目文件上传到云服务器(如阿里云、腾讯云、AWS等)。
2. 安装Node.js并启动
在服务器上安装Node.js,进入项目目录,执行npm install安装依赖,然后使用PM2管理进程:
npm install -g pm2
pm2 start index.js --name telegram-bot
pm2 save3. 使用Webhook(生产环境推荐)
轮询(long polling)简单但效率稍低,生产环境可使用Webhook。需要公网HTTPS域名,例如:
bot.launch({
webhook: {
domain: 'https://yourdomain.com',
port: 443
}
});并配置Nginx反向代理,或直接使用Telegram的setWebhookAPI。
4. 使用环境变量保护Token
不要将Token硬编码在代码中,建议使用dotenv库读取环境变量:
npm install dotenvrequire('dotenv').config();
const bot = new Telegraf(process.env.BOT_TOKEN);在.env文件中编写BOT_TOKEN=你的Token。
七、常见问题与优化建议
1. 错误处理
使用bot.catch()全局捕获异常:
bot.catch((err, ctx) => {
console.error('Bot error:', err);
ctx.reply('系统异常,请稍后再试');
});2. 日志记录
建议使用telegraf-log中间件或自定义logger记录请求信息。
3. 速率限制
Telegram有频率限制,可使用telegraf-ratelimit避免机器人被封禁。
4. 持久化存储
如需保存用户数据,可接入数据库(SQLite、MongoDB等)。
总结
通过本文,你已经学会了使用Node.js开发Telegram机器人的完整流程:从BotFather获取Token、搭建环境、编写基础与高级功能,再到云端部署。无论是简单的自动回复还是复杂的业务机器人,Node.js与Telegraf都能让你高效开发。现在,开始打造属于你的机器人吧!