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 es una mensajería que toma ese nombre: una 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.

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) GatewayMTProto 2.0 · capa 216 Bot API · webhooks/bot<token>/<método> Sitio web · docs/ · /docs/ · /usuario Servicios Buzones · lista de chats Push en tiempo real (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 se cifra por sí mismo, 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.

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)El operador elige cómo se entrega el código: SMS, correo electrónico o entrega por el administrador
Chats uno a uno, recepción en tiempo real, varios dispositivosUn dispositivo que estaba apagado recupera lo que se perdió al volver a encenderse
Editar y borrar mensajesEl cambio se refleja al instante también en la pantalla de la otra persona
Grupos básicos (crear, añadir y expulsar miembros, nombre)Los miembros se añaden directamente desde la información del grupo
Enviar fotos, foto de perfilSe guardan en un único tamaño, el original
Bots: @BotFather, Bot API HTTP, webhooks, bots MTProtoBotones, callbacks, menú de comandos, fotos y grupos
Panel de administración, ajustes de operaciónSolo accesible en 127.0.0.1 del servidor
Sitio web en 10 idiomas, páginas de enlaces de nombre de usuario e invitaciónLa documentación para desarrolladores también está en 10 idiomas
Canales, supergruposAún noPuede que no se muestren bien en la aplicación
Archivos de documento, vídeo y voz, álbumesAún noSi se envían, se rechazan con MEDIA_INVALID
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 voz y vídeo, chats secretosAún no
Verificación en dos pasos (contraseña en la nube)Aún noSi intentas activarla, se rechaza
Aplicaciones móviles, notificaciones pushAún noPor ahora, aplicación de escritorio para macOS
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

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, así 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 direcciones internas como redes privadas, loopback o los metadatos de la nube. Con secret_token, el bot puede comprobar que la petición viene de verdad del servidor Pabal.
  • 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 están tal cual 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 edició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 orden de los cambios de cada usuario y permite a un dispositivo que estuvo desconectado saber qué se perdió.
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.