名称:使用Telegram机器人 描述:使用Telegraf在Node.js中构建和运行Telegram机器人,带有实用的命令模式。
Telegram (Telegraf) 技能 — Node.js
简短指南,使用telegraf(Node.js)构建Telegram机器人。
概述
- 库:https://github.com/telegraf/telegraf
- 安装:
npm install telegraf - 从BotFather获取机器人令牌并存储在
BOT_TOKEN中。
最小轮询机器人
// bot.js
const { Telegraf, Markup } = require('telegraf');
const bot = new Telegraf(process.env.BOT_TOKEN);
bot.start(ctx => ctx.reply('欢迎!我可以帮助处理命令。'));
bot.command('echo', ctx => {
const text = ctx.message.text.split(' ').slice(1).join(' ');
ctx.reply(text || '用法:/echo 你的消息');
});
bot.on('text', ctx => ctx.reply(`你说:${ctx.message.text}`));
bot.launch();
process.once('SIGINT', () => bot.stop('SIGINT'));
process.once('SIGTERM', () => bot.stop('SIGTERM'));
运行:
BOT_TOKEN=123:ABC node bot.js
发送媒体和文件
// 发送照片
await ctx.replyWithPhoto('https://example.com/image.jpg', { caption: '好图' });
// 发送文档
await ctx.replyWithDocument('https://example.com/file.pdf');
内联键盘和回调
// 显示内联按钮
await ctx.reply('选择:', Markup.inlineKeyboard([
Markup.button.callback('确定', 'ok'),
Markup.button.callback('取消', 'cancel')
]));
bot.action('ok', ctx => ctx.reply('你按了确定'));
bot.action('cancel', ctx => ctx.reply('已取消'));
Webhook(Express)示例
const express = require('express');
const { Telegraf } = require('telegraf');
const bot = new Telegraf(process.env.BOT_TOKEN);
const app = express();
app.use(bot.webhookCallback('/telegraf'));
bot.telegram.setWebhook(`${process.env.PUBLIC_URL}/telegraf`);
app.listen(process.env.PORT || 3000);
在生产部署中使用webhooks(更快,资源使用更低)。
错误处理
bot.catch((err, ctx) => {
console.error('机器人错误', err);
});
提示
- 使用环境变量存储令牌和URL。
- 尊重Telegram速率限制(避免在大群组中刷屏)。
- 本地测试使用轮询;部署时在HTTPS后使用webhooks。
- 添加
NODE_ENV=production和优雅关闭钩子以提高可靠性。
本文档展示了最常见的Telegraf模式:启动/命令处理程序、文本处理程序、媒体、内联按钮、webhook设置和错误处理。