Volver al inicio

UX Bots de Telegram: Botones y FSM en aiogram

Artículo Desglosa UX Bots de Telegram: Estructura de Mensajes, Botones Coloreados Bot API 9.4, Escenarios en Lugar de Comandos, FSM para Estados. Ejemplos de Código en aiogram para Desarrolladores Senior.

Botones Coloreados y FSM: UX para Bots de Telegram
Advertisement 728x90

Diseño de UX para Bots de Telegram: Botones, Escenarios y FSM con aiogram

La experiencia de usuario determina la retención de los bots de Telegram. Sin una secuencia clara de mensajes y botones, la funcionalidad es inútil. En Telegram, el UX se reduce a una cadena: mensaje → botón → respuesta. Minimiza las decisiones del usuario—guíalos paso a paso sin vacilaciones.

El primer mensaje en /start es crítico: en 3 segundos, los usuarios deciden si quedarse. Evita textos largos—expresa la esencia, el beneficio y el botón principal.

Estructura de la pantalla de inicio:

Google AdInline article slot
  • Título con el propósito del bot
  • 1–2 líneas de explicación
  • 1 botón de acción principal
  • Opcional: botón de ayuda

Botones como Interfaz Principal

Los botones reemplazan pantallas y menús. Los botones en línea son preferidos: adjuntos a mensajes, no saturan el chat. Usa botones de respuesta para un conjunto fijo de opciones.

Número óptimo de botones:

  • 1–2 botones: elección instantánea
  • 3–4: pausa de 2–3 segundos
  • 5+: estrés y abandono

Reglas del texto de los botones:

Google AdInline article slot
  • Verbos: "Crear", "Enviar", "Atrás"
  • En lugar de "Sí/No"—"Confirmar/Cancelar"
  • Texto único en el mensaje
  • Para acciones peligrosas: advertencia clara

Botones de Colores en Bot API 9.4

Bot API 9.4 introdujo estilos para botones en línea: primario (azul), éxito (verde), peligro (rojo). Requiere aiogram 3.20+. Los emojis personalizados están disponibles con Telegram Premium para el propietario o un nombre de usuario adicional en Fragment.

Ejemplo de teclado en aiogram:

from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton

def get_colored_keyboard() -> InlineKeyboardMarkup:
    return InlineKeyboardMarkup(inline_keyboard=[
        # 🔵 Botón azul
        [InlineKeyboardButton(
            text="Suscribirse al canal",
            url="https://t.me/ejemplo",
            icon_custom_emoji_id="6039422865189638057",  # 📣 megáfono
            style="primary",
        )],
        # 🟢 Botón verde
        [InlineKeyboardButton(
            text="Verificar suscripción",
            callback_data="check_subscribe",
            icon_custom_emoji_id="5870633910337015697",  # ✅ marca de verificación
            style="success",
        )],
        # 🔴 Botón rojo
        [InlineKeyboardButton(
            text="Eliminar cuenta",
            callback_data="delete_account",
            icon_custom_emoji_id="5870657884844462243",  # ❌ cruz
            style="danger",
        )],
        # Dos botones en una fila
        [
            InlineKeyboardButton(
                text="Cancelar",
                callback_data="cancel",
                icon_custom_emoji_id="5870657884844462243",
                style="danger",
            ),
            InlineKeyboardButton(
                text="Hecho",
                callback_data="confirm",
                icon_custom_emoji_id="5870633910337015697",
                style="success",
            ),
        ],
        # Botón sin estilo
        [InlineKeyboardButton(
            text="Configuración",
            callback_data="settings",
            icon_custom_emoji_id="5870982283724328568",  # ⚙️
        )],
    ])

Llamada: await message.answer("Texto", reply_markup=get_colored_keyboard()). Obtén IDs de emojis de @ShowJsonBot.

Google AdInline article slot

Limitaciones:

  • Estilos—Bot API 9.4+
  • Emojis personalizados—Premium
  • Sin Premium: cuadrados para usuarios sin suscripción

Emojis Personalizados para un Aspecto Moderno

Los emojis Premium mejoran la percepción: iconos de marca en botones, títulos, confirmaciones. No sobrecargues—1–2 acentos por mensaje.

Aplicaciones:

  • Marca de verificación en lugar de ✅ en botones
  • Emoji único como marca del bot
  • Animación en éxito

Escenarios en Lugar de Comandos

Los comandos (/crear, /editar) obligan a los usuarios a recordar la lógica. Los escenarios los guían de la mano: el bot dicta los pasos, el usuario sigue.

Ejemplo de escenario de creación de publicación:

| Paso | Acción del Usuario | Respuesta del Bot |

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

| 1 | "Crear publicación" | "Envía una foto o GIF" |

| 2 | Envía foto | "Ahora el texto" |

| 3 | Envía texto | "¿Añadir un botón?" |

| 4 | "Sí" | "Texto del botón y enlace" |

| 5 | Introduce datos | Vista previa |

| 6 | "Enviar" | "✅ Publicado" |

Cuándo usar escenarios:

  • Múltiples pasos
  • Entrada de datos
  • Selección de opciones

Comandos: /start, /help, /cancel.

FSM para Gestión de Estados

Sin Máquina de Estados Finitos, los escenarios fallan: los usuarios envían texto en lugar de fotos, el bot se confunde.

Los estados resuelven:

  • Seguimiento de etapa por cada user_id
  • Manejo de errores: "Esperando foto, ignorando texto"
  • Soporte para "Atrás"

Ejemplo de clase de estado:

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

En manejadores: verifica FSMContext.state, transición await state.set_state(States.WAITING_TEXT).

Conclusiones Clave

  • Primer mensaje: esencia + 1 botón, sin listas de comandos.
  • Botones: máximo 2–4, verbos, colores de Bot API 9.4.
  • Escenarios > comandos: guía a los usuarios paso a paso.
  • FSM es esencial: para secuencias >1 paso.
  • Emojis con cuidado: iconos Premium solo como acentos.

— Editorial Team

Advertisement 728x90

Leer después