Docs para desarrolladores
Español

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

Personas · programas Entradas Servidor Pabal (HunsTelegram) Aplicación PabalPabal.app · Telegram Programa de botBibliotecas · curl NavegadorSitio · docs · enlaces MTProto:8443 · cifrado HTTPS :443Caddy (TLS auto) PasarelaMTProto 2.0 · capa 216 Bot API · webhooks/bot<token>/<método> Sitio web · docs/ · /docs/ · /usuario Servicios Buzones · lista de chats Actualizaciones (pts) Grupos · fotos · perfiles Códigos · auth keys @BotFather · registro bots Panel admin (127.0.0.1) PostgreSQLAlmacénde eventos ArchivosFotos orig.data/media Bot MTProto POST al webhook
Arquitectura de Pabal: dos entradas, un solo lugar de registro

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ónEstadoNotas
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 dispositivosSíUn dispositivo que estaba apagado recupera lo que se perdió al volver a encenderse
Editar y borrar mensajesSí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 perfilSí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 MTProtoSíBotones, callbacks, menú de comandos, fotos, archivos y grupos
Panel de administración, ajustes de operaciónSí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ónSíLa documentación para desarrolladores también está en 10 idiomas
Llamadas 1:1SíLas llamadas entre redes distintas dependen de la configuración del relé (TURN) del servidor
Notificaciones push — AndroidSí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 WindowsSí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 realesUn 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 realChats, 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éfonoDesactivado por defectoSi 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, supergruposAún noPuede que no se muestren bien en la aplicación
Mensajes de vídeo y de vozAún noSe pueden enviar como archivos, pero no se reproducen dentro de la aplicación
Álbumes (varios elementos en un solo bloque)Aún noSi 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 botsAún noEl texto se envía tal cual. Comandos, menciones, enlaces y hashtags se marcan automáticamente
Llamadas de grupo, chats secretosAún no
Verificación en dos pasos (contraseña en la nube)Aún noSi intentas activarla, se rechaza
Aplicación para iPhoneEn preparaciónLa 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ónAún noEl enlace se crea, pero al pulsarlo no te hace miembro
Modo inline (@bot consulta), pagos, juegosAún no
Bots de voz (al llamar a un bot, contesta una IA)En preparaciónSe 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ónSolo 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ónFalta 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)DesactivadoA 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.

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.

EnlaceSignificadoDirección que se abre en la aplicación
pabal.me/<nombre_de_usuario>Abrir el chat con una persona o un bottg://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 /revoke en @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érminoSignificado
MTProtoEl 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.
DCEl número de centro de datos de Telegram. En Pabal, un solo servidor atiende todos los DC del 1 al 5.
Actualización (update), ptsUn 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 pushAviso 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.
PeerLa otra parte de un chat: una persona, un bot o un grupo.
Token de botUna cadena con la forma <ID del bot>:<secreto>. Se pone en la dirección de la Bot API para identificar al bot.
WebhookUn 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 IAUn bot que contesta mensajes y también llamadas. En Pabal, es un bot con la voz activada (en preparación).
Bot de vozUn bot al que se puede llamar. No contesta el código del propietario del bot, sino un modelo de voz de IA.
Pasarela de vozEl 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 streamEl 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ónSi 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.