Docs développeurs
Français

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

Personnes · programmes Entrées Serveur Pabal (HunsTelegram) Application PabalPabal.app · Telegram Programme de botBibliothèques · curl NavigateurSite · docs · liens MTProto:8443 · chiffré HTTPS :443Caddy (TLS auto) PasserelleMTProto 2.0 · layer 216 Bot API · webhooks/bot<jeton>/<méthode> Site web · docs/ · /docs/ · /utilisateur Services Messages · discussions Mises à jour temps réel (pts) Groupes · photos · profils Codes · clés d'autorisation @BotFather · liste des bots Page d'admin (127.0.0.1) PostgreSQLÉvénementsstockés FichiersPhotos orig.data/media Bots MTProto POST webhook (HTTPS)
L'architecture de Pabal — deux entrées, un seul lieu d'enregistrement

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éÉtatRemarque
Inscription et connexion (numéro de téléphone + code)DisponibleL'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 appareilsDisponibleUn appareil éteint rattrape ce qu'il a manqué quand on le rallume
Modifier et supprimer des messagesDisponibleRépercuté aussitôt sur l'écran du correspondant
Groupes simples (création, ajout et retrait de membres, nom)DisponibleLes membres s'ajoutent directement depuis les infos du groupe
Envoi de photos, photo de profilDisponibleStockées en une seule taille, celle de l'original
Envoi de fichiers (tous formats)DisponibleNom 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 MTProtoDisponibleBoutons, callbacks, menu des commandes, photos, fichiers, groupes
Page d'administration, paramètres d'exploitationDisponibleAccessible 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'invitationDisponibleLa documentation développeurs existe aussi en 10 langues
Appels en tête-à-têteDisponibleEntre réseaux différents, les appels dépendent des réglages de relais (TURN) du serveur
Notifications push — AndroidDisponibleNotifications 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 · WindowsDisponibleAffiché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 applicationsUn 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 applicationConversations, 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éphoneDésactivé par défautUne 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, supergroupesPas encorePeuvent ne pas s'afficher correctement dans l'application
Vidéos et messages vocauxPas encoreIls peuvent être envoyés comme fichiers, mais ne se lisent pas dans l'application
Albums (plusieurs éléments en un seul bloc)Pas encoreSi 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 botsPas encoreEnvoyé tel quel. Commandes, mentions, liens et hashtags sont mis en évidence automatiquement
Appels de groupe, conversations secrètesPas encore
Validation en deux étapes (mot de passe cloud)Pas encoreRefusée si vous essayez de l'activer
Application iPhoneEn préparationLa 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'invitationPas encoreLe lien est bien créé, mais l'ouvrir ne vous ajoute pas au groupe
Mode inline (@bot recherche), paiements, jeuxPas encore
Bots vocaux (quand on appelle un bot, c'est une IA qui répond)En préparationS'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éparationTest 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éparationLe 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.

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.

LienSignificationAdresse ouverte dans l'application
pabal.me/<nom d'utilisateur>Ouvrir la conversation avec une personne ou un bottg://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 /revoke auprè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

TermeSignification
MTProtoProtocole 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é.
DCNumé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), ptsUn 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 pushRé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 botChaîne de la forme <ID du bot>:<secret>. Placée dans l'adresse de la Bot API, elle prouve l'identité du bot.
WebhookMode de fonctionnement où le serveur envoie les mises à jour à l'adresse HTTPS du bot, au lieu que celui-ci vienne les chercher.
Agent IAUn 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 vocalUn 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 vocaleLe 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 fluxLe 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 conversationSi 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.