返回首页

UX Telegram 机器人:aiogram 上的按钮和 FSM

文章剖析 UX Telegram 机器人:消息结构、彩色按钮 Bot API 9.4、取代命令的场景、用于状态的 FSM。aiogram 高级开发者的代码示例。

彩色按钮和 FSM:Telegram 机器人的 UX
Advertisement 728x90

Telegram 机器人用户体验设计:按钮、场景与有限状态机(FSM)在 aiogram 中的应用

用户体验决定 Telegram 机器人的留存率。没有清晰的消息序列和按钮,功能再好也白搭。在 Telegram 中,用户体验可简化为一条链:消息 → 按钮 → 响应。尽量减少用户决策——引导他们一步步操作,无需犹豫。

/start 后的第一条消息至关重要:用户会在 3 秒内决定是否留下。避免冗长文字——直接说明核心、好处和主要按钮。

启动界面结构:

Google AdInline article slot
  • 标题说明机器人用途
  • 1–2 行解释
  • 1 个主要操作按钮
  • 可选:帮助按钮

按钮作为主要界面

按钮替代了屏幕和菜单。内联按钮是首选:附着在消息上,不会使聊天界面杂乱。回复按钮适用于固定选项集。

按钮数量优化:

  • 1–2 个按钮:即时选择
  • 3–4 个:2–3 秒停顿
  • 5 个以上:压力增大,用户流失

按钮文本规则:

Google AdInline article slot
  • 动词:如“创建”、“发送”、“返回”
  • 用“确认/取消”替代“是/否”
  • 消息中文本唯一
  • 危险操作:明确警告

Bot API 9.4 中的彩色按钮

Bot API 9.4 引入了内联按钮样式:主要(蓝色)、成功(绿色)、危险(红色)。需要 aiogram 3.20+ 版本。自定义表情符号需 Telegram Premium(所有者)或在 Fragment 上额外用户名。

aiogram 中的键盘示例:

from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton

def get_colored_keyboard() -> InlineKeyboardMarkup:
    return InlineKeyboardMarkup(inline_keyboard=[
        # 🔵 蓝色按钮
        [InlineKeyboardButton(
            text="订阅频道",
            url="https://t.me/example",
            icon_custom_emoji_id="6039422865189638057",  # 📣 扩音器
            style="primary",
        )],
        # 🟢 绿色按钮
        [InlineKeyboardButton(
            text="检查订阅",
            callback_data="check_subscribe",
            icon_custom_emoji_id="5870633910337015697",  # ✅ 对勾
            style="success",
        )],
        # 🔴 红色按钮
        [InlineKeyboardButton(
            text="删除账户",
            callback_data="delete_account",
            icon_custom_emoji_id="5870657884844462243",  # ❌ 叉号
            style="danger",
        )],
        # 一行两个按钮
        [
            InlineKeyboardButton(
                text="取消",
                callback_data="cancel",
                icon_custom_emoji_id="5870657884844462243",
                style="danger",
            ),
            InlineKeyboardButton(
                text="完成",
                callback_data="confirm",
                icon_custom_emoji_id="5870633910337015697",
                style="success",
            ),
        ],
        # 无样式按钮
        [InlineKeyboardButton(
            text="设置",
            callback_data="settings",
            icon_custom_emoji_id="5870982283724328568",  # ⚙️
        )],
    ])

调用:await message.answer("文本", reply_markup=get_colored_keyboard())。从 @ShowJsonBot 获取表情符号 ID。

Google AdInline article slot

限制:

  • 样式——需 Bot API 9.4+
  • 自定义表情符号——需 Premium
  • 无 Premium:未订阅用户显示方块

自定义表情符号提升现代感

Premium 表情符号增强感知:按钮、标题、确认中的品牌图标。不要过度使用——每条消息 1–2 个重点。

应用场景:

  • 按钮中用自定义对勾替代 ✅
  • 独特表情符号作为机器人品牌标识
  • 成功时的动画效果

场景替代命令

命令(如 /create、/edit)强迫用户记住逻辑。场景则手把手引导:机器人指导步骤,用户跟随。

帖子创建场景示例:

| 步骤 | 用户操作 | 机器人响应 |

|------|-------------|--------------|

| 1 | “创建帖子” | “发送照片或 GIF” |

| 2 | 发送照片 | “现在输入文本” |

| 3 | 发送文本 | “添加按钮吗?” |

| 4 | “是” | “按钮文本和链接” |

| 5 | 输入数据 | 预览 |

| 6 | “发送” | “✅ 已发布” |

何时使用场景:

  • 多步骤流程
  • 数据输入
  • 选项选择

命令:/start、/help、/cancel。

有限状态机(FSM)管理状态

没有有限状态机,场景会崩溃:用户发送文本而非照片,机器人会困惑。

状态解决:

  • 跟踪每个用户 ID 的阶段
  • 错误处理:如“等待照片,忽略文本”
  • 支持“返回”功能

状态类示例:

class States:
    START = "start"
    WAITING_PHOTO = "waiting_photo"
    WAITING_TEXT = "waiting_text"
    WAITING_BUTTON = "waiting_button"

在处理器中:检查 FSMContext.state,转换 await state.set_state(States.WAITING_TEXT)

关键要点

  • 第一条消息: 核心 + 1 个按钮,无命令列表。
  • 按钮: 最多 2–4 个,用动词,利用 Bot API 9.4 的颜色。
  • 场景优于命令: 逐步引导用户。
  • FSM 必不可少: 用于多步骤序列。
  • 表情符号谨慎使用: Premium 图标仅作点缀。

— Editorial Team

Advertisement 728x90

继续阅读