Primeros pasos
Acerca de Pabal
Qué es Pabal, cómo está construido, qué funciona hoy y qué todavía no.
Qué es Pabal
El pabal (파발, 擺撥) fue el sistema de postas de la época Joseon, en el que se cambiaba de caballo en cada posta para llevar, en relevos, las noticias urgentes. Pabal.me toma de ahí su nombre: es un servicio de mensajería compatible con Telegram que una organización o comunidad opera en su propio servidor.
- El servidor lo operas tú. Cuentas, conversaciones y fotos se guardan en el servidor y la base de datos (PostgreSQL) del operador. El programa servidor se llama HunsTelegram (Java 21).
- Habla el mismo idioma que Telegram. Entre la aplicación y el servidor se usa el mismo MTProto 2.0 (capa 216) que en Telegram, y entre los bots y el servidor la misma Bot API HTTP que en Telegram. Por eso, las aplicaciones, bibliotecas y bots hechos para Telegram se conectan a Pabal cambiando solo la dirección.
- Es un mundo aparte, sin conexión con Telegram. Las cuentas de Pabal solo existen en el servidor Pabal, y no es posible intercambiar mensajes con usuarios de Telegram.
Hablar con agentes de IA: cuando los bots de voz están activados, un bot contesta mensajes y también llamadas. Puedes preguntarle algo por escrito a un bot desde el ordenador y llamarlo desde el teléfono o el Apple Watch, y cualquiera puede crear un bot así con @BotFather. Todavía está en preparación; qué se puede hacer y adónde van los datos está reunido en Agentes de IA.
Cómo está construido
Explicación del diagrama
- Tres zonas: a la izquierda, lo que funciona fuera del servidor (aplicación, programas de bot, navegador); en el centro, las dos entradas del servidor; a la derecha, el interior del servidor. Los programas de bot también funcionan fuera del servidor, en el ordenador del operador o del desarrollador.
- Solo hay dos entradas: la aplicación se conecta directamente al puerto MTProto (8443) (MTProto lleva su propio cifrado, así que no necesita HTTPS), y el sitio web y la Bot API entran por HTTPS (443).
- Los bots se conectan por uno de dos caminos: normalmente por la Bot API sobre HTTPS (línea continua) y, si se quiere, también por MTProto como la aplicación (línea discontinua azul). En ambos casos es la misma cuenta de bot y el mismo buzón de mensajes.
- La línea discontinua roja es la única flecha que va en sentido contrario: cuando un bot configura un webhook, el servidor envía las novedades a la dirección HTTPS del programa del bot. Todo lo demás son peticiones que entran al servidor desde fuera.
- Todo se registra en un solo lugar: cada cambio pasa por los servicios y queda en el almacén de eventos de PostgreSQL; solo los originales de las fotos se guardan como archivos. Como los mensajes enviados desde la aplicación y los enviados por los bots recorren el mismo camino, las notificaciones push, la lista de chats y la recuperación al reconectarse funcionan igual para todos.
El diagrama de arriba muestra el camino de los mensajes. Un servidor con los bots de voz activados tiene además entradas para las llamadas: el relé de llamadas (UDP 3478) y el punto de entrada de audio del Apple Watch (WSS). Ese camino está dibujado en Agentes de IA.
Lo que funciona hoy y lo que todavía no
| Función | Estado | Notas |
|---|---|---|
| Registro e inicio de sesión (número de teléfono + código) | Sí | El operador elige cómo se entrega el código: SMS, correo electrónico o entrega manual por el administrador |
| Chats uno a uno, recepción en tiempo real, varios dispositivos | Sí | Un dispositivo que estaba apagado recupera lo que se perdió al volver a encenderse |
| Editar y borrar mensajes | Sí | El cambio se refleja al instante también en la pantalla de la otra persona |
| Grupos básicos (crear, añadir y expulsar miembros, nombre) | Sí | Los miembros se añaden directamente desde la información del grupo |
| Enviar fotos, foto de perfil | Sí | Se guardan en un único tamaño, el original |
| Enviar archivos (de cualquier formato) | Sí | Conservan su nombre y su formato. A partir de 10 MB se usa upload.saveBigFilePart; el límite por defecto es de 2 GB |
| Bots: @BotFather, Bot API HTTP, webhooks, bots MTProto | Sí | Botones, callbacks, menú de comandos, fotos, archivos y grupos |
| Panel de administración, ajustes de operación | Sí | Solo accesible desde 127.0.0.1, en el propio servidor |
| Sitio web en 10 idiomas, páginas de enlaces de nombre de usuario e invitación | Sí | La documentación para desarrolladores también está en 10 idiomas |
| Llamadas 1:1 | Sí | Las llamadas entre redes distintas dependen de la configuración del relé (TURN) del servidor |
| Notificaciones push — Android | Sí | Avisos de mensajes y tono de llamada aunque la aplicación esté cerrada. El operador tiene que configurar Firebase (Instalar el servidor) |
| Notificaciones — macOS y Windows | Sí | Se muestran como notificaciones del ordenador mientras la aplicación está abierta (sin push) |
| Ver y cerrar las sesiones de los dispositivos (Dispositivos en los ajustes) | Sí — sin comprobar aún con las aplicaciones reales | Un dispositivo con menos de 24 horas de sesión no puede cerrar las de otros (las aplicaciones de Android y de escritorio no muestran ningún aviso). Comprobado con las pruebas del servidor; falta la comprobación de extremo a extremo con las aplicaciones reales — Usar la aplicación: Proteger tu cuenta |
| Exportar datos (aplicación de escritorio) | Sí — sin comprobar aún con la aplicación real | Chats, fotos, archivos e información de la cuenta. Hasta tres inicios al día; si el servidor se reinicia, se empieza de nuevo. Aún no existen el plazo de espera de Telegram, la aprobación desde otro dispositivo ni el registro de exportaciones. Probado con las peticiones que envía la aplicación de escritorio, en su orden; falta la comprobación de extremo a extremo con la aplicación real |
| Cambiar el número de teléfono | Desactivado por defecto | Si el operador lo activa, llega un código por SMS al número nuevo (solo en servidores con SMS configurado) — Administración y ajustes: Códigos de registro e inicio de sesión |
| Canales, supergrupos | Aún no | Puede que no se muestren bien en la aplicación |
| Mensajes de vídeo y de voz | Aún no | Se pueden enviar como archivos, pero no se reproducen dentro de la aplicación |
| Álbumes (varios elementos en un solo bloque) | Aún no | Si envías varios a la vez, llegan todos, pero se muestran de uno en uno en lugar de agrupados |
Texto con formato (negrita, cursiva), parse_mode de los bots | Aún no | El texto se envía tal cual. Comandos, menciones, enlaces y hashtags se marcan automáticamente |
| Llamadas de grupo, chats secretos | Aún no | |
| Verificación en dos pasos (contraseña en la nube) | Aún no | Si intentas activarla, se rechaza |
| Aplicación para iPhone | En preparación | La versión 1.0 se envió a la revisión de la App Store (2026-09-23). La 1.0 no tiene notificaciones push, así que solo recibe mensajes mientras la aplicación está abierta. La 1.1, con notificaciones push, está en pruebas internas (TestFlight) |
| Unirse a un grupo mediante un enlace de invitación | Aún no | El enlace se crea, pero al pulsarlo no te hace miembro |
Modo inline (@bot consulta), pagos, juegos | Aún no | |
| Bots de voz (al llamar a un bot, contesta una IA) | En preparación | Se activan solo cuando están listos el servidor, los documentos legales y una aplicación con la pantalla de confirmación. Desactivados en pabal.me, en pruebas en el servidor de desarrollo: Bots de voz |
| App del reloj para Apple Watch (llamadas a bots de voz) | En preparación | Solo pruebas internas (TestFlight). Llamar a un bot de voz desde el reloj, sin iPhone: Usar la aplicación: Apple Watch |
| Guardar conversación (la conversación de una llamada, como texto en tu chat) | En preparación | Falta la revisión legal del texto de la pantalla de confirmación: Usar la aplicación: bots de voz |
| Llamadas de bots (un bot al que diste permiso te llama con una voz de IA) | Desactivado | A la espera de la revisión legal; tampoco hay aún una versión de la aplicación con la pantalla de permiso: Usar la aplicación: permitir que un bot te llame |
Relación con Telegram
Pabal es un servidor independiente que sigue el protocolo público de Telegram. No tiene relación con la empresa Telegram y tampoco se conecta a los servidores de Telegram.
- Lo que es compatible: MTProto 2.0 (los 4 tipos de transporte, el handshake y la vinculación de claves temporales), el formato de peticiones y respuestas de la capa 216, y el formato de direcciones, peticiones, respuestas y errores de la Bot API HTTP. Se ha comprobado conectando la aplicación oficial Telegram Desktop 6.2.6 sin modificarla (cambiando solo la dirección del servidor y la clave pública).
- Lo que es distinto: las cuentas y los datos son propios de cada servidor. Los IDs de usuario, de mensaje y de archivo solo tienen sentido dentro de ese servidor. Los tokens de bot que usabas en Telegram no sirven: tienes que pedir uno nuevo al @BotFather de Pabal.
Formato de los enlaces
La aplicación y el servidor crean los enlaces con https://pabal.me/. Si los abres en el navegador, aparece una pequeña página que abre la aplicación.
| Enlace | Significado | Dirección que se abre en la aplicación |
|---|---|---|
pabal.me/<nombre_de_usuario> | Abrir el chat con una persona o un bot | tg://resolve?domain=<nombre_de_usuario> |
pabal.me/+<código_de_invitación> | Enlace de invitación a un grupo (abre la aplicación, pero todavía no permite unirse mediante el enlace) | tg://join?invite=<código_de_invitación> |
pabal.me/joinchat/<código_de_invitación> | Enlace de invitación en el formato antiguo (mismo significado) | tg://join?invite=<código_de_invitación> |
Un nombre de usuario tiene entre 5 y 32 caracteres (letras latinas, números y guion bajo) y empieza por una letra (el de un bot termina en bot). Los nombres que coinciden con rutas que usa el sitio, como docs, admin o health, no se abren como enlace.
Modelo de seguridad
- Aplicación ↔ servidor: se cifra con MTProto 2.0. La aplicación se compila con la clave pública RSA del servidor incorporada, de modo que otro servidor no puede hacerse pasar por el servidor Pabal. Las conversaciones son como los «chats en la nube» de Telegram, así que el servidor puede leer su contenido (no hay cifrado de extremo a extremo). Por eso el servidor debe operarlo alguien de confianza.
- Bot ↔ servidor: la Bot API solo se publica por HTTPS. El token de un bot es su contraseña: si se filtra, cámbialo con
/revokeen @BotFather. El token anterior y las conexiones abiertas con él se cortan al instante. - Servidor → webhook: el servidor solo envía peticiones a webhooks HTTPS con dirección pública. Rechaza las direcciones internas, como las de redes privadas, loopback o el servicio de metadatos de la nube. Con
secret_token, el bot puede comprobar que la petición viene de verdad del servidor Pabal. - Servidor → notificaciones de Android: las notificaciones push pasan por Firebase Cloud Messaging (FCM) de Google. El servidor cifra el contenido de la notificación (nombre del remitente, vista previa del mensaje) con una clave que solo tiene ese teléfono, así que Google no puede leerlo: solo ve datos de entrega, como el token del dispositivo y la hora de envío. El operador también puede quitar por completo el contenido de los mensajes de las notificaciones.
- Servidor → notificaciones de iPhone: las notificaciones push del iPhone pasan por APNs de Apple. Igual que en Android, lo único que ve Apple es el texto exterior «New notification»; el remitente y el contenido se cifran con una clave que solo tiene ese dispositivo y se descifran dentro del teléfono. Es así a partir de la compilación de la aplicación que incluye notificaciones push (1.1).
- Llamadas a bots de voz (en preparación): a diferencia de las llamadas entre personas, las llamadas con un bot no tienen cifrado de extremo a extremo. La pasarela de voz de Pabal descifra el audio y se lo pasa al modelo de IA, y con el motor predeterminado el audio de la llamada va a Google en Estados Unidos (Google Cloud
us-central1). Lo que puede decidir el operador —gestionar su propio servidor, la clave de modelo del propietario del bot, el modo stream y los interruptores del operador— está en Agentes de IA: lo que puedes decidir. - Administración: el panel de administración solo está accesible desde el propio servidor (127.0.0.1), y hace falta un token para ver los datos. El operador entra mediante un túnel SSH.
- Almacenamiento: las claves de autorización se guardan sin cifrar en la base de datos, porque el servidor las necesita para descifrar. La base de datos y las copias de seguridad deben protegerse tanto como la clave privada RSA del servidor.
Glosario
| Término | Significado |
|---|---|
| MTProto | El protocolo cifrado entre la aplicación y el servidor, creado por Telegram. Pabal usa la versión 2.0. |
| Capa (layer) | La versión del formato de las peticiones y respuestas que circulan sobre MTProto. Pabal usa la 216. |
| Clave de autorización (auth key) | El secreto de 2048 bits que la aplicación crea con el servidor la primera vez que se conecta. El inicio de sesión queda asociado a esta clave. |
| DC | El número de centro de datos de Telegram. En Pabal, un solo servidor atiende todos los DC del 1 al 5. |
| Actualización (update), pts | Un cambio, como un mensaje nuevo, una edición o un borrado. El pts es el número de secuencia de los cambios de cada usuario y permite a un dispositivo que estuvo desconectado saber qué se perdió. |
| Notificación push | Aviso que despierta el teléfono cuando la aplicación está cerrada o en segundo plano. Pabal las envía a la aplicación de Android a través de Google FCM, y a la de iPhone a través de Apple APNs. |
| Peer | La otra parte de un chat: una persona, un bot o un grupo. |
| Token de bot | Una cadena con la forma <ID del bot>:<secreto>. Se pone en la dirección de la Bot API para identificar al bot. |
| Webhook | Un modo en el que, en lugar de que el bot vaya a buscar las novedades, el servidor se las envía a su dirección HTTPS. |
| Agente de IA | Un bot que contesta mensajes y también llamadas. En Pabal, es un bot con la voz activada (en preparación). |
| Bot de voz | Un bot al que se puede llamar. No contesta el código del propietario del bot, sino un modelo de voz de IA. |
| Pasarela de voz | El componente de Pabal (pabal-voice) que hace de extremo de la llamada en lugar del bot, descifra el audio y se comunica con el modelo de IA. No es la pasarela MTProto a la que se conectan las aplicaciones. |
| Modo stream | El modo de un bot de voz en el que el audio de la llamada lo recibe directamente el servidor del desarrollador del bot en lugar de un modelo de IA. |
| Guardar conversación | Si quien llama lo elige, al terminar la llamada la conversación se guarda como texto solo en su propio chat. No va ni al bot ni a su propietario. |