Productieklaar voor bot-DM’s en groepen via grammY. Long polling is de standaardmodus; webhookmodus is optioneel.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Koppelen
Probleemoplossing voor kanalen
Gateway-configuratie
Snelle configuratie
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.TELEGRAM_BOT_TOKEN geldt alleen voor het standaardaccount.Instellingen aan Telegram-zijde
Privacymodus en groepszichtbaarheid
Privacymodus en groepszichtbaarheid
- schakel privacymodus uit via
/setprivacy, of - maak de bot groepsbeheerder.
Groepsmachtigingen
Groepsmachtigingen
Nuttige BotFather-schakelaars
Nuttige BotFather-schakelaars
/setjoingroupsom toevoegen aan groepen toe te staan of te weigeren/setprivacyvoor gedrag rond groepszichtbaarheid
Toegangsbeheer en activering
- DM-beleid
- Groepsbeleid en allowlists
- Vermeldingsgedrag
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. Prefixen telegram: / tg: worden geaccepteerd en genormaliseerd.
In configuraties met meerdere accounts wordt een beperkende channels.telegram.allowFrom op topniveau behandeld als een veiligheidsgrens: accountniveauvermeldingen 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 geweigerd door configvalidatie.
Setup vraagt alleen om numerieke gebruikers-ID’s.
Als je hebt geüpgraded en je config @username-allowlistvermeldingen 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 pairing-store, kan openclaw doctor --fix vermeldingen 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 config vast te leggen (in plaats van afhankelijk te zijn van eerdere koppelingsgoedkeuringen).Veelvoorkomende verwarring: goedkeuring voor 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 opdrachten alleen voor eigenaren en exec-goedkeuringen een expliciet operatoraccount hebben.
Autorisatie van groepsafzenders komt nog steeds uit expliciete config-allowlists.
Als je wilt “ik ben één keer geautoriseerd en zowel DM’s als groepsopdrachten werken”, zet dan je numerieke Telegram-gebruikers-ID in channels.telegram.allowFrom; zorg er voor opdrachten alleen voor eigenaren 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 gatewayproces.
- Routering is deterministisch: Telegram-inbound antwoordt terug naar Telegram (het model kiest geen kanalen).
- Inbound 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. Forumtopics voegen
:topic:<threadId>toe om topics 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 topicconfig wanneer je bewust DM-topic-sessie-isolatie wilt. - Long polling gebruikt grammY runner met sequencing per chat/per thread. De algemene runner-sinkconcurrency gebruikt
agents.defaults.maxConcurrent. - Long polling wordt binnen elk gatewayproces 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. - Long-polling-watchdog-herstarts worden standaard geactiveerd na 120 seconden zonder voltooide
getUpdates-liveness. Verhoogchannels.telegram.pollingStallThresholdMsalleen als je deployment nog steeds onterechte 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 leesbevestigingen (
sendReadReceiptsis niet van toepassing).
Functiereferentie
Livestreamvoorbeeld (berichtbewerkingen)
Livestreamvoorbeeld (berichtbewerkingen)
- directe chats: voorbeeldbericht +
editMessageText - groepen/topics: voorbeeldbericht +
editMessageText
channels.telegram.streamingisoff | partial | block | progress(standaard:partial)progresshoudt één bewerkbare statusconcepttekst bij voor toolvoortgang, wist die bij voltooiing en verzendt het definitieve antwoord als normaal berichtstreaming.preview.toolProgressbepaalt of tool-/voortgangsupdates hetzelfde bewerkte voorbeeldbericht hergebruiken (standaard:truewanneer preview-streaming 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 je zichtbare toolvoortgang wilt zonder het definitieve antwoord in datzelfde bericht te bewerken. Zet het commandotekstbeleid onder streaming.progress:streaming.mode: "off" alleen wanneer je uitsluitend definitieve levering wilt: Telegram-previewbewerkingen worden uitgeschakeld en generieke tool-/voortgangsberichten worden onderdrukt in plaats van als losse statusberichten te worden verzonden. Goedkeuringsprompts, media-payloads en fouten lopen nog steeds via normale definitieve levering. 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 citaattekst bevat, verzendt OpenClaw het definitieve antwoord via Telegram’s native citaatantwoordpad 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 citaattekst behouden previewstreaming nog steeds. 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 DM-/groep-/topic-previews: OpenClaw behoudt hetzelfde previewbericht en voert de definitieve bewerking ter plekke uit
- lange definitieve teksten die in meerdere Telegram-berichten worden opgesplitst, hergebruiken waar mogelijk de bestaande preview als eerste definitieve chunk en verzenden daarna alleen de resterende chunks
- definitieve antwoorden in voortgangsmodus wissen het statusconcept en gebruiken normale definitieve levering in plaats van het concept in het 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 streamverzendt redenering naar de live preview tijdens het genereren- de redeneerpreview wordt verwijderd na definitieve levering; gebruik
/reasoning onwanneer redenering zichtbaar moet blijven - het definitieve antwoord wordt zonder redeneertekst verzonden
Opmaak en HTML-terugval
Opmaak en HTML-terugval
parse_mode: "HTML".- Markdown-achtige tekst wordt gerenderd naar Telegram-veilige HTML.
- Ruwe model-HTML wordt ge-escaped om Telegram-parsefouten te verminderen.
- Als Telegram geparsede HTML weigert, probeert OpenClaw het opnieuw als platte tekst.
channels.telegram.linkPreview: false.Native commando's en aangepaste commando's
Native commando's en aangepaste commando's
setMyCommands.Standaardinstellingen 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 gedrag niet automatisch
- plugin-/skill-commando’s 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 commando’s of schakelchannels.telegram.commands.nativeuit.- Als
deleteWebhook,deleteMyCommandsofsetMyCommandsfaalt met404: Not Foundterwijl directe Bot API-curlcommando’s werken, kan dat betekenen datchannels.telegram.apiRootis ingesteld op het volledige/bot<TOKEN>-endpoint.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 het pollen, dus dit wordt niet gerapporteerd 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 installatiecode- 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: []; elke overgedragen operatortoken blijft beperkt tot operator.approvals, operator.read, operator.talk.secrets en operator.write. Bootstrap-scopecontroles hebben een rolprefix, dus die operatorallowlist voldoet alleen aan operatoraanvragen; niet-operatorrollen hebben nog steeds scopes nodig onder hun eigen rolprefix.Als een apparaat het opnieuw probeert met gewijzigde authgegevens (bijvoorbeeld rol/scopes/openbare 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 gemapt naar 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).Gatekeepingbesturing: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.*-toggles.
Runtimeverzending gebruikt de actieve config-/secretssnapshot (opstarten/herladen), dus actiepaden voeren geen ad-hoc heroplossing van SecretRef per verzending uit.Semantiek voor verwijderen van reacties: /tools/reactionsAntwoord-threadingtags
Antwoord-threadingtags
Forumtopics en threadgedrag
Forumtopics en threadgedrag
- topicsessiesleutels voegen
:topic:<threadId>toe - antwoorden en typen richten zich op de topicthread
- pad voor topicconfiguratie:
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.Routering per topic naar agent: Elk topic kan naar een andere agent routeren door agentId in de topicconfiguratie in te stellen. Dit geeft elk topic zijn eigen geïsoleerde workspace, geheugen en sessie. Voorbeeld:agent:zu:telegram:group:-1001234567890:topic:3Persistente ACP-topicbinding: Forumtopics kunnen ACP-harnesssessies vastzetten via top-level getypeerde ACP-bindingen (bindings[] met type: "acp" en match.channel: "telegram", peer.kind: "group" en een topicgekwalificeerde id zoals -1001234567890:topic:42). Momenteel beperkt tot forumtopics in groepen/supergroepen. Zie ACP Agents.Threadgebonden ACP-spawn vanuit chat: /acp spawn <agent> --thread here|auto bindt het huidige topic aan een nieuwe ACP-sessie; vervolgberichten worden daar direct heen gerouteerd. OpenClaw zet de spawnbevestiging vast in het topic. 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 vlakke sessies; ze gebruiken alleen thread-bewuste sessiesleutels wanneer ze zijn geconfigureerd met threadReplies: "inbound", threadReplies: "always", requireTopic: true, of een overeenkomende topicconfiguratie. 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 agentantwoord om verzenden als spraaknotitie af te dwingen - inkomende transcripties van spraaknotities worden als machinaal gegenereerde, niet-vertrouwde tekst in de agentcontext geplaatst; vermeldingsdetectie gebruikt nog steeds de ruwe transcriptie zodat door vermeldingen gated 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 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 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-topicsessie van de groep (
:topic:1), niet naar het exacte oorspronkelijke topic
allowed_updates voor polling/Webhook bevat automatisch message_reaction.Ack-reacties
Ack-reacties
ackReaction verzendt een bevestigingsemoji terwijl OpenClaw een inkomend bericht verwerkt.Resolutievolgorde: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.
Configuratieschrijfacties vanuit Telegram-gebeurtenissen en -commando's
Configuratieschrijfacties 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 (standaardwaarden /telegram-webhook, 127.0.0.1, 8787).In long-polling-modus bewaart OpenClaw zijn herstart-watermark pas nadat een update succesvol is gedispatcht. Als een handler faalt, blijft die update in hetzelfde proces opnieuw te proberen en wordt deze niet als voltooid weggeschreven voor herstart-deduplicatie.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.Webhook-modus valideert requestguards, het geheime Telegram-token en de JSON-body voordat 200 aan Telegram wordt geretourneerd.
OpenClaw verwerkt de update daarna asynchroon via dezelfde botlanes per chat/per topic die long polling gebruikt, zodat trage agentbeurten de afleverings-ACK van Telegram niet ophouden.Limieten, opnieuw proberen en CLI-targets
Limieten, opnieuw proberen en CLI-targets
channels.telegram.textChunkLimitis standaard 4000.channels.telegram.chunkMode="newline"geeft de voorkeur aan alineagrenzen (lege regels) vóór splitsen op lengte.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 het om de antwoordlatentie voor albums te verminderen.channels.telegram.timeoutSecondsoverschrijft de time-out van de Telegram API-client (indien niet ingesteld, geldt de grammY-standaard). Botclients klemmen geconfigureerde waarden onder de 60-seconden requestguard voor uitgaande tekst/typen zodat grammY zichtbare antwoordaflevering niet afbreekt voordat de transportguard en fallback van OpenClaw kunnen worden uitgevoerd. Long polling gebruikt nog steeds een 45-secondengetUpdates-requestguard zodat idle polls niet onbeperkt worden verlaten.channels.telegram.pollingStallThresholdMsis standaard120000; stem alleen tussen30000en600000af voor fout-positieve herstarts bij polling-stalls.- groepscontexthistorie gebruikt
channels.telegram.historyLimitofmessages.groupChat.historyLimit(standaard 50);0schakelt uit. - aanvullende context voor antwoorden/citaten/doorsturen wordt genormaliseerd in één geselecteerd gesprekscontextvenster wanneer de Gateway de bovenliggende berichten heeft waargenomen; de cache met waargenomen berichten wordt naast de sessiestore bewaard. Telegram neemt slechts één ondiepe
reply_to_messageop in updates, dus ketens ouder dan de cache zijn beperkt tot de huidige updatepayload van Telegram. - Telegram-allowlists regelen primair wie de agent kan triggeren, niet een volledige grens voor redactie van aanvullende context.
- DM-historiecontroles:
channels.telegram.dmHistoryLimitchannels.telegram.dms["<user_id>"].historyLimit
- De configuratie
channels.telegram.retrygeldt voor Telegram-verzendhelpers (CLI/tools/acties) bij herstelbare uitgaande API-fouten. Aflevering van inkomende eindantwoorden gebruikt ook een begrensde safe-send retry voor Telegram-preconnectfouten, maar probeert geen ambiguë post-send netwerk-enveloppen 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:-target)
--presentationmetbuttons-blokken voor inline toetsenborden wanneerchannels.telegram.capabilities.inlineButtonsdit toestaat--pinof--delivery '{"pin":true}'om vastgepinde aflevering aan te vragen wanneer de bot in die chat kan pinnen--force-documentom uitgaande afbeeldingen en GIF’s als documenten te verzenden in plaats van als gecomprimeerde foto of animated-media 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 deze normale antwoorden verzendt. Ze maken iemand geen exec-goedkeurder. De eerste goedgekeurde DM-koppeling bootstrapt commands.ownerAllowFrom wanneer er nog geen commando-eigenaar bestaat, zodat de één-eigenaar-installatie nog steeds werkt zonder ID’s te dupliceren onder execApprovals.approvers.Kanaalaflevering toont de commandotekst in de chat; schakel channel of both alleen in voor vertrouwde groepen/topics. Wanneer de prompt in een forumtopic terechtkomt, behoudt OpenClaw het topic voor de goedkeuringsprompt en de follow-up. Exec-goedkeuringen verlopen standaard na 30 minuten.Inline goedkeuringsknoppen vereisen ook dat channels.telegram.capabilities.inlineButtons het targetoppervlak 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-goedkeuringen.Foutantwoordcontroles
Wanneer de agent een afleverings- 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 verzendt 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 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-> Disable - verwijder daarna de bot uit de groep en voeg deze opnieuw toe
- BotFather:
openclaw channels statuswaarschuwt wanneer de configuratie groepsberichten zonder vermelding verwacht.openclaw channels status --probekan expliciete numerieke groeps-ID’s controleren; jokerteken"*"kan niet op lidmaatschap worden gecontroleerd.- 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"*"zijn opgenomen) - controleer of de bot lid is van de groep
- bekijk logs:
openclaw logs --followvoor redenen waarom berichten worden overgeslagen
Opdrachten werken gedeeltelijk of helemaal niet
Opdrachten werken gedeeltelijk of helemaal niet
- autoriseer je afzenderidentiteit (koppeling en/of numerieke
allowFrom) - opdracht-autorisatie 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-opstartaanroepen ensendChatAction-typaanduidingsaanroepen zijn begrensd en proberen één keer opnieuw via de transport-fallback van Telegram bij een request-time-out. Aanhoudende netwerk-/fetch-fouten wijzen meestal op problemen met DNS-/HTTPS-bereikbaarheid naarapi.telegram.org
Opstarten meldt niet-geautoriseerd token
Opstarten meldt niet-geautoriseerd token
getMe returned 401is een Telegram-authenticatiefout voor het geconfigureerde bottoken.- Kopieer het bottoken opnieuw of genereer het 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 het opstarten is ook een authenticatiefout; dit behandelen als “er bestaat geen webhook” zou dezelfde fout door een ongeldig token alleen uitstellen tot latere API-aanroepen.
Polling- of netwerkinstabiliteit
Polling- of netwerkinstabiliteit
- Node 22+ + aangepaste fetch/proxy kan direct 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 het starten van polling hergebruikt OpenClaw de succesvolle
getMe-probe van het opstarten voor grammY, zodat de runner geen tweedegetMenodig heeft vóór de eerstegetUpdates. - Als
deleteWebhooktijdens het starten van polling mislukt met een tijdelijke netwerkfout, gaat OpenClaw door met long polling in plaats van nog een control-plane-aanroep vóór polling te doen. Een nog actieve Webhook verschijnt als eengetUpdates-conflict; OpenClaw bouwt daarna het Telegram-transport opnieuw op en probeert webhook-opruiming opnieuw. - Als Telegram-sockets op een korte vaste cadans worden gerecycled, controleer dan op een lage
channels.telegram.timeoutSeconds; botclients begrenzen geconfigureerde waarden onder de outbound- engetUpdates-requestguards, maar oudere releases konden elke poll of reply afbreken wanneer dit onder die guards was ingesteld. - Als logs
Polling stall detectedbevatten, start OpenClaw polling opnieuw en bouwt het Telegram-transport opnieuw op na standaard 120 seconden zonder voltooide long-poll-liveness. openclaw channels status --probeenopenclaw doctorwaarschuwen wanneer een actief polling-account na de opstart-grace geengetUpdatesheeft voltooid, wanneer een actief Webhook-account na de opstart-grace 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 proces-proxy-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 resultaatvolgorde van Telegram-DNS respecteertOPENCLAW_TELEGRAM_DNS_RESULT_ORDER, daarnachannels.telegram.network.dnsResultOrder, daarna de processtandaard zoalsNODE_OPTIONS=--dns-result-order=ipv4first; als niets van toepassing is, valt Node 22+ terug opipv4first. - Als je host WSL2 is of expliciet beter werkt met alleen-IPv4-gedrag, dwing dan familieselectie af:
- 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.orgtijdens mediadownloads herschrijft naar een ander prive-/intern/speciaal adres, kun je kiezen voor de alleen-voor-Telegram-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 dan eerst de gevaarlijke vlag 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.Telegram-velden met hoge signaalwaarde
Telegram-velden met hoge signaalwaarde
- opstarten/authenticatie:
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 - opdracht/menu:
commands.native,commands.nativeSkills,customCommands - threads/antwoorden:
replyToMode,dm.threadReplies,direct.*.threadReplies - streaming:
streaming(preview),streaming.preview.toolProgress,blockStreaming - opmaak/levering:
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/mogelijkheden:
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 de eerste genormaliseerde account-ID en waarschuwt openclaw doctor. Benoemde accounts erven waarden van channels.telegram.allowFrom / groupAllowFrom, maar niet van accounts.default.*.