홈으로 돌아가기

UX 텔레그램 봇: aiogram의 버튼과 FSM

UX 텔레그램 봇을 분석하는 기사: 메시지 구조, Bot API 9.4 컬러 버튼, 명령어 대신 시나리오, 상태용 FSM. 시니어 개발자를 위한 aiogram 코드 예제.

컬러 버튼과 FSM: 텔레그램 봇의 UX
Advertisement 728x90

텔레그램 봇 UX 디자인: 버튼, 시나리오, 그리고 aiogram을 활용한 FSM

사용자 경험이 텔레그램 봇의 지속 사용을 결정합니다. 명확한 메시지와 버튼의 흐름이 없다면 기능은 무용지물입니다. 텔레그램에서 UX는 메시지 → 버튼 → 응답의 연쇄로 귀결됩니다. 사용자의 결정을 최소화하세요—망설임 없이 단계별로 안내하십시오.

/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+가 필요합니다. 커스텀 이모지는 텔레그램 프리미엄을 통해 소유자 또는 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()). 이모지 ID는 @ShowJsonBot에서 얻으세요.

Google AdInline article slot

제한 사항:

  • 스타일—Bot API 9.4+
  • 커스텀 이모지—프리미엄
  • 프리미엄 없음: 구독 없는 사용자에게 사각형 표시

현대적인 느낌을 위한 커스텀 이모지

프리미엄 이모지는 인식을 향상시킵니다: 버튼, 제목, 확인에 브랜드 아이콘 사용. 과부하 주지 마세요—메시지당 1–2개의 액센트.

적용 사례:

  • 버튼에서 ✅ 대신 체크마크
  • 봇 브랜드로 고유 이모지
  • 성공 시 애니메이션

명령어 대신 시나리오

명령어(/생성, /편집)는 사용자가 논리를 기억하게 강요합니다. 시나리오는 손을 잡고 안내합니다: 봇이 단계를 지시하고, 사용자가 따릅니다.

게시물 생성 시나리오 예시:

| 단계 | 사용자 액션 | 봇 응답 |

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

| 1 | "게시물 생성" | "사진 또는 GIF를 보내주세요" |

| 2 | 사진 전송 | "이제 텍스트를 입력하세요" |

| 3 | 텍스트 전송 | "버튼을 추가하시겠습니까?" |

| 4 | "예" | "버튼 텍스트와 링크를 입력하세요" |

| 5 | 데이터 입력 | 미리보기 |

| 6 | "전송" | "✅ 게시 완료" |

시나리오 사용 시기:

  • 다중 단계
  • 데이터 입력
  • 옵션 선택

명령어: /start, /help, /cancel.

상태 관리를 위한 FSM

유한 상태 기계 없이는 시나리오가 깨집니다: 사용자가 사진 대신 텍스트를 보내면, 봇은 혼란스러워합니다.

상태가 해결하는 문제:

  • 각 user_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 필수: 1단계 이상의 시퀀스에.
  • 이모지 신중히: 프리미엄 아이콘은 액센트로만.

— Editorial Team

Advertisement 728x90

다음 읽기