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

基于Node.js的Telegraf模块实现Telegram命令序列方法咨询

在Node.js的Telegraf中实现命令序列功能

要实现「命令序列」(引导用户按步骤完成操作),核心是利用Telegraf的**会话(Session)**跟踪用户当前处于流程的哪个阶段,以下是具体实现方案:

1. 基础准备:启用会话中间件

会话是保存用户状态的关键,先配置Telegraf的会话中间件(这里用内存会话做演示,生产环境建议用Redis等持久化存储避免重启丢失数据):

const { Telegraf } = require('telegraf');
const bot = new Telegraf('你的机器人Token');

// 启用内存会话
bot.use(Telegraf.session());

2. 触发命令序列的起始命令

定义一个起始命令(比如/setup),触发后初始化会话状态,引导用户进入第一步:

bot.command('setup', (ctx) => {
  // 标记当前步骤为「等待输入姓名」
  ctx.session.step = 'awaiting_name';
  return ctx.reply('请输入你的姓名:');
});

3. 根据会话状态处理用户输入

监听用户的文本消息,根据会话中保存的step值,判断当前需要处理的步骤,逐步推进流程:

bot.on('text', (ctx) => {
  // 如果没有处于任何流程,直接忽略
  if (!ctx.session.step) return;

  switch (ctx.session.step) {
    case 'awaiting_name':
      // 保存姓名到会话
      ctx.session.userInfo = { name: ctx.message.text };
      // 更新步骤为「等待输入邮箱」
      ctx.session.step = 'awaiting_email';
      return ctx.reply('请输入你的邮箱地址:');
    
    case 'awaiting_email':
      // 保存邮箱到会话
      ctx.session.userInfo.email = ctx.message.text;
      // 清除流程状态,结束序列
      ctx.session.step = null;
      // 反馈结果给用户
      return ctx.reply(`设置完成!\n你的姓名:${ctx.session.userInfo.name}\n你的邮箱:${ctx.session.userInfo.email}`);
    
    default:
      // 未知状态,重置流程
      ctx.session.step = null;
      return ctx.reply('流程状态异常,请重新执行 /setup 开始');
  }
});

4. 增加流程取消功能

给用户提供取消当前序列的命令,避免用户陷入流程无法退出:

bot.command('cancel', (ctx) => {
  // 清除会话中的流程状态和临时数据
  ctx.session.step = null;
  ctx.session.userInfo = null;
  return ctx.reply('已取消当前设置流程');
});

5. 处理非文本输入的情况

如果用户在流程中发送图片、贴纸等非文本内容,需要提示用户输入正确格式:

// 监听非文本类型的消息
bot.on(['photo', 'sticker', 'document'], (ctx) => {
  if (ctx.session.step) {
    return ctx.reply('当前流程需要输入文本,请重新输入');
  }
});

生产环境优化

内存会话(Telegraf.session())在机器人重启后会丢失所有用户状态,生产环境建议使用持久化会话中间件,比如telegraf-session-redis,安装后配置示例:

const RedisSession = require('telegraf-session-redis');

const session = new RedisSession({
  store: {
    host: process.env.REDIS_HOST || 'localhost',
    port: process.env.REDIS_PORT || 6379
  }
});

bot.use(session.middleware());

内容的提问来源于stack exchange,提问作者Vitor Silva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:58:33