Koppelen
Problemen met kanalen oplossen
Gateway-configuratie
Snelle installatie
Maak het bottoken aan in BotFather
- Chatprocedure: open Telegram, chat met @BotFather (controleer of de gebruikersnaam exact
@BotFatheris), voer/newbotuit, volg de aanwijzingen en bewaar het token. - Webprocedure: open de webapp van BotFather — deze werkt in elke Telegram-client, waaronder web.telegram.org — maak de bot aan in de gebruikersinterface en kopieer het token.
Configureer het token en DM-beleid
TELEGRAM_BOT_TOKEN (alleen het standaardaccount; benoemde accounts moeten botToken of tokenFile gebruiken).
Telegram gebruikt openclaw channels login telegram niet; stel het token in via de configuratie of omgeving en start daarna de Gateway.Start de Gateway en keur de eerste DM goed
Voeg de bot toe aan een groep
- je Telegram-gebruikers-ID, voor
allowFrom/groupAllowFrom - de chat-ID van de Telegram-groep, als sleutel onder
channels.telegram.groups
openclaw logs --follow, een bot voor doorgestuurde ID’s of getUpdates van de Bot API. Nadat de groep is toegestaan, bevestigt /whoami@<bot_username> de gebruikers- en groeps-ID’s.Negatieve supergroep-ID’s die beginnen met -100 zijn groepschat-ID’s. Ze horen onder channels.telegram.groups, niet onder groupAllowFrom.tokenFile heeft voorrang op botToken, dat weer voorrang heeft op de omgeving, en configuratie heeft altijd voorrang op TELEGRAM_BOT_TOKEN (dat alleen voor het standaardaccount wordt verwerkt). Na een geslaagde start bewaart OpenClaw de botidentiteit maximaal 24 uur in de cache, zodat bij herstarts een extra aanroep van getMe wordt overgeslagen; als je het token wijzigt of verwijdert, wordt die cache gewist.Instellingen aan de Telegram-zijde
Privacymodus en zichtbaarheid in groepen
Privacymodus en zichtbaarheid in groepen
- de privacymodus uitschakelen via
/setprivacy, of - de bot groepsbeheerder maken.
Groepsmachtigingen
Groepsmachtigingen
Nuttige BotFather-schakelaars
Nuttige BotFather-schakelaars
/setjoingroups— toevoegen aan groepen toestaan/weigeren/setprivacy— gedrag voor zichtbaarheid in groepen
Dashboard-Mini App
Voer/dashboard uit in een DM met de bot om het OpenClaw-dashboard in Telegram te openen.
Vereisten:
gateway.tailscale.mode: "serve"of"funnel"voor de gepubliceerde HTTPS-URL van de Mini App.- Je numerieke Telegram-gebruikers-ID moet in de effectieve
allowFromvan het geselecteerde account of incommands.ownerAllowFromstaan. - Gebruik een DM. In groepen antwoordt
/dashboardmetopen this in a DM with the boten wordt er geen knop verzonden. - Docker-installaties: voor de modi Serve/Funnel moet de Gateway naast
tailscaledaan loopback worden gebonden, waaraan bridgenetwerken met gepubliceerde poorten niet kunnen voldoen. Voer de Gateway-container uit metnetwork_mode: hosten koppel detailscaled-socket van de host (/var/run/tailscale) plus detailscale-CLI aan de container.
Toegangsbeheer en activering
Botidentiteit in groepen
In groepen en forumonderwerpen adresseert een expliciete vermelding van de geconfigureerde botgebruikersnaam (bijvoorbeeld@my_bot) de geselecteerde OpenClaw-agent, zelfs als de naam van de agentpersona afwijkt van de Telegram-gebruikersnaam. Het stiltebeleid voor groepen blijft van toepassing op niet-gerelateerd verkeer, maar de botgebruikersnaam zelf is nooit ‘iemand anders’.
- DM-beleid
- Groepsbeleid en toelatingslijsten
- Vermeldingsgedrag
channels.telegram.dmPolicy beheert de toegang tot directe berichten:pairing(standaard)allowlist(vereist ten minste één afzender-ID inallowFrom)open(vereist datallowFrom"*"bevat)disabled
dmPolicy: "open" en allowFrom: ["*"] kan elk Telegram-account dat de gebruikersnaam van de bot vindt of raadt, opdrachten aan de bot geven. Gebruik dit alleen voor bewust openbare bots met sterk beperkte tools; bots met één eigenaar moeten allowlist met numerieke gebruikers-ID’s gebruiken.channels.telegram.allowFrom accepteert numerieke Telegram-gebruikers-ID’s. De voorvoegsels telegram: / tg: worden geaccepteerd en genormaliseerd.
In configuraties met meerdere accounts vormt een beperkende channels.telegram.allowFrom op het hoogste niveau een veiligheidsgrens: een allowFrom: ["*"] op accountniveau maakt dat account niet openbaar, tenzij de samengevoegde effectieve toelatingslijst nog steeds een expliciete joker bevat.
dmPolicy: "allowlist" met een lege allowFrom blokkeert alle DM’s en wordt door de configuratievalidatie afgewezen.
Tijdens de installatie wordt alleen om numerieke gebruikers-ID’s gevraagd. Als je configuratie vermeldingen in de @username-toelatingslijst uit een oudere installatie bevat, voer je openclaw doctor --fix uit om ze om te zetten in numerieke ID’s (naar beste vermogen; vereist een Telegram-bottoken).
Als je voorheen vertrouwde op toelatingslijstbestanden in het koppelarchief, kan openclaw doctor --fix vermeldingen herstellen naar channels.telegram.allowFrom voor procedures met toelatingslijsten (bijvoorbeeld wanneer dmPolicy: "allowlist" nog geen expliciete ID’s bevat).Geef voor bots met één eigenaar de voorkeur aan dmPolicy: "allowlist" met expliciete numerieke allowFrom-ID’s boven afhankelijkheid van eerdere koppelingsgoedkeuringen.Veelvoorkomende verwarring: goedkeuring van DM-koppeling betekent niet ‘deze afzender is overal geautoriseerd’. Koppeling verleent alleen toegang tot DM’s. Als er nog geen opdrachteigenaar bestaat, stelt de eerste goedgekeurde koppeling ook commands.ownerAllowFrom in, waardoor opdrachten die alleen voor de eigenaar zijn en uitvoeringsgoedkeuringen een expliciet operatoraccount krijgen. Autorisatie van afzenders in groepen komt nog steeds uit expliciete toelatingslijsten in de configuratie.
Om met één identiteit te worden geautoriseerd voor zowel DM’s als groepsopdrachten: plaats je numerieke Telegram-gebruikers-ID in channels.telegram.allowFrom en zorg er voor opdrachten die alleen voor de eigenaar zijn voor dat commands.ownerAllowFrom telegram:<your user id> bevat.Je Telegram-gebruikers-ID vinden
Veiliger (geen bot van derden): stuur je bot een DM, voeropenclaw logs --follow uit en lees from.id.Officiële Bot API-methode:@userinfobot of @getidsbot.Runtimegedrag
- Telegram draait binnen het Gateway-proces.
- Routering is deterministisch: inkomende antwoorden van Telegram gaan terug naar Telegram (het model kiest geen kanalen).
- Inkomende berichten worden genormaliseerd naar de gedeelde kanaalenvelop met antwoordmetadata, mediaplaatshouders en persistente context van de antwoordketen voor antwoorden die de Gateway heeft waargenomen.
- Groepssessies worden geïsoleerd op groeps-ID. Bij forumonderwerpen wordt
:topic:<threadId>toegevoegd. - DM-berichten kunnen
message_thread_idbevatten; OpenClaw behoudt dit voor antwoorden. DM-onderwerpsessies worden alleen opgesplitst wanneer TelegramgetMehas_topics_enabled: truevoor de bot meldt; anders blijven DM’s in de vlakke sessie. - Long polling gebruikt de grammY-runner met sequentiële verwerking per chat/per thread. De gelijktijdigheid van de runner-sink gebruikt
agents.defaults.maxConcurrent. - Bij het opstarten met meerdere accounts wordt het aantal gelijktijdige
getMe-controles begrensd, zodat grote botvloten niet alle accountcontroles tegelijk uitvoeren. - Elk Gateway-proces bewaakt long polling, zodat slechts één actieve poller tegelijk een bottoken kan gebruiken. Aanhoudende
getUpdates409-conflicten wijzen op een andere OpenClaw Gateway, een script of een externe poller die hetzelfde token gebruikt. - De polling-watchdog start opnieuw na 120 seconden zonder voltooide
getUpdates-levendigheidscontrole. - De Telegram Bot API ondersteunt geen leesbevestigingen (
sendReadReceiptsis niet van toepassing).
channels.telegram.dm.threadReplies en channels.telegram.direct.<chatId>.threadReplies zijn verwijderd. Voer na het upgraden openclaw doctor --fix uit als je configuratie deze sleutels nog bevat. Routering van DM-onderwerpen volgt nu Telegram getMe.has_topics_enabled (aangestuurd door de threaded-modus van BotFather): bots waarvoor onderwerpen zijn ingeschakeld, gebruiken DM-sessies per thread wanneer Telegram message_thread_id verzendt; andere DM’s blijven in de vlakke sessie.Functieoverzicht
Live streamvoorbeeld (berichtbewerkingen)
Live streamvoorbeeld (berichtbewerkingen)
editMessageText uit en voltooit het bericht ter plaatse.channels.telegram.streamingisoff | partial | block | progress(standaard:partial)- korte eerste antwoordvoorbeelden worden gedebounced en vervolgens na een begrensde vertraging weergegeven als de uitvoering nog actief is
progresshoudt één bewerkbaar statusconcept bij voor de voortgang van tools, toont het stabiele statuslabel wanneer antwoordactiviteit vóór toolvoortgang binnenkomt, wist dit bij voltooiing en verzendt het definitieve antwoord als een normaal berichtstreaming.preview.toolProgressbepaalt of updates over tools/voortgang hetzelfde bewerkte voorbeeldbericht hergebruiken (standaard:truewanneer voorbeeldstreaming actief is)streaming.preview.commandTextbepaalt de details van opdrachten/uitvoering in die regels:raw(standaard) ofstatus(alleen het toollabel)streaming.progress.commentary(standaard:false) schakelt tekst met commentaar/inleiding van de assistent in het tijdelijke voortgangsconcept in- verouderde
channels.telegram.streamMode-, booleaansestreaming-waarden en ingetrokken sleutels voor native conceptvoorbeelden worden gedetecteerd; voeropenclaw doctor --fixuit om ze te migreren
v2026.4.22+).Behoud bewerkingen van antwoordvoorbeelden, maar verberg toolvoortgangsregels:progress toont toolvoortgang zonder het definitieve antwoord in dat bericht te bewerken. Plaats het beleid voor opdrachttekst onder streaming.progress:streaming.mode: "off" schakelt voorbeeldbewerkingen uit en onderdrukt algemene meldingen over tools/voortgang in plaats van deze als afzonderlijke statusberichten te verzenden; goedkeuringsvragen, media en fouten worden nog steeds via de normale definitieve levering gerouteerd. streaming.preview.toolProgress: false behoudt alleen bewerkingen van antwoordvoorbeelden.replyToMode first, all of batched is en het inkomende bericht geselecteerde citaattekst bevat, verzendt OpenClaw het definitieve antwoord via het native citaatantwoordpad van Telegram in plaats van het antwoordvoorbeeld te bewerken, zodat streaming.preview.toolProgress tijdens die beurt geen statusregels kan tonen. Antwoorden op het huidige bericht zonder geselecteerde citaattekst worden nog steeds gestreamd. Stel replyToMode: "off" in wanneer zichtbaarheid van toolvoortgang belangrijker is dan native citaatantwoorden, of streaming.preview.toolProgress: false om die afweging te accepteren./reasoning stream streamt de redenering tijdens het genereren naar het live voorbeeld en verwijdert het redeneringsvoorbeeld na de definitieve levering (gebruik /reasoning on om het zichtbaar te houden). Het definitieve antwoord wordt zonder redeneringstekst verzonden.Uitgebreide berichtopmaak
Uitgebreide berichtopmaak
$400-600K niet als wiskunde wordt geïnterpreteerd. Lange uitgebreide tekst wordt automatisch opgesplitst volgens de limieten van Telegram. Tabellen die de limiet van 20 kolommen overschrijden, vallen terug op een codeblok.Standaard: uitgeschakeld, voor clientcompatibiliteit — sommige huidige Desktop-, Web-, Android- en clients van derden geven geaccepteerde uitgebreide berichten weer als niet ondersteund. Houd dit uitgeschakeld tenzij elke client die met de bot wordt gebruikt deze berichten kan weergeven. /status toont of uitgebreide berichten voor de huidige sessie zijn in- of uitgeschakeld.Linkvoorbeelden zijn standaard ingeschakeld. channels.telegram.linkPreview: false schakelt automatische entiteitsdetectie voor uitgebreide tekst uit.Native opdrachten en aangepaste opdrachten
Native opdrachten en aangepaste opdrachten
setMyCommands. commands.native: "auto" schakelt native opdrachten voor Telegram in.Voeg aangepaste vermeldingen aan het opdrachtenmenu toe:/ verwijderen, omzetten naar kleine letters); geldig patroon a-z, 0-9, _, lengte 1-32; aangepaste opdrachten kunnen native opdrachten niet overschrijven; conflicten/dubbele vermeldingen worden overgeslagen en gelogd.Aangepaste opdrachten zijn uitsluitend menuvermeldingen — ze implementeren niet automatisch gedrag. Opdrachten van Plugins/Skills kunnen nog steeds werken wanneer ze worden getypt, zelfs als ze niet in het Telegram-menu worden weergegeven. Als native opdrachten zijn uitgeschakeld, worden ingebouwde opdrachten verwijderd; aangepaste opdrachten/Plugin-opdrachten kunnen nog steeds worden geregistreerd als ze zijn geconfigureerd.Veelvoorkomende installatiefouten:setMyCommands failedmetBOT_COMMANDS_TOO_MUCHna een nieuwe poging met inkorting betekent dat het menu nog steeds te groot is; verminder het aantal Plugin-/Skill-/aangepaste opdrachten of schakelchannels.telegram.commands.nativeuit.- Als
deleteWebhook,deleteMyCommandsofsetMyCommandsmislukt met404: Not Found, terwijl directe curl-opdrachten voor de Bot API wel werken, betekent dit meestal datchannels.telegram.apiRootop het volledige/bot<TOKEN>-eindpunt is ingesteld.apiRootmag alleen de hoofd-URL van de Bot API zijn;openclaw doctor --fixverwijdert een onbedoelde afsluitende/bot<TOKEN>. getMe returned 401betekent dat Telegram het geconfigureerde bottoken heeft geweigerd. WerkbotToken,tokenFileofTELEGRAM_BOT_TOKEN(standaardaccount) bij met het huidige BotFather-token; OpenClaw stopt vóór het pollen, zodat dit niet als een fout bij het opschonen van een Webhook wordt gemeld.setMyCommands failedmet netwerk-/ophaalfouten betekent meestal dat uitgaande DNS/HTTPS-toegang totapi.telegram.orgis geblokkeerd.
Opdrachten voor apparaatkoppeling (device-pair-Plugin)
Na installatie:/pairgenereert een installatiecode- plak de code in de iOS-app
/pair pendinggeeft openstaande verzoeken weer (inclusief rol/bereiken)- goedkeuren:
/pair approve <requestId>,/pair approve(enige openstaande verzoek) of/pair approve latest
requestId; voer /pair pending opnieuw uit voordat je het goedkeurt.Meer informatie: Koppelen.Inlineknoppen
Inlineknoppen
off, dm, group, all, allowlist (standaard). Verouderde capabilities: ["inlineButtons"] wordt toegewezen aan "all".Voorbeeld van een berichtactie:web_app-knoppen werken alleen in privéchats tussen een gebruiker en de bot.Klikken op callbacks die niet door een geregistreerde interactieve handler van een Plugin worden geclaimd, worden als tekst aan de agent doorgegeven: 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, optioneelpresentationinlineknoppen; bewerkingen met alleen knoppen werken de antwoordopmaak bij)createForumTopic(chatId,name, optioneeliconColor,iconCustomEmojiId)
send, react, delete, edit, sticker, sticker-search, topic-create.Beperking: channels.telegram.actions.sendMessage, deleteMessage, reactions, sticker (standaard: uitgeschakeld). edit, createForumTopic en editForumTopic zijn standaard ingeschakeld zonder afzonderlijke schakelaar.
Verzendingen tijdens runtime gebruiken de actieve momentopname van configuratie/geheimen vanaf het opstarten of herladen, zodat actiepaden de waarden van SecretRef niet voor elke verzending opnieuw herleiden.Semantiek voor het verwijderen van reacties: /tools/reactions.Forumonderwerpen en threadgedrag
Forumonderwerpen en threadgedrag
:topic:<threadId> toegevoegd; antwoorden en type-indicaties zijn gericht op de onderwerpthread; het configuratiepad voor onderwerpen is channels.telegram.groups.<chatId>.topics.<threadId>.Het algemene onderwerp (threadId=1) is een speciaal geval: bij het verzenden van berichten wordt message_thread_id weggelaten (Telegram weigert sendMessage(...thread_id=1) met “thread not found”), maar typeacties bevatten nog steeds message_thread_id (empirisch vereist om de type-indicator te laten verschijnen).Onderwerpvermeldingen nemen groepsinstellingen over, tenzij deze worden overschreven (requireMention, allowFrom, skills, systemPrompt, enabled, groupPolicy). agentId geldt uitsluitend voor onderwerpen en neemt geen standaardwaarden van de groep over. topics."*" stelt standaardwaarden in voor elk onderwerp in die groep; exacte onderwerp-ID’s hebben nog steeds voorrang op "*".Agentroutering per onderwerp: elk onderwerp kan via agentId in de onderwerpconfiguratie naar een andere agent worden gerouteerd, waardoor het een eigen werkruimte, geheugen en sessie krijgt:agent:zu:telegram:group:-1001234567890:topic:3.Permanente ACP-onderwerpkoppeling: forumonderwerpen kunnen ACP-harnesssessies vastzetten via getypeerde koppelingen op het hoogste niveau (bindings[] met type: "acp", match.channel: "telegram", peer.kind: "group" en een onderwerpspecifieke ID zoals -1001234567890:topic:42). Momenteel beperkt tot forumonderwerpen in groepen/supergroepen. Zie ACP-agenten.Aan een thread gebonden ACP-start vanuit de chat: /acp spawn <agent> --thread here|auto koppelt het huidige onderwerp aan een nieuwe ACP-sessie; vervolgberichten worden daar rechtstreeks naartoe gerouteerd en OpenClaw zet de startbevestiging vast in het onderwerp. Wordt beheerd door session.threadBindings.spawnSessions (standaard: true).De sjablooncontext stelt MessageThreadId en IsForum beschikbaar. Privéchats met message_thread_id behouden antwoordmetadata, maar gebruiken alleen threadbewuste sessiesleutels wanneer Telegram getMe rapporteert als has_topics_enabled: true.
De uitgefaseerde overschrijvingen dm.threadReplies en direct.*.threadReplies zijn verwijderd; de threadmodus van BotFather is de enige bron van waarheid. Voer openclaw doctor --fix uit om verouderde configuratiesleutels te verwijderen.Audio, video en stickers
Audio, video en stickers
Audioberichten
Telegram maakt onderscheid tussen spraaknotities en audiobestanden. Standaard: gedrag als audiobestand; plaats de tag[[audio_as_voice]] in het antwoord van de agent om verzending als spraaknotitie af te dwingen. Transcripties van inkomende spraaknotities worden in de agentcontext gekaderd als machinaal gegenereerde, niet-vertrouwde tekst, maar vermeldingsdetectie gebruikt nog steeds de onbewerkte transcriptie, zodat spraakberichten waarvoor een vermelding vereist is blijven werken.Videoberichten
Telegram maakt onderscheid tussen videobestanden en videonotities. Videonotities ondersteunen geen bijschriften; opgegeven berichttekst wordt afzonderlijk verzonden.Locaties en locaties met details
Gebruik de bestaande actiesend met één zelfstandig location-object. Coördinaten verzenden een systeemeigen locatiepin; als zowel name als address worden toegevoegd, wordt een systeemeigen locatiekaart verzonden. Locatieverzendingen kunnen niet worden gecombineerd met berichttekst of media.Stickers
Inkomend: statische WEBP wordt gedownload en verwerkt (tijdelijke aanduiding<media:sticker>); geanimeerde TGS en video-WEBM worden overgeslagen.Stickercontextvelden: Sticker.emoji, Sticker.setName, Sticker.fileId, Sticker.fileUniqueId, Sticker.cachedDescription. Beschrijvingen worden opgeslagen in de OpenClaw SQLite-pluginstatus om herhaalde vision-aanroepen te beperken.Stickeracties inschakelen:Reactiemeldingen
Reactiemeldingen
message_reaction-updates, los van de berichtpayloads. Wanneer dit is ingeschakeld, plaatst OpenClaw systeemgebeurtenissen zoals Telegram reaction added: 👍 by Alice (@alice) on msg 42 in de wachtrij.channels.telegram.reactionNotifications:off | own | all(standaard:own)channels.telegram.reactionLevel:off | ack | minimal | extensive(standaard:minimal)
own betekent uitsluitend gebruikersreacties op door de bot verzonden berichten (op basis van beste inspanning via een cache van verzonden berichten). Reactiegebeurtenissen respecteren nog steeds de toegangscontroles van Telegram (dmPolicy, allowFrom, groupPolicy, groupAllowFrom); onbevoegde afzenders worden genegeerd.Telegram verstrekt geen thread-ID’s in reactie-updates: niet-forumgroepen worden naar de groepschatsessie gerouteerd; forumgroepen worden naar de sessie van het algemene onderwerp (:topic:1) gerouteerd, niet naar het exacte oorspronkelijke onderwerp.allowed_updates voor polling/webhook bevat automatisch message_reaction.Bevestigingsreacties
Bevestigingsreacties
ackReaction verzendt een bevestigingsemoji terwijl OpenClaw een inkomend bericht verwerkt. messages.ackReactionScope bepaalt wanneer deze wordt verzonden.Volgorde voor het bepalen van de emoji:channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- terugval op de identiteitsemoji van de agent (
agents.entries.*.identity.emoji, anders ”👀”)
"" om de reactie voor een kanaal of account uit te schakelen.Bereik (messages.ackReactionScope, standaard "group-mentions"; momenteel geen overschrijving per Telegram-account of Telegram-kanaal):all (privéchats + groepen, inclusief omgevingsgebeurtenissen in ruimten), direct (alleen privéchats), group-all (elk groepsbericht behalve omgevingsgebeurtenissen in ruimten, geen privéchats), group-mentions (groepen wanneer de bot wordt vermeld; geen privéchats — standaard), off / none (uitgeschakeld).group-mentions) activeert geen bevestigingsreacties in privéchats of bij omgevingsgebeurtenissen in ruimten. Gebruik direct of all voor privéchats; alleen all bevestigt omgevingsgebeurtenissen in ruimten. Deze waarde wordt gelezen wanneer de Telegram-provider opstart, dus de Gateway moet opnieuw worden gestart voordat de wijziging van kracht wordt.Configuratieschrijfbewerkingen vanuit Telegram-gebeurtenissen en -opdrachten
Configuratieschrijfbewerkingen vanuit Telegram-gebeurtenissen en -opdrachten
configWrites !== false). Door Telegram geactiveerde schrijfbewerkingen omvatten groepsmigratiegebeurtenissen (migrate_to_chat_id, werkt channels.telegram.groups bij) en /config set / /config unset (vereist dat opdrachten zijn ingeschakeld).Uitschakelen:Long polling versus webhook
Long polling versus webhook
channels.telegram.webhookUrl en channels.telegram.webhookSecret in; optioneel webhookPath (standaard /telegram-webhook), webhookHost (standaard 127.0.0.1), webhookPort (standaard 8787), webhookCertPath (zelfondertekend certificaat in PEM-indeling voor configuraties met een rechtstreeks IP-adres of zonder domein).In de long-pollingmodus slaat OpenClaw het herstartwatermerk pas permanent op nadat een update met succes is doorgegeven; na een mislukte handler kan die update in hetzelfde proces opnieuw worden geprobeerd in plaats van als voltooid te worden gemarkeerd.De lokale listener bindt standaard aan 127.0.0.1:8787. Plaats voor openbare toegang een reverse proxy vóór de lokale poort of stel webhookHost: "0.0.0.0" bewust in.De webhookmodus valideert aanvraagbeveiligingen, het geheime token van Telegram en de JSON-body, en legt de update vervolgens vast in de duurzame wachtrij voor inkomend verkeer voordat een lege 200 wordt geretourneerd. Succesvolle duurzame overname bevat x-openclaw-delivery-accepted: durable; antwoorden voor statuscontroles, routering, authenticatie, validatie en opslagfouten laten deze header weg. Reverse proxy’s en hostcontrollers kunnen de header vereisen om overname door OpenClaw te onderscheiden van een generieke lege 200, zonder acceptatie af te leiden uit de responstijd.Na de duurzame schrijfbewerking claimt en verwerkt OpenClaw updates via de afvoer voor inkomend kanaalverkeer in de kern (banen per chat/per onderwerp, voltooid bij overname van de beurt, time-out bij stilstand vóór overname). Trage agentbeurten houden de afleveringsbevestiging van Telegram niet tegen.Limieten en CLI-doelen
Limieten en CLI-doelen
channels.telegram.textChunkLimitstandaard 4000;streaming.chunkMode="newline"geeft vóór splitsing op lengte de voorkeur aan alineagrenzen (lege regels).channels.telegram.mediaMaxMb(standaard 100) begrenst de grootte van inkomende en uitgaande media.- de groepscontextgeschiedenis gebruikt
channels.telegram.historyLimitofmessages.groupChat.historyLimit(standaard 50);0schakelt dit uit. - aanvullende context voor antwoorden/citaten/doorgestuurde berichten wordt genormaliseerd tot één geselecteerd contextvenster van het gesprek wanneer de Gateway de bovenliggende berichten heeft waargenomen; de cache met waargenomen berichten bevindt zich in de SQLite-pluginstatus van OpenClaw en
openclaw doctor --fiximporteert verouderde zijbestanden. Telegram bevat per update slechts één oppervlakkigereply_to_message, waardoor ketens die ouder zijn dan de cache tot die payload beperkt blijven. - Telegram-toelatingslijsten bepalen hoofdzakelijk wie de agent kan activeren en vormen geen volledige redactiegrens voor aanvullende context.
- DM-geschiedenis:
channels.telegram.dmHistoryLimit,channels.telegram.dms["<user_id>"].historyLimit.
openclaw message poll en ondersteunen forumonderwerpen:--poll-duration-seconds (5-600), --poll-anonymous, --poll-public, --thread-id (of een :topic:-doel). --poll-option wordt 2-12 keer herhaald (de optielimiet van Telegram).Verzenden via Telegram ondersteunt ook --presentation met buttons-blokken voor inline toetsenborden (wanneer channels.telegram.capabilities.inlineButtons dit toestaat), --pin of --delivery '{"pin":true}' om vastgezette bezorging aan te vragen wanneer de bot berichten in die chat kan vastzetten, en --force-document om uitgaande afbeeldingen, GIF’s en video’s als documenten te verzenden in plaats van als gecomprimeerde/geanimeerde/video-uploads.Actiebeperking: channels.telegram.actions.sendMessage=false schakelt alle uitgaande berichten uit, inclusief peilingen; channels.telegram.actions.poll=false schakelt het maken van peilingen uit terwijl normale verzending ingeschakeld blijft.Uitvoeringsgoedkeuringen in Telegram
Uitvoeringsgoedkeuringen in Telegram
channels.telegram.execApprovals.enabled("auto"schakelt dit in wanneer ten minste één goedkeurder kan worden bepaald)channels.telegram.execApprovals.approvers(valt terug op numerieke eigenaars-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 communiceren en waar deze normale antwoorden verzendt — ze maken iemand niet tot een goedkeurder van uitvoeringen. De eerste goedgekeurde DM-koppeling initialiseert commands.ownerAllowFrom wanneer er nog geen opdrachteigenaar bestaat, zodat configuraties met één eigenaar werken zonder ID’s onder execApprovals.approvers te dupliceren.Bij bezorging in het kanaal wordt de opdrachttekst in de chat weergegeven; schakel channel of both alleen in voor vertrouwde groepen/onderwerpen. Wanneer de prompt in een forumonderwerp terechtkomt, behoudt OpenClaw het onderwerp voor de goedkeuringsprompt en de opvolging. Uitvoeringsgoedkeuringen 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 plugingoedkeuringen afgehandeld; andere worden eerst via uitvoeringsgoedkeuringen afgehandeld.Zie Uitvoeringsgoedkeuringen.Instellingen voor foutantwoorden
Wanneer de agent een bezorgings- of providerfout tegenkomt, bepaalt het foutbeleid of foutmeldingen de Telegram-chat bereiken:Problemen oplossen
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 vervolgens uit de groep en voeg deze opnieuw toe. openclaw channels statuswaarschuwt wanneer de configuratie groepsberichten zonder vermelding verwacht.openclaw channels status --probecontroleert expliciete numerieke groeps-ID’s; voor jokerteken"*"kan lidmaatschap niet 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"*"bevatten). - Controleer of de bot lid is van de groep.
- Bekijk
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); opdrachtautorisatie blijft van toepassing, zelfs wanneer het groepsbeleidopenis. setMyCommands failedmetBOT_COMMANDS_TOO_MUCHbetekent dat het systeemeigen menu te veel items bevat; verminder het aantal plugin-/skill-/aangepaste opdrachten of schakel systeemeigen menu’s uit.- Opstartaanroepen van
deleteMyCommands/setMyCommandsen typeaanroepen vansendChatActionzijn begrensd en worden bij een time-out van de aanvraag één keer opnieuw geprobeerd via de transportterugval van Telegram. Aanhoudende netwerk-/ophaalfouten betekenen meestal dat DNS/HTTPS naarapi.telegram.orgonbereikbaar is.
Bij het opstarten wordt een niet-geautoriseerd token gemeld
Bij het opstarten wordt een niet-geautoriseerd token gemeld
getMe returned 401is een Telegram-authenticatiefout voor het geconfigureerde bottoken. Kopieer het token opnieuw of genereer het opnieuw in BotFather en werk vervolgenschannels.telegram.botToken,tokenFile,accounts.<id>.botTokenofTELEGRAM_BOT_TOKEN(standaardaccount) bij.deleteWebhook 401 Unauthorizedtijdens het opstarten is ook een authenticatiefout; dit behandelen als “er bestaat geen Webhook” zou dezelfde fout door het onjuiste token alleen uitstellen tot een latere API-aanroep.
Instabiliteit bij peilen of in het netwerk
Instabiliteit bij peilen of in het netwerk
- Node 22+ met een aangepaste fetch/proxy kan onmiddellijk afbreekgedrag veroorzaken als de typen van
AbortSignalniet overeenkomen. - Sommige hosts zetten
api.telegram.orgeerst om naar IPv6; defect uitgaand IPv6-verkeer veroorzaakt incidentele API-fouten. - Logboeken met
TypeError: fetch failedofNetwork request for 'getUpdates' failed!worden opnieuw geprobeerd als herstelbare netwerkfouten. - Tijdens het opstarten van het peilen hergebruikt OpenClaw de geslaagde
getMe-opstartcontrole voor grammY, zodat de runner geen tweedegetMenodig heeft vóór de eerstegetUpdates. - Als
deleteWebhooktijdens het opstarten van het peilen mislukt door een tijdelijke netwerkfout, gaat OpenClaw door met lang peilen in plaats van nog een besturingsvlak-aanroep vóór het peilen uit te voeren. Een nog actieve Webhook verschijnt vervolgens als eengetUpdates-conflict; OpenClaw bouwt het transport opnieuw op en probeert de Webhook opnieuw op te schonen. Polling stall detectedin logboeken betekent dat OpenClaw het peilen opnieuw start en het transport opnieuw opbouwt nadat standaard gedurende 120 seconden geen voltooide vitaliteitscontrole van lang peilen is geregistreerd.openclaw channels status --probeenopenclaw doctorwaarschuwen wanneer een actief peilaccount na de respijtperiode voor opstarten geengetUpdatesheeft voltooid, een actief Webhook-account na de respijtperiode voor opstarten geensetWebhookheeft voltooid, of de laatste geslaagde peiltransportactiviteit verouderd is.- Telegram respecteert proxy-omgevingsvariabelen van het proces voor Bot API-transport:
HTTP_PROXY,HTTPS_PROXY,ALL_PROXYen varianten in kleine letters.NO_PROXY/no_proxykunnenapi.telegram.orgnog steeds omzeilen. - Als
OPENCLAW_PROXY_URLis ingesteld voor een serviceomgeving en er geen standaard proxy-omgevingsvariabele aanwezig is, gebruikt Telegram die URL ook voor Bot API-transport. - Leid Telegram API-aanroepen op VPS-hosts met instabiel direct uitgaand verkeer/TLS via een proxy:
- Node 22+ gebruikt standaard
autoSelectFamily=true(behalve WSL2). De resultaatvolgorde van Telegram-DNS volgtOPENCLAW_TELEGRAM_DNS_RESULT_ORDER, daarnachannels.telegram.network.dnsResultOrderen vervolgens de processtandaard (bijvoorbeeldNODE_OPTIONS=--dns-result-order=ipv4first), met een terugval naaripv4firstop Node 22+ als geen daarvan van toepassing is. - Dwing op WSL2, of wanneer uitsluitend IPv4 beter werkt, de familieselectie af:
- Antwoorden uit het RFC 2544-benchmarkbereik (
198.18.0.0/15) zijn standaard al toegestaan voor Telegram-mediadownloads. Als een vertrouwde nep-IP- of transparante proxyapi.telegram.orgtijdens mediadownloads herschrijft naar een ander privé/intern/speciaal adres, meld je dan aan voor de omzeiling die alleen voor Telegram geldt:
- Dezelfde opt-in is per account beschikbaar via
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork. - Als je proxy Telegram-mediahosts omzet naar
198.18.x.x, laat de gevaarlijke vlag dan eerst uitgeschakeld — dat bereik is standaard al toegestaan.
- Tijdelijke omgevingsoverschrijvingen:
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1,OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1,OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first. - Valideer DNS-antwoorden:
Configuratiereferentie
Primaire referentie: Configuratiereferentie - Telegram.Belangrijkste Telegram-velden
Belangrijkste Telegram-velden
- opstarten/authenticatie:
enabled,botToken,tokenFile(moet een regulier bestand zijn; symbolische koppelingen worden geweigerd),accounts.* - toegangsbeheer:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,groups.*.topics.*,bindings[]op het hoogste niveau (type: "acp") - standaardinstellingen voor onderwerpen:
groups.<chatId>.topics."*"is van toepassing op niet-overeenkomende forumonderwerpen; exacte onderwerp-ID’s hebben voorrang - uitvoeringsgoedkeuringen:
execApprovals,accounts.*.execApprovals - opdracht/menu:
commands.native,commands.nativeSkills,customCommands - threads/antwoorden:
replyToMode,threadBindings - streaming:
streaming(modioff | partial | block | progress),streaming.preview.toolProgress - opmaak/bezorging:
textChunkLimit,streaming.chunkMode,richMessages,markdown.tables(off | bullets | code | block),linkPreview,responsePrefix - media/netwerk:
mediaMaxMb,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - aangepaste API-root:
apiRoot(alleen de Bot API-root; neem/bot<TOKEN>niet op),trustedLocalFileRoots(absolutefile_path-roots voor een zelfgehoste Bot API) - Webhook:
webhookUrl,webhookSecret,webhookPath,webhookHost,webhookPort,webhookCertPath - acties/mogelijkheden:
capabilities.inlineButtons,actions.sendMessage|editMessage|deleteMessage|reactions|sticker|createForumTopic|editForumTopic - reacties:
reactionNotifications,reactionLevel - fouten:
errorPolicy,silentErrorReplies - schrijfbewerkingen/geschiedenis:
configWrites,historyLimit,dmHistoryLimit,dms.*.historyLimit
channels.telegram.defaultAccount in (of neem je channels.telegram.accounts.default op) om de standaardroutering expliciet te maken. Anders valt OpenClaw terug op de eerste genormaliseerde account-ID en waarschuwt openclaw doctor. Benoemde accounts nemen channels.telegram.allowFrom / groupAllowFrom over, maar geen waarden van accounts.default.*.