Telegram 机器人用户体验设计:按钮、场景与有限状态机(FSM)在 aiogram 中的应用
用户体验决定 Telegram 机器人的留存率。没有清晰的消息序列和按钮,功能再好也白搭。在 Telegram 中,用户体验可简化为一条链:消息 → 按钮 → 响应。尽量减少用户决策——引导他们一步步操作,无需犹豫。
/start 后的第一条消息至关重要:用户会在 3 秒内决定是否留下。避免冗长文字——直接说明核心、好处和主要按钮。
启动界面结构:
- 标题说明机器人用途
- 1–2 行解释
- 1 个主要操作按钮
- 可选:帮助按钮
按钮作为主要界面
按钮替代了屏幕和菜单。内联按钮是首选:附着在消息上,不会使聊天界面杂乱。回复按钮适用于固定选项集。
按钮数量优化:
- 1–2 个按钮:即时选择
- 3–4 个:2–3 秒停顿
- 5 个以上:压力增大,用户流失
按钮文本规则:
- 动词:如“创建”、“发送”、“返回”
- 用“确认/取消”替代“是/否”
- 消息中文本唯一
- 危险操作:明确警告
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。
限制:
- 样式——需 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
暂无评论。