Koppelen
Kanaalprobleemoplossing
Gateway-configuratie
Snelle installatie
Maak het bottoken aan in BotFather
@BotFather is).Voer /newbot uit, volg de prompts en sla het token op.Configureer token en DM-beleid
TELEGRAM_BOT_TOKEN=... (alleen standaardaccount).
Telegram gebruikt niet openclaw channels login telegram; configureer het token in config/env en start daarna de gateway.Voeg de bot toe aan een groep
- je Telegram-gebruikers-ID, gebruikt in
allowFrom/groupAllowFrom - de Telegram-groepschat-ID, gebruikt als sleutel onder
channels.telegram.groups
openclaw logs --follow, een forwarded-ID-bot of Bot API getUpdates. Nadat de groep is toegestaan, kan /whoami@<bot_username> de gebruikers- en groeps-ID’s bevestigen.Negatieve Telegram-supergroep-ID’s die beginnen met -100 zijn groepschat-ID’s. Zet ze onder channels.telegram.groups, niet onder groupAllowFrom.TELEGRAM_BOT_TOKEN geldt alleen voor het standaardaccount.
Na een geslaagde start cachet OpenClaw de botidentiteit maximaal 24 uur in de state-map, zodat herstarts een extra Telegram-getMe-aanroep kunnen vermijden; het wijzigen of verwijderen van het token wist die cache.Telegram-instellingen
Privacymodus en zichtbaarheid in groepen
Privacymodus en zichtbaarheid in groepen
- schakel privacymodus uit via
/setprivacy, of - maak de bot groepsbeheerder.
Groepsrechten
Groepsrechten
Handige BotFather-schakelaars
Handige BotFather-schakelaars
/setjoingroupsom groepstoevoegingen toe te staan/te weigeren/setprivacyvoor zichtbaarheidsgedrag in groepen
Toegangscontrole en activering
Botidentiteit in groepen
In Telegram-groepen en forumtopics wordt een expliciete vermelding van de geconfigureerde bothandle (bijvoorbeeld@my_bot) behandeld als gericht aan de geselecteerde OpenClaw-agent, ook wanneer de agentpersonanaam verschilt van de Telegram-gebruikersnaam. Het stiltebeleid voor groepen blijft gelden voor ongerelateerd groepsverkeer, maar de bothandle zelf wordt niet gezien als “iemand anders.”
- DM-beleid
- Groepsbeleid en allowlists
- Vermeldingsgedrag
channels.telegram.dmPolicy regelt toegang via directe berichten:pairing(standaard)allowlist(vereist minstens één afzender-ID inallowFrom)open(vereist datallowFrom"*"bevat)disabled
dmPolicy: "open" met allowFrom: ["*"] laat elk Telegram-account dat de botgebruikersnaam vindt of raadt opdrachten aan de bot geven. Gebruik dit alleen voor bewust openbare bots met strikt beperkte tools; bots met één eigenaar moeten allowlist gebruiken met numerieke gebruikers-ID’s.channels.telegram.allowFrom accepteert numerieke Telegram-gebruikers-ID’s. telegram:- / tg:-prefixen worden geaccepteerd en genormaliseerd.
In configuraties met meerdere accounts wordt een beperkende top-level channels.telegram.allowFrom behandeld als een veiligheidsgrens: accountniveau-items allowFrom: ["*"] maken dat account niet openbaar, tenzij de effectieve account-allowlist na samenvoegen nog steeds een expliciete wildcard bevat.
dmPolicy: "allowlist" met lege allowFrom blokkeert alle DM’s en wordt afgewezen door configuratievalidatie.
De installatie vraagt alleen om numerieke gebruikers-ID’s.
Als je hebt geüpgraded en je configuratie @username-allowlist-items bevat, voer dan openclaw doctor --fix uit om ze op te lossen (best effort; vereist een Telegram-bottoken).
Als je eerder vertrouwde op allowlist-bestanden uit de koppelopslag, kan openclaw doctor --fix items herstellen naar channels.telegram.allowFrom in allowlist-flows (bijvoorbeeld wanneer dmPolicy: "allowlist" nog geen expliciete ID’s heeft).Voor bots met één eigenaar geef je de voorkeur aan dmPolicy: "allowlist" met expliciete numerieke allowFrom-ID’s om het toegangsbeleid duurzaam in de configuratie te houden (in plaats van afhankelijk te zijn van eerdere koppelgoedkeuringen).Veelvoorkomende verwarring: goedkeuring van DM-koppeling betekent niet “deze afzender is overal geautoriseerd”.
Koppeling verleent DM-toegang. Als er nog geen opdrachteigenaar bestaat, stelt de eerste goedgekeurde koppeling ook commands.ownerAllowFrom in, zodat alleen-eigenaar-opdrachten en exec-goedkeuringen een expliciet operatoraccount hebben.
Autorisatie van afzenders in groepen komt nog steeds uit expliciete configuratie-allowlists.
Als je wilt “ik ben één keer geautoriseerd en zowel DM’s als groepsopdrachten werken”, zet je je numerieke Telegram-gebruikers-ID in channels.telegram.allowFrom; zorg er voor alleen-eigenaar-opdrachten voor dat commands.ownerAllowFrom telegram:<your user id> bevat.Je Telegram-gebruikers-ID vinden
Veiliger (geen externe bot):- Stuur je bot een DM.
- Voer
openclaw logs --followuit. - Lees
from.id.
@userinfobot of @getidsbot.Runtimegedrag
- Telegram is eigendom van het Gateway-proces.
- Routering is deterministisch: inkomende Telegram-antwoorden gaan terug naar Telegram (het model kiest geen kanalen).
- Inkomende berichten worden genormaliseerd naar de gedeelde kanaalenvelop met antwoordmetadata, mediaplaceholders en persistente antwoordketencontext voor Telegram-antwoorden die de Gateway heeft waargenomen.
- Groepssessies worden geïsoleerd op groeps-ID. Forumonderwerpen voegen
:topic:<threadId>toe om onderwerpen geïsoleerd te houden. - DM-berichten kunnen
message_thread_idbevatten; OpenClaw behoudt dit voor antwoorden. DM-onderwerpsessies splitsen alleen wanneer TelegramgetMevoor de bothas_topics_enabled: truemeldt; anders blijven DM’s op de platte sessie. - Long polling gebruikt grammY runner met sequencing per chat/per thread. De totale gelijktijdigheid van de runner-sink gebruikt
agents.defaults.maxConcurrent. - Opstarten met meerdere accounts begrenst gelijktijdige Telegram-
getMe-probes, zodat grote botvloten niet alle accountprobes tegelijk uitwaaieren. - Long polling wordt binnen elk Gateway-proces beschermd, zodat slechts één actieve poller tegelijk een bottoken kan gebruiken. Als je nog steeds
getUpdates409-conflicten ziet, gebruikt waarschijnlijk een andere OpenClaw-Gateway, script of externe poller dezelfde token. - Herstarts door de long-polling-watchdog worden standaard geactiveerd na 120 seconden zonder voltooide
getUpdates-liveness. Verhoogchannels.telegram.pollingStallThresholdMsalleen als je deployment nog steeds valse polling-stall-herstarts ziet tijdens langlopende werkzaamheden. De waarde is in milliseconden en is toegestaan van30000tot600000; overrides per account worden ondersteund. - Telegram Bot API heeft geen ondersteuning voor leesbewijzen (
sendReadReceiptsis niet van toepassing).
channels.telegram.dm.threadReplies en channels.telegram.direct.<chatId>.threadReplies zijn verwijderd. Voer openclaw doctor --fix uit na het upgraden als je configuratie die sleutels nog heeft. DM-onderwerproutering volgt nu de botcapaciteit van Telegram getMe.has_topics_enabled, die wordt beheerd door de threaded modus van BotFather: bots met onderwerpen ingeschakeld gebruiken thread-gescopete DM-sessies wanneer Telegram message_thread_id verzendt; andere DM’s blijven op de platte sessie.Functiereferentie
Live stream preview (message edits)
Live stream preview (message edits)
- directe chats: previewbericht +
editMessageText - groepen/onderwerpen: previewbericht +
editMessageText
channels.telegram.streamingisoff | partial | block | progress(standaard:partial)- korte previews van initiële antwoorden worden gedebounced en daarna na een begrensde vertraging gematerialiseerd als de run nog actief is
progresshoudt één bewerkbaar statusconcept bij voor toolvoortgang, toont het stabiele statuslabel wanneer antwoordactiviteit binnenkomt vóór toolvoortgang, wist dit bij voltooiing en verzendt het definitieve antwoord als normaal berichtstreaming.preview.toolProgressbepaalt of tool-/voortgangsupdates hetzelfde bewerkte previewbericht hergebruiken (standaard:truewanneer previewstreaming actief is)streaming.preview.commandTextbepaalt commando-/exec-details binnen die toolvoortgangsregels:raw(standaard, behoudt uitgebracht gedrag) ofstatus(alleen toollabel)streaming.progress.commentary(standaard:false) schakelt assistentcommentaar/preambuletekst in het tijdelijke voortgangsconcept in- legacy
channels.telegram.streamMode, booleaansestreaming-waarden en gepensioneerde native conceptpreviewsleutels worden gedetecteerd; voeropenclaw doctor --fixuit om ze naar de huidige streamingconfiguratie te migreren
v2026.4.22 en later.Om de bewerkte preview voor antwoordtekst te behouden maar toolvoortgangsregels te verbergen, stel je in:progress wanneer je zichtbare toolvoortgang wilt zonder het definitieve antwoord in datzelfde bericht te bewerken. Plaats het commandotekstbeleid onder streaming.progress:streaming.mode: "off" alleen wanneer je levering met alleen het definitieve antwoord wilt: Telegram-previewbewerkingen worden uitgeschakeld en generiek tool-/voortgangsgeklets wordt onderdrukt in plaats van als zelfstandige statusberichten te worden verzonden. Goedkeuringsprompts, mediapayloads en fouten blijven via normale definitieve levering routeren. Gebruik streaming.preview.toolProgress: false wanneer je alleen antwoordpreviewbewerkingen wilt behouden terwijl je de statusregels voor toolvoortgang verbergt.replyToMode "first", "all" of "batched" is en het inkomende bericht geselecteerde quotetekst bevat, verzendt OpenClaw het definitieve antwoord via Telegrams native quote-antwoordpad in plaats van de antwoordpreview te bewerken, waardoor streaming.preview.toolProgress de korte statusregels voor die beurt niet kan tonen. Antwoorden op het huidige bericht zonder geselecteerde quotetekst behouden previewstreaming nog steeds. Stel replyToMode: "off" in wanneer zichtbaarheid van toolvoortgang belangrijker is dan native quote-antwoorden, of stel streaming.preview.toolProgress: false in om de afweging te erkennen.- korte DM-/groeps-/onderwerppreviews: OpenClaw behoudt hetzelfde previewbericht en voert de definitieve bewerking op zijn plek uit
- lange definitieve tekst die in meerdere Telegram-berichten wordt gesplitst, hergebruikt de bestaande preview waar mogelijk als het eerste definitieve fragment en verzendt daarna alleen de resterende fragmenten
- definitieve antwoorden in progress-modus wissen het statusconcept en gebruiken normale definitieve levering in plaats van het concept tot antwoord te bewerken
- als de definitieve bewerking mislukt voordat de voltooide tekst is bevestigd, gebruikt OpenClaw normale definitieve levering en ruimt het de verouderde preview op
/reasoning streamgebruikt het reasoning-previewpad van een ondersteund kanaal; op Telegram streamt het reasoning tijdens het genereren naar de live preview- de reasoningpreview wordt verwijderd na definitieve levering; gebruik
/reasoning onwanneer reasoning zichtbaar moet blijven - het definitieve antwoord wordt zonder reasoningtekst verzonden
Rich message formatting
Rich message formatting
channels.telegram.richMessages: true in om Bot API 10.1 rijke berichten in te schakelen:- De agent krijgt te horen dat rijke Telegram-berichten beschikbaar zijn voor deze bot/dit account.
- Markdown-tekst wordt gerenderd via OpenClaw’s Markdown IR en verzonden als rijke Telegram-HTML.
- Expliciete rijke HTML-payloads behouden ondersteunde Bot API 10.1-tags zoals koppen, tabellen, details, rijke media en formules.
- Mediabijschriften gebruiken nog steeds Telegram HTML-bijschriften, omdat rijke berichten bijschriften niet vervangen.
$400-600K niet als wiskunde wordt geparsed. Lange rijke tekst wordt automatisch gesplitst over de rijke-tekst- en rijke-bloklimieten van Telegram. Tabellen boven de kolomlimiet van Telegram worden als codeblokken verzonden.Standaard: uit voor clientcompatibiliteit. Rijke berichten vereisen compatibele Telegram-clients; sommige huidige Desktop-, Web-, Android- en third-party clients geven geaccepteerde rijke berichten weer als niet-ondersteund. Laat deze optie uitgeschakeld tenzij elke client die met de bot wordt gebruikt ze kan renderen. /status toont of de huidige Telegram-sessie rijke berichten aan of uit heeft.Linkpreviews zijn standaard ingeschakeld. channels.telegram.linkPreview: false slaat automatische entiteitsdetectie voor rijke tekst over.Native commands and custom commands
Native commands and custom commands
setMyCommands.Standaarden voor native commando’s:commands.native: "auto"schakelt native commando’s in voor Telegram
- namen worden genormaliseerd (leidende
/verwijderen, kleine letters) - geldig patroon:
a-z,0-9,_, lengte1..32 - aangepaste commando’s kunnen native commando’s niet overschrijven
- conflicten/duplicaten worden overgeslagen en gelogd
- aangepaste commando’s zijn alleen menu-items; ze implementeren niet automatisch gedrag
- plugin-/skillcommando’s kunnen nog steeds werken wanneer ze worden getypt, zelfs als ze niet in het Telegram-menu worden getoond
setMyCommands failedmetBOT_COMMANDS_TOO_MUCHbetekent dat het Telegram-menu na inkorten nog steeds is overgelopen; verminder plugin-/skill-/aangepaste commando’s of schakelchannels.telegram.commands.nativeuit.deleteWebhook,deleteMyCommandsofsetMyCommandsdat faalt met404: Not Foundterwijl directe Bot API-curlcommando’s werken, kan betekenen datchannels.telegram.apiRootis ingesteld op het volledige/bot<TOKEN>-endpoint.apiRootmag alleen de Bot API-root zijn, enopenclaw doctor --fixverwijdert een per ongeluk afsluitende/bot<TOKEN>.getMe returned 401betekent dat Telegram de geconfigureerde bottoken heeft geweigerd. WerkbotToken,tokenFileofTELEGRAM_BOT_TOKENbij met de huidige BotFather-token; OpenClaw stopt vóór polling, dus dit wordt niet gemeld als een webhook-opruimfout.setMyCommands failedmet netwerk-/fetchfouten betekent meestal dat uitgaande DNS/HTTPS naarapi.telegram.orgis geblokkeerd.
Commando’s voor apparaatkoppeling (device-pair-plugin)
Wanneer de device-pair-plugin is geïnstalleerd:/pairgenereert setupcode- plak code in iOS-app
/pair pendingtoont openstaande aanvragen (inclusief rol/scopes)- keur de aanvraag goed:
/pair approve <requestId>voor expliciete goedkeuring/pair approvewanneer er slechts één openstaande aanvraag is/pair approve latestvoor de meest recente
scopes: [] plus een begrensde operator-handofftoken voor vertrouwde mobiele onboarding. Die operatortoken kan native configuratie tijdens setup lezen, maar verleent geen scopes voor koppelingsmutaties of operator.admin.Als een apparaat opnieuw probeert met gewijzigde authdetails (bijvoorbeeld rol/scopes/publieke sleutel), wordt de vorige openstaande aanvraag vervangen en gebruikt de nieuwe aanvraag een andere requestId. Voer /pair pending opnieuw uit vóór goedkeuring.Meer details: Koppelen.Inline-knoppen
Inline-knoppen
offdmgroupallallowlist(standaard)
capabilities: ["inlineButtons"] wordt toegewezen aan inlineButtons: "all".Voorbeeld van berichtactie:web_app-knoppen werken alleen in privéchats tussen een gebruiker en de
bot.Callback-klikken die niet worden opgeëist door een geregistreerde interactieve
handler van een plugin, worden als tekst doorgegeven aan de agent:
callback_data: <value>Telegram-berichtacties voor agents en automatisering
Telegram-berichtacties voor agents en automatisering
sendMessage(to,content, optioneelmediaUrl,replyToMessageId,messageThreadId)react(chatId,messageId,emoji)deleteMessage(chatId,messageId)editMessage(chatId,messageId,contentofcaption, optioneelpresentationinline-knoppen; bewerkingen met alleen knoppen werken reply markup bij)createForumTopic(chatId,name, optioneeliconColor,iconCustomEmojiId)
send, react, delete, edit, sticker, sticker-search, topic-create).Toegangscontroles:channels.telegram.actions.sendMessagechannels.telegram.actions.deleteMessagechannels.telegram.actions.reactionschannels.telegram.actions.sticker(standaard: uitgeschakeld)
edit en topic-create zijn momenteel standaard ingeschakeld en hebben geen afzonderlijke channels.telegram.actions.*-schakelaars.
Runtime-verzendingen gebruiken de actieve momentopname van config/geheimen (opstarten/herladen), dus actiepaden voeren geen ad-hoc SecretRef-herresolutie per verzending uit.Semantiek voor het verwijderen van reacties: /tools/reactionsForumonderwerpen en threadgedrag
Forumonderwerpen en threadgedrag
- onderwerpsessiesleutels voegen
:topic:<threadId>toe - antwoorden en typindicaties zijn gericht op de onderwerpthread
- configpad voor onderwerpen:
channels.telegram.groups.<chatId>.topics.<threadId>
threadId=1):- berichtverzendingen laten
message_thread_idweg (Telegram weigertsendMessage(...thread_id=1)) - typacties bevatten nog steeds
message_thread_id
requireMention, allowFrom, skills, systemPrompt, enabled, groupPolicy).
agentId geldt alleen voor onderwerpen en erft niet van groepsstandaarden.
topics."*" stelt standaarden in voor elk onderwerp in die groep; exacte onderwerp-ID’s winnen nog steeds van "*".Agentroutering per onderwerp: Elk onderwerp kan naar een andere agent routeren door agentId in de onderwerpconfig in te stellen. Dit geeft elk onderwerp zijn eigen geïsoleerde werkruimte, geheugen en sessie. Voorbeeld:agent:zu:telegram:group:-1001234567890:topic:3Persistente ACP-onderwerpbinding: Forumonderwerpen kunnen ACP-harness-sessies vastzetten via getypeerde ACP-bindingen op topniveau (bindings[] met type: "acp" en match.channel: "telegram", peer.kind: "group" en een onderwerpgekwalificeerde id zoals -1001234567890:topic:42). Momenteel beperkt tot forumonderwerpen in groepen/supergroepen. Zie ACP Agents.Threadgebonden ACP-spawn vanuit chat: /acp spawn <agent> --thread here|auto bindt het huidige onderwerp aan een nieuwe ACP-sessie; vervolgberichten routeren daar rechtstreeks naartoe. OpenClaw zet de spawnbevestiging vast in het onderwerp. Vereist dat channels.telegram.threadBindings.spawnSessions ingeschakeld blijft (standaard: true).Templatecontext stelt MessageThreadId en IsForum beschikbaar. DM-chats met message_thread_id behouden antwoordmetadata; ze gebruiken alleen thread-bewuste sessiesleutels wanneer Telegram getMe voor de bot has_topics_enabled: true meldt.
De voormalige overschrijvingen dm.threadReplies en direct.*.threadReplies zijn bewust afgeschaft; gebruik de threaded modus van BotFather als enige bron van waarheid en voer openclaw doctor --fix uit om verouderde configsleutels te verwijderen.Audio, video en stickers
Audio, video en stickers
Audioberichten
Telegram maakt onderscheid tussen spraaknotities en audiobestanden.- standaard: gedrag voor audiobestanden
- tag
[[audio_as_voice]]in het antwoord van de agent om verzending als spraaknotitie af te dwingen - binnenkomende transcripties van spraaknotities worden in de agentcontext ingekaderd als machinaal gegenereerde, niet-vertrouwde tekst; vermeldingsdetectie gebruikt nog steeds de onbewerkte transcriptie, zodat spraakberichten achter een vermeldingspoort blijven werken.
Videoberichten
Telegram maakt onderscheid tussen videobestanden en videonotities.Voorbeeld van berichtactie:Stickers
Verwerking van inkomende stickers:- statische WEBP: gedownload en verwerkt (placeholder
<media:sticker>) - geanimeerde TGS: overgeslagen
- video-WEBM: overgeslagen
Sticker.emojiSticker.setNameSticker.fileIdSticker.fileUniqueIdSticker.cachedDescription
Reactiemeldingen
Reactiemeldingen
message_reaction-updates (los van berichtpayloads).Wanneer ingeschakeld, zet OpenClaw systeemgebeurtenissen in de wachtrij zoals:Telegram reaction added: 👍 by Alice (@alice) on msg 42
channels.telegram.reactionNotifications:off | own | all(standaard:own)channels.telegram.reactionLevel:off | ack | minimal | extensive(standaard:minimal)
ownbetekent alleen gebruikersreacties op door de bot verzonden berichten (best effort via cache voor verzonden berichten).- Reactiegebeurtenissen respecteren nog steeds de Telegram-toegangscontroles (
dmPolicy,allowFrom,groupPolicy,groupAllowFrom); niet-geautoriseerde afzenders worden geweigerd. - Telegram geeft geen thread-ID’s mee in reactie-updates.
- niet-forumgroepen worden gerouteerd naar de groepschatsessie
- forumgroepen worden gerouteerd naar de algemene-onderwerpsessie van de groep (
:topic:1), niet naar het exacte oorspronkelijke onderwerp
allowed_updates voor polling/Webhook bevat automatisch message_reaction.Ack-reacties
Ack-reacties
ackReaction verzendt een bevestigingsemoji terwijl OpenClaw een inkomend bericht verwerkt. ackReactionScope bepaalt wanneer die emoji daadwerkelijk wordt verzonden.Volgorde voor emoji-resolutie (ackReaction):channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- fallback naar emoji van agentidentiteit (
agents.list[].identity.emoji, anders ”👀”)
- Telegram verwacht unicode-emoji (bijvoorbeeld ”👀”).
- Gebruik
""om de reactie voor een kanaal of account uit te schakelen.
messages.ackReactionScope):De Telegram-provider leest het bereik uit messages.ackReactionScope (standaard "group-mentions"). Er is momenteel geen override op Telegram-account- of Telegram-kanaalniveau.Waarden: "all" (DM’s + groepen), "direct" (alleen DM’s), "group-all" (elk groepsbericht, geen DM’s), "group-mentions" (groepen wanneer de bot wordt genoemd; geen DM’s — dit is de standaard), "off" / "none" (uitgeschakeld)."group-mentions") triggert geen ack-reacties in directe berichten. Om een ack-reactie op inkomende Telegram-DM’s te krijgen, stel je messages.ackReactionScope in op "direct" of "all". De waarde wordt gelezen bij het opstarten van de Telegram-provider, dus een herstart van de Gateway is nodig om de wijziging van kracht te laten worden.Configuratieschrijven vanuit Telegram-gebeurtenissen en -commando's
Configuratieschrijven vanuit Telegram-gebeurtenissen en -commando's
configWrites !== false).Door Telegram getriggerde schrijfacties omvatten:- groepsmigratiegebeurtenissen (
migrate_to_chat_id) omchannels.telegram.groupsbij te werken /config seten/config unset(vereist dat commando’s zijn ingeschakeld)
Long polling versus webhook
Long polling versus webhook
channels.telegram.webhookUrl en channels.telegram.webhookSecret in; optioneel webhookPath, webhookHost, webhookPort (standaarden /telegram-webhook, 127.0.0.1, 8787).In long-pollingmodus bewaart OpenClaw zijn herstart-watermark pas nadat een update succesvol is gedispatcht. Als een handler faalt, blijft die update opnieuw probeerbaar in hetzelfde proces en wordt deze niet als voltooid weggeschreven voor deduplicatie bij herstart.De lokale listener bindt aan 127.0.0.1:8787. Plaats voor openbare ingress een reverse proxy vóór de lokale poort, of stel bewust webhookHost: "0.0.0.0" in.Webhook-modus valideert request-guards, het geheime Telegram-token en de JSON-body voordat 200 aan Telegram wordt teruggegeven.
OpenClaw verwerkt de update daarna asynchroon via dezelfde botlanes per chat/per onderwerp als bij long polling, zodat trage agentbeurten de afleverings-ACK van Telegram niet ophouden.Limieten, retries en CLI-doelen
Limieten, retries en CLI-doelen
channels.telegram.textChunkLimitis standaard 4000.channels.telegram.chunkMode="newline"geeft de voorkeur aan alineagrenzen (lege regels) voordat er op lengte wordt gesplitst.channels.telegram.mediaMaxMb(standaard 100) begrenst de grootte van inkomende en uitgaande Telegram-media.channels.telegram.mediaGroupFlushMs(standaard 500) bepaalt hoe lang Telegram-albums/mediagroepen worden gebufferd voordat OpenClaw ze als één inkomend bericht dispatcht. Verhoog dit als albumonderdelen laat aankomen; verlaag dit om de latentie van albumantwoorden te verminderen.channels.telegram.timeoutSecondsoverschrijft de time-out van de Telegram API-client (als deze niet is ingesteld, geldt de standaard van grammY). Botclients begrenzen geconfigureerde waarden onder de 60-secondenbeveiliging voor uitgaande tekst-/typverzoeken, zodat grammY de zichtbare antwoordlevering niet afbreekt voordat de transportbeveiliging en fallback van OpenClaw kunnen worden uitgevoerd. Long polling gebruikt nog steeds een 45-secondenbeveiliging voorgetUpdates-verzoeken, zodat inactieve polls niet oneindig worden verlaten.channels.telegram.pollingStallThresholdMsis standaard120000; pas alleen aan tussen30000en600000voor fout-positieve herstarts door vastgelopen polling.- groepscontexthistorie gebruikt
channels.telegram.historyLimitofmessages.groupChat.historyLimit(standaard 50);0schakelt dit uit. - aanvullende context van antwoorden/citaten/doorsturen wordt genormaliseerd tot één geselecteerd gesprekscontextvenster wanneer de Gateway de bovenliggende berichten heeft gezien; de cache met waargenomen berichten bevindt zich in de OpenClaw SQLite-Pluginstatus, en
openclaw doctor --fiximporteert legacy sidecars. Telegram bevat slechts één oppervlakkigereply_to_messagein updates, dus ketens ouder dan de cache zijn beperkt tot de huidige updatepayload van Telegram. - Telegram-allowlists bepalen vooral wie de agent kan activeren, niet een volledige redactiegrens voor aanvullende context.
- besturing van DM-historie:
channels.telegram.dmHistoryLimitchannels.telegram.dms["<user_id>"].historyLimit
channels.telegram.retry-configuratie geldt voor Telegram-verzendhelpers (CLI/tools/acties) voor herstelbare uitgaande API-fouten. Levering van inkomende eindantwoorden gebruikt ook een begrensde veilige verzendretry voor Telegram-pre-connectfouten, maar probeert geen dubbelzinnige netwerk-enveloppen na verzending opnieuw die zichtbare berichten zouden kunnen dupliceren.
openclaw message poll en ondersteunen forumtopics:--poll-duration-seconds(5-600)--poll-anonymous--poll-public--thread-idvoor forumtopics (of gebruik een:topic:-doel)
--presentationmetbuttons-blokken voor inline toetsenborden wanneerchannels.telegram.capabilities.inlineButtonsdit toestaat--pinof--delivery '{"pin":true}'om vastgezette levering aan te vragen wanneer de bot in die chat kan vastzetten--force-documentom uitgaande afbeeldingen, GIF’s en video’s als documenten te verzenden in plaats van gecomprimeerde foto-, animated-media- of video-uploads
channels.telegram.actions.sendMessage=falseschakelt uitgaande Telegram-berichten uit, inclusief pollschannels.telegram.actions.poll=falseschakelt het maken van Telegram-polls uit terwijl reguliere verzendingen ingeschakeld blijven
Exec-goedkeuringen in Telegram
Exec-goedkeuringen in Telegram
channels.telegram.execApprovals.enabled(wordt automatisch ingeschakeld wanneer ten minste één goedkeurder kan worden opgelost)channels.telegram.execApprovals.approvers(valt terug op numerieke eigenaar-ID’s uitcommands.ownerAllowFrom)channels.telegram.execApprovals.target:dm(standaard) |channel|bothagentFilter,sessionFilter
channels.telegram.allowFrom, groupAllowFrom en defaultTo bepalen wie met de bot kan praten en waar normale antwoorden naartoe worden verzonden. Ze maken iemand geen exec-goedkeurder. De eerste goedgekeurde DM-koppeling bootstrapt commands.ownerAllowFrom wanneer er nog geen opdrachteigenaar bestaat, zodat de setup met één eigenaar blijft werken zonder ID’s te dupliceren onder execApprovals.approvers.Kanaallevering toont de opdrachttekst in de chat; schakel channel of both alleen in vertrouwde groepen/topics in. Wanneer de prompt in een forumtopic terechtkomt, behoudt OpenClaw het topic voor de goedkeuringsprompt en de opvolging. Exec-goedkeuringen verlopen standaard na 30 minuten.Inline goedkeuringsknoppen vereisen ook dat channels.telegram.capabilities.inlineButtons het doeloppervlak toestaat (dm, group of all). Goedkeurings-ID’s met het voorvoegsel plugin: worden via Plugin-goedkeuringen opgelost; andere worden eerst via exec-goedkeuringen opgelost.Zie Exec-goedkeuringen.Besturing van foutantwoorden
Wanneer de agent een leverings- of providerfout tegenkomt, bepaalt het foutbeleid of foutberichten naar de Telegram-chat worden verzonden:| Sleutel | Waarden | Standaard | Beschrijving |
|---|---|---|---|
channels.telegram.errorPolicy | always, once, silent | always | always — verzend elk foutbericht naar de chat. once — verzend elk uniek foutbericht één keer per cooldownvenster (onderdruk herhaalde identieke fouten). silent — verzend nooit foutberichten naar de chat. |
channels.telegram.errorCooldownMs | getal (ms) | 14400000 (4u) | Cooldownvenster voor het once-beleid. Nadat een fout is verzonden, wordt hetzelfde foutbericht onderdrukt totdat dit interval is verstreken. Voorkomt foutspam tijdens storingen. |
Probleemoplossing
Bot reageert niet op groepsberichten zonder vermelding
Bot reageert niet op groepsberichten zonder vermelding
- Als
requireMention=false, moet de privacymodus van Telegram volledige zichtbaarheid toestaan.- BotFather:
/setprivacy-> Uitschakelen - verwijder de bot daarna uit de groep en voeg deze opnieuw toe
- BotFather:
openclaw channels statuswaarschuwt wanneer configuratie groepsberichten zonder vermelding verwacht.openclaw channels status --probekan expliciete numerieke groeps-ID’s controleren; wildcard"*"kan niet op lidmaatschap worden geprobed.- snelle sessietest:
/activation always.
Bot ziet helemaal geen groepsberichten
Bot ziet helemaal geen groepsberichten
- wanneer
channels.telegram.groupsbestaat, moet de groep worden vermeld (of moet"*"worden opgenomen) - verifieer botlidmaatschap in de groep
- bekijk logs:
openclaw logs --followvoor redenen voor overslaan
Opdrachten werken gedeeltelijk of helemaal niet
Opdrachten werken gedeeltelijk of helemaal niet
- autoriseer je afzenderidentiteit (koppeling en/of numerieke
allowFrom) - opdrachtautorisatie blijft gelden, zelfs wanneer het groepsbeleid
openis setMyCommands failedmetBOT_COMMANDS_TOO_MUCHbetekent dat het native menu te veel items heeft; verminder Plugin-/skill-/aangepaste opdrachten of schakel native menu’s uitdeleteMyCommands/setMyCommands-startupaanroepen ensendChatAction-typaanroepen zijn begrensd en proberen één keer opnieuw via de transportfallback van Telegram bij een verzoektime-out. Aanhoudende netwerk-/fetchfouten wijzen meestal op DNS-/HTTPS-bereikbaarheidsproblemen naarapi.telegram.org
Startup meldt ongeautoriseerde token
Startup meldt ongeautoriseerde token
getMe returned 401is een Telegram-authenticatiefout voor de geconfigureerde bottoken.- Kopieer of regenereer de bottoken opnieuw in BotFather en werk daarna
channels.telegram.botToken,channels.telegram.tokenFile,channels.telegram.accounts.<id>.botTokenofTELEGRAM_BOT_TOKENbij voor het standaardaccount. deleteWebhook 401 Unauthorizedtijdens startup is ook een authfout; dit behandelen als “er bestaat geen Webhook” zou dezelfde fout door een ongeldige token alleen uitstellen tot latere API-aanroepen.
Polling- of netwerkinstabiliteit
Polling- of netwerkinstabiliteit
- Node 22+ + aangepaste fetch/proxy kan onmiddellijk afbreekgedrag veroorzaken als AbortSignal-typen niet overeenkomen.
- Sommige hosts lossen
api.telegram.orgeerst op naar IPv6; defecte IPv6-egress kan intermitterende Telegram API-fouten veroorzaken. - Als logs
TypeError: fetch failedofNetwork request for 'getUpdates' failed!bevatten, probeert OpenClaw deze nu opnieuw als herstelbare netwerkfouten. - Tijdens polling-startup hergebruikt OpenClaw de succesvolle startup-
getMe-probe voor grammY, zodat de runner geen tweedegetMenodig heeft vóór de eerstegetUpdates. - Als
deleteWebhookmislukt met een tijdelijke netwerkfout tijdens polling-startup, gaat OpenClaw door met long polling in plaats van nog een pre-poll control-plane-aanroep te doen. Een nog actieve Webhook verschijnt als eengetUpdates-conflict; OpenClaw bouwt dan het Telegram-transport opnieuw op en probeert Webhook-opschoning opnieuw. - Als Telegram-sockets volgens een korte vaste cadans worden gerecycled, controleer dan op een lage
channels.telegram.timeoutSeconds; botclients begrenzen geconfigureerde waarden onder de uitgaande engetUpdates-verzoekbeveiligingen, maar oudere releases konden elke poll of elk antwoord afbreken wanneer dit onder die beveiligingen was ingesteld. - Als logs
Polling stall detectedbevatten, herstart OpenClaw standaard polling en bouwt het Telegram-transport opnieuw op na 120 seconden zonder voltooide long-poll-liveness. openclaw channels status --probeenopenclaw doctorwaarschuwen wanneer een actief pollingaccountgetUpdatesna de startup-gratie niet heeft voltooid, wanneer een actief Webhook-accountsetWebhookna de startup-gratie niet heeft voltooid, of wanneer de laatste succesvolle pollingtransportactiviteit verouderd is.- Verhoog
channels.telegram.pollingStallThresholdMsalleen wanneer langlopendegetUpdates-aanroepen gezond zijn maar je host nog steeds foutieve polling-stall-herstarts meldt. Aanhoudende stalls wijzen meestal op proxy-, DNS-, IPv6- of TLS-egressproblemen tussen de host enapi.telegram.org. - Telegram respecteert ook procesproxy-env voor Bot API-transport, inclusief
HTTP_PROXY,HTTPS_PROXY,ALL_PROXYen hun varianten in kleine letters.NO_PROXY/no_proxykanapi.telegram.orgnog steeds omzeilen. - Als de door OpenClaw beheerde proxy via
OPENCLAW_PROXY_URLis geconfigureerd voor een serviceomgeving en er geen standaard proxy-env aanwezig is, gebruikt Telegram die URL ook voor Bot API-transport. - Routeer Telegram API-aanroepen op VPS-hosts met instabiele directe egress/TLS via
channels.telegram.proxy:
- Node 22+ gebruikt standaard
autoSelectFamily=true(behalve WSL2). De volgorde van Telegram-DNS-resultaten respecteertOPENCLAW_TELEGRAM_DNS_RESULT_ORDER, daarnachannels.telegram.network.dnsResultOrder, daarna de processtandaard zoalsNODE_OPTIONS=--dns-result-order=ipv4first; als geen daarvan van toepassing is, valt Node 22+ terug opipv4first. - Als je host WSL2 is of expliciet beter werkt met alleen-IPv4-gedrag, forceer familieselectie:
- Antwoorden uit het RFC 2544-benchmarkbereik (
198.18.0.0/15) zijn standaard al toegestaan voor Telegram-mediadownloads. Als een vertrouwde fake-IP- of transparante proxyapi.telegram.orgherschrijft naar een ander privé-/intern/speciaal adres tijdens mediadownloads, kun je je aanmelden voor de Telegram-only bypass:
- Dezelfde opt-in is per account beschikbaar op
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork. - Als je proxy Telegram-mediahosts omzet naar
198.18.x.x, laat de gevaarlijke vlag eerst uit. Telegram-media staat het RFC 2544- benchmarkbereik standaard al toe.
- Omgevingsoverschrijvingen (tijdelijk):
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first
- Valideer DNS-antwoorden:
Configuratiereferentie
Primaire referentie: Configuratiereferentie - Telegram.High-signal Telegram fields
High-signal Telegram fields
- opstarten/authenticatie:
enabled,botToken,tokenFile,accounts.*(tokenFilemoet naar een regulier bestand verwijzen; symlinks worden geweigerd) - toegangsbeheer:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,groups.*.topics.*, top-levelbindings[](type: "acp") - topicstandaarden:
groups.<chatId>.topics."*"is van toepassing op niet-overeenkomende forumtopics; exacte topic-ID’s overschrijven dit - exec-goedkeuringen:
execApprovals,accounts.*.execApprovals - opdrachten/menu:
commands.native,commands.nativeSkills,customCommands - threads/antwoorden:
replyToMode - streamen:
streaming(preview),streaming.preview.toolProgress,blockStreaming - opmaak/bezorging:
textChunkLimit,chunkMode,richMessages,linkPreview,responsePrefix - media/netwerk:
mediaMaxMb,mediaGroupFlushMs,timeoutSeconds,pollingStallThresholdMs,retry,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - aangepaste API-root:
apiRoot(alleen Bot API-root; neem/bot<TOKEN>niet op) - Webhook:
webhookUrl,webhookSecret,webhookPath,webhookHost - acties/capabilities:
capabilities.inlineButtons,actions.sendMessage|editMessage|deleteMessage|reactions|sticker - reacties:
reactionNotifications,reactionLevel - fouten:
errorPolicy,errorCooldownMs - schrijfacties/geschiedenis:
configWrites,historyLimit,dmHistoryLimit,dms.*.historyLimit
channels.telegram.defaultAccount in (of neem channels.telegram.accounts.default op) om standaardroutering expliciet te maken. Anders valt OpenClaw terug op het eerste genormaliseerde account-ID en waarschuwt openclaw doctor. Genoemde accounts erven channels.telegram.allowFrom / groupAllowFrom, maar geen accounts.default.*-waarden.