Premiers pas
Présentation de Pabal
Ce qu'est Pabal, comment il est construit, ce qui fonctionne aujourd'hui et ce qui ne fonctionne pas encore.
Qu'est-ce que Pabal ?
Le pabal (파발, 擺撥) était le système de relais de poste du royaume de Joseon : des cavaliers changeaient de monture aux relais pour acheminer au plus vite les nouvelles urgentes. Pabal.me est une messagerie qui porte ce nom : compatible avec Telegram, elle est exploitée par une organisation ou une communauté sur son propre serveur.
- Vous exploitez le serveur vous-même. Comptes, conversations et photos sont tous stockés sur le serveur et dans la base de données (PostgreSQL) de l'opérateur. Le programme serveur s'appelle HunsTelegram (Java 21).
- Il parle la langue de Telegram. Entre l'application et le serveur circule le même MTProto 2.0 (layer 216) que chez Telegram ; entre les bots et le serveur, la même Bot API HTTP que chez Telegram. Les applications, bibliothèques et bots conçus pour Telegram se connectent donc à Pabal en changeant seulement l'adresse.
- C'est un monde à part, sans lien avec Telegram. Un compte Pabal n'existe que sur le serveur Pabal, et il est impossible d'échanger des messages avec des utilisateurs de Telegram.
Parler avec des agents IA : quand les bots vocaux sont activés, un bot répond aux messages et aussi au téléphone. Vous pouvez poser une question par écrit à un bot depuis votre ordinateur, l'appeler depuis votre téléphone ou votre Apple Watch, et tout le monde peut créer un tel bot avec @BotFather. C'est encore en préparation ; ce qui est possible et où vont les données est rassemblé dans Agents IA.
Comment il est construit
Explication du diagramme
- Trois zones : à gauche, ce qui tourne hors du serveur (application, programmes de bot, navigateur) ; au milieu, les deux entrées du serveur ; à droite, l'intérieur du serveur. Les programmes de bot tournent eux aussi hors du serveur, sur l'ordinateur de l'opérateur ou du développeur.
- Il n'y a que deux entrées : l'application se connecte directement au port MTProto (8443) (MTProto assure lui-même le chiffrement, HTTPS est donc inutile), tandis que le site web et la Bot API arrivent par HTTPS (443).
- Un bot se connecte par l'un des deux chemins : en général par la Bot API en HTTPS (trait plein) ou, si vous le souhaitez, par MTProto comme l'application (pointillés bleus). Dans les deux cas, c'est le même compte de bot et la même boîte de messages.
- Les pointillés rouges sont la seule flèche en sens inverse : quand un bot configure un webhook, le serveur envoie les mises à jour à l'adresse HTTPS du programme de bot. Tout le reste, ce sont des requêtes qui entrent dans le serveur depuis l'extérieur.
- Un seul lieu d'enregistrement : toute modification passe par les services et est consignée dans le magasin d'événements de PostgreSQL ; seules les photos originales sont conservées sous forme de fichiers. Les messages envoyés depuis l'application et ceux envoyés par les bots suivent le même chemin : notifications push, liste des discussions et rattrapage à la reconnexion s'appliquent donc à tous de la même façon.
Le schéma ci-dessus montre le trajet des messages. Un serveur où les bots vocaux sont activés a en plus des entrées pour les appels — le relais d'appel (UDP 3478) et le point d'entrée audio de l'Apple Watch (WSS). Ce trajet est dessiné dans Agents IA.
Ce qui fonctionne, ce qui ne fonctionne pas encore
| Fonctionnalité | État | Remarque |
|---|---|---|
| Inscription et connexion (numéro de téléphone + code) | Disponible | L'opérateur choisit comment le code est remis : SMS, e-mail ou transmission par l'administrateur |
| Conversations 1:1, réception en temps réel, plusieurs appareils | Disponible | Un appareil éteint rattrape ce qu'il a manqué quand on le rallume |
| Modifier et supprimer des messages | Disponible | Répercuté aussitôt sur l'écran du correspondant |
| Groupes simples (création, ajout et retrait de membres, nom) | Disponible | Les membres s'ajoutent directement depuis les infos du groupe |
| Envoi de photos, photo de profil | Disponible | Stockées en une seule taille, celle de l'original |
| Envoi de fichiers (tous formats) | Disponible | Nom et format préservés. Au-delà de 10 Mo, upload.saveBigFilePart ; limite de 2 Go par défaut |
| Bots — @BotFather, Bot API HTTP, webhooks, bots MTProto | Disponible | Boutons, callbacks, menu des commandes, photos, fichiers, groupes |
| Page d'administration, paramètres d'exploitation | Disponible | Accessible uniquement sur l'adresse 127.0.0.1 du serveur |
| Site web en 10 langues, pages pour les liens de nom d'utilisateur et d'invitation | Disponible | La documentation développeurs existe aussi en 10 langues |
| Appels en tête-à-tête | Disponible | Entre réseaux différents, les appels dépendent des réglages de relais (TURN) du serveur |
| Notifications push — Android | Disponible | Notifications de messages et sonnerie des appels même quand l'application est fermée. L'opérateur doit configurer Firebase (Installation du serveur) |
| Notifications — macOS · Windows | Disponible | Affichées dans les notifications de l'ordinateur tant que l'application est lancée (pas de push) |
| Voir et déconnecter les appareils connectés (Appareils dans les paramètres) | Disponible — pas encore vérifié avec les vraies applications | Un appareil connecté depuis moins de 24 heures ne peut pas déconnecter les autres (les applications Android et de bureau n'affichent alors aucun message). Vérifié par les tests du serveur ; la vérification de bout en bout avec les vraies applications reste à faire — Utiliser l'application — Protéger votre compte |
| Export des données (application de bureau) | Disponible — pas encore vérifié avec la vraie application | Conversations, photos, fichiers et informations du compte. Trois lancements par jour au plus ; un redémarrage du serveur oblige à recommencer. Le délai d'attente de Telegram, l'accord depuis un autre appareil et l'historique des exports n'existent pas encore. Testé avec les requêtes qu'envoie l'application de bureau, dans le même ordre ; la vérification de bout en bout avec la vraie application reste à faire |
| Changer de numéro de téléphone | Désactivé par défaut | Une fois activé par l'opérateur, un code part par SMS vers le nouveau numéro (seulement sur les serveurs où les SMS sont configurés) — Administration et paramètres — Codes d'inscription et de connexion |
| Canaux, supergroupes | Pas encore | Peuvent ne pas s'afficher correctement dans l'application |
| Vidéos et messages vocaux | Pas encore | Ils peuvent être envoyés comme fichiers, mais ne se lisent pas dans l'application |
| Albums (plusieurs éléments en un seul bloc) | Pas encore | Si vous en envoyez plusieurs à la fois, ils arrivent bien, mais s'affichent un par un au lieu d'être regroupés |
Texte mis en forme (gras, italique), parse_mode des bots | Pas encore | Envoyé tel quel. Commandes, mentions, liens et hashtags sont mis en évidence automatiquement |
| Appels de groupe, conversations secrètes | Pas encore | |
| Validation en deux étapes (mot de passe cloud) | Pas encore | Refusée si vous essayez de l'activer |
| Application iPhone | En préparation | La version 1.0 a été soumise à l'examen de l'App Store (2026-09-23). La version 1.0 n'a pas de notifications push : les messages arrivent tant que l'application est ouverte. La version 1.1, qui contient les notifications push, est en test interne (TestFlight) |
| Rejoindre un groupe par un lien d'invitation | Pas encore | Le lien est bien créé, mais l'ouvrir ne vous ajoute pas au groupe |
Mode inline (@bot recherche), paiements, jeux | Pas encore | |
| Bots vocaux (quand on appelle un bot, c'est une IA qui répond) | En préparation | S'activent seulement quand le serveur, les documents juridiques et une application avec l'écran de confirmation sont prêts. Désactivés sur pabal.me, en test sur le serveur de développement — Bots vocaux |
| App pour Apple Watch (appels aux bots vocaux) | En préparation | Test interne (TestFlight) seulement. Appeler un bot vocal depuis la montre, sans iPhone — Utiliser l'application — Apple Watch |
| Garder la conversation (la conversation d'un appel gardée en texte dans votre discussion) | En préparation | Le texte de l'écran de confirmation n'a pas encore été examiné juridiquement — Utiliser l'application — bots vocaux |
| Appels des bots (un bot que vous avez autorisé vous appelle avec une voix d'IA) | Désactivé | En attente de l'examen juridique ; pas encore de version de l'application avec l'écran d'autorisation — Utiliser l'application — Autoriser un bot à vous appeler |
Relation avec Telegram
Pabal est un serveur distinct qui suit le protocole public de Telegram. Il n'a aucun lien avec la société Telegram et ne se connecte pas non plus aux serveurs de Telegram.
- Ce qui est compatible : MTProto 2.0 (les 4 transports, le handshake, la liaison des clés temporaires), le format des requêtes et réponses de la layer 216, ainsi que, pour la Bot API HTTP, le format des adresses, des requêtes, des réponses et des erreurs. Nous l'avons vérifié en connectant Telegram Desktop 6.2.6 officiel sans modification (seules l'adresse du serveur et la clé publique ont été changées).
- Ce qui diffère : comptes et données sont propres à chaque serveur. Les identifiants d'utilisateur, de message et de fichier n'ont de sens qu'à l'intérieur de ce serveur. Un jeton de bot utilisé sur Telegram ne fonctionne pas : vous devez en obtenir un nouveau auprès du @BotFather de Pabal.
Format des liens
L'application et le serveur construisent les liens avec https://pabal.me/. Ouvert dans un navigateur, un lien affiche une petite page qui ouvre l'application.
| Lien | Signification | Adresse ouverte dans l'application |
|---|---|---|
pabal.me/<nom d'utilisateur> | Ouvrir la conversation avec une personne ou un bot | tg://resolve?domain=<nom d'utilisateur> |
pabal.me/+<code d'invitation> | Lien d'invitation à un groupe (l'application s'ouvre, mais rejoindre le groupe par le lien ne fonctionne pas encore) | tg://join?invite=<code d'invitation> |
pabal.me/joinchat/<code d'invitation> | Lien d'invitation à l'ancien format (même signification) | tg://join?invite=<code d'invitation> |
Un nom d'utilisateur compte de 5 à 32 caractères (lettres latines, chiffres et tiret bas) et commence par une lettre (celui d'un bot se termine par bot). Les noms identiques à un chemin utilisé par le site, comme docs, admin ou health, ne s'ouvrent pas en tant que liens.
Modèle de sécurité
- Application ↔ serveur : chiffré avec MTProto 2.0. L'application est compilée avec la clé publique RSA du serveur intégrée, si bien qu'aucun autre serveur ne peut se faire passer pour le serveur Pabal. Les conversations fonctionnent comme les « conversations cloud » de Telegram : le serveur peut lire leur contenu (ce n'est pas du chiffrement de bout en bout). C'est pourquoi le serveur doit être exploité par quelqu'un de confiance.
- Bot ↔ serveur : la Bot API n'est exposée qu'en HTTPS. Le jeton d'un bot est son mot de passe : s'il a fuité, changez-le avec
/revokeauprès de @BotFather. L'ancien jeton et les connexions ouvertes avec lui sont coupés immédiatement. - Serveur → webhook : le serveur n'envoie de requêtes qu'à des webhooks en HTTPS sur une adresse publique. Il refuse les adresses internes telles que réseaux privés, boucle locale ou métadonnées cloud. Grâce à
secret_token, le bot peut vérifier qu'une requête vient bien du vrai serveur Pabal. - Serveur → notifications Android : les notifications push passent par Firebase Cloud Messaging (FCM) de Google. Le serveur chiffre leur contenu (nom de l'expéditeur, aperçu du message) avec une clé que seul ce téléphone possède : Google ne peut pas le lire et ne voit que les informations d'acheminement, comme le jeton de l'appareil et l'heure d'envoi. L'opérateur peut aussi retirer complètement le contenu des messages des notifications.
- Serveur → notifications iPhone : les notifications push de l'iPhone passent par le service APNs d'Apple. Comme pour Android, Apple ne voit que le texte de façade « New notification » ; l'expéditeur et le contenu sont chiffrés avec une clé que seul cet appareil possède et sont déchiffrés dans le téléphone. C'est le cas à partir de la version de l'application qui contient les notifications push (1.1).
- Appels aux bots vocaux (en préparation) : contrairement aux appels entre personnes, les appels avec un bot ne sont pas chiffrés de bout en bout. La passerelle vocale de Pabal déchiffre l'audio et le transmet au modèle d'IA, et avec le moteur par défaut, l'audio de l'appel part chez Google aux États-Unis (Google Cloud
us-central1). Ce que l'opérateur peut décider — exploiter lui-même le serveur, la clé de modèle du propriétaire du bot, le mode flux, les interrupteurs de l'opérateur — est décrit dans Agents IA — ce que vous pouvez décider. - Administration : la page d'administration n'est accessible que depuis le serveur lui-même (127.0.0.1), et il faut un jeton pour en voir les données. L'opérateur y accède par un tunnel SSH.
- Stockage : le serveur a besoin des clés d'autorisation pour déchiffrer ; elles sont donc stockées telles quelles dans la base de données. Protégez la base de données et les sauvegardes aussi soigneusement que la clé privée RSA du serveur.
Glossaire
| Terme | Signification |
|---|---|
| MTProto | Protocole de chiffrement entre l'application et le serveur, conçu par Telegram. Pabal utilise la version 2.0. |
| Layer (couche) | La version du format des requêtes et réponses échangées au-dessus de MTProto. Pabal utilise la 216. |
| Clé d'autorisation (auth key) | Secret de 2048 bits que l'application établit avec le serveur lors de sa première connexion. La connexion au compte est rattachée à cette clé. |
| DC | Numéro de centre de données (data center) chez Telegram. Chez Pabal, un serveur unique assure tous les DC, de 1 à 5. |
| Mise à jour (update), pts | Un changement tel qu'un nouveau message, une modification ou une suppression. Le pts est le numéro d'ordre des changements, propre à chaque utilisateur : il permet à un appareil qui était déconnecté de savoir ce qu'il a manqué. |
| Notification push | Réveil du téléphone pour vous prévenir quand l'application est fermée ou en arrière-plan. Pabal les envoie à l'application Android via Google FCM et à l'application iPhone via Apple APNs. |
| Pair (peer) | L'interlocuteur d'une conversation : une personne, un bot ou un groupe. |
| Jeton de bot | Chaîne de la forme <ID du bot>:<secret>. Placée dans l'adresse de la Bot API, elle prouve l'identité du bot. |
| Webhook | Mode de fonctionnement où le serveur envoie les mises à jour à l'adresse HTTPS du bot, au lieu que celui-ci vienne les chercher. |
| Agent IA | Un bot qui répond aux messages et aussi au téléphone. Dans Pabal, c'est un bot dont la voix est activée (en préparation). |
| Bot vocal | Un bot que l'on peut appeler. Ce n'est pas le code du propriétaire du bot qui décroche, mais un modèle vocal d'IA. |
| Passerelle vocale | Le composant de Pabal (pabal-voice) qui tient une extrémité de l'appel à la place du bot, déchiffre l'audio et échange avec le modèle d'IA. À ne pas confondre avec la passerelle MTProto à laquelle se connectent les applications. |
| Mode flux | Le mode de fonctionnement d'un bot vocal où c'est le serveur du développeur du bot, et non un modèle d'IA, qui reçoit directement l'audio de l'appel. |
| Garder la conversation | Si la personne qui appelle le choisit, la conversation de l'appel est gardée en texte, après l'appel, dans sa propre discussion uniquement. Elle n'est envoyée ni au bot ni à son propriétaire. |