Mainstream messaging
Telegram
PrĂȘt pour la production pour les messages privĂ©s et les groupes de bots via grammY. Lâinterrogation longue est le transport par dĂ©faut ; le mode Webhook est facultatif.
La politique par dĂ©faut pour les messages privĂ©s Telegram est lâassociation.
Diagnostics intercanaux et procédures de réparation.
ModĂšles et exemples complets de configuration des canaux.
Configuration rapide
Créer le jeton du bot dans BotFather
Les deux mĂ©thodes fournissent un jeton Ă coller dans OpenClaw â choisissez-en une :
- MĂ©thode par discussion : ouvrez Telegram, discutez avec @BotFather (vĂ©rifiez que lâidentifiant est exactement
@BotFather), exĂ©cutez/newbot, suivez les instructions et enregistrez le jeton. - MĂ©thode web : ouvrez lâapplication web de BotFather â elle fonctionne dans tous les clients Telegram, notamment web.telegram.org â crĂ©ez le bot dans lâinterface et copiez son jeton.
Configurer le jeton et la politique des messages privés
{channels: {telegram: { enabled: true, botToken: "123:abc", dmPolicy: "pairing", groups: { "*": { requireMention: true } },},},}Variable dâenvironnement de secours : TELEGRAM_BOT_TOKEN (compte par dĂ©faut uniquement ; les comptes nommĂ©s doivent utiliser botToken ou tokenFile).
Telegram nâutilise pas openclaw channels login telegram ; dĂ©finissez le jeton dans la configuration ou lâenvironnement, puis dĂ©marrez le Gateway.
Démarrer le Gateway et approuver le premier message privé
openclaw gatewayopenclaw pairing list telegramopenclaw pairing approve telegram <CODE>Les codes dâassociation expirent aprĂšs 1 heure.
Ajouter le bot Ă un groupe
Ajoutez le bot Ă votre groupe, puis rĂ©cupĂ©rez les deux identifiants nĂ©cessaires Ă lâaccĂšs au groupe :
- votre identifiant utilisateur Telegram, pour
allowFrom/groupAllowFrom - lâidentifiant de discussion du groupe Telegram, utilisĂ© comme clĂ© sous
channels.telegram.groups
RĂ©cupĂ©rez lâidentifiant de discussion du groupe Ă partir de openclaw logs --follow, dâun bot dâidentification des messages transfĂ©rĂ©s ou de getUpdates dans lâAPI Bot. Une fois le groupe autorisĂ©, /whoami@<bot_username> confirme les identifiants de lâutilisateur et du groupe.
Les identifiants négatifs de supergroupes commençant par -100 sont des identifiants de discussion de groupe. Ils doivent figurer sous channels.telegram.groups, et non dans groupAllowFrom.
ParamÚtres cÎté Telegram
Mode de confidentialité et visibilité dans les groupes
Les bots Telegram utilisent par dĂ©faut le mode de confidentialitĂ©, qui limite les messages de groupe quâils reçoivent.
Pour voir tous les messages de groupe, vous pouvez :
- désactiver le mode de confidentialité avec
/setprivacy, ou - nommer le bot administrateur du groupe.
AprÚs avoir modifié le mode de confidentialité, supprimez puis rajoutez le bot dans chaque groupe afin que Telegram applique la modification.
Autorisations de groupe
Le statut dâadministrateur se gĂšre dans les paramĂštres du groupe Telegram. Les bots administrateurs reçoivent tous les messages du groupe, ce qui est utile pour un fonctionnement permanent dans les groupes.
Options BotFather utiles
/setjoingroupsâ autoriser ou refuser lâajout aux groupes/setprivacyâ comportement de visibilitĂ© dans les groupes
Les mĂȘmes paramĂštres sont disponibles dans lâapplication web de BotFather si vous prĂ©fĂ©rez une interface aux commandes de discussion.
Mini App du tableau de bord
Exécutez /dashboard dans un message privé avec le bot pour ouvrir le tableau de bord OpenClaw dans Telegram.
Prérequis :
gateway.tailscale.mode: "serve"ou"funnel"pour lâURL HTTPS publiĂ©e de la Mini App.- Votre identifiant utilisateur Telegram numĂ©rique doit figurer dans la valeur effective de
allowFromdu compte sélectionné ou danscommands.ownerAllowFrom. - Utilisez un message privé. Dans les groupes,
/dashboardrĂ©pond avecopen this in a DM with the botet nâenvoie aucun bouton. - Installations Docker : les modes Serve/Funnel exigent que le Gateway se lie Ă lâinterface de bouclage Ă cĂŽtĂ© de
tailscaled, ce que la mise en rĂ©seau par pont avec des ports publiĂ©s ne permet pas. ExĂ©cutez le conteneur du Gateway avecnetwork_mode: hostet montez dans le conteneur le sockettailscaledde lâhĂŽte (/var/run/tailscale) ainsi que la CLItailscale.
La Mini App est un chemin v1 rĂ©servĂ© Ă Tailscale et ne prend pas en charge lâiframe Telegram Web.
ContrĂŽle dâaccĂšs et activation
Identité du bot dans les groupes
Dans les groupes et les sujets de forum, une mention explicite de lâidentifiant configurĂ© du bot (par exemple @my_bot) sâadresse Ă lâagent OpenClaw sĂ©lectionnĂ©, mĂȘme si le nom de persona de lâagent diffĂšre du nom dâutilisateur Telegram. La politique de silence dans les groupes continue de sâappliquer au trafic sans rapport, mais lâidentifiant du bot nâest jamais « quelquâun dâautre ».
Politique des messages privés
channels.telegram.dmPolicy contrĂŽle lâaccĂšs aux messages privĂ©s :
pairing(par dĂ©faut)allowlist(nĂ©cessite au moins un ID dâexpĂ©diteur dansallowFrom)open(nĂ©cessite queallowFromcontienne"*")disabled
dmPolicy: "open" avec allowFrom: ["*"] permet Ă tout compte Telegram qui trouve ou devine le nom dâutilisateur du bot de lui envoyer des commandes. Utilisez cette configuration uniquement pour des bots volontairement publics dont les outils sont strictement restreints ; les bots Ă propriĂ©taire unique doivent utiliser allowlist avec des ID utilisateur numĂ©riques.
channels.telegram.allowFrom accepte les ID utilisateur numériques de Telegram. Les préfixes telegram: / tg: sont acceptés et normalisés.
Dans les configurations multicomptes, une valeur restrictive de channels.telegram.allowFrom au niveau supĂ©rieur constitue une limite de sĂ©curitĂ© : une valeur allowFrom: ["*"] au niveau dâun compte ne rend pas ce compte public, sauf si la liste dâautorisation effective aprĂšs fusion contient toujours explicitement un caractĂšre gĂ©nĂ©rique.
dmPolicy: "allowlist" avec une valeur allowFrom vide bloque tous les messages privés et est rejeté par la validation de la configuration.
La configuration initiale demande uniquement des ID utilisateur numĂ©riques. Si votre configuration contient des entrĂ©es de liste dâautorisation sous la forme @username provenant dâune ancienne configuration initiale, exĂ©cutez openclaw doctor --fix pour les convertir en ID numĂ©riques (dans la mesure du possible ; nĂ©cessite un jeton de bot Telegram).
Si vous utilisiez auparavant les fichiers de liste dâautorisation du magasin dâappairage, openclaw doctor --fix peut rĂ©cupĂ©rer les entrĂ©es dans channels.telegram.allowFrom pour les flux utilisant une liste dâautorisation (par exemple, lorsque dmPolicy: "allowlist" ne contient encore aucun ID explicite).
Pour les bots Ă propriĂ©taire unique, prĂ©fĂ©rez dmPolicy: "allowlist" avec des ID numĂ©riques explicites dans allowFrom plutĂŽt que de dĂ©pendre dâapprobations dâappairage antĂ©rieures.
Confusion frĂ©quente : lâapprobation dâun appairage par message privĂ© ne signifie pas « cet expĂ©diteur est autorisĂ© partout ». Lâappairage accorde uniquement lâaccĂšs aux messages privĂ©s. Sâil nâexiste encore aucun propriĂ©taire de commandes, le premier appairage approuvĂ© dĂ©finit Ă©galement commands.ownerAllowFrom, ce qui attribue les commandes rĂ©servĂ©es au propriĂ©taire et les approbations dâexĂ©cution Ă un compte opĂ©rateur explicite. Lâautorisation des expĂ©diteurs dans les groupes provient toujours de listes dâautorisation explicites dans la configuration.
Pour ĂȘtre autorisĂ© avec une mĂȘme identitĂ© Ă la fois dans les messages privĂ©s et pour les commandes de groupe : ajoutez votre ID utilisateur numĂ©rique Telegram Ă channels.telegram.allowFrom et, pour les commandes rĂ©servĂ©es au propriĂ©taire, vĂ©rifiez que commands.ownerAllowFrom contient telegram:<your user id>.
Trouver votre ID utilisateur Telegram
Méthode plus sûre (sans bot tiers) : envoyez un message privé à votre bot, exécutez openclaw logs --follow, puis consultez from.id.
MĂ©thode officielle de lâAPI Bot :
curl "https://api.telegram.org/bot<bot_token>/getUpdates"Services tiers (moins confidentiels) : @userinfobot ou @getidsbot.
Politique de groupe et listes dâautorisation
Deux contrĂŽles sâappliquent conjointement :
-
Quels groupes sont autorisés (
channels.telegram.groups)- aucune configuration
groups,groupPolicy: "open": tous les groupes passent les vĂ©rifications dâID de groupe - aucune configuration
groups,groupPolicy: "allowlist"(par dĂ©faut) : tous les groupes sont bloquĂ©s jusquâĂ lâajout dâentrĂ©es dansgroups(ou de"*") groupsconfigurĂ© : agit comme une liste dâautorisation (ID explicites ou"*")
- aucune configuration
-
Quels expéditeurs sont autorisés dans les groupes (
channels.telegram.groupPolicy)open/allowlist(par défaut) /disabled
groupAllowFrom filtre les expĂ©diteurs des groupes ; sâil nâest pas dĂ©fini, Telegram se rabat sur allowFrom (et non sur le magasin dâappairage â lâautorisation des expĂ©diteurs de groupe nâhĂ©rite jamais des approbations du magasin dâappairage des messages privĂ©s, une limite de sĂ©curitĂ© depuis 2026.2.25).
Les entrĂ©es de groupAllowFrom doivent ĂȘtre des ID utilisateur numĂ©riques de Telegram (les prĂ©fixes telegram: / tg: sont normalisĂ©s) ; les entrĂ©es non numĂ©riques sont ignorĂ©es. Nây placez pas dâID de discussion de groupe ou de supergroupe : les ID de discussion nĂ©gatifs doivent ĂȘtre placĂ©s sous channels.telegram.groups.
ModÚle pratique pour les bots à propriétaire unique : définissez votre ID utilisateur dans channels.telegram.allowFrom, laissez groupAllowFrom non défini et autorisez les groupes cibles sous channels.telegram.groups.
Si channels.telegram est entiĂšrement absent de la configuration, lâenvironnement dâexĂ©cution utilise par dĂ©faut le mode fermĂ© groupPolicy="allowlist", sauf si channels.defaults.groupPolicy est explicitement dĂ©fini.
Configuration dâun groupe rĂ©servĂ© au propriĂ©taire :
{channels: {telegram: { enabled: true, dmPolicy: "pairing", allowFrom: ["<YOUR_TELEGRAM_USER_ID>"], groupPolicy: "allowlist", groups: { "<GROUP_CHAT_ID>": { requireMention: true, }, },},},}Testez depuis le groupe avec @<bot_username> ping. Les messages de groupe ordinaires ne déclenchent pas le bot tant que requireMention: true.
Autoriser tous les membres dans un groupe précis :
{channels: {telegram: { groups: { "-1001234567890": { groupPolicy: "open", requireMention: false, }, },},},}Autoriser uniquement certains utilisateurs dans un groupe précis :
{channels: {telegram: { groups: { "-1001234567890": { requireMention: true, allowFrom: ["8734062810", "745123456"], }, },},},}Comportement des mentions
Par défaut, les réponses dans les groupes nécessitent une mention. Une mention peut provenir :
- dâune mention native
@botusername, ou - dâun modĂšle de mention dans
agents.list[].groupChat.mentionPatternsoumessages.groupChat.mentionPatterns
Options au niveau de la session (état uniquement, non persistant) : /activation always, /activation mention. Utilisez la configuration pour rendre ce réglage persistant :
{channels: {telegram: { groups: { "*": { requireMention: false }, },},},}Le contexte de lâhistorique du groupe est toujours activĂ© et limitĂ© par historyLimit. DĂ©finissez channels.telegram.historyLimit: 0 pour dĂ©sactiver la fenĂȘtre dâhistorique du groupe. openclaw doctor --fix supprime la clĂ© retirĂ©e includeGroupHistoryContext.
Pour obtenir lâID de discussion du groupe : transfĂ©rez un message du groupe Ă @userinfobot / @getidsbot, consultez chat.id dans openclaw logs --follow, inspectez getUpdates dans lâAPI Bot ou, une fois le groupe autorisĂ©, exĂ©cutez /whoami@<bot_username>.
Comportement de lâenvironnement dâexĂ©cution
- Telegram sâexĂ©cute dans le processus du Gateway.
- Le routage est déterministe : les réponses aux messages entrants de Telegram sont renvoyées à Telegram (le modÚle ne choisit pas les canaux).
- Les messages entrants sont normalisĂ©s dans lâenveloppe de canal partagĂ©e, avec les mĂ©tadonnĂ©es de rĂ©ponse, les espaces rĂ©servĂ©s aux mĂ©dias et le contexte persistant de la chaĂźne de rĂ©ponses pour les rĂ©ponses observĂ©es par le Gateway.
- Les sessions de groupe sont isolées par ID de groupe. Les sujets de forum ajoutent
:topic:<threadId>. - Les messages privés peuvent contenir
message_thread_id; OpenClaw le conserve pour les rĂ©ponses. Les sessions de sujets en message privĂ© ne sont sĂ©parĂ©es que lorsquegetMede Telegram indiquehas_topics_enabled: truepour le bot ; sinon, les messages privĂ©s restent dans la session non segmentĂ©e. - Lâinterrogation longue utilise le runner grammY avec un sĂ©quençage par discussion et par fil. La concurrence du rĂ©cepteur du runner utilise
agents.defaults.maxConcurrent. - Au démarrage avec plusieurs comptes, le nombre de sondes
getMesimultanĂ©es est limitĂ© afin que les grandes flottes de bots ne lancent pas toutes les sondes de compte en mĂȘme temps. - Chaque processus du Gateway protĂšge lâinterrogation longue afin quâun seul poller actif puisse utiliser un jeton de bot Ă la fois. Des conflits
getUpdates409 persistants indiquent quâun autre Gateway OpenClaw, un script ou un poller externe utilise le mĂȘme jeton. - Par dĂ©faut, le mĂ©canisme de surveillance de lâinterrogation redĂ©marre aprĂšs 120 secondes sans signe de fonctionnement de
getUpdatesterminĂ©. Augmentezchannels.telegram.pollingStallThresholdMs(30000-600000, remplacements par compte pris en charge) uniquement si votre dĂ©ploiement subit de faux redĂ©marrages pour blocage de lâinterrogation pendant des tĂąches de longue durĂ©e. - LâAPI Telegram Bot ne prend pas en charge les accusĂ©s de lecture (
sendReadReceiptsne sâapplique pas).
Référence des fonctionnalités
Aperçu du flux en direct (modifications de message)
OpenClaw diffuse les rĂ©ponses partielles en temps rĂ©el dans les discussions directes, les groupes et les sujets : il envoie un message dâaperçu, puis appelle editMessageText Ă plusieurs reprises avant de finaliser le message sur place.
channels.telegram.streamingaccepteoff | partial | block | progress(valeur par dĂ©faut :partial)- les courts aperçus initiaux de rĂ©ponse sont temporisĂ©s, puis matĂ©rialisĂ©s aprĂšs un dĂ©lai limitĂ© si lâexĂ©cution est toujours active
progressconserve un seul brouillon dâĂ©tat modifiable pour la progression des outils, affiche le libellĂ© dâĂ©tat stable lorsque lâactivitĂ© de rĂ©ponse arrive avant la progression des outils, lâefface Ă la fin et envoie la rĂ©ponse finale comme un message normalstreaming.preview.toolProgressdĂ©termine si les mises Ă jour des outils/de progression rĂ©utilisent le mĂȘme message dâaperçu modifiĂ© (valeur par dĂ©faut :truelorsque la diffusion de lâaperçu est active)streaming.preview.commandTextcontrĂŽle les dĂ©tails des commandes/exĂ©cutions dans ces lignes :raw(valeur par dĂ©faut) oustatus(libellĂ© de lâoutil uniquement)streaming.progress.commentary(valeur par dĂ©faut :false) permet dâinclure les commentaires/prĂ©ambules de lâassistant dans le brouillon de progression temporaire- les anciennes clĂ©s
channels.telegram.streamMode, les valeurs boolĂ©ennes destreaminget les clĂ©s retirĂ©es de lâaperçu natif des brouillons sont dĂ©tectĂ©es ; exĂ©cutezopenclaw doctor --fixpour les migrer
Les lignes de progression des outils sont les courtes mises Ă jour dâĂ©tat affichĂ©es pendant lâexĂ©cution des outils (exĂ©cution de commandes, lecture de fichiers, mises Ă jour de planification, rĂ©sumĂ©s de correctifs, prĂ©ambule/commentaires de Codex en mode serveur dâapplication). Telegram les conserve activĂ©es par dĂ©faut (ce qui correspond au comportement publiĂ© depuis v2026.4.22+).
Conservez les modifications de lâaperçu de rĂ©ponse, mais masquez les lignes de progression des outils :
{ "channels": { "telegram": { "streaming": { "mode": "partial", "preview": { "toolProgress": false } } } }}Conservez la progression des outils visible, mais masquez le texte des commandes/exécutions :
{ "channels": { "telegram": { "streaming": { "mode": "partial", "preview": { "commandText": "status" } } } }}Le mode progress affiche la progression des outils sans modifier ce message pour y insérer la réponse finale. Placez la stratégie relative au texte des commandes sous streaming.progress :
{ "channels": { "telegram": { "streaming": { "mode": "progress", "progress": { "toolProgress": true, "commandText": "status" } } } }}streaming.mode: "off" dĂ©sactive les modifications de lâaperçu et supprime les messages gĂ©nĂ©riques liĂ©s aux outils/Ă la progression au lieu de les envoyer comme messages dâĂ©tat autonomes ; les demandes dâapprobation, les mĂ©dias et les erreurs suivent toujours le processus normal de livraison finale. streaming.preview.toolProgress: false conserve uniquement les modifications de lâaperçu de rĂ©ponse.
Pour les rĂ©ponses textuelles uniquement : les aperçus courts reçoivent la modification finale sur place ; les rĂ©ponses finales longues divisĂ©es en plusieurs messages rĂ©utilisent lâaperçu comme premier segment, puis envoient uniquement le reste ; les rĂ©ponses finales en mode progression effacent le brouillon dâĂ©tat et utilisent la livraison finale normale ; si la modification finale Ă©choue avant que son achĂšvement soit confirmĂ©, OpenClaw revient Ă la livraison finale normale et nettoie lâaperçu obsolĂšte. Pour les rĂ©ponses complexes (charges utiles multimĂ©dias), OpenClaw revient toujours Ă la livraison finale normale et nettoie lâaperçu.
La diffusion de lâaperçu et la diffusion par blocs sont mutuellement exclusives â lorsque la diffusion par blocs est explicitement activĂ©e, OpenClaw ignore le flux dâaperçu afin dâĂ©viter une double diffusion.
Raisonnement : /reasoning stream diffuse le raisonnement dans lâaperçu en direct pendant la gĂ©nĂ©ration, puis supprime lâaperçu du raisonnement aprĂšs la livraison finale (utilisez /reasoning on pour le garder visible). La rĂ©ponse finale est envoyĂ©e sans le texte du raisonnement.
Mise en forme enrichie des messages
Par dĂ©faut, le texte sortant utilise les messages HTML standard de Telegram, lisibles sur les clients actuels : gras, italique, liens, code, divulgĂącheurs, citations â et non les blocs enrichis exclusifs de lâAPI Bot 10.1 (tableaux natifs, dĂ©tails, mĂ©dias enrichis, formules).
Activez les messages enrichis de lâAPI Bot 10.1 :
{channels: {telegram: { richMessages: true,},},}Lorsque cette option est activĂ©e : lâagent est informĂ© que les messages enrichis sont disponibles pour ce bot/compte ; le texte Markdown est rendu sous forme de HTML enrichi Telegram au moyen de la reprĂ©sentation intermĂ©diaire Markdown dâOpenClaw ; les charges utiles HTML enrichies explicites conservent les balises prises en charge par lâAPI Bot 10.1 (titres, tableaux, dĂ©tails, mĂ©dias enrichis, formules) ; les lĂ©gendes des mĂ©dias utilisent toujours les lĂ©gendes HTML de Telegram (les messages enrichis ne remplacent pas les lĂ©gendes, qui restent limitĂ©es Ă 1024 caractĂšres).
Cela évite que le texte du modÚle soit interprété selon les marqueurs Markdown enrichis de Telegram, afin que des montants comme $400-600K ne soient pas analysés comme des expressions mathématiques. Le texte enrichi long est automatiquement divisé selon les limites de Telegram. Les tableaux dépassant la limite de 20 colonnes sont convertis en bloc de code.
Valeur par dĂ©faut : dĂ©sactivĂ©, pour assurer la compatibilitĂ© avec les clients â certains clients actuels pour ordinateur, Web, Android et tiers affichent les messages enrichis acceptĂ©s comme non pris en charge. Laissez cette option dĂ©sactivĂ©e sauf si tous les clients utilisĂ©s avec le bot peuvent afficher ces messages. /status indique si les messages enrichis sont activĂ©s ou dĂ©sactivĂ©s pour la session actuelle.
Les aperçus de liens sont activés par défaut. channels.telegram.linkPreview: false désactive la détection automatique des entités dans le texte enrichi.
Commandes natives et commandes personnalisées
Le menu des commandes de Telegram est enregistré au démarrage avec setMyCommands. commands.native: "auto" active les commandes natives pour Telegram.
Ajoutez des entrées personnalisées au menu des commandes :
{channels: {telegram: { customCommands: [ { command: "backup", description: "Sauvegarde Git" }, { command: "generate", description: "Créer une image" }, ],},},}RÚgles : les noms sont normalisés (suppression du / initial, conversion en minuscules) ; motif valide : a-z, 0-9, _ ; longueur de 1 à 32 ; les commandes personnalisées ne peuvent pas remplacer les commandes natives ; les conflits et doublons sont ignorés et consignés dans les journaux.
Les commandes personnalisĂ©es sont uniquement des entrĂ©es de menu : elles nâimplĂ©mentent pas automatiquement de comportement. Les commandes de Plugin/Skills peuvent toujours fonctionner lorsquâelles sont saisies, mĂȘme si elles ne figurent pas dans le menu Telegram. Si les commandes natives sont dĂ©sactivĂ©es, les commandes intĂ©grĂ©es sont supprimĂ©es ; les commandes personnalisĂ©es ou de Plugin peuvent toujours ĂȘtre enregistrĂ©es si elles sont configurĂ©es.
Ăchecs de configuration courants :
setMyCommands failedavecBOT_COMMANDS_TOO_MUCHaprĂšs une nouvelle tentative de rĂ©duction signifie que le menu dĂ©borde toujours ; rĂ©duisez les commandes de plugins, de Skills ou personnalisĂ©es, ou dĂ©sactivezchannels.telegram.commands.native.- LâĂ©chec de
deleteWebhook,deleteMyCommandsousetMyCommandsavec404: Not Found, alors que les commandes curl directes de la Bot API fonctionnent, signifie gĂ©nĂ©ralement quechannels.telegram.apiRoota Ă©tĂ© dĂ©fini sur le point de terminaison/bot<TOKEN>complet.apiRootdoit uniquement ĂȘtre la racine de la Bot API ;openclaw doctor --fixsupprime un/bot<TOKEN>final ajoutĂ© par erreur. getMe returned 401signifie que Telegram a rejetĂ© le jeton de bot configurĂ©. Mettez Ă jourbotToken,tokenFileouTELEGRAM_BOT_TOKEN(compte par dĂ©faut) avec le jeton BotFather actuel ; OpenClaw sâarrĂȘte avant lâinterrogation, ce qui Ă©vite de signaler cette erreur comme un Ă©chec du nettoyage du Webhook.setMyCommands failedaccompagnĂ© dâerreurs rĂ©seau ou de rĂ©cupĂ©ration signifie gĂ©nĂ©ralement que les connexions DNS/HTTPS sortantes versapi.telegram.orgsont bloquĂ©es.
Commandes dâassociation dâappareils (plugin device-pair)
Lorsquâil est installĂ© :
/pairgĂ©nĂšre un code de configuration- collez le code dans lâapplication iOS
/pair pendingrépertorie les demandes en attente (y compris le rÎle et les périmÚtres)- approuvez :
/pair approve <requestId>,/pair approve(sâil nây a quâune seule demande en attente) ou/pair approve latest
Si un appareil rĂ©essaie avec des informations dâauthentification modifiĂ©es (rĂŽle, pĂ©rimĂštres, clĂ© publique), la demande prĂ©cĂ©dente en attente est remplacĂ©e par une nouvelle demande dotĂ©e dâun nouveau requestId ; exĂ©cutez Ă nouveau /pair pending avant de lâapprouver.
Plus de détails : Association.
Boutons intégrés
Configurez la portée du clavier intégré :
{channels: {telegram: { capabilities: { inlineButtons: "allowlist", },},},}Remplacement par compte :
{channels: {telegram: { accounts: { main: { capabilities: { inlineButtons: "allowlist", }, }, },},},}PortĂ©es : off, dm, group, all, allowlist (par dĂ©faut). Lâancienne syntaxe capabilities: ["inlineButtons"] correspond Ă "all".
Exemple dâaction de message :
{action: "send",channel: "telegram",to: "123456789",message: "Choisissez une option :",buttons: [[ { text: "Oui", callback_data: "yes" }, { text: "Non", callback_data: "no" },],[{ text: "Annuler", callback_data: "cancel" }],],}Exemple de bouton de mini-application :
{action: "send",channel: "telegram",to: "123456789",message: "Ouvrir lâapplication :",presentation: {blocks: [ { type: "buttons", buttons: [{ label: "Lancer", web_app: { url: "https://example.com/app" } }], },],},}Les boutons web_app fonctionnent uniquement dans les discussions privĂ©es entre un utilisateur et le bot.
Les clics de rappel qui ne sont pas pris en charge par un gestionnaire interactif de Plugin enregistrĂ© sont transmis Ă lâagent sous forme de texte : callback_data: <value>.
Actions de message Telegram pour les agents et lâautomatisation
Actions :
sendMessage(to,content,mediaUrlfacultatif,replyToMessageId,messageThreadId)react(chatId,messageId,emoji)deleteMessage(chatId,messageId)editMessage(chatId,messageId,contentoucaption, boutons intégréspresentationfacultatifs ; les modifications portant uniquement sur les boutons mettent à jour le balisage de réponse)createForumTopic(chatId,name,iconColorfacultatif,iconCustomEmojiId)
Alias ergonomiques : send, react, delete, edit, sticker, sticker-search, topic-create.
Activation : channels.telegram.actions.sendMessage, deleteMessage, reactions, sticker (par défaut : désactivé). edit, createForumTopic et editForumTopic sont activés par défaut, sans option dédiée.
Les envois Ă lâexĂ©cution utilisent lâinstantanĂ© actif de la configuration et des secrets issu du dĂ©marrage ou du rechargement ; les chemins dâaction ne rĂ©solvent donc pas Ă nouveau les valeurs SecretRef Ă chaque envoi.
Sémantique de suppression des réactions : /tools/reactions.
Balises de fil de réponses
Balises explicites de fil de réponses dans la sortie générée :
[[reply_to_current]]â rĂ©pond au message dĂ©clencheur[[reply_to:<id>]]â rĂ©pond Ă un ID de message prĂ©cis
channels.telegram.replyToMode : off (par défaut), first, all.
Lorsque le fil de rĂ©ponses est activĂ© et que le texte ou la lĂ©gende dâorigine est disponible, OpenClaw ajoute automatiquement un extrait sous forme de citation native. Telegram limite le texte des citations natives Ă 1024 unitĂ©s de code UTF-16 ; les messages plus longs sont citĂ©s Ă partir du dĂ©but et utilisent une rĂ©ponse simple si Telegram rejette la citation.
off désactive uniquement le fil de réponses implicite ; les balises explicites [[reply_to_*]] restent prises en compte.
Sujets de forum et comportement des fils
Supergroupes de forum : les clĂ©s de session des sujets ajoutent :topic:<threadId> ; les rĂ©ponses et lâindicateur de saisie ciblent le fil du sujet ; le chemin de configuration du sujet est channels.telegram.groups.<chatId>.topics.<threadId>.
Le sujet gĂ©nĂ©ral (threadId=1) constitue un cas particulier : les envois de messages omettent message_thread_id (Telegram rejette sendMessage(...thread_id=1) avec « fil introuvable »), mais les actions de saisie incluent toujours message_thread_id (nĂ©cessaire empiriquement pour que lâindicateur de saisie apparaisse).
Les entrĂ©es de sujet hĂ©ritent des paramĂštres du groupe, sauf remplacement (requireMention, allowFrom, skills, systemPrompt, enabled, groupPolicy). agentId est propre au sujet et nâhĂ©rite pas des valeurs par dĂ©faut du groupe. topics."*" dĂ©finit les valeurs par dĂ©faut de chaque sujet de ce groupe ; les ID de sujet exacts restent prioritaires sur "*".
Routage de lâagent par sujet : chaque sujet peut ĂȘtre routĂ© vers un agent diffĂ©rent au moyen de agentId dans la configuration du sujet, ce qui lui attribue son propre espace de travail, sa propre mĂ©moire et sa propre session :
{ channels: { telegram: { groups: { "-1001234567890": { topics: { "1": { agentId: "main" }, // Sujet général -> agent principal "3": { agentId: "zu" }, // Sujet de développement -> agent zu "5": { agentId: "coder" } // Revue de code -> agent coder } } } } }}Chaque sujet dispose alors de sa propre clé de session, par exemple agent:zu:telegram:group:-1001234567890:topic:3.
Liaison persistante dâun sujet ACP : les sujets de forum peuvent Ă©pingler des sessions de harnais ACP au moyen de liaisons typĂ©es de premier niveau (bindings[] avec type: "acp", match.channel: "telegram", peer.kind: "group" et un ID qualifiĂ© par sujet tel que -1001234567890:topic:42). Actuellement limitĂ© aux sujets de forum dans les groupes et supergroupes. Consultez Agents ACP.
CrĂ©ation dâune session ACP liĂ©e au fil depuis la discussion : /acp spawn <agent> --thread here|auto lie le sujet actuel Ă une nouvelle session ACP ; les messages suivants y sont routĂ©s directement et OpenClaw Ă©pingle la confirmation de crĂ©ation dans le sujet. NĂ©cessite channels.telegram.threadBindings.spawnSessions (par dĂ©faut : true).
Le contexte de modĂšle expose MessageThreadId et IsForum. Les discussions en message privĂ© comportant message_thread_id conservent les mĂ©tadonnĂ©es de rĂ©ponse, mais nâutilisent des clĂ©s de session tenant compte du fil que lorsque getMe de Telegram indique has_topics_enabled: true.
Les anciens remplacements dm.threadReplies et direct.*.threadReplies ont Ă©tĂ© supprimĂ©s ; le mode avec fils de BotFather constitue lâunique source de vĂ©ritĂ©. ExĂ©cutez openclaw doctor --fix pour supprimer les clĂ©s de configuration obsolĂštes.
Audio, vidéo et autocollants
Messages audio
Telegram distingue les messages vocaux des fichiers audio. Par dĂ©faut : comportement de fichier audio ; ajoutez la balise [[audio_as_voice]] dans la rĂ©ponse de lâagent pour forcer lâenvoi sous forme de message vocal. Les transcriptions de messages vocaux entrants sont prĂ©sentĂ©es comme du texte gĂ©nĂ©rĂ© par une machine et non fiable dans le contexte de lâagent, mais la dĂ©tection des mentions utilise toujours la transcription brute afin que les messages vocaux soumis Ă lâexigence de mention continuent de fonctionner.
{action: "send",channel: "telegram",to: "123456789",media: "https://example.com/voice.ogg",asVoice: true,}Messages vidéo
Telegram distingue les fichiers vidéo des messages vidéo. Les messages vidéo ne prennent pas en charge les légendes ; le texte de message fourni est envoyé séparément.
{action: "send",channel: "telegram",to: "123456789",media: "https://example.com/video.mp4",asVideoNote: true,}Emplacements et lieux
Utilisez lâaction send existante avec un objet location autonome. Les coordonnĂ©es envoient une Ă©pingle native ; lâajout de name et de address envoie une fiche de lieu native. Les envois dâemplacement ne peuvent pas ĂȘtre combinĂ©s avec du texte de message ou un mĂ©dia.
{action: "send",channel: "telegram",to: "123456789",location: {latitude: 48.858844,longitude: 2.294351,accuracy: 12,name: "Tour Eiffel",address: "Champ de Mars, Paris",},}Autocollants
Entrants : le format WEBP statique est téléchargé et traité (espace réservé <media:sticker>) ; les formats TGS animés et WEBM vidéo sont ignorés.
Champs de contexte des stickers : Sticker.emoji, Sticker.setName, Sticker.fileId, Sticker.fileUniqueId, Sticker.cachedDescription. Les descriptions sont mises en cache dans lâĂ©tat SQLite du Plugin OpenClaw afin de rĂ©duire les appels rĂ©pĂ©tĂ©s au service de vision.
Activez les actions sur les stickers :
{channels: {telegram: { actions: { sticker: true, },},},}Envoyez :
{action: "sticker",channel: "telegram",to: "123456789",fileId: "CAACAgIAAxkBAAI...",}Recherchez dans les stickers mis en cache :
{action: "sticker-search",channel: "telegram",query: "chat qui fait signe",limit: 5,}Notifications de réactions
Les rĂ©actions Telegram arrivent sous forme de mises Ă jour message_reaction, distinctes des charges utiles des messages. Lorsquâelles sont activĂ©es, OpenClaw met en file dâattente des Ă©vĂ©nements systĂšme tels que Telegram reaction added: đ by Alice (@alice) on msg 42.
channels.telegram.reactionNotifications:off | own | all(par défaut :own)channels.telegram.reactionLevel:off | ack | minimal | extensive(par défaut :minimal)
own dĂ©signe uniquement les rĂ©actions des utilisateurs aux messages envoyĂ©s par le bot (au mieux, via un cache des messages envoyĂ©s). Les Ă©vĂ©nements de rĂ©action respectent toujours les contrĂŽles dâaccĂšs Telegram (dmPolicy, allowFrom, groupPolicy, groupAllowFrom) ; les expĂ©diteurs non autorisĂ©s sont ignorĂ©s.
Telegram ne fournit pas dâidentifiants de fil de discussion dans les mises Ă jour de rĂ©actions : les groupes sans forum sont acheminĂ©s vers la session de discussion du groupe ; les groupes avec forum sont acheminĂ©s vers la session du sujet gĂ©nĂ©ral (:topic:1), et non vers le sujet dâorigine exact.
Les allowed_updates pour lâinterrogation pĂ©riodique/le Webhook incluent automatiquement message_reaction.
RĂ©actions dâaccusĂ© de rĂ©ception
ackReaction envoie un Ă©moji dâaccusĂ© de rĂ©ception pendant quâOpenClaw traite un message entrant. messages.ackReactionScope dĂ©termine quand il est envoyĂ©.
Ordre de rĂ©solution de lâĂ©moji :
channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- emoji de secours de lâidentitĂ© de lâagent (
agents.list[].identity.emoji, sinon "đ")
Telegram attend un emoji Unicode (par exemple "đ") ; utilisez "" pour dĂ©sactiver la rĂ©action pour un canal ou un compte.
Portée (messages.ackReactionScope, valeur par défaut "group-mentions" ; aucune substitution par compte ou canal Telegram à ce jour) :
all (messages privĂ©s + groupes, y compris les Ă©vĂ©nements ambiants du salon), direct (messages privĂ©s uniquement), group-all (tous les messages de groupe sauf les Ă©vĂ©nements ambiants du salon, aucun message privĂ©), group-mentions (groupes lorsque le bot est mentionnĂ© ; aucun message privĂ© â valeur par dĂ©faut), off / none (dĂ©sactivĂ©).
Ăcritures de configuration depuis les Ă©vĂ©nements et commandes Telegram
Les Ă©critures de configuration du canal sont activĂ©es par dĂ©faut (configWrites !== false). Les Ă©critures dĂ©clenchĂ©es par Telegram comprennent les Ă©vĂ©nements de migration de groupe (migrate_to_chat_id, met Ă jour channels.telegram.groups) et /config set / /config unset (nĂ©cessite lâactivation des commandes).
Pour désactiver :
{channels: {telegram: { configWrites: false,},},}Interrogation longue ou Webhook
Le mode par dĂ©faut est lâinterrogation longue. Pour le mode Webhook, dĂ©finissez channels.telegram.webhookUrl et channels.telegram.webhookSecret ; les options sont webhookPath (valeur par dĂ©faut /telegram-webhook), webhookHost (valeur par dĂ©faut 127.0.0.1), webhookPort (valeur par dĂ©faut 8787) et webhookCertPath (certificat PEM auto-signĂ© pour les configurations avec adresse IP directe ou sans nom de domaine).
En mode dâinterrogation longue, OpenClaw ne conserve son repĂšre de redĂ©marrage quâaprĂšs la transmission rĂ©ussie dâune mise Ă jour ; en cas dâĂ©chec dâun gestionnaire, cette mise Ă jour reste rĂ©essayable dans le mĂȘme processus au lieu dâĂȘtre marquĂ©e comme terminĂ©e.
Par dĂ©faut, lâĂ©couteur local se lie Ă 127.0.0.1:8787. Pour une entrĂ©e publique, placez un proxy inverse devant le port local ou dĂ©finissez intentionnellement webhookHost: "0.0.0.0".
Le mode Webhook valide les contrĂŽles de la requĂȘte, le jeton secret Telegram et le corps JSON, puis enregistre la mise Ă jour dans sa file dâentrĂ©e durable avant de renvoyer une rĂ©ponse 200 vide. Une prise en charge durable rĂ©ussie inclut x-openclaw-delivery-accepted: durable ; les rĂ©ponses de contrĂŽle dâintĂ©gritĂ©, de routage, dâauthentification, de validation et dâerreur de stockage omettent cet en-tĂȘte. Les proxys inverses et les contrĂŽleurs dâhĂŽte peuvent exiger cet en-tĂȘte pour distinguer la prise en charge par OpenClaw dâune rĂ©ponse 200 vide gĂ©nĂ©rique, sans dĂ©duire lâacceptation du dĂ©lai de rĂ©ponse.
OpenClaw traite ensuite la mise Ă jour de maniĂšre asynchrone via les mĂȘmes files du bot par discussion et par sujet que celles utilisĂ©es par lâinterrogation longue, afin que les traitements lents de lâagent ne retardent pas lâaccusĂ© de rĂ©ception de Telegram.
Limites, nouvelles tentatives et cibles de la CLI
channels.telegram.textChunkLimitvaut 4000 par dĂ©faut ;streaming.chunkMode="newline"privilĂ©gie les limites de paragraphe (lignes vides) avant le dĂ©coupage selon la longueur.channels.telegram.mediaMaxMb(valeur par dĂ©faut : 100) limite la taille des mĂ©dias entrants et sortants.channels.telegram.mediaGroupFlushMs(valeur par dĂ©faut : 500, plage : 10-60000) dĂ©termine la durĂ©e de mise en mĂ©moire tampon des albums/groupes de mĂ©dias avant quâOpenClaw ne les transmette sous forme dâun seul message entrant. Augmentez-la si des Ă©lĂ©ments dâun album arrivent en retard ; rĂ©duisez-la pour diminuer la latence de rĂ©ponse aux albums.channels.telegram.timeoutSecondsremplace le dĂ©lai dâexpiration du client API (la valeur par dĂ©faut de grammY sâapplique sâil nâest pas dĂ©fini). Les clients de bot ajustent les valeurs configurĂ©es infĂ©rieures Ă la limite de 60 secondes applicable aux requĂȘtes sortantes de texte/indication de saisie, afin que grammY nâinterrompe pas la remise dâune rĂ©ponse visible avant que la limite de transport et le mĂ©canisme de repli dâOpenClaw puissent sâexĂ©cuter. Lâinterrogation longue utilise toujours une limite de requĂȘtegetUpdatesde 45 secondes afin que les interrogations inactives ne soient pas abandonnĂ©es indĂ©finiment.channels.telegram.pollingStallThresholdMsvaut 120000 par dĂ©faut ; ne choisissez une valeur comprise entre 30000 et 600000 que pour Ă©viter les redĂ©marrages dus Ă de faux positifs de blocage de lâinterrogation.- lâhistorique du contexte de groupe utilise
channels.telegram.historyLimitoumessages.groupChat.historyLimit(valeur par dĂ©faut : 50) ;0le dĂ©sactive. - le contexte supplĂ©mentaire des rĂ©ponses/citations/transferts est normalisĂ© dans une seule fenĂȘtre de contexte de conversation sĂ©lectionnĂ©e lorsque le Gateway a observĂ© les messages parents ; le cache des messages observĂ©s rĂ©side dans lâĂ©tat SQLite du plugin OpenClaw, et
openclaw doctor --fiximporte les fichiers annexes hĂ©ritĂ©s. Telegram nâinclut quâun seulreply_to_messagesuperficiel par mise Ă jour ; les chaĂźnes antĂ©rieures au cache sont donc limitĂ©es Ă cette charge utile. - les listes dâautorisation Telegram dĂ©terminent principalement qui peut dĂ©clencher lâagent ; elles ne constituent pas une limite complĂšte de masquage du contexte supplĂ©mentaire.
- historique des messages privés :
channels.telegram.dmHistoryLimit,channels.telegram.dms["<user_id>"].historyLimit. channels.telegram.retrysâapplique aux utilitaires dâenvoi Telegram (CLI/outils/actions) pour les erreurs rĂ©cupĂ©rables de lâAPI sortante. La remise de la rĂ©ponse finale entrante utilise un nombre limitĂ© de nouvelles tentatives dâenvoi sĂ©curisĂ© pour les Ă©checs antĂ©rieurs Ă la connexion, mais ne rĂ©essaie pas les enveloppes rĂ©seau ambiguĂ«s postĂ©rieures Ă lâenvoi qui pourraient dupliquer des messages visibles.
Les cibles dâenvoi de la CLI et de lâoutil de messagerie acceptent un identifiant numĂ©rique de discussion, un nom dâutilisateur ou une cible de sujet de forum :
openclaw message send --channel telegram --target 123456789 --message "bonjour"openclaw message send --channel telegram --target @name --message "bonjour"openclaw message send --channel telegram --target -1001234567890:topic:42 --message "bonjour sujet"Les sondages utilisent openclaw message poll et prennent en charge les sujets de forum :
openclaw message poll --channel telegram --target 123456789 \--poll-question "Le publier ?" --poll-option "Oui" --poll-option "Non"openclaw message poll --channel telegram --target -1001234567890:topic:42 \--poll-question "Choisissez une heure" --poll-option "10 h" --poll-option "14 h" \--poll-duration-seconds 300 --poll-publicOptions de sondage propres Ă Telegram : --poll-duration-seconds (5-600), --poll-anonymous, --poll-public, --thread-id (ou une cible :topic:). --poll-option est rĂ©pĂ©tĂ©e 2-12 fois (limite dâoptions de Telegram).
Lâenvoi Telegram prend Ă©galement en charge --presentation avec des blocs buttons pour les claviers intĂ©grĂ©s (lorsque channels.telegram.capabilities.inlineButtons lâautorise), --pin ou --delivery '{"pin":true}' pour demander lâĂ©pinglage lors de la remise lorsque le bot peut Ă©pingler des messages dans cette discussion, ainsi que --force-document pour envoyer les images, GIF et vidĂ©os sortants sous forme de documents plutĂŽt que de tĂ©lĂ©versements compressĂ©s, animĂ©s ou vidĂ©o.
ContrÎle des actions : channels.telegram.actions.sendMessage=false désactive tous les messages sortants, y compris les sondages ; channels.telegram.actions.poll=false désactive la création de sondages tout en laissant les envois ordinaires activés.
Approbations dâexĂ©cution dans Telegram
Telegram prend en charge les approbations dâexĂ©cution dans les messages privĂ©s des approbateurs et peut facultativement publier les invites dans la discussion ou le sujet dâorigine. Les approbateurs doivent ĂȘtre identifiĂ©s par des identifiants numĂ©riques dâutilisateur Telegram.
channels.telegram.execApprovals.enabled("auto"active la fonctionnalitĂ© lorsquâau moins un approbateur peut ĂȘtre rĂ©solu)channels.telegram.execApprovals.approvers(utilise Ă dĂ©faut les identifiants numĂ©riques des propriĂ©taires provenant decommands.ownerAllowFrom)channels.telegram.execApprovals.target:dm(valeur par dĂ©faut) |channel|bothagentFilter,sessionFilter
channels.telegram.allowFrom, groupAllowFrom et defaultTo dĂ©terminent qui peut communiquer avec le bot et oĂč il envoie les rĂ©ponses ordinaires ; ils ne confĂšrent pas le rĂŽle dâapprobateur dâexĂ©cution. Le premier appairage approuvĂ© par message privĂ© initialise commands.ownerAllowFrom lorsquâaucun propriĂ©taire de commande nâexiste encore, de sorte que les configurations Ă propriĂ©taire unique fonctionnent sans dupliquer les identifiants sous execApprovals.approvers.
La remise dans le canal affiche le texte de la commande dans la discussion ; nâactivez channel ou both que dans des groupes/sujets de confiance. Lorsque lâinvite arrive dans un sujet de forum, OpenClaw conserve le sujet pour lâinvite dâapprobation et le suivi. Par dĂ©faut, les approbations dâexĂ©cution expirent aprĂšs 30 minutes.
Les boutons dâapprobation intĂ©grĂ©s exigent Ă©galement que channels.telegram.capabilities.inlineButtons autorise la surface cible (dm, group ou all). Les identifiants dâapprobation prĂ©fixĂ©s par plugin: sont rĂ©solus par les approbations de plugin ; les autres sont dâabord rĂ©solus par les approbations dâexĂ©cution.
Consultez Approbations dâexĂ©cution.
ContrĂŽle des rĂ©ponses dâerreur
Lorsque lâagent rencontre une erreur de remise ou de fournisseur, la politique dâerreur dĂ©termine si les messages dâerreur parviennent Ă la discussion Telegram :
| Clé | Valeurs | Valeur par défaut | Description |
|---|---|---|---|
channels.telegram.errorPolicy |
always, once, silent |
always |
always envoie chaque message dâerreur dans la discussion. once envoie chaque message dâerreur unique une fois par fenĂȘtre de temporisation (et supprime les erreurs identiques rĂ©pĂ©tĂ©es). silent nâenvoie jamais de message dâerreur dans la discussion. |
channels.telegram.errorCooldownMs |
nombre (ms) | 14400000 (4h) |
FenĂȘtre de temporisation de la politique once. AprĂšs lâenvoi dâune erreur, le mĂȘme message est supprimĂ© jusquâĂ lâexpiration de cet intervalle. Ăvite la prolifĂ©ration des erreurs pendant les interruptions de service. |
Les remplacements par compte, par groupe et par sujet sont pris en charge (mĂȘme hĂ©ritage que pour les autres clĂ©s de configuration Telegram).
{ channels: { telegram: { errorPolicy: "always", errorCooldownMs: 120000, groups: { "-1001234567890": { errorPolicy: "silent", // supprimer les erreurs dans ce groupe }, }, }, },}Résolution des problÚmes
Le bot ne répond pas aux messages de groupe qui ne le mentionnent pas
- Si
requireMention=false, le mode de confidentialitĂ© de Telegram doit permettre une visibilitĂ© complĂšte : BotFather/setprivacy-> Disable, puis retirez le bot du groupe et ajoutez-le de nouveau. openclaw channels statusaffiche un avertissement lorsque la configuration attend des messages de groupe sans mention.openclaw channels status --probevĂ©rifie les identifiants numĂ©riques explicites des groupes ; lâappartenance ne peut pas ĂȘtre vĂ©rifiĂ©e avec le caractĂšre gĂ©nĂ©rique"*".- Test rapide de la session :
/activation always.
Le bot ne reçoit aucun message de groupe
- Lorsque
channels.telegram.groupsexiste, le groupe doit ĂȘtre rĂ©pertoriĂ© (ou inclure"*"). - VĂ©rifiez que le bot appartient au groupe.
- Consultez
openclaw logs --followpour connaĂźtre les raisons des omissions.
Les commandes fonctionnent partiellement ou pas du tout
- Autorisez lâidentitĂ© de lâexpĂ©diteur (appairage et/ou valeur numĂ©rique dans
allowFrom) ; lâautorisation des commandes reste applicable mĂȘme lorsque la politique du groupe estopen. setMyCommands failedavecBOT_COMMANDS_TOO_MUCHsignifie que le menu natif comporte trop dâentrĂ©es ; rĂ©duisez le nombre de commandes de plugins, de Skills ou personnalisĂ©es, ou dĂ©sactivez les menus natifs.- Les appels de dĂ©marrage
deleteMyCommands/setMyCommandset les appels dâindication de saisiesendChatActionsont limitĂ©s dans le temps et font lâobjet dâune nouvelle tentative via le mĂ©canisme de repli du transport Telegram en cas dâexpiration de la requĂȘte. Des erreurs rĂ©seau/de rĂ©cupĂ©ration persistantes indiquent gĂ©nĂ©ralement que lâaccĂšs DNS/HTTPS Ăapi.telegram.orgest impossible.
Le démarrage signale un jeton non autorisé
getMe returned 401indique un Ă©chec dâauthentification Telegram pour le jeton de bot configurĂ©. Copiez de nouveau ou rĂ©gĂ©nĂ©rez le jeton dans BotFather, puis mettez Ă jourchannels.telegram.botToken,tokenFile,accounts.<id>.botTokenouTELEGRAM_BOT_TOKEN(compte par dĂ©faut).deleteWebhook 401 Unauthorizedau dĂ©marrage indique Ă©galement un Ă©chec dâauthentification ; le traiter comme si « aucun webhook nâexistait » ne ferait que reporter le mĂȘme Ă©chec dĂ» au jeton incorrect Ă un appel API ultĂ©rieur.
InstabilitĂ© de lâinterrogation ou du rĂ©seau
- Node 22+ avec une implémentation fetch/un proxy personnalisé peut déclencher un abandon immédiat si les types
AbortSignalne correspondent pas. - Certains hĂŽtes rĂ©solvent dâabord
api.telegram.orgen IPv6 ; une sortie IPv6 dĂ©faillante provoque des Ă©checs intermittents de lâAPI. - Les journaux contenant
TypeError: fetch failedouNetwork request for 'getUpdates' failed!entraĂźnent de nouvelles tentatives, car ces erreurs rĂ©seau sont considĂ©rĂ©es comme rĂ©cupĂ©rables. - Au dĂ©marrage de lâinterrogation, OpenClaw rĂ©utilise pour grammY la sonde
getMerĂ©ussie du dĂ©marrage, afin que le processus dâexĂ©cution nâait pas besoin dâun secondgetMeavant le premiergetUpdates. - Si
deleteWebhookĂ©choue Ă cause dâune erreur rĂ©seau transitoire au dĂ©marrage de lâinterrogation, OpenClaw passe Ă lâinterrogation longue au lieu dâeffectuer un autre appel de plan de contrĂŽle avant lâinterrogation. Un webhook encore actif se manifeste alors par un conflitgetUpdates; OpenClaw reconstruit le transport et rĂ©essaie de supprimer le webhook. - Si les sockets Telegram sont renouvelĂ©s selon une cadence fixe et courte, recherchez une faible valeur de
channels.telegram.timeoutSeconds: les clients de bot ajustent les valeurs configurĂ©es infĂ©rieures aux limites des requĂȘtes sortantes etgetUpdates, mais les anciennes versions pouvaient interrompre chaque interrogation ou rĂ©ponse lorsque cette valeur Ă©tait infĂ©rieure Ă ces limites. Polling stall detecteddans les journaux signifie quâOpenClaw redĂ©marre lâinterrogation et reconstruit le transport aprĂšs 120 secondes sans signe dâactivitĂ© dâinterrogation longue terminĂ©e par dĂ©faut.openclaw channels status --probeetopenclaw doctoraffichent un avertissement lorsquâun compte dâinterrogation en cours dâexĂ©cution nâa pas terminĂ©getUpdatesaprĂšs le dĂ©lai de grĂące du dĂ©marrage, lorsquâun compte webhook en cours dâexĂ©cution nâa pas terminĂ©setWebhookaprĂšs ce dĂ©lai, ou lorsque la derniĂšre activitĂ© rĂ©ussie du transport dâinterrogation est obsolĂšte.- Augmentez
channels.telegram.pollingStallThresholdMsuniquement lorsque les appelsgetUpdatesde longue durĂ©e sont sains, mais que votre hĂŽte signale toujours de faux redĂ©marrages dus Ă un blocage de lâinterrogation. Des blocages persistants indiquent gĂ©nĂ©ralement des problĂšmes de proxy, de DNS, dâIPv6 ou de sortie TLS versapi.telegram.org. - Telegram respecte les variables dâenvironnement de proxy du processus pour le transport de lâAPI Bot :
HTTP_PROXY,HTTPS_PROXY,ALL_PROXYet leurs variantes en minuscules.NO_PROXY/no_proxypeuvent toujours contourner le proxy pourapi.telegram.org. - Si
OPENCLAW_PROXY_URLest dĂ©fini dans un environnement de service et quâaucune variable dâenvironnement de proxy standard nâest prĂ©sente, Telegram utilise Ă©galement cette URL pour le transport de lâAPI Bot. - Sur les hĂŽtes VPS dont la sortie directe/TLS est instable, acheminez les appels Ă lâAPI Telegram via un proxy :
channels:telegram:proxy: socks5://<user>:<password>@proxy-host:1080- Node 22+ utilise
autoSelectFamily=truepar dĂ©faut (sauf sous WSL2). Lâordre des rĂ©sultats DNS de Telegram respecte dâabordOPENCLAW_TELEGRAM_DNS_RESULT_ORDER, puischannels.telegram.network.dnsResultOrder, puis la valeur par dĂ©faut du processus (par exempleNODE_OPTIONS=--dns-result-order=ipv4first) ; si aucune de ces valeurs ne sâapplique, il utiliseipv4firstsous Node 22+. - Sous WSL2, ou lorsque le fonctionnement en IPv4 uniquement est prĂ©fĂ©rable, imposez la sĂ©lection de famille :
channels:telegram:network: autoSelectFamily: false- Les réponses de la plage de référence RFC 2544 (
198.18.0.0/15) sont déjà autorisées par défaut pour les téléchargements de médias Telegram. Si un proxy fake-IP ou transparent de confiance réécritapi.telegram.orgvers une autre adresse privée/interne/à usage spécial pendant les téléchargements de médias, activez explicitement le contournement réservé à Telegram :
channels:telegram:network: dangerouslyAllowPrivateNetwork: true- La mĂȘme activation explicite est disponible pour chaque compte dans
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork. - Si votre proxy résout les hÎtes de médias Telegram en
198.18.x.x, laissez dâabord lâindicateur dangereux dĂ©sactivĂ© â cette plage est dĂ©jĂ autorisĂ©e par dĂ©faut.
- Remplacements temporaires par variables dâenvironnement :
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1,OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1,OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first. - Validez les réponses DNS :
dig +short api.telegram.org Adig +short api.telegram.org AAAAAide supplémentaire : Dépannage des canaux.
Référence de configuration
Référence principale : Référence de configuration - Telegram.
Champs Telegram Ă forte valeur diagnostique
- démarrage/authentification :
enabled,botToken,tokenFile(doit ĂȘtre un fichier ordinaire ; les liens symboliques sont refusĂ©s),accounts.* - contrĂŽle dâaccĂšs :
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,groups.*.topics.*,bindings[]au niveau supérieur (type: "acp") - valeurs par défaut des sujets :
groups.<chatId>.topics."*"sâapplique aux sujets de forum sans correspondance ; les identifiants de sujet exacts prĂ©valent - approbations dâexĂ©cution :
execApprovals,accounts.*.execApprovals - commandes/menu :
commands.native,commands.nativeSkills,customCommands - fils de discussion/réponses :
replyToMode,threadBindings - diffusion en continu :
streaming(modesoff | partial | block | progress),streaming.preview.toolProgress - formatage/distribution :
textChunkLimit,streaming.chunkMode,richMessages,markdown.tables(off | bullets | code | block),linkPreview,responsePrefix - médias/réseau :
mediaMaxMb,mediaGroupFlushMs,timeoutSeconds,pollingStallThresholdMs,retry,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - racine dâAPI personnalisĂ©e :
apiRoot(racine de la Bot API uniquement ; nâincluez pas/bot<TOKEN>),trustedLocalFileRoots(racines absoluesfile_pathde la Bot API auto-hĂ©bergĂ©e) - Webhook :
webhookUrl,webhookSecret,webhookPath,webhookHost,webhookPort,webhookCertPath - actions/capacités :
capabilities.inlineButtons,actions.sendMessage|editMessage|deleteMessage|reactions|sticker|createForumTopic|editForumTopic - réactions :
reactionNotifications,reactionLevel - erreurs :
errorPolicy,errorCooldownMs,silentErrorReplies - écritures/historique :
configWrites,historyLimit,dmHistoryLimit,dms.*.historyLimit
Pages connexes
Associez un utilisateur Telegram au Gateway.
Comportement des listes dâautorisation de groupes et de sujets.
Acheminez les messages entrants vers les agents.
ModÚle de menace et renforcement de la sécurité.
Associez les groupes et les sujets aux agents.
Diagnostics entre canaux.