Docs développeurs
Français

Exploitation du serveur

Administration et paramètres

Page d'administration, envoi des codes d'inscription (SMS et e-mail), valeurs de configuration du serveur, sauvegardes et sécurité : la référence de l'opérateur.

Le serveur intègre une page d'administration qui s'ouvre dans un navigateur. Elle permet de consulter l'état du serveur, de choisir comment les codes d'inscription et de connexion sont remis, et de gérer les utilisateurs et les bots. Cette page réunit en un seul endroit la référence de la page d'administration et des valeurs de configuration du serveur. Si vous devez d'abord installer le serveur, consultez Installation du serveur. L'interface de la page d'administration est en coréen : les libellés coréens des onglets, boutons et réglages sont indiqués ici entre parenthèses.

Ouvrir la page d'administration

La page d'administration se trouve à l'adresse /admin/ du port HTTP d'administration (8080 dans la configuration de production) et ne s'ouvre que depuis le serveur lui-même (127.0.0.1). L'opérateur y accède par un tunnel SSH.

# Sur votre ordinateur (laissez la commande tourner)
ssh -N -L 8080:127.0.0.1:8080 <utilisateur>@<serveur>
# Navigateur : http://localhost:8080/admin/

# Le jeton (sur le serveur)
sudo cat /srv/pabal/pabal_server/data/admin-token

Saisissez le jeton, puis Ouvrir (열기). Le navigateur mémorise le jeton ; pour l'effacer, utilisez Effacer le jeton (토큰 지우기) en haut à droite. Pour choisir vous-même le jeton, définissez TELEGRAM_ADMIN_TOKEN (16 caractères minimum) : aucun fichier n'est alors écrit.

Contenu de chaque onglet

OngletContenuActualisation
Tableau de bord (대시보드)Personnes, sessions et connexions actives en ce moment ; nombre de personnes, de bots, de groupes, de messages, de photos et de fichiers ; durée de fonctionnement, ports, base de données, JVM, contrôles de santé. Un bandeau d'avertissement s'affiche si les numéros de test sont activés5 s
Codes d'inscription (가입 코드)Codes en attente (numéro, mode de remise, état de l'envoi, code, temps restant, nombre de saisies erronées) et historique récent. Copier ou annuler un code3 s
Utilisateurs (사용자)Tous les comptes — numéro de téléphone, e-mail de connexion (modifiable), connecté ou non, nombre d'appareils connectés, nombre de messages. Déconnecter tous les appareils (모든 기기 로그아웃), Bloquer le numéro (번호 차단), Supprimer le compte (계정 삭제, avec une note sur la façon dont la personne a été vérifiée — un compte supprimé ne laisse que son id et la note)10 s
Bots (봇)Bots créés avec BotFather — créateur, menu des commandes, mode de connexion (MTProto · polling HTTP · adresse du webhook et raison de l'échec), nombre de mises à jour en attente10 s
Voix (음성)Bots vocaux — état des passerelles, du relais et de la politique de confidentialité, arrêt d'urgence, ouverture au public, autorisation des transcriptions, appels en cours et raccrochage, autorisation et suspension des bots, testeurs, limites (ci-dessous)5 s
Signalements (신고)Ce qui arrive par « Signaler » dans l'application — une copie du contenu au moment du signalement (lisible même après sa suppression par l'expéditeur). Supprimer (des deux côtés de la conversation, et chez tous les membres pour un groupe), Suspendre le compte (déconnexion de tous les appareils, plus de connexion ni d'inscription possible), liste des comptes suspendus. Le numéro d'un compte supprimé alors qu'il était suspendu ne peut plus servir à s'inscrire pendant 1 an après la suppression (par défaut) ; à la suspension, ou plus tard avec Bloquer l'inscription (재가입 막기) dans la liste, on peut le prolonger jusqu'à une date de fin plus tardive (c'est la plus tardive de l'année et de la date qui compte ; il n'est jamais raccourci) ou pour une durée indéterminée (API d'administration : POST /admin/api/reports/<id>/suspend {"userId": …, "blockSignupUntil": "2028-01-01"} ou "blockSignupForever": true ; pour la changer ensuite, POST /admin/api/suspensions/<id>/block-signup, un corps vide rétablit la valeur par défaut). Les signalements traités restent consultables. Un signalement traité est effacé, copie comprise, 3 ans après le jour de son traitement (sa carte affiche la date) ; si un litige, une enquête ou une procédure judiciaire commence, Conserver (보존) le garde jusqu’à ce qu’on le libère (API d’administration : POST /admin/api/reports/<id>/hold, et /release pour le libérer)10 s
Assistance (고객센터)Les conversations reçues par @PabalSupport. Choisissez une conversation et répondez : la réponse part dans cette conversation au nom du bot d'assistance10 s
Paramètres (설정)Règles d'inscription et de connexion, comptes d'examen des stores, SMS, e-mail (SMTP), blocage de numéros de téléphone, informations sur l'opérateur publiées sur le siteEnregistrement manuel
Noms d'utilisateur réservés (예약 아이디)Noms d'utilisateur bloqués pour que personne ne puisse les prendre — recherche, ajout, téléchargement de la liste (.txt), noms que le serveur bloque par défaut. Réserver un nom déjà utilisé ne le retire pas à son titulaireUne fois, à l'ouverture
Stockage (저장소)Répertoire de données et adresse de la base de données (mot de passe masqué), nombre et volume des photos et des fichiers, nombre de flux stockés par type10 s

Les actions dangereuses (déconnexion, blocage, annulation d'un code) ne s'exécutent qu'après un second clic.

Codes d'inscription et de connexion

Quand une personne saisit son numéro de téléphone dans l'application, le serveur crée un code et l'envoie selon le mode choisi dans l'onglet Paramètres (설정).

Mode de remiseOù va le codeÉcrans de l'application
Page d'administration (관리 화면)Onglet Codes d'inscription (가입 코드). L'opérateur le copie et le communique lui-mêmeNuméro → « code envoyé » → code (et nom pour un nouveau numéro)
SMSSMS via Twilio, Solapi ou un webhookComme pour la page d'administration
E-mail (이메일)E-mail via SMTPNuméro → saisie de l'e-mail → « code envoyé par e-mail » → code
  • En mode e-mail, une nouvelle inscription peut utiliser n'importe quelle adresse, qui devient l'e-mail de connexion du compte. Un compte existant ne reçoit le code qu'à son e-mail de connexion enregistré : on empêche ainsi quelqu'un d'entrer en saisissant sa propre adresse avec le numéro d'une autre personne. Pour un compte existant sans e-mail de connexion, le code est envoyé à la place par SMS (s'il est configuré) ou via la page d'administration. Vous pouvez renseigner l'e-mail de connexion depuis l'onglet Utilisateurs (사용자).
  • L'envoi se fait en arrière-plan : l'application passe aussitôt à l'écran du code. Le résultat de l'envoi (succès ou échec, avec la raison) s'affiche dans l'onglet Codes d'inscription.
  • L'inscription (saisie du nom) n'est possible qu'après avoir saisi le bon code. Les codes erronés ne sont acceptés qu'un nombre limité de fois ; au-delà, même le bon code est refusé.
  • Le changement de numéro d'un compte (Paramètres → numéro de téléphone dans l'application) est fermé par défaut, et l'application affiche une erreur. Avec Autoriser le changement de numéro activé, le code part vers le nouveau numéro par SMS uniquement, quelle que soit la méthode d'envoi (l'onglet Codes d'inscription ne l'affiche pas, même avec l'affichage des codes — la personne à qui on le remettrait n'est peut-être pas titulaire du numéro), avec un texte à lui, le texte de changement de numéro des paramètres SMS (번호 바꾸기 문구 ; par défaut [파발] 번호 바꾸기 확인 코드: {code}). L'intervalle de renvoi et le maximum quotidien s'appliquent au nouveau numéro et au compte ; les numéros bloqués ou suspendus, et ceux qu'un autre compte possède, sont refusés à la demande du code et de nouveau au moment du changement. Un code ne vaut que pour ce compte et ce numéro, et ne sert qu'une fois ; le code de connexion d'une autre personne qui attend ce numéro reste tel quel. Après le changement, l'ancien numéro ne connecte plus au compte.

Paramètres — inscription et connexion

ÉlémentSignificationDéfaut
Autoriser les nouvelles inscriptions (새 가입 허용)Désactivé : seuls les comptes existants peuvent se connecter. Les nouveaux numéros sont refusés comme « numéro invalide »Activé
Mode de remise des codes (코드 전달 방식)Page d'administration / SMS / e-mailPage d'administration
Afficher les codes dans la page d'administration (관리 화면에 코드 표시)Même en mode SMS ou e-mail, affiche le code dans l'onglet Codes d'inscription (au cas où l'envoi échoue)Activé
Numéros de test (+99966…) (테스트 번호)Selon la configuration du serveur / activer / désactiver. À désactiver en productionSelon la configuration du serveur
Nombre de chiffres · durée de validité du code (코드 자릿수 · 코드 유효 시간)5 à 6 chiffres · 1 à 60 minutes5 chiffres · 5 minutes
Intervalle entre deux demandes · maximum par jour (재요청 간격 · 번호당 하루 최대 요청)Secondes avant qu'un même numéro puisse recevoir un nouveau code (0 à 3600) · nombre maximal de demandes sur 24 heures (1 à 1000)60 secondes · 10 fois
Saisies erronées autorisées (틀린 입력 허용 횟수)Au-delà, le code est verrouillé (1 à 20)5 fois
Autoriser le changement de numéro (번호 바꾸기 허용)Un compte connecté peut passer à un autre numéro avec « Changer de numéro » dans l'application. Ne s'active qu'une fois le SMS configuréDésactivé

Paramètres — SMS

FournisseurValeurs à saisirRemarques
Webhook (웹훅)Adresse de réception (https://…), en-tête Authorization (facultatif)Le serveur envoie POST {"phone":"+8210…","code":"12345","text":"…"}. Une réponse 2xx vaut succès. Pour vous brancher sur votre propre serveur de SMS ou sur un autre service
TwilioAccount SID, Auth Token, numéro d'expéditeur ou Messaging Service SIDPartout dans le monde, numéros étrangers compris
Solapi (ex-CoolSMS)API Key, API Secret, numéro d'expéditeurSMS en Corée. Le numéro d'expéditeur doit être préalablement enregistré chez Solapi. Les numéros +82 sont envoyés au format 010…

Le texte peut contenir {code} (le code) et {minutes} (la durée de validité). Valeur par défaut : [파발] 인증 코드: {code} (« [Pabal] Code de vérification : {code} »). Après l'enregistrement, vérifiez avec Envoi de test (테스트 발송).

Paramètres — e-mail (SMTP)

ServiceServeur · port · sécuritéNom d'utilisateur · mot de passe
Gmailsmtp.gmail.com · 587 · STARTTLSAdresse Gmail · mot de passe d'application (Compte Google → Sécurité → Validation en deux étapes → Mots de passe des applications)
Naversmtp.naver.com · 587 · STARTTLSIdentifiant · mot de passe (activez POP3/SMTP dans les réglages de Naver Mail)
Relais de messagerie interneAdresse du relais · 25 · aucuneLaisser vide

L'adresse d'expédition doit être une adresse depuis laquelle le compte SMTP a le droit d'envoyer. L'objet et le corps acceptent eux aussi {code} et {minutes}.

Gestion des utilisateurs

  • Déconnecter tous les appareils (모든 기기 로그아웃) : coupe toutes les connexions (clés d'autorisation) du compte. À utiliser pour un utilisateur qui a perdu un appareil.
  • Bloquer le numéro (번호 차단) : ce numéro ne peut plus recevoir de code, et le compte correspondant est aussitôt déconnecté de tous ses appareils. Revient au même que la liste de blocage des numéros de téléphone de l'onglet Paramètres (설정).
  • E-mail de connexion (로그인 이메일) : nécessaire, en mode e-mail, pour qu'un compte existant puisse se connecter par e-mail.
  • Supprimer le compte (계정 삭제) : pour un utilisateur qui a demandé la suppression de son compte, une fois son identité vérifiée. Supprime exactement ce que supprime la suppression de compte de l'application, sans retour possible. L'action ne s'exécute qu'après avoir saisi de nouveau l'identifiant ou le numéro de téléphone du compte et laissé une note indiquant par où la demande est arrivée et comment l'identité a été vérifiée. La note est conservée avec l'identifiant et la date (les numéros de téléphone, adresses e-mail, ainsi que le nom et le nom d'utilisateur du compte en sont retirés). Pour une demande par e-mail qui ne vient pas de l'e-mail de connexion du compte, la même fenêtre envoie un code par SMS au numéro du compte : saisissez le code que la personne renvoie par e-mail. Les bots et les comptes propres au serveur ne peuvent pas être supprimés ici.
  • @BotFather est un bot intégré au serveur : il ne peut pas être déconnecté.

Gestion des bots

L'onglet Bots (봇) affiche le mode de connexion de chaque bot : s'il est connecté en MTProto, s'il a appelé getUpdates en HTTP au cours de la dernière minute, quelle est l'adresse de son webhook et si celui-ci est actuellement en échec (avec la raison). Si le nombre de mises à jour en attente ne cesse d'augmenter, le programme du bot est arrêté ou son webhook échoue. La suppression d'un bot et l'émission d'un nouveau jeton se font par le créateur du bot, auprès de @BotFather.

Onglet Voix

C'est ici que l'on exploite les bots vocaux (des bots dont les appels, passés depuis l'application, sont pris par un modèle vocal d'IA — voir Bots vocaux). L'onglet s'affiche même si la voix n'est pas activée sur le serveur, et la zone d'état indique ce qui manque. Pour l'activer, voir Installation du serveur — Bots vocaux. Actualisation toutes les 5 secondes.

ZoneCe qu'on y voit et ce qu'on peut y faire
Chiffres du hautAppels en cours · temps utilisé aujourd'hui (limite quotidienne du serveur, temps réservé par les appels en cours) · passerelles connectées · bots dont la voix est activée (bots autorisés) · testeurs (ouvert au public ou non)
ÉtatLiaison avec la passerelle (son adresse, ou « Désactivée — pas de secret de liaison » (꺼짐 (링크 비밀 없음))), relais d'appel (TURN ; sans lui, « Tous les appels aux bots sonnent occupé » (모든 봇 통화가 통화 중)), présence de la section bot-calls dans la politique de confidentialité (sans elle, « Aucun bot ne prend d'appel » (어떤 봇도 받지 않음)), consentements en attente, et le nombre d'appels terminés par une tonalité d'occupation, par raison (par exemple 워치가 못 거는 모드 — « mode que la montre ne peut pas appeler » : un appel depuis l'Apple Watch vers un bot qui utilise des outils, MCP, une clé propre, le mode flux ou la transcription du propriétaire, WATCH_NOT_YET)
Arrêt d'urgenceArrêter tous les appels vocaux (모든 음성 통화 멈추기) : dès le clic, tous les appels aux bots en cours sur ce serveur se terminent, aucun nouvel appel n'est pris, et aucun bot n'affiche plus de bouton d'appel. Le réglage est ensuite enregistré et survit à un redémarrage du serveur (un avertissement s'affiche si l'enregistrement échoue). On lève l'arrêt avec Rouvrir les appels vocaux (음성 통화 다시 열기)
Ouverture au publicAvant l'ouverture, seuls les testeurs ci-dessous peuvent appeler les bots vocaux. Pour ouvrir à tous, tapez exactement 공개합니다 (« J'ouvre au public ») dans le champ, puis Ouvrir à tous (모두에게 공개) (refusé si la clé de destinataire du serveur, TELEGRAM_VOICE_RECIPIENTS, vaut …@unset, c'est-à-dire sans région de traitement — il faut d'abord publier une version de l'application qui indique la région). Revenir aux testeurs seuls (시험자만으로 되돌리기) fait marche arrière. Terminer l'examen juridique et obtenir la réponse écrite du fournisseur (Google) avant d'ouvrir au public relève du jugement de l'opérateur — le code ne l'empêche pas
PasserellesPour chaque passerelle connectée : id, appels pris/capacité, destination de l'audio (google.vertex.gemini-live@us-central1, etc.), fonctions (tools·byok·transcripts·stream …), moteur, boot
Transcription · clé propreAutoriser la transcription : tapez 대화 기록을 허용합니다 (« J'autorise les transcriptions ») dans le champ, puis Autoriser la transcription (대화 기록 허용). Ne l'autorisez pas avant un examen juridique. La désactivation est immédiate et jette aussi les textes que les appels en cours et les bots n'ont pas encore récupérés. « Garder la conversation », choisi par l'appelant, ne dépend pas de cette autorisation et n'a pas d'interrupteur dans la page d'administration — c'est la section bot-calls-keep-text de la politique de confidentialité qui l'active (Installation du serveur — Garder la conversation). Clé propre : si les clés sont acceptées et sinon pourquoi, id de la clé maîtresse, nombre de bots qui ont une clé (la clé elle-même n'apparaît nulle part)
Appels en coursId de l'appel, bot, appelant (nom et id), état, écoulé/maximum, passerelle, nombre de requêtes d'outil ouvertes. Raccrocher (끊기) (exécuté au second clic)
Bots vocauxBots qui peuvent utiliser la voix : Seulement les bots autorisés (허용한 봇만) (par défaut) ou Tous les bots créés avec @BotFather (@BotFather 로 만든 모든 봇). Autoriser (허용) avec l'id ou le @nom d'utilisateur du bot. Tableau : bot, créateur, état (activé ou non, s'il peut prendre des appels et pourquoi, suspendu, adresse où part l'audio en mode flux, outils et nombre de réponses, d'erreurs et de délais dépassés), voix et langue, limites, appels du jour. Actions : Autoriser (허용)·Retirer l'autorisation (허용 취소), Vérifier et autoriser à nouveau (확인하고 다시 허용), Suspendre (멈추기) (raison obligatoire, 200 caractères, visible par le propriétaire du bot ; les appels en cours se terminent)·Rouvrir (다시 열기), Voir les réglages (설정 보기)
Réglages d'un botTexte intégral des instructions et du message d'accueil (pour relecture), définitions des outils et temps de réponse par outil (p50·p95), destination des requêtes d'outil, version des règles acceptée, contrôle d'usurpation appliqué ou exempté, modifications récentes, et par mois : appels, minutes, appels manqués et refusés
TesteursAvec l'id ou le @nom d'utilisateur d'une personne (avec ou sans @, sans tenir compte de la casse) : Ajouter comme testeur (시험자로 넣기)·Retirer (빼기) (impossible pour les bots et les comptes propres du serveur). Les personnes ajoutées par le réglage serveur TELEGRAM_VOICE_TESTERS apparaissent comme « Serveur » (서버) et ne peuvent pas être retirées ici
LimitesLe tableau ci-dessous + Noms à ajouter au contrôle d'usurpation (사칭 검사에 더할 이름) (un par ligne). À l'enregistrement, la page signale les bots qui ne pourront désormais plus prendre d'appels
Appels des botsL'interrupteur général : tapez exactement 봇이 거는 전화를 켭니다 dans le champ et activez — uniquement après l'examen juridique (refusé tant que callme.legal_review de l'écran d'autorisation n'est pas done ; l'exception pour les serveurs de développement et de test est TELEGRAM_VOICE_CALLME_UNREVIEWED). Désactivé, les nouvelles demandes reçoivent aussitôt 503. Les pays (82 par défaut, 999 sur les serveurs de test seulement), les limites (un serveur de production ne les enregistre jamais plus souples que les planchers), le tableau des bots que leurs propriétaires ont activés (état de l'examen, gel lié au jeton, arrêt automatique, demandes du jour) et le détail d'un bot (nom, @nom d'utilisateur, photo, instructions, message d'accueil, outils, voix, langue, mode, buts, nom du propriétaire et son outboundReviewHash) avec Autoriser·Retirer, Lever pour un arrêt automatique, et le nombre de refus à chaque étape de l'examen

Autoriser, c'est relire. En mode « Seulement les bots autorisés », autoriser un bot revient à autoriser ses instructions, son message d'accueil et ses outils actuels (en mode flux, son adresse de flux). Si le propriétaire du bot modifie l'un d'eux, le tableau des bots affiche « Instructions ou message d'accueil modifiés — vérifiez et autorisez à nouveau pour qu'il prenne des appels » (지시문·인사말이 바뀜 — 확인하고 다시 허용해야 전화를 받습니다), et ce bot ne prend plus d'appels tant que vous n'avez pas cliqué sur Vérifier et autoriser à nouveau (확인하고 다시 허용). Il en va de même pour un bot dont la langue n'est ni le coréen ni l'anglais, même en mode « Tous les bots créés avec @BotFather » — le contrôle automatique des règles effectué à l'enregistrement ne lit que le coréen et l'anglais. Le tableau affiche alors pour ce bot « Bot dans une autre langue que le coréen et l'anglais (illisible pour le contrôle automatique des règles) : lisez les instructions et le message d'accueil — vérifiez et autorisez à nouveau pour qu'il prenne des appels » (한국어·영어가 아닌 봇 (자동 규칙 검사가 읽지 못함): 지시문·인사말을 읽어 주세요 — 확인하고 다시 허용해야 전화를 받습니다) : faites lire les instructions et le message d'accueil par quelqu'un qui comprend cette langue, puis autorisez le bot.

LimitePar défautPlage
Durée maximale d'un appel (secondes)60060 à 3600, jusqu'au réglage serveur TELEGRAM_VOICE_MAX_SECONDS
Appels simultanés d'un bot21 à 100, jusqu'au réglage serveur TELEGRAM_VOICE_BOT_CONCURRENCY
Appels par heure pour une personne201 à 200
Minutes d'appel par jour pour une personne601 à 600
Minutes d'appel par jour pour un bot601 à 6000
Minutes d'appel par jour pour un propriétaire de bot1201 à 6000
Minutes d'appel par jour pour tout le serveur3001 à 100000
Appel le plus court accepté (secondes)6030 à 300 — s'il reste moins de temps, l'appel n'est pas pris
Restriction des nouveaux comptes (jours)70 à 90 (0 = désactivée) — sauf les testeurs, et les personnes à qui le bot a envoyé un message il y a plus d'un jour
  • La journée suit le fuseau horaire du serveur (TELEGRAM_VOICE_TIME_ZONE, Asia/Seoul par défaut). Quand un appel est accepté, sa durée maximale est fixée dans le temps restant de la journée et réservée sur toutes les limites ; à la fin, seules les secondes réelles selon l'horloge du serveur sont décomptées. Les appels pris avec la clé propre du propriétaire d'un bot ne consomment que les limites de l'appelant.
  • Le propriétaire d'un bot ne peut fixer la durée d'un appel (300 secondes par défaut) et le nombre d'appels simultanés de son bot qu'à l'intérieur de ces limites.
  • Toutes les actions (arrêt d'urgence, ouverture, autorisation, suspension, raccrochage, limites …) sont consignées dans le journal d'activité de l'onglet Codes d'inscription (가입 코드), préfixées par 음성: … (« Voix : … »).
  • Les indicateurs de qualité des appels vocaux (délai avant le premier son, délai d'arrêt lors d'une interruption, temps de réponse des outils, etc.) ne figurent pas dans cet onglet, mais seulement dans /metrics sur le port d'administration (noms commençant par voice. en JSON, par voice_ au format Prometheus, /metrics?format=prometheus). Ils ne contiennent que des totaux : ni personnes, ni bots, ni paroles.

On peut faire la même chose par l'API d'administration (toujours avec Authorization: Bearer <jeton>) : GET /admin/api/voice, GET /admin/api/voice/bots/<id>, et en POST : voice/kill {"on": true}, voice/launch {"launched": true, "confirm": "…"}, voice/transcripts {"allowed": true, "confirm": "…"}, voice/testers·voice/testers/remove {"userId": …}, voice/gate {"botGate": "ALLOWLIST"}, voice/bots/allow·voice/bots/disallow {"botId": …}, voice/bots/<id>/suspend {"reason": "…"}·…/lift·…/name-exempt, voice/calls/<id>/end ; les limites passent par /admin/api/settings/voice. Appels des bots : voice/outbound {"on": true, "confirm": "…"}, voice/outbound/settings {"countries": […], "limits": {…}}, GET /admin/api/voice/outbound/bots/<id>, voice/outbound/bots/allow {"botId": …, "expect": "<outboundReviewHash>"}·voice/outbound/bots/disallow, voice/outbound/bots/<id>/lift.

Variables d'environnement

Le serveur lit le fichier de configuration (server-config.json), puis le surcharge avec les variables d'environnement. Le fichier compose de production définit les valeurs ci-dessous : en général, il suffit de modifier .env.

VariableSignificationValeur dans le compose de production
TELEGRAM_PORTPort MTProtoMTPROTO_PORT (8443)
TELEGRAM_HOSTAdresse d'écoute de MTProto0.0.0.0
TELEGRAM_PUBLIC_HOSTAdresse du serveur communiquée à l'application (help.getConfig)PUBLIC_IP
TELEGRAM_WEB_PORTPort du site web, de la documentation, de la Bot API et de la page d'administration8080
TELEGRAM_WEB_HOSTAdresse d'écoute de ce port. 127.0.0.1 par défaut0.0.0.0 (dans le conteneur ; publié sur l'hôte uniquement sur 127.0.0.1)
TELEGRAM_PUBLIC_URLAdresse du site web. Liens (me_url_prefix), liens d'invitation, exemples de la documentation, images d'aperçuhttps://DOMAIN/
TELEGRAM_DATA_DIREmplacement des photos, des fichiers, d'admin-token et d'operations.json/app/data
TELEGRAM_RSA_KEYChemin de la clé privée RSA du serveur (créée au premier démarrage si elle n'existe pas ; clé publique dans .pub)/app/keys/private.pem
TELEGRAM_DC_IDNuméro de DC de ce serveur. Il doit être le DC que les applications utilisent comme maison (2 pour toutes les applications Telegram) — sinon le téléchargement des photos et des fichiers ne démarre jamaisDC_ID (2)
TELEGRAM_DB_TYPEmemory · h2 · postgresqlpostgresql
TELEGRAM_DB_URL, TELEGRAM_DB_USERNAME, TELEGRAM_DB_PASSWORDConnexion JDBCjdbc:postgresql://pabal-postgres:5432/pabal, pabal, POSTGRES_PASSWORD
TELEGRAM_DB_MAX_POOL_SIZENombre de connexions à la base de données20
TELEGRAM_ADMIN_TOKENJeton de la page d'administration (vide : créé dans data/admin-token)ADMIN_TOKEN
TELEGRAM_MAX_FILE_SIZETaille maximale d'un fichier pouvant être envoyé (2GB · 512MB · un nombre d'octets). Les morceaux sont écrits sur le disque au fur et à mesure de leur arrivée : la limite porte donc sur le disque, pas sur la mémoireMAX_FILE_SIZE (2GB)
TELEGRAM_TEST_NUMBERSNuméros de test +99966…. Développement uniquementfalse
TELEGRAM_WEBHOOK_ALLOW_LOCALAutorise les webhooks de bots en http:// et vers des adresses internes. Développement uniquement(non défini = false)
TELEGRAM_FCM_CREDENTIALSChemin du fichier de clé de compte de service Firebase pour les notifications push Android. Vide : notifications push désactivées (Installation du serveur — étape 10)FCM_CREDENTIALS (vide)
TELEGRAM_FCM_PROJECT_IDSeulement pour envoyer vers un projet Firebase autre que le project_id du fichier de cléFCM_PROJECT_ID (vide)
TELEGRAM_PUSH_PREVIEWSÀ false, les notifications push n'affichent que l'expéditeur, sans le contenu du messagePUSH_PREVIEWS (true)
TELEGRAM_TURN_HOST, TELEGRAM_TURN_PORT, TELEGRAM_TURN_SECRETRelais d'appel (TURN) — là où deux applications sur des réseaux différents se rejoignent. Sans secret, les appels sont seulement directs (Installation du serveur — Relais d'appel)TURN_HOST (vide : DOMAIN), TURN_PORT (3478), TURN_SECRET (vide)
TELEGRAM_APNS_KEY, TELEGRAM_APNS_KEY_ID, TELEGRAM_APNS_TEAM_ID, TELEGRAM_APNS_TOPIC, TELEGRAM_APNS_MIN_BUILD, TELEGRAM_APNS_VOIP_MIN_BUILDPush iPhone (APNs) — le chemin du fichier de clé, l'ID de la clé (vide : tiré du nom du fichier), l'équipe qui a signé l'application, le bundle ID, la plus petite version à servir, la première version qui reçoit l'écran d'appel CallKit. Sans clé, le push iPhone est désactivé (Installation du serveur — étape 11)APNS_* (pas de clé, vide — tiré du nom du fichier, 4Z8R468M2D, me.pabal.ios, 4, vide)
TELEGRAM_STATIC_MAPS_KEY, TELEGRAM_STATIC_MAPS_PER_DAY, TELEGRAM_STATIC_MAPS_PER_USER_HOURImages de carte des messages de position — la clé Google Maps Static API, les nouvelles images obtenues par jour, celles qu'une même personne peut provoquer par heure. Sans clé, les images de carte sont désactivées (Installation du serveur — Images de carte)STATIC_MAPS_* (pas de clé, 300, 120)
JAVA_OPTSOptions de la JVM (mémoire)La valeur de .env

Variables d'environnement — bots vocaux

En production, le fichier complémentaire deploy/docker-compose.voice.yml en règle une partie à partir des valeurs de .env — liaison, relais, fuseau horaire, limites, testeurs et versions minimales ; les autres s'ajoutent fonctionnalité par fonctionnalité, après leur propre examen (Installation du serveur — Bots vocaux). Les réglages VOICE_* de la passerelle (pabal-voice) sont décrits dans voice/README.md du dépôt.

VariablePar défautSignification
TELEGRAM_VOICE_LINK_SECRET_FILE—Secret de liaison de 32 octets (64 caractères hexadécimaux), le même que celui de la passerelle. Absent ou erroné : voix désactivée
TELEGRAM_VOICE_LINK_HOST, TELEGRAM_VOICE_LINK_PORT127.0.0.1, 8095Où la liaison écoute. Hors boucle locale, TELEGRAM_VOICE_LINK_ANY_ADDRESS=true est nécessaire, et une adresse publique est toujours refusée
TELEGRAM_VOICE_LINK_ANY_ADDRESS—Déclaration « ce réseau n'est utilisé que par le serveur et la passerelle »
TELEGRAM_VOICE_TURN_HOST, TELEGRAM_VOICE_TURN_PORT—Adresse du relais à donner à la passerelle (l'adresse LAN du serveur). Ignorée si c'est la boucle locale
TELEGRAM_VOICE_MAX_SECONDS600L'appel le plus long qu'autorise ce serveur (60 à 3600)
TELEGRAM_VOICE_BOT_CONCURRENCY2Plafond d'appels simultanés pour un bot (l'opérateur et le propriétaire du bot ne peuvent que l'abaisser)
TELEGRAM_VOICE_TIME_ZONEAsia/SeoulRéférence des limites quotidiennes et mensuelles
TELEGRAM_VOICE_TESTERS—Liste d'identifiants d'utilisateurs testeurs (fusionnée avec la liste de la page d'administration). * uniquement sur un serveur de test
TELEGRAM_VOICE_RECIPIENTSgoogle.vertex.gemini-live@us-central1Le destinataire annoncé par l'écran de confirmation de l'application. Il doit être identique à celui de la passerelle pour que l'appel passe
TELEGRAM_VOICE_MIN_BUILD_DESKTOP, _ANDROID, _IOS, _WATCHOS1, 62151, 5, 1Première version de l'application qui contient vraiment l'écran de confirmation (pour le bureau, le nombre après la balise pabal-bc). Si le destinataire change, publiez une nouvelle version puis relevez ces valeurs. Pour le bureau, passez à 2 lors de la première validation d'un écran de confirmation dans une autre langue que le coréen ou l'anglais
TELEGRAM_VOICE_MIN_SHEET_VERSION1Version d'écran de confirmation la plus basse acceptée
TELEGRAM_VOICE_TOOL_RESULT_BYTES16384Taille maximale d'une réponse d'outil (1024 à 16384)
TELEGRAM_VOICE_KEYS_MASTER_FILE, TELEGRAM_VOICE_KEYS_PREVIOUS_MASTER_FILE—Clé maîtresse qui chiffre les clés propres et les secrets de flux, et l'ancienne clé pendant un remplacement. Dans un dossier en 700, hors des sauvegardes
TELEGRAM_VOICE_OWN_KEYS_APPS_READY—À mettre à true seulement une fois que les applications affichent l'écran de confirmation (version 2) des bots à clé propre. Avant cela, les clés propres ne sont pas acceptées
TELEGRAM_VOICE_OWN_KEY_MIN_SHEET_VERSION, TELEGRAM_VOICE_TRANSCRIPT_MIN_SHEET_VERSION2, 1Version d'écran de confirmation exigée pour les appels à clé propre et pour l'annonce de transcription (un serveur de production n'abaisse pas la version des clés propres en dessous de 2)
TELEGRAM_VOICE_STREAM_MIN_BUILD_DESKTOP, _ANDROID, _IOS0 (aucune)Première version de l'application qui contient l'écran de confirmation du mode flux. À 0, personne ne peut appeler un bot en mode flux
TELEGRAM_VOICE_STREAM_MIN_SHEET_VERSION2Version de l'écran de confirmation du mode flux
TELEGRAM_VOICE_STREAM_DENY_ADDRESSES—Adresses de ce déploiement que les adresses de flux ne doivent pas atteindre (l'hôte public et l'hôte du site sont ajoutés d'office)
TELEGRAM_WATCH_API_PORT, _HOST, _ANY_ADDRESS, TELEGRAM_WATCH_AUDIO_URL, TELEGRAM_WATCH_ALLOW_PLAIN, TELEGRAM_WATCH_SESSION_DAYS, TELEGRAM_WATCH_AUTH_PER_MINUTE—, 127.0.0.1, —, —, —, 7, 30Adresses de l'API Apple Watch et du point d'entrée audio (Installation du serveur — point d'entrée Apple Watch). ALLOW_PLAIN est réservé au développement
TELEGRAM_VOICE_EVIDENCE_KEY_DIR—Le dossier de la clé servant aux traces des autorisations d'appels des bots (preuves HMAC). 700, hors des dossiers sauvegardés. Créé et remplacé avec scripts/voice-evidence-key.py. Sans lui, personne ne peut activer d'autorisation. Avec Docker Compose, la variable placée seulement dans .env n'atteint pas le serveur — pour activer les appels des bots, ajoutez-la au pabal-server de deploy/docker-compose.voice.yml, dans environment (le chemin dans le conteneur) et volumes (le dossier sur l'hôte)
TELEGRAM_VOICE_OUTBOUND_MIN_BUILD_DESKTOP, _ANDROID, _IOS, _WATCHOS0 (aucune)La première version de l'application avec l'écran d'autorisation. Les versions plus anciennes ne peuvent pas activer d'autorisation et les appels des bots ne les font pas sonner. 0 : aucune pour cette plateforme
TELEGRAM_VOICE_CALLME_DEVICE_AGE_SECONDS86400Délai depuis la connexion avant qu'un appareil puisse activer une autorisation (secondes). Seuls les serveurs de test peuvent le changer (un serveur de production avertit et l'ignore)
TELEGRAM_VOICE_KEEP_TEXT_UNREVIEWED—Affiche sur la montre le texte non encore examiné juridiquement de la case « Garder la conversation ». Réservé aux serveurs de test internes
TELEGRAM_MCP_*, TELEGRAM_MCP_APPS_READY—Composants MCP (ajoutés par deploy/docker-compose.mcp.yml). TELEGRAM_MCP_EGRESS_OWN_ADDRESSES (les adresses publiques de Pabal) sert même sans MCP : elle empêche les requêtes de webhook et d'outil d'atteindre Pabal lui-même
TELEGRAM_VOICE_BOTS, TELEGRAM_VOICE_NOTICE_CHECK=off, TELEGRAM_VOICE_STREAM_ALLOW_PRIVATE—Réservées aux serveurs de test (seulement avec TELEGRAM_TEST_NUMBERS=true) : autoriser les bots listés (id ou @nom, * pour tous) · sauter la vérification des sections juridiques · autoriser des adresses privées comme adresse de flux
TELEGRAM_VOICE_CALLME_UNREVIEWED, TELEGRAM_VOICE_DEV_ECHO_OUTBOUND, TELEGRAM_VOICE_TEST_DIAL, TELEGRAM_VOICE_TEST_DIAL_USERS—Serveurs de test et de développement uniquement : l'interrupteur des appels des bots peut être activé avant l'examen juridique (serveurs de développement et de test) · une passerelle d'écho passe les appels des bots (serveurs de développement, TELEGRAM_TEST_MODE) · l'appel de test de l'API d'administration et les comptes qu'il peut faire sonner (jusqu'à 20 en plus des numéros de test +99966, serveurs de test). Un serveur de production avertit et les ignore

Fichiers de données

FichierContenuPermissions
keys/private.pemClé privée RSA du serveur. Ne la sortez jamais du serveur600
keys/private.pem.pubClé publique. Utilisée pour compiler l'application et pour /docs/server-key.pem—
keys/firebase-service-account.json(Facultatif) Clé secrète Firebase pour les notifications push Android. En cas de fuite, la supprimer dans la console Firebase et en télécharger une nouvelle600
data/admin-tokenJeton de la page d'administration600
data/operations.jsonValeurs de l'onglet Paramètres — règles d'inscription, secrets SMS et SMTP, numéros bloqués, réglages de l'onglet Voix (arrêt d'urgence, ouverture, testeurs, bots autorisés, limites)600
keys/voice-link.secret(Bots vocaux) Secret de liaison, le même que celui de la passerelle400
/etc/pabal/voice/voice-master.key(Bots vocaux) Clé maîtresse qui chiffre les clés propres des propriétaires de bot et les secrets de flux. Hors du dossier de données, jamais dans les sauvegardes600 (dossier 700)
data/media/Photos et fichiers originaux—
Table events de PostgreSQLComptes, conversations, messages, connexions, bots, configuration des webhooks — l'historique de toutes les modifications—

Notes de sécurité

  • N'exposez pas directement le port d'administration sur Internet. Dans la configuration de production, Caddy bloque avec un 404 les chemins d'administration comme /admin, /health et /metrics.
  • Toutes les requêtes de données d'administration exigent Authorization: Bearer <jeton>, et les pages d'autres sites ne peuvent pas les lire.
  • Les secrets SMS et SMTP se trouvent uniquement dans operations.json ; l'interface et l'API indiquent seulement « enregistré » (저장됨). Si vous enregistrez en laissant un champ secret vide, la valeur existante est conservée.
  • Jetons et secrets n'apparaissent pas dans les journaux, et les numéros de téléphone y sont masqués. Les adresses de la Bot API (qui contiennent le jeton) ne sont pas non plus journalisées.
  • Les jetons d'appareil des notifications push n'apparaissent dans les journaux que sous forme d'empreinte, et ni le contenu du fichier de clé Firebase ni celui des notifications n'y figurent.
  • Les clés d'autorisation étant stockées dans la base de données, quiconque y a accès peut déchiffrer le trafic des utilisateurs. Protégez la base de données et les sauvegardes aussi soigneusement que la clé RSA.

Limites

  • Les codes en attente et l'historique récent sont en mémoire et disparaissent au redémarrage du serveur (il suffit de redemander un code depuis l'application).
  • L'envoi réel par un fournisseur de SMS doit être vérifié avec votre propre compte chez ce fournisseur. Le serveur construit les requêtes conformément à la documentation de chaque fournisseur.
  • Pas encore disponible : suppression forcée de bots, consultation des messages, affichage des journaux, graphiques, statistiques des notifications push (les notifications push se vérifient dans le journal du serveur).