Klaar voor productie 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://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Koppeling
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 Gateway.TELEGRAM_BOT_TOKEN geldt alleen voor het standaardaccount.Instellingen aan Telegram-zijde
Privacymodus en groepszichtbaarheid
Privacymodus en groepszichtbaarheid
- de privacymodus uitschakelen via
/setprivacy, of - de bot groepsbeheerder maken.
Groepsmachtigingen
Groepsmachtigingen
Handige BotFather-schakelaars
Handige BotFather-schakelaars
/setjoingroupsom toevoegen aan groepen toe te staan/te weigeren/setprivacyvoor gedrag rond groepszichtbaarheid
Toegangscontrole en activering
- DM-beleid
- Groepsbeleid en allowlists
- Vermeldingsgedrag
channels.telegram.dmPolicy beheert toegang tot 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 configuraties met meerdere accounts wordt een beperkende bovenliggende channels.telegram.allowFrom behandeld als 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 door configvalidatie geweigerd.
Setup vraagt alleen om numerieke gebruikers-ID’s.
Als je hebt geüpgraded en je configuratie @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 pairing-store, 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, zodat het toegangsbeleid duurzaam in 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 opdrachten voor alleen de eigenaar en exec-goedkeuringen een expliciet operatoraccount hebben.
Autorisatie van groepsafzenders komt nog steeds uit expliciete config-allowlists.
Als je wilt “ik ben eenmaal geautoriseerd en zowel DM’s als groepsopdrachten werken”, zet je numerieke Telegram-gebruikers-ID dan in channels.telegram.allowFrom; zorg er voor opdrachten voor alleen de eigenaar voor dat commands.ownerAllowFrom telegram:<your user id> bevat.Je Telegram-gebruikers-ID vinden
Veiliger (geen externe bot):- DM je bot.
- Voer
openclaw logs --followuit. - Lees
from.id.
@userinfobot of @getidsbot.Runtime-gedrag
- Telegram is eigendom van het Gateway-proces.
- Routering is deterministisch: inkomende Telegram-berichten gaan terug naar Telegram (het model kiest geen kanalen).
- Inkomende berichten worden genormaliseerd naar de gedeelde kanaalenvelop met antwoordmetadata en mediaplaceholders.
- 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 routeert ze met threadbewuste sessiesleutels en behoudt thread-ID voor antwoorden. - Long polling gebruikt grammY runner met sequencing per chat/per thread. De totale 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, een script of een externe poller hetzelfde token. - Watchdog-herstarts voor long polling 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 leesbewijzen (
sendReadReceiptsis niet van toepassing).
Functiereferentie
Live stream-preview (berichtbewerkingen)
Live stream-preview (berichtbewerkingen)
- directe chats: previewbericht +
editMessageText - groepen/topics: previewbericht +
editMessageText
channels.telegram.streamingisoff | partial | block | progress(standaard:partial)progresswordt op Telegram gemapt naarpartial(compatibiliteit met kanaaloverstijgende naamgeving)streaming.preview.toolProgressbepaalt of tool-/voortgangsupdates hetzelfde bewerkte previewbericht hergebruiken (standaard:truewanneer preview-streaming actief is)- verouderde
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 de bewerkte preview voor antwoordtekst te behouden maar toolvoortgangsregels te verbergen:streaming.mode: "off" alleen wanneer je alleen uiteindelijke levering wilt: Telegram-previewbewerkingen worden uitgeschakeld en generieke tool-/voortgangspraat wordt onderdrukt in plaats van als zelfstandige “Bezig…”-berichten verzonden. Goedkeuringsprompts, media-payloads en fouten blijven via normale uiteindelijke levering lopen. Gebruik streaming.preview.toolProgress: false wanneer je alleen antwoordpreviewbewerkingen wilt behouden terwijl je de toolvoortgangsstatusregels verbergt.Voor antwoorden met alleen tekst:- korte voorvertoningen in DM/groep/topic: OpenClaw behoudt hetzelfde voorvertoningsbericht en voert een laatste bewerking op dezelfde plek uit
- voorvertoningen ouder dan ongeveer één minuut: OpenClaw verzendt het voltooide antwoord als een nieuw definitief bericht en ruimt daarna de voorvertoning op, zodat de zichtbare tijdstempel van Telegram de voltooiingstijd weergeeft in plaats van de aanmaaktijd van de voorvertoning
sendMessage + editMessageText.Alleen-Telegram reasoning-stream:/reasoning streamverzendt reasoning naar de live voorvertoning tijdens het genereren- het definitieve antwoord wordt zonder reasoning-tekst 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ëscapet om Telegram-parsefouten te verminderen.
- 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.Standaardwaarden voor native opdrachten:commands.native: "auto"schakelt native opdrachten in voor Telegram
- namen worden genormaliseerd (leidende
/verwijderen, kleine letters) - geldig patroon:
a-z,0-9,_, lengte1..32 - aangepaste opdrachten kunnen native opdrachten niet overschrijven
- conflicten/dubbelen 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 faalt met404: Not Foundterwijl directe Bot API-curlopdrachten werken, kan betekenen datchannels.telegram.apiRootwas 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 het geconfigureerde bottoken heeft geweigerd. WerkbotToken,tokenFileofTELEGRAM_BOT_TOKENbij met het huidige BotFather-token; OpenClaw stopt vóór polling, dus dit wordt niet gerapporteerd als een Webhook-opruimfout.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 een instelcode- plak de code in de iOS-app
/pair pendingtoont openstaande aanvragen (inclusief rol/scopes)- keur de aanvraag goed:
/pair approve <requestId>voor expliciete goedkeuring/pair approvewanneer er maar één openstaande aanvraag is/pair approve latestvoor de meest recente
scopes: []; elk overgedragen operator-token blijft beperkt tot operator.approvals, operator.read, operator.talk.secrets en operator.write. Bootstrap-scopecontroles hebben een rolprefix, dus die operator-allowlist voldoet alleen aan operator-aanvragen; niet-operatorrollen hebben nog steeds scopes nodig onder hun eigen rolprefix.Als een apparaat 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 voordat je goedkeurt.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).Gate-controls: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.
Runtime-verzendingen gebruiken de actieve config-/secrets-snapshot (opstarten/herladen), dus actiepaden voeren geen ad-hoc SecretRef-herresolutie per verzending uit.Semantiek voor het verwijderen van reacties: /tools/reactionsReply-threading-tags
Reply-threading-tags
Forumtopics en threadgedrag
Forumtopics en threadgedrag
- topicsessie-sleutels voegen
:topic:<threadId>toe - replies en typen richten zich op de topicthread
- topicconfiguratiepad:
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 topic-specifiek 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 een eigen geïsoleerde werkruimte, geheugen en sessie. Voorbeeld:agent:zu:telegram:group:-1001234567890:topic:3Persistente ACP-topicbinding: Forumtopics kunnen ACP-harnesssessies vastpinnen via getypte ACP-bindingen op topniveau (bindings[] met type: "acp" en match.channel: "telegram", peer.kind: "group" en een topic-gekwalificeerde id zoals -1001234567890:topic:42). Momenteel beperkt tot forumtopics in groepen/supergroepen. Zie ACP Agents.Thread-gebonden ACP-spawn vanuit chat: /acp spawn <agent> --thread here|auto bindt het huidige topic aan een nieuwe ACP-sessie; vervolgberichten worden daar direct naartoe gerouteerd. OpenClaw pint de spawnbevestiging vast in het topic. Vereist channels.telegram.threadBindings.spawnAcpSessions=true.Templatecontext stelt MessageThreadId en IsForum beschikbaar. DM-chats met message_thread_id behouden DM-routering, maar gebruiken threadbewuste sessiesleutels.Audio, video en stickers
Audio, video en stickers
Audioberichten
Telegram onderscheidt spraaknotities van audiobestanden.- standaard: gedrag voor audiobestanden
- tag
[[audio_as_voice]]in agentantwoord om verzending als spraaknotitie af te dwingen - transcripties van inkomende spraaknotities worden in de agentcontext ingekaderd als machinaal gegenereerde, niet-vertrouwde tekst; vermeldingsdetectie gebruikt nog steeds de ruwe transcriptie, zodat spraakberichten met vermeldingsgate blijven werken.
Videoberichten
Telegram onderscheidt videobestanden van 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 de toegangscontroles van Telegram (
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 bevestigingsemoji terwijl OpenClaw een binnenkomend bericht verwerkt.Volgorde van resolutie: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.
Config-schrijfacties vanuit Telegram-gebeurtenissen en -opdrachten
Config-schrijfacties 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).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 request-guards, het geheime token van Telegram en de JSON-body voordat 200 naar Telegram wordt teruggegeven.
OpenClaw verwerkt de update daarna asynchroon via dezelfde botbanen per chat/per onderwerp die long polling gebruikt, zodat trage agentbeurten de delivery-ACK van Telegram niet blokkeren.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 alinea-grenzen (lege regels) voordat op lengte wordt gesplitst.channels.telegram.mediaMaxMb(standaard 100) begrenst de grootte van inkomende en uitgaande Telegram-media.channels.telegram.timeoutSecondsoverschrijft de time-out van de Telegram API-client (indien niet ingesteld, geldt de grammY-standaard).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 voor reply/quote/forward wordt momenteel doorgegeven zoals ontvangen.
- Telegram-allowlists bepalen primair wie de agent kan triggeren, niet een volledige redactiegrens voor aanvullende context.
- DM-historieknoppen:
channels.telegram.dmHistoryLimitchannels.telegram.dms["<user_id>"].historyLimit
channels.telegram.retry-configuratie geldt voor Telegram-verzendhelpers (CLI/tools/acties) voor herstelbare uitgaande API-fouten. Bezorging van het uiteindelijke inkomende antwoord gebruikt ook een begrensde safe-send-retry voor Telegram-fouten vóór verbinding, maar probeert geen ambigue netwerk-enveloppen na verzending opnieuw die zichtbare berichten kunnen dupliceren.
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 toetsenborden wanneerchannels.telegram.capabilities.inlineButtonsdit toestaat--pinof--delivery '{"pin":true}'om vastgezette bezorging 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 gecomprimeerde foto- of animated-media-uploads
channels.telegram.actions.sendMessage=falseschakelt uitgaande Telegram-berichten uit, inclusief pollschannels.telegram.actions.poll=falseschakelt het aanmaken van Telegram-polls uit terwijl reguliere verzending ingeschakeld blijft
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 verzendt. Ze maken iemand geen exec-goedkeurder. De eerste goedgekeurde DM-koppeling bootstrappt commands.ownerAllowFrom wanneer er nog geen opdrachteigenaar bestaat, zodat de setup met één eigenaar nog steeds werkt zonder ID’s onder execApprovals.approvers te dupliceren.Kanaalbezorging 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 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 prefix plugin: worden via Plugin-goedkeuringen opgelost; andere worden eerst via exec-goedkeuringen opgelost.Zie Exec-goedkeuringen.Foutantwoordinstellingen
Wanneer de agent een bezorgings- of providerfout tegenkomt, kan Telegram antwoorden met de fouttekst of deze onderdrukken. Twee configuratiesleutels regelen 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 de bot daarna 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 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"*"bevatten) - 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 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-startupcalls zijn begrensd en proberen één keer opnieuw via de transportfallback van Telegram bij request-time-out. Aanhoudende netwerk-/fetch-fouten duiden meestal op DNS-/HTTPS-bereikbaarheidsproblemen naarapi.telegram.org
Startup meldt onbevoegd token
Startup meldt onbevoegd 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 startup is ook een authenticatiefout; dit behandelen als “er bestaat geen webhook” zou dezelfde fout door een ongeldig token alleen uitstellen tot latere API-calls.- Als
deleteWebhookmislukt met een tijdelijke netwerkfout tijdens polling-startup, controleert OpenClawgetWebhookInfo; wanneer Telegram een lege Webhook-URL rapporteert, gaat polling door omdat opruiming al is voldaan.
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. - Als logs
Polling stall detectedbevatten, herstart OpenClaw polling en bouwt het standaard de Telegram-transportlaag opnieuw op na 120 seconden zonder voltooide long-poll-liveness. openclaw channels status --probeenopenclaw doctorwaarschuwen wanneer een actief polling-accountgetUpdatesniet heeft voltooid na de opstart-graceperiode, wanneer een actief webhook-accountsetWebhookniet heeft voltooid na de opstart-graceperiode, of wanneer de laatste succesvolle activiteit van de polling-transportlaag verouderd is.- Verhoog
channels.telegram.pollingStallThresholdMsalleen wanneer langlopendegetUpdates-aanroepen gezond zijn maar je host nog steeds valse 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) endnsResultOrder=ipv4first. - Als je host WSL2 is of expliciet beter werkt met alleen-IPv4-gedrag, forceer dan familieselectie:
- RFC 2544-benchmarkbereik-antwoorden (
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 privé/intern/speciaal adres, kun je kiezen voor de alleen-Telegram-bypass:
- Dezelfde opt-in is per account beschikbaar op
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork. - Als je proxy Telegram-mediahosts oplost 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 verwijzen; 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 - streaming:
streaming(preview),streaming.preview.toolProgress,blockStreaming - opmaak/levering:
textChunkLimit,chunkMode,linkPreview,responsePrefix - media/netwerk:
mediaMaxMb,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.*.