Productieklaar voor bot-DM’s en groepen via grammY. Long polling is de standaardmodus; Webhook-modus is optioneel.Documentation Index
Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Pairing
Channel troubleshooting
Gateway configuration
Snelle installatie
Create the bot token in BotFather
@BotFather is).Voer /newbot uit, volg de prompts en sla het token op.Configure token and DM policy
TELEGRAM_BOT_TOKEN=... (alleen standaardaccount).
Telegram gebruikt geen openclaw channels login telegram; configureer het token in config/env en start daarna de Gateway.Add the bot to a group
- je Telegram-gebruikers-ID, gebruikt in
allowFrom/groupAllowFrom - de Telegram-groepschat-ID, gebruikt als sleutel onder
channels.telegram.groups
openclaw logs --follow, een bot voor doorgestuurde ID’s 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. Plaats ze onder channels.telegram.groups, niet onder groupAllowFrom.TELEGRAM_BOT_TOKEN geldt alleen voor het standaardaccount.Telegram-instellingen
Privacy mode and group visibility
Privacy mode and group visibility
- schakel de privacymodus uit via
/setprivacy, of - maak de bot groepsbeheerder.
Group permissions
Group permissions
Helpful BotFather toggles
Helpful BotFather toggles
/setjoingroupsom toevoegen aan groepen toe te staan/te weigeren/setprivacyvoor gedrag rond zichtbaarheid in groepen
Toegangscontrole en activering
- DM policy
- Group policy and allowlists
- Mention behavior
channels.telegram.dmPolicy beheert toegang via directe berichten:pairing(standaard)allowlist(vereist ten minste één afzender-ID inallowFrom)open(vereist datallowFrom"*"bevat)disabled
dmPolicy: "open" met allowFrom: ["*"] laat elk Telegram-account dat de botgebruikersnaam vindt of raadt de bot opdrachten 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. Voorvoegsels telegram: / tg: worden geaccepteerd en genormaliseerd.
In multi-accountconfiguraties wordt een beperkende channels.telegram.allowFrom op topniveau behandeld als een veiligheidsgrens: accountniveau-items allowFrom: ["*"] maken dat account niet openbaar tenzij de effectieve account-allowlist na samenvoeging nog steeds een expliciete wildcard bevat.
dmPolicy: "allowlist" met lege allowFrom blokkeert alle DM’s en wordt afgewezen door configvalidatie.
De installatie vraagt alleen om numerieke gebruikers-ID’s.
Als je hebt geüpgraded en je config @username-allowlistitems bevat, voer dan openclaw doctor --fix uit om ze op te lossen (best-effort; vereist een Telegram-bottoken).
Als je eerder vertrouwde op allowlistbestanden uit de koppelingsopslag, kan openclaw doctor --fix items herstellen naar channels.telegram.allowFrom in allowlistflows (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, zodat het toegangsbeleid duurzaam in de config staat (in plaats van afhankelijk te zijn van eerdere koppelingsgoedkeuringen).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 config-allowlists.
Als je wilt “ik ben één keer geautoriseerd en zowel DM’s als groepsopdrachten werken”, plaats dan 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 bot van derden):- Stuur je bot een DM.
- Voer
openclaw logs --followuit. - Lees
from.id.
@userinfobot of @getidsbot.Runtime-gedrag
- Telegram is eigendom van het Gateway-proces.
- Routing is deterministisch: inkomende Telegram-berichten antwoorden 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 zijn geïsoleerd per groeps-ID. Forumonderwerpen voegen
:topic:<threadId>toe om onderwerpen geïsoleerd te houden. - DM-berichten kunnen
message_thread_idbevatten; OpenClaw behoudt de thread-ID voor antwoorden maar houdt DM’s standaard op de vlakke sessie. Configureerchannels.telegram.dm.threadReplies: "inbound",channels.telegram.direct.<chatId>.threadReplies: "inbound",requireTopic: trueof een overeenkomende onderwerpconfig wanneer je bewust DM-onderwerpsessie-isolatie wilt. - Long polling gebruikt grammY runner met sequencing per chat/per thread. De algehele runner-sinkconcurrency gebruikt
agents.defaults.maxConcurrent. - Long polling wordt binnen elk Gateway-proces bewaakt, 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 hetzelfde token. - Herstarts van 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 langlopend werk. De waarde is in milliseconden en is toegestaan van30000tot600000; overrides per account worden ondersteund. - Telegram Bot API ondersteunt geen leesbevestigingen (
sendReadReceiptsis niet van toepassing).
Functiereferentie
Live stream preview (message edits)
Live stream preview (message edits)
- directe chats: voorbeeldbericht +
editMessageText - groepen/onderwerpen: voorbeeldbericht +
editMessageText
channels.telegram.streamingisoff | partial | block | progress(standaard:partial)progressbehoudt één bewerkbaar statusconcept voor toolvoortgang, wist dit bij voltooiing en verzendt het uiteindelijke antwoord als een normaal berichtstreaming.preview.toolProgressbepaalt of tool-/voortgangsupdates hetzelfde bewerkte voorbeeldbericht opnieuw gebruiken (standaard:truewanneer voorbeeldstreaming actief is)streaming.preview.commandTextbepaalt opdracht-/exec-details binnen die toolvoortgangsregels:raw(standaard, behoudt uitgebracht gedrag) ofstatus(alleen toollabel)- verouderde waarden
channels.telegram.streamModeen booleaansestreaming-waarden worden gedetecteerd; voeropenclaw doctor --fixuit om ze te migreren naarchannels.telegram.streaming.mode
v2026.4.22 en later. Stel het volgende in om het bewerkte voorbeeld voor antwoordtekst te behouden maar toolvoortgangsregels te verbergen:progress wanneer u zichtbare toolvoortgang wilt zonder het uiteindelijke antwoord in datzelfde bericht te bewerken. Plaats het beleid voor opdrachttekst onder streaming.progress:streaming.mode: "off" alleen wanneer u uitsluitend uiteindelijke levering wilt: Telegram-voorbeeldbewerkingen zijn uitgeschakeld en generieke tool-/voortgangspraat wordt onderdrukt in plaats van als zelfstandige statusberichten te worden verzonden. Goedkeuringsprompts, media-payloads en fouten lopen nog steeds via normale uiteindelijke levering. Gebruik streaming.preview.toolProgress: false wanneer u alleen antwoordvoorbeeldbewerkingen wilt behouden terwijl u de statusregels voor toolvoortgang verbergt.replyToMode "first", "all" of "batched" is en het inkomende bericht geselecteerde citaattekst bevat, verzendt OpenClaw het uiteindelijke antwoord via het native citaat-antwoordpad van Telegram in plaats van het antwoordvoorbeeld te bewerken, zodat streaming.preview.toolProgress de korte statusregels voor die beurt niet kan tonen. Antwoorden op het huidige bericht zonder geselecteerde citaattekst behouden nog steeds voorbeeldstreaming. Stel replyToMode: "off" in wanneer zichtbaarheid van toolvoortgang belangrijker is dan native citaatantwoorden, of stel streaming.preview.toolProgress: false in om de afweging te erkennen.- korte voorbeelden in DM/groep/topic: OpenClaw behoudt hetzelfde voorbeeldbericht en voert de uiteindelijke bewerking ter plaatse uit
- lange tekstfinales die in meerdere Telegram-berichten worden opgesplitst, gebruiken het bestaande voorbeeld waar mogelijk opnieuw als het eerste uiteindelijke deel en verzenden daarna alleen de resterende delen
- finales in voortgangsmodus wissen het statusconcept en gebruiken normale uiteindelijke levering in plaats van het concept in het antwoord te bewerken
- als de uiteindelijke bewerking mislukt voordat de voltooide tekst is bevestigd, gebruikt OpenClaw normale uiteindelijke levering en ruimt het verouderde voorbeeld op
/reasoning streamverzendt redenering naar het livevoorbeeld tijdens het genereren- het redeneringsvoorbeeld wordt verwijderd na uiteindelijke levering; gebruik
/reasoning onwanneer redenering zichtbaar moet blijven - het uiteindelijke antwoord wordt zonder redeneringstekst verzonden
Opmaak en HTML-fallback
Opmaak en HTML-fallback
parse_mode: "HTML".- Markdown-achtige tekst wordt gerenderd naar Telegram-veilige HTML.
- Ondersteunde Telegram-HTML-tags blijven behouden; niet-ondersteunde HTML wordt geëscapet.
- Als Telegram geparste HTML weigert, probeert OpenClaw het opnieuw als platte tekst.
channels.telegram.linkPreview: false.Native opdrachten en aangepaste opdrachten
Native opdrachten en aangepaste opdrachten
setMyCommands.Standaarden voor native opdrachten:commands.native: "auto"schakelt native opdrachten in voor Telegram
- namen worden genormaliseerd (voorloop-
/verwijderen, naar kleine letters) - geldig patroon:
a-z,0-9,_, lengte1..32 - aangepaste opdrachten kunnen native opdrachten niet overschrijven
- conflicten/duplicaten worden overgeslagen en gelogd
- aangepaste opdrachten zijn alleen menu-items; ze implementeren niet automatisch gedrag
- plugin-/skill-opdrachten kunnen nog steeds werken wanneer ze worden getypt, zelfs als ze niet in het Telegram-menu worden weergegeven
setMyCommands failedmetBOT_COMMANDS_TOO_MUCHbetekent dat het Telegram-menu na inkorten nog steeds te vol was; verminder plugin-/skill-/aangepaste opdrachten of schakelchannels.telegram.commands.nativeuit.deleteWebhook,deleteMyCommandsofsetMyCommandsdie mislukt met404: Not Foundterwijl directe Bot API-curlopdrachten werken, kan betekenen datchannels.telegram.apiRootwas ingesteld op het volledige/bot<TOKEN>-eindpunt.apiRootmag alleen de Bot API-root zijn, enopenclaw doctor --fixverwijdert een per ongeluk toegevoegde 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, zodat dit niet als een webhook-opruimfout wordt gerapporteerd.setMyCommands failedmet netwerk-/fetchfouten betekent meestal dat uitgaande DNS/HTTPS naarapi.telegram.orgis geblokkeerd.
Opdrachten voor apparaatkoppeling (device-pair-plugin)
Wanneer de device-pair-plugin is geïnstalleerd:/pairgenereert installatiecode- plak code in iOS-app
/pair pendinggeeft openstaande aanvragen weer (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: []; elke overgedragen operatortoken blijft beperkt tot operator.approvals, operator.read, operator.talk.secrets en operator.write. Bootstrap-scopecontroles zijn voorzien van een rolprefix, dus die operator-allowlist voldoet alleen aan operatoraanvragen; niet-operatorrollen hebben nog steeds scopes nodig onder hun eigen rolprefix.Als een apparaat opnieuw probeert met gewijzigde auth-details (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: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,content)createForumTopic(chatId,name, optioneeliconColor,iconCustomEmojiId)
send, react, delete, edit, sticker, sticker-search, topic-create).Poortwachtercontroles: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 config-/secretssnapshot (opstarten/herladen), dus actiepaden voeren geen ad-hoc SecretRef-herresolutie per verzending uit.Semantiek voor het verwijderen van reacties: /tools/reactionsTags voor antwoordthreads
Tags voor antwoordthreads
Forumtopics en threadgedrag
Forumtopics en threadgedrag
- topic-sessiesleutels voegen
:topic:<threadId>toe - antwoorden en typen richten zich op de topicthread
- configuratiepad voor topic:
channels.telegram.groups.<chatId>.topics.<threadId>
threadId=1):- berichtverzendingen laten
message_thread_idweg (Telegram weigertsendMessage(...thread_id=1)) - typeacties bevatten nog steeds
message_thread_id
requireMention, allowFrom, skills, systemPrompt, enabled, groupPolicy).
agentId is alleen voor topics en erft niet van groepsstandaarden.Agentroutering per topic: Elk topic kan naar een andere agent routeren door agentId in de topicconfiguratie in te stellen. Dit geeft elk topic 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 getypte ACP-bindingen op topniveau (bindings[] met type: "acp" en match.channel: "telegram", peer.kind: "group", en een onderwerp-gekwalificeerde id zoals -1001234567890:topic:42). Momenteel beperkt tot forumonderwerpen in groepen/supergroepen. Zie ACP Agents.Thread-gebonden ACP-spawn vanuit chat: /acp spawn <agent> --thread here|auto bindt het huidige onderwerp aan een nieuwe ACP-sessie; vervolgberichten worden daar rechtstreeks naartoe gerouteerd. OpenClaw zet de spawnbevestiging vast in het onderwerp. Vereist dat channels.telegram.threadBindings.spawnSessions ingeschakeld blijft (standaard: true).De templatecontext stelt MessageThreadId en IsForum beschikbaar. DM-chats met message_thread_id behouden standaard DM-routering en antwoordmetadata op platte sessies; ze gebruiken alleen thread-bewuste sessiesleutels wanneer ze zijn geconfigureerd met threadReplies: "inbound", threadReplies: "always", requireTopic: true, of een overeenkomende onderwerpconfiguratie. Gebruik channels.telegram.dm.threadReplies op topniveau voor de accountstandaard, of direct.<chatId>.threadReplies voor één DM.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 - inkomende transcripties van spraaknotities worden in de agentcontext omlijst als machinaal gegenereerde, niet-vertrouwde tekst; vermeldingsdetectie gebruikt nog steeds de ruwe transcriptie, zodat vermeldingsgebonden spraakberichten blijven werken.
Videoberichten
Telegram maakt onderscheid tussen videobestanden en videonotities.Voorbeeld van berichtactie:Stickers
Afhandeling van inkomende stickers:- statische WEBP: gedownload en verwerkt (placeholder
<media:sticker>) - geanimeerde TGS: overgeslagen
- video-WEBM: overgeslagen
Sticker.emojiSticker.setNameSticker.fileIdSticker.fileUniqueIdSticker.cachedDescription
~/.openclaw/telegram/sticker-cache.json
Reactiemeldingen
Reactiemeldingen
message_reaction-updates (los van berichtpayloads).Wanneer dit is ingeschakeld, plaatst 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 de cache voor verzonden berichten).- Reactiegebeurtenissen respecteren nog steeds Telegram-toegangscontroles (
dmPolicy,allowFrom,groupPolicy,groupAllowFrom); onbevoegde afzenders worden genegeerd. - Telegram levert geen thread-ID’s in reactie-updates.
- niet-forumgroepen routeren naar de groepschatsessie
- forumgroepen routeren 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 bevestigings-emoji terwijl OpenClaw een inkomend bericht verwerkt.Resolutievolgorde:channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- fallback naar de emoji van de agentidentiteit (
agents.list[].identity.emoji, anders ”👀”)
- Telegram verwacht unicode-emoji (bijvoorbeeld ”👀”).
- Gebruik
""om de reactie voor een kanaal of account uit te schakelen.
Configuratieschrijfacties vanuit Telegram-gebeurtenissen en -opdrachten
Configuratieschrijfacties vanuit Telegram-gebeurtenissen en -opdrachten
configWrites !== false).Door Telegram getriggerde schrijfacties omvatten:- groepsmigratiegebeurtenissen (
migrate_to_chat_id) omchannels.telegram.groupsbij te werken /config seten/config unset(vereist dat opdrachten zijn ingeschakeld)
Long polling versus webhook
Long polling versus webhook
channels.telegram.webhookUrl en channels.telegram.webhookSecret in; optioneel webhookPath, webhookHost, webhookPort (standaardwaarden /telegram-webhook, 127.0.0.1, 8787).In de long-pollingmodus bewaart OpenClaw de herstartwatermark pas nadat een update succesvol is verzonden. Als een handler faalt, blijft die update opnieuw probeerbaar in hetzelfde proces en wordt die niet als voltooid weggeschreven voor herstartdeduplicatie.De lokale listener bindt aan 127.0.0.1:8787. Plaats voor publieke ingress een reverse proxy vóór de lokale poort, of stel bewust webhookHost: "0.0.0.0" in.De webhookmodus valideert request-guards, het Telegram-geheime token en de JSON-body voordat 200 aan Telegram wordt geretourneerd.
OpenClaw verwerkt de update daarna asynchroon via dezelfde per-chat/per-onderwerp botlanes die door long polling worden gebruikt, zodat trage agentbeurten de afleverings-ACK van Telegram niet vasthouden.Limieten, opnieuw proberen en CLI-doelen
Limieten, opnieuw proberen en CLI-doelen
channels.telegram.textChunkLimitis standaard 4000.channels.telegram.chunkMode="newline"geeft de voorkeur aan alineagrenzen (lege regels) vóór splitsing op lengte.channels.telegram.mediaMaxMb(standaard 100) begrenst de grootte van inkomende en uitgaande Telegram-media.channels.telegram.mediaGroupFlushMs(standaard 500) bepaalt hoelang Telegram-albums/mediagroepen worden gebufferd voordat OpenClaw ze als één inkomend bericht verzendt. Verhoog dit als albumdelen laat aankomen; verlaag dit om albumantwoordlatentie te verminderen.channels.telegram.timeoutSecondsoverschrijft de timeout van de Telegram API-client (als dit niet is ingesteld, geldt de grammY-standaard). Botclients klemmen geconfigureerde waarden onder de 60-secondenrequest-guard voor uitgaande tekst/typen, zodat grammY de zichtbare antwoordaflevering niet afbreekt voordat de transport-guard en fallback van OpenClaw kunnen draaien. Long polling gebruikt nog steeds een 45-secondenrequest-guard voorgetUpdates, zodat inactieve polls niet onbeperkt worden verlaten.channels.telegram.pollingStallThresholdMsis standaard120000; stel alleen af tussen30000en600000voor fout-positieve herstarts door polling-stalls.- groepscontexthistorie gebruikt
channels.telegram.historyLimitofmessages.groupChat.historyLimit(standaard 50);0schakelt dit uit. - aanvullende context voor antwoord/citaat/doorsturen wordt genormaliseerd naar één geselecteerd conversatiecontextvenster wanneer de gateway de bovenliggende berichten heeft waargenomen; de cache voor waargenomen berichten wordt naast de sessieopslag bewaard. Telegram bevat slechts één oppervlakkige
reply_to_messagein updates, dus ketens die ouder zijn dan de cache zijn beperkt tot de huidige updatepayload van Telegram. - Telegram-allowlists begrenzen primair wie de agent kan triggeren, niet een volledige redactieboundary voor aanvullende context.
- DM-historiebesturing:
channels.telegram.dmHistoryLimitchannels.telegram.dms["<user_id>"].historyLimit
- De configuratie
channels.telegram.retryis van toepassing op Telegram-verzendhelpers (CLI/tools/acties) voor herstelbare uitgaande API-fouten. Aflevering van inkomende eindantwoorden gebruikt ook een begrensde safe-send-retry voor Telegram-pre-connect-fouten, maar probeert ambigue post-send-netwerkenveloppen die zichtbare berichten kunnen dupliceren niet opnieuw.
openclaw message poll en ondersteunen forumonderwerpen:--poll-duration-seconds(5-600)--poll-anonymous--poll-public--thread-idvoor forumonderwerpen (of gebruik een:topic:-doel)
--presentationmetbuttons-blokken voor inline keyboards wanneerchannels.telegram.capabilities.inlineButtonsdit toestaat--pinof--delivery '{"pin":true}'om vastgezette aflevering 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 als gecomprimeerde foto-, geanimeerde-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 oplosbaar is)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 deze normale antwoorden naartoe stuurt. Ze maken iemand geen exec-goedkeurder. De eerste goedgekeurde DM-koppeling bootstrapt commands.ownerAllowFrom wanneer er nog geen opdrachteigenaar bestaat, zodat de installatie met één eigenaar nog steeds werkt zonder ID’s te dupliceren onder execApprovals.approvers.Kanaalaflevering toont de opdrachttekst in de chat; schakel channel of both alleen in vertrouwde groepen/onderwerpen in. Wanneer de prompt in een forumonderwerp terechtkomt, behoudt OpenClaw het onderwerp voor de goedkeuringsprompt en het vervolg. 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 prefix plugin: worden opgelost via Plugin-goedkeuringen; andere worden eerst via exec-goedkeuringen opgelost.Zie Exec approvals.Instellingen voor foutantwoorden
Wanneer de agent een bezorgings- of providerfout tegenkomt, kan Telegram antwoorden met de fouttekst of deze onderdrukken. Twee configuratiesleutels bepalen dit gedrag:| Sleutel | Waarden | Standaard | Beschrijving |
|---|---|---|---|
channels.telegram.errorPolicy | reply, silent | reply | reply stuurt een vriendelijke foutmelding naar de chat. silent onderdrukt foutantwoorden volledig. |
channels.telegram.errorCooldownMs | getal (ms) | 60000 | Minimale tijd tussen foutantwoorden naar dezelfde chat. Voorkomt foutspam tijdens storingen. |
Probleemoplossing
Bot does not respond to non mention group messages
Bot does not respond to non mention group messages
- Als
requireMention=false, moet de privacymodus van Telegram volledige zichtbaarheid toestaan.- BotFather:
/setprivacy-> Disable - verwijder de bot daarna uit de groep en voeg deze opnieuw toe
- BotFather:
openclaw channels statuswaarschuwt wanneer de configuratie niet-genoemde groepsberichten verwacht.openclaw channels status --probekan expliciete numerieke groeps-ID’s controleren; wildcard"*"kan niet op lidmaatschap worden gecontroleerd.- snelle sessietest:
/activation always.
Bot not seeing group messages at all
Bot not seeing group messages at all
- wanneer
channels.telegram.groupsbestaat, moet de groep worden vermeld (of"*"bevatten) - controleer het botlidmaatschap in de groep
- bekijk logs:
openclaw logs --followvoor redenen waarom iets wordt overgeslagen
Commands work partially or not at all
Commands work partially or not at all
- autoriseer je afzenderidentiteit (koppeling en/of numerieke
allowFrom) - commandoautorisatie blijft van toepassing, zelfs wanneer het groepsbeleid
openis setMyCommands failedmetBOT_COMMANDS_TOO_MUCHbetekent dat het native menu te veel items heeft; verminder plugin-/skill-/aangepaste commando’s of schakel native menu’s uitdeleteMyCommands/setMyCommands-aanroepen bij opstarten ensendChatAction-typaanroepen zijn begrensd en proberen één keer opnieuw via Telegram’s transportfallback bij een request-time-out. Aanhoudende netwerk-/fetchfouten wijzen meestal op DNS-/HTTPS-bereikbaarheidsproblemen naarapi.telegram.org
Startup reports unauthorized token
Startup reports unauthorized token
Polling or network instability
Polling or network instability
- Node 22+ + aangepaste fetch/proxy kan direct afbreekgedrag veroorzaken als AbortSignal-typen niet overeenkomen.
- Sommige hosts lossen
api.telegram.orgeerst op naar IPv6; kapotte 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 het starten van polling hergebruikt OpenClaw de succesvolle opstartprobe
getMevoor grammY, zodat de runner geen tweedegetMenodig heeft vóór de eerstegetUpdates. - Als
deleteWebhookfaalt met een tijdelijke netwerkfout tijdens het starten van polling, 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 daarna het Telegram-transport opnieuw op en probeert de Webhook-opruiming opnieuw. - Als Telegram-sockets op een korte vaste cadans worden gerecycled, controleer dan op een lage
channels.telegram.timeoutSeconds; botclients klemmen geconfigureerde waarden onder de uitgaande engetUpdates-requestguards, maar oudere releases konden elke poll of elk antwoord afbreken wanneer dit onder die guards was ingesteld. - Als logs
Polling stall detectedbevatten, herstart OpenClaw polling en bouwt het Telegram-transport opnieuw op na standaard 120 seconden zonder voltooide long-poll-liveness. openclaw channels status --probeenopenclaw doctorwaarschuwen wanneer een actief pollingaccount na de opstartgratie geengetUpdatesheeft voltooid, wanneer een actief Webhook-account na de opstartgratie geensetWebhookheeft voltooid, of wanneer de laatste succesvolle polling-transportactiviteit verouderd is.- Verhoog
channels.telegram.pollingStallThresholdMsalleen wanneer langlopendegetUpdates-aanroepen gezond zijn, maar je host nog steeds onterechte 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 IPv4-only-gedrag, forceer dan familieselectie:
- RFC 2544-antwoorden uit het 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/special-use-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/auth:
enabled,botToken,tokenFile,accounts.*(tokenFilemoet naar een regulier bestand wijzen; symlinks worden geweigerd) - toegangscontrole:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,groups.*.topics.*, top-levelbindings[](type: "acp") - exec-goedkeuringen:
execApprovals,accounts.*.execApprovals - commando/menu:
commands.native,commands.nativeSkills,customCommands - threading/antwoorden:
replyToMode,dm.threadReplies,direct.*.threadReplies - streaming:
streaming(preview),streaming.preview.toolProgress,blockStreaming - opmaak/bezorging:
textChunkLimit,chunkMode,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 - schrijfbewerkingen/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. Benoemde accounts erven channels.telegram.allowFrom / groupAllowFrom, maar niet de waarden van accounts.default.*.