Einsatzbereit für Bot-DMs und Gruppen über grammY. Long Polling ist der Standardmodus; der Webhook-Modus ist optional.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.
Kopplung
Kanal-Problembehandlung
Gateway-Konfiguration
Schnelle Einrichtung
Bot-Token in BotFather erstellen
@BotFather ist).Führen Sie /newbot aus, folgen Sie den Eingabeaufforderungen und speichern Sie das Token.Token und DM-Richtlinie konfigurieren
TELEGRAM_BOT_TOKEN=... (nur Standardkonto).
Telegram verwendet nicht openclaw channels login telegram; konfigurieren Sie das Token in der Konfiguration/Env und starten Sie dann das Gateway.Bot zu einer Gruppe hinzufügen
- Ihre Telegram-Benutzer-ID, verwendet in
allowFrom/groupAllowFrom - die Telegram-Gruppenchat-ID, verwendet als Schlüssel unter
channels.telegram.groups
openclaw logs --follow, einem Bot für weitergeleitete IDs oder über Bot API getUpdates. Nachdem die Gruppe zugelassen wurde, kann /whoami@<bot_username> die Benutzer- und Gruppen-IDs bestätigen.Negative Telegram-Supergruppen-IDs, die mit -100 beginnen, sind Gruppenchat-IDs. Setzen Sie sie unter channels.telegram.groups, nicht unter groupAllowFrom.TELEGRAM_BOT_TOKEN gilt nur für das Standardkonto.Telegram-seitige Einstellungen
Datenschutzmodus und Gruppensichtbarkeit
Datenschutzmodus und Gruppensichtbarkeit
- deaktivieren Sie den Datenschutzmodus über
/setprivacy, oder - machen Sie den Bot zum Gruppenadministrator.
Gruppenberechtigungen
Gruppenberechtigungen
Hilfreiche BotFather-Schalter
Hilfreiche BotFather-Schalter
/setjoingroups, um das Hinzufügen zu Gruppen zuzulassen/zu verweigern/setprivacyfür das Verhalten der Gruppensichtbarkeit
Zugriffskontrolle und Aktivierung
- DM-Richtlinie
- Gruppenrichtlinie und Allowlists
- Erwähnungsverhalten
channels.telegram.dmPolicy steuert den Zugriff auf Direktnachrichten:pairing(Standard)allowlist(erfordert mindestens eine Sender-ID inallowFrom)open(erfordert, dassallowFrom"*"enthält)disabled
dmPolicy: "open" mit allowFrom: ["*"] erlaubt jedem Telegram-Konto, das den Bot-Benutzernamen findet oder errät, den Bot zu steuern. Verwenden Sie dies nur für absichtlich öffentliche Bots mit stark eingeschränkten Tools; Bots mit einem Eigentümer sollten allowlist mit numerischen Benutzer-IDs verwenden.channels.telegram.allowFrom akzeptiert numerische Telegram-Benutzer-IDs. Präfixe telegram: / tg: werden akzeptiert und normalisiert.
In Mehrkonten-Konfigurationen wird ein restriktives channels.telegram.allowFrom auf oberster Ebene als Sicherheitsgrenze behandelt: allowFrom: ["*"]-Einträge auf Kontoebene machen dieses Konto nicht öffentlich, es sei denn, die effektive Konto-Allowlist enthält nach dem Zusammenführen weiterhin einen expliziten Platzhalter.
dmPolicy: "allowlist" mit leerem allowFrom blockiert alle DMs und wird von der Konfigurationsvalidierung abgelehnt.
Die Einrichtung fragt nur nach numerischen Benutzer-IDs.
Wenn Sie ein Upgrade durchgeführt haben und Ihre Konfiguration @username-Allowlist-Einträge enthält, führen Sie openclaw doctor --fix aus, um sie aufzulösen (Best-Effort; erfordert ein Telegram-Bot-Token).
Wenn Sie zuvor auf Allowlist-Dateien aus dem Kopplungsspeicher vertraut haben, kann openclaw doctor --fix Einträge in Allowlist-Flows nach channels.telegram.allowFrom wiederherstellen (zum Beispiel, wenn dmPolicy: "allowlist" noch keine expliziten IDs hat).Für Bots mit einem Eigentümer bevorzugen Sie dmPolicy: "allowlist" mit expliziten numerischen allowFrom-IDs, damit die Zugriffsrichtlinie dauerhaft in der Konfiguration liegt (statt von früheren Kopplungsgenehmigungen abhängig zu sein).Häufige Verwirrung: Die Genehmigung einer DM-Kopplung bedeutet nicht „dieser Sender ist überall autorisiert“.
Die Kopplung gewährt DM-Zugriff. Wenn noch kein Befehlseigentümer existiert, setzt die erste genehmigte Kopplung außerdem commands.ownerAllowFrom, sodass nur für Eigentümer verfügbare Befehle und Ausführungsgenehmigungen ein explizites Betreiberkonto haben.
Die Autorisierung von Gruppensendern stammt weiterhin aus expliziten Konfigurations-Allowlists.
Wenn Sie möchten, dass „ich einmal autorisiert bin und sowohl DMs als auch Gruppenbefehle funktionieren“, setzen Sie Ihre numerische Telegram-Benutzer-ID in channels.telegram.allowFrom; stellen Sie für nur Eigentümern vorbehaltene Befehle sicher, dass commands.ownerAllowFrom telegram:<your user id> enthält.Ihre Telegram-Benutzer-ID finden
Sicherer (kein Drittanbieter-Bot):- Senden Sie Ihrem Bot eine DM.
- Führen Sie
openclaw logs --followaus. - Lesen Sie
from.id.
@userinfobot oder @getidsbot.Laufzeitverhalten
- Telegram gehört dem Gateway-Prozess.
- Das Routing ist deterministisch: Telegram-Eingänge antworten zurück an Telegram (das Modell wählt keine Kanäle aus).
- Eingehende Nachrichten werden in den gemeinsamen Kanal-Umschlag mit Antwortmetadaten, Medienplatzhaltern und persistiertem Antwortkettenkontext für Telegram-Antworten normalisiert, die das Gateway beobachtet hat.
- Gruppensitzungen sind nach Gruppen-ID isoliert. Forumthemen hängen
:topic:<threadId>an, um Themen isoliert zu halten. - DM-Nachrichten können
message_thread_identhalten; OpenClaw bewahrt die Thread-ID für Antworten, hält DMs aber standardmäßig in der flachen Sitzung. Konfigurieren Siechannels.telegram.dm.threadReplies: "inbound",channels.telegram.direct.<chatId>.threadReplies: "inbound",requireTopic: trueoder eine passende Themenkonfiguration, wenn Sie bewusst eine DM-Themensitzungsisolierung wünschen. - Long Polling verwendet den grammY Runner mit Sequenzierung pro Chat/pro Thread. Die gesamte Runner-Sink-Parallelität verwendet
agents.defaults.maxConcurrent. - Long Polling ist innerhalb jedes Gateway-Prozesses abgesichert, sodass jeweils nur ein aktiver Poller ein Bot-Token verwenden kann. Wenn Sie weiterhin
getUpdates-409-Konflikte sehen, verwendet wahrscheinlich ein anderes OpenClaw-Gateway, Skript oder ein externer Poller dasselbe Token. - Neustarts des Long-Polling-Watchdogs werden standardmäßig nach 120 Sekunden ohne abgeschlossene
getUpdates-Liveness ausgelöst. Erhöhen Siechannels.telegram.pollingStallThresholdMsnur, wenn Ihre Bereitstellung während lang laufender Arbeit weiterhin fälschliche Polling-Stall-Neustarts sieht. Der Wert ist in Millisekunden angegeben und von30000bis600000zulässig; Überschreibungen pro Konto werden unterstützt. - Telegram Bot API unterstützt keine Lesebestätigungen (
sendReadReceiptsgilt nicht).
Funktionsreferenz
Live-Stream-Vorschau (Nachrichtenbearbeitungen)
Live-Stream-Vorschau (Nachrichtenbearbeitungen)
- Direktchats: Vorschaunachricht +
editMessageText - Gruppen/Themen: Vorschaunachricht +
editMessageText
channels.telegram.streamingistoff | partial | block | progress(Standard:partial)progressbehält einen bearbeitbaren Statusentwurf für Tool-Fortschritt bei, löscht ihn nach Abschluss und sendet die finale Antwort als normale Nachrichtstreaming.preview.toolProgresssteuert, ob Tool-/Fortschrittsaktualisierungen dieselbe bearbeitete Vorschau-Nachricht wiederverwenden (Standard:true, wenn Vorschau-Streaming aktiv ist)streaming.preview.commandTextsteuert Befehls-/Ausführungsdetails in diesen Tool-Fortschrittszeilen:raw(Standard, bewahrt das veröffentlichte Verhalten) oderstatus(nur Tool-Bezeichnung)- veraltete Werte für
channels.telegram.streamModeund booleschestreaming-Werte werden erkannt; führen Sieopenclaw doctor --fixaus, um sie nachchannels.telegram.streaming.modezu migrieren
v2026.4.22 zu entsprechen. Um die bearbeitete Vorschau für Antworttext beizubehalten, aber Tool-Fortschrittszeilen auszublenden, legen Sie Folgendes fest:progress, wenn Sie sichtbaren Tool-Fortschritt wünschen, ohne die finale Antwort in dieselbe Nachricht hineinzubearbeiten. Legen Sie die Richtlinie für Befehlstext unter streaming.progress ab:streaming.mode: "off" nur, wenn Sie ausschließlich finale Zustellung wünschen: Telegram-Vorschaubearbeitungen werden deaktiviert und generisches Tool-/Fortschrittsgerede wird unterdrückt, statt als eigenständige Statusnachrichten gesendet zu werden. Genehmigungsaufforderungen, Medien-Payloads und Fehler werden weiterhin über die normale finale Zustellung geleitet. Verwenden Sie streaming.preview.toolProgress: false, wenn Sie nur Antwortvorschau-Bearbeitungen beibehalten und zugleich die Tool-Fortschrittsstatuszeilen ausblenden möchten.replyToMode "first", "all" oder "batched" ist und die eingehende Nachricht ausgewählten Zitattext enthält, sendet OpenClaw die finale Antwort über den nativen Zitat-Antwort-Pfad von Telegram, statt die Antwortvorschau zu bearbeiten. Daher kann streaming.preview.toolProgress die kurzen Statuszeilen für diesen Durchlauf nicht anzeigen. Antworten auf die aktuelle Nachricht ohne ausgewählten Zitattext behalten das Vorschau-Streaming weiterhin bei. Setzen Sie replyToMode: "off", wenn die Sichtbarkeit von Tool-Fortschritt wichtiger ist als native Zitatantworten, oder setzen Sie streaming.preview.toolProgress: false, um den Kompromiss anzuerkennen.- kurze DM-/Gruppen-/Themenvorschauen: OpenClaw behält dieselbe Vorschau-Nachricht bei und führt die finale Bearbeitung direkt daran aus
- lange finale Texte, die in mehrere Telegram-Nachrichten aufgeteilt werden, verwenden die vorhandene Vorschau nach Möglichkeit als ersten finalen Abschnitt wieder und senden danach nur die verbleibenden Abschnitte
- Finale Antworten im Fortschrittsmodus löschen den Statusentwurf und verwenden normale finale Zustellung, statt den Entwurf zur Antwort umzubearbeiten
- wenn die finale Bearbeitung fehlschlägt, bevor der vollständige Text bestätigt ist, verwendet OpenClaw normale finale Zustellung und bereinigt die veraltete Vorschau
/reasoning streamsendet Reasoning während der Generierung an die Live-Vorschau- die Reasoning-Vorschau wird nach der finalen Zustellung gelöscht; verwenden Sie
/reasoning on, wenn Reasoning sichtbar bleiben soll - die finale Antwort wird ohne Reasoning-Text gesendet
Formatting and HTML fallback
Formatting and HTML fallback
parse_mode: "HTML".- Markdown-ähnlicher Text wird in Telegram-sicheres HTML gerendert.
- Unterstützte Telegram-HTML-Tags bleiben erhalten; nicht unterstütztes HTML wird escaped.
- Wenn Telegram geparstes HTML ablehnt, versucht OpenClaw es erneut als Klartext.
channels.telegram.linkPreview: false deaktiviert werden.Native commands and custom commands
Native commands and custom commands
setMyCommands gehandhabt.Standardwerte für native Befehle:commands.native: "auto"aktiviert native Befehle für Telegram
- Namen werden normalisiert (führendes
/entfernen, Kleinschreibung) - gültiges Muster:
a-z,0-9,_, Länge1..32 - benutzerdefinierte Befehle können native Befehle nicht überschreiben
- Konflikte/Duplikate werden übersprungen und protokolliert
- benutzerdefinierte Befehle sind nur Menüeinträge; sie implementieren kein Verhalten automatisch
- Plugin-/Skill-Befehle können weiterhin funktionieren, wenn sie eingegeben werden, auch wenn sie nicht im Telegram-Menü angezeigt werden
setMyCommands failedmitBOT_COMMANDS_TOO_MUCHbedeutet, dass das Telegram-Menü auch nach dem Kürzen noch überlaufen ist; reduzieren Sie Plugin-/Skill-/benutzerdefinierte Befehle oder deaktivieren Siechannels.telegram.commands.native.- Wenn
deleteWebhook,deleteMyCommandsodersetMyCommandsmit404: Not Foundfehlschlägt, während direkte Bot-API-curl-Befehle funktionieren, kann das bedeuten, dasschannels.telegram.apiRootauf den vollständigen/bot<TOKEN>-Endpunkt gesetzt wurde.apiRootdarf nur die Bot-API-Wurzel sein, undopenclaw doctor --fixentfernt ein versehentlich angehängtes/bot<TOKEN>. getMe returned 401bedeutet, dass Telegram das konfigurierte Bot-Token abgelehnt hat. Aktualisieren SiebotToken,tokenFileoderTELEGRAM_BOT_TOKENmit dem aktuellen BotFather-Token; OpenClaw stoppt vor dem Polling, sodass dies nicht als Fehler bei der Webhook-Bereinigung gemeldet wird.setMyCommands failedmit Netzwerk-/Fetch-Fehlern bedeutet üblicherweise, dass ausgehendes DNS/HTTPS zuapi.telegram.orgblockiert ist.
Befehle zur Gerätekopplung (device-pair-Plugin)
Wenn das device-pair-Plugin installiert ist:/pairgeneriert Einrichtungscode- Code in die iOS-App einfügen
/pair pendinglistet ausstehende Anfragen auf (einschließlich Rolle/Scopes)- die Anfrage genehmigen:
/pair approve <requestId>für explizite Genehmigung/pair approve, wenn es nur eine ausstehende Anfrage gibt/pair approve latestfür die neueste
scopes: []; jedes übergebene Operator-Token bleibt auf operator.approvals, operator.read, operator.talk.secrets und operator.write begrenzt. Bootstrap-Scope-Prüfungen sind rollenpräfigiert, sodass diese Operator-Zulassungsliste nur Operator-Anfragen erfüllt; Nicht-Operator-Rollen benötigen weiterhin Scopes unter ihrem eigenen Rollenpräfix.Wenn ein Gerät es mit geänderten Authentifizierungsdetails erneut versucht (zum Beispiel Rolle/Scopes/öffentlicher Schlüssel), wird die vorherige ausstehende Anfrage ersetzt und die neue Anfrage verwendet eine andere requestId. Führen Sie /pair pending erneut aus, bevor Sie genehmigen.Weitere Details: Kopplung.Inline buttons
Inline buttons
Telegram message actions for agents and automation
Telegram message actions for agents and automation
sendMessage(to,content, optionalmediaUrl,replyToMessageId,messageThreadId)react(chatId,messageId,emoji)deleteMessage(chatId,messageId)editMessage(chatId,messageId,content)createForumTopic(chatId,name, optionaliconColor,iconCustomEmojiId)
send, react, delete, edit, sticker, sticker-search, topic-create).Gating-Steuerungen:channels.telegram.actions.sendMessagechannels.telegram.actions.deleteMessagechannels.telegram.actions.reactionschannels.telegram.actions.sticker(Standard: deaktiviert)
edit und topic-create sind derzeit standardmäßig aktiviert und haben keine separaten channels.telegram.actions.*-Schalter.
Laufzeit-Sendevorgänge verwenden den aktiven Konfigurations-/Secrets-Snapshot (Start/Reload), daher führen Aktionspfade keine Ad-hoc-Neuauflösung von SecretRef pro Sendevorgang aus.Semantik zum Entfernen von Reaktionen: /tools/reactionsReply threading tags
Reply threading tags
Forum topics and thread behavior
Forum topics and thread behavior
- Themen-Sitzungsschlüssel hängen
:topic:<threadId>an - Antworten und Tippaktionen richten sich an den Themen-Thread
- Themenkonfigurationspfad:
channels.telegram.groups.<chatId>.topics.<threadId>
threadId=1):- Nachrichtensendungen lassen
message_thread_idweg (Telegram lehntsendMessage(...thread_id=1)ab) - Tippaktionen enthalten weiterhin
message_thread_id
requireMention, allowFrom, skills, systemPrompt, enabled, groupPolicy).
agentId ist ausschließlich themenbezogen und erbt nicht von Gruppenstandardwerten.Agent-Routing pro Thema: Jedes Thema kann durch Setzen von agentId in der Themenkonfiguration an einen anderen Agenten geleitet werden. Dadurch erhält jedes Thema einen eigenen isolierten Arbeitsbereich, Speicher und eine eigene Sitzung. Beispiel:agent:zu:telegram:group:-1001234567890:topic:3Persistente ACP-Topic-Bindung: Forum-Topics können ACP-Harness-Sitzungen über typisierte ACP-Bindungen auf oberster Ebene anheften (bindings[] mit type: "acp" und match.channel: "telegram", peer.kind: "group" sowie einer Topic-qualifizierten ID wie -1001234567890:topic:42). Derzeit auf Forum-Topics in Gruppen/Supergruppen beschränkt. Siehe ACP-Agenten.Thread-gebundener ACP-Spawn aus dem Chat: /acp spawn <agent> --thread here|auto bindet das aktuelle Topic an eine neue ACP-Sitzung; Folgeantworten werden direkt dorthin geleitet. OpenClaw heftet die Spawn-Bestätigung im Topic an. Erfordert, dass channels.telegram.threadBindings.spawnSessions aktiviert bleibt (Standard: true).Der Template-Kontext stellt MessageThreadId und IsForum bereit. DM-Chats mit message_thread_id behalten standardmäßig DM-Routing und Antwortmetadaten in flachen Sitzungen bei; sie verwenden Thread-fähige Sitzungsschlüssel nur, wenn sie mit threadReplies: "inbound", threadReplies: "always", requireTopic: true oder einer passenden Topic-Konfiguration konfiguriert sind. Verwenden Sie channels.telegram.dm.threadReplies auf oberster Ebene für den Kontostandard oder direct.<chatId>.threadReplies für eine einzelne DM.Audio, Video und Sticker
Audio, Video und Sticker
Audionachrichten
Telegram unterscheidet Sprachnachrichten von Audiodateien.- Standard: Verhalten für Audiodateien
- Tag
[[audio_as_voice]]in der Agent-Antwort, um das Senden als Sprachnachricht zu erzwingen - Eingehende Transkripte von Sprachnachrichten werden im Agent-Kontext als maschinell erzeugter, nicht vertrauenswürdiger Text gekennzeichnet; die Erwähnungserkennung verwendet weiterhin das rohe Transkript, sodass erwähnungsgesteuerte Sprachnachrichten weiter funktionieren.
Videonachrichten
Telegram unterscheidet Videodateien von Videonachrichten.Beispiel für eine Nachrichtenaktion:Sticker
Verarbeitung eingehender Sticker:- statisches WEBP: heruntergeladen und verarbeitet (Platzhalter
<media:sticker>) - animiertes TGS: übersprungen
- Video-WEBM: übersprungen
Sticker.emojiSticker.setNameSticker.fileIdSticker.fileUniqueIdSticker.cachedDescription
~/.openclaw/telegram/sticker-cache.json
Reaktionsbenachrichtigungen
Reaktionsbenachrichtigungen
message_reaction-Updates an (getrennt von Nachrichten-Payloads).Wenn aktiviert, stellt OpenClaw Systemereignisse wie diese in die Warteschlange:Telegram reaction added: 👍 by Alice (@alice) on msg 42
channels.telegram.reactionNotifications:off | own | all(Standard:own)channels.telegram.reactionLevel:off | ack | minimal | extensive(Standard:minimal)
ownbedeutet nur Benutzerreaktionen auf vom Bot gesendete Nachrichten (Best Effort über den Cache gesendeter Nachrichten).- Reaktionsereignisse respektieren weiterhin Telegram-Zugriffskontrollen (
dmPolicy,allowFrom,groupPolicy,groupAllowFrom); nicht autorisierte Absender werden verworfen. - Telegram stellt in Reaktions-Updates keine Thread-IDs bereit.
- Nicht-Forum-Gruppen werden zur Gruppenchat-Sitzung geleitet
- Forum-Gruppen werden zur allgemeinen Topic-Sitzung der Gruppe (
:topic:1) geleitet, nicht zum exakten ursprünglichen Topic
allowed_updates für Polling/Webhook enthält message_reaction automatisch.Bestätigungsreaktionen
Bestätigungsreaktionen
ackReaction sendet ein Bestätigungs-Emoji, während OpenClaw eine eingehende Nachricht verarbeitet.Auflösungsreihenfolge:channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- Fallback auf Emoji der Agent-Identität (
agents.list[].identity.emoji, sonst ”👀”)
- Telegram erwartet Unicode-Emoji (zum Beispiel ”👀”).
- Verwenden Sie
"", um die Reaktion für einen Kanal oder ein Konto zu deaktivieren.
Konfigurationsschreibvorgänge aus Telegram-Ereignissen und -Befehlen
Konfigurationsschreibvorgänge aus Telegram-Ereignissen und -Befehlen
configWrites !== false).Von Telegram ausgelöste Schreibvorgänge umfassen:- Gruppenmigrationsereignisse (
migrate_to_chat_id) zum Aktualisieren vonchannels.telegram.groups /config setund/config unset(erfordert aktivierte Befehle)
Long Polling vs. Webhook
Long Polling vs. Webhook
channels.telegram.webhookUrl und channels.telegram.webhookSecret fest; optional webhookPath, webhookHost, webhookPort (Standardwerte /telegram-webhook, 127.0.0.1, 8787).Im Long-Polling-Modus persistiert OpenClaw seine Neustart-Watermark erst, nachdem ein Update erfolgreich dispatcht wurde. Wenn ein Handler fehlschlägt, bleibt dieses Update im selben Prozess wiederholbar und wird für die Neustart-Deduplizierung nicht als abgeschlossen geschrieben.Der lokale Listener bindet an 127.0.0.1:8787. Für öffentlichen Ingress setzen Sie entweder einen Reverse Proxy vor den lokalen Port oder legen webhookHost: "0.0.0.0" bewusst fest.Der Webhook-Modus validiert Request-Guards, das geheime Telegram-Token und den JSON-Body, bevor 200 an Telegram zurückgegeben wird.
OpenClaw verarbeitet das Update anschließend asynchron über dieselben Bot-Lanes pro Chat/pro Topic, die auch von Long Polling verwendet werden, sodass langsame Agent-Turns das Delivery-ACK von Telegram nicht blockieren.Limits, Wiederholung und CLI-Ziele
Limits, Wiederholung und CLI-Ziele
channels.telegram.textChunkLimitist standardmäßig 4000.channels.telegram.chunkMode="newline"bevorzugt Absatzgrenzen (Leerzeilen), bevor nach Länge aufgeteilt wird.channels.telegram.mediaMaxMb(Standard 100) begrenzt die Größe eingehender und ausgehender Telegram-Medien.channels.telegram.mediaGroupFlushMs(Standard 500) steuert, wie lange Telegram-Alben/Mediengruppen gepuffert werden, bevor OpenClaw sie als eine eingehende Nachricht dispatcht. Erhöhen Sie den Wert, wenn Albumteile spät ankommen; verringern Sie ihn, um die Antwortlatenz bei Alben zu reduzieren.channels.telegram.timeoutSecondsüberschreibt das Timeout des Telegram-API-Clients (wenn nicht gesetzt, gilt der grammY-Standard). Bot-Clients begrenzen konfigurierte Werte unterhalb des 60-sekündigen Request-Guards für ausgehende Text-/Typing-Anfragen, damit grammY die sichtbare Antwortzustellung nicht abbricht, bevor OpenClaws Transport-Guard und Fallback ausgeführt werden können. Long Polling verwendet weiterhin einen 45-sekündigengetUpdates-Request-Guard, damit inaktive Polls nicht unbegrenzt offen bleiben.channels.telegram.pollingStallThresholdMsist standardmäßig120000; justieren Sie den Wert nur bei falsch positiven Polling-Stall-Neustarts zwischen30000und600000.- Gruppen-Kontexthistorie verwendet
channels.telegram.historyLimitodermessages.groupChat.historyLimit(Standard 50);0deaktiviert sie. - Ergänzender Kontext für Antworten/Zitate/Weiterleitungen wird in ein ausgewähltes Konversationskontextfenster normalisiert, wenn der Gateway die übergeordneten Nachrichten beobachtet hat; der Cache beobachteter Nachrichten wird neben dem Sitzungsspeicher persistiert. Telegram enthält in Updates nur ein flaches
reply_to_message, daher sind Ketten, die älter als der Cache sind, auf Telegrams aktuelle Update-Payload begrenzt. - Telegram-Allowlists steuern primär, wer den Agent auslösen kann, nicht eine vollständige Redaktionsgrenze für ergänzenden Kontext.
- DM-Historiensteuerungen:
channels.telegram.dmHistoryLimitchannels.telegram.dms["<user_id>"].historyLimit
- Die Konfiguration
channels.telegram.retrygilt für Telegram-Sendehelfer (CLI/Tools/Aktionen) bei behebbaren ausgehenden API-Fehlern. Die Zustellung der endgültigen eingehenden Antwort verwendet ebenfalls eine begrenzte Safe-Send-Wiederholung für Telegram-Pre-Connect-Fehler, wiederholt aber keine mehrdeutigen Post-Send-Netzwerkumschläge, die sichtbare Nachrichten duplizieren könnten.
openclaw message poll und unterstützen Forum-Topics:--poll-duration-seconds(5-600)--poll-anonymous--poll-public--thread-idfür Forum-Topics (oder verwenden Sie ein:topic:-Ziel)
--presentationmitbuttons-Blöcken für Inline-Keyboards, wennchannels.telegram.capabilities.inlineButtonsdies erlaubt--pinoder--delivery '{"pin":true}', um angeheftete Zustellung anzufordern, wenn der Bot in diesem Chat anheften kann--force-document, um ausgehende Bilder, GIFs und Videos als Dokumente statt als komprimierte Foto-, animierte Medien- oder Video-Uploads zu senden
channels.telegram.actions.sendMessage=falsedeaktiviert ausgehende Telegram-Nachrichten, einschließlich Pollschannels.telegram.actions.poll=falsedeaktiviert das Erstellen von Telegram-Polls, während reguläres Senden aktiviert bleibt
Exec-Freigaben in Telegram
Exec-Freigaben in Telegram
channels.telegram.execApprovals.enabled(aktiviert sich automatisch, wenn mindestens ein Genehmiger auflösbar ist)channels.telegram.execApprovals.approvers(fällt auf numerische Owner-IDs auscommands.ownerAllowFromzurück)channels.telegram.execApprovals.target:dm(Standard) |channel|bothagentFilter,sessionFilter
channels.telegram.allowFrom, groupAllowFrom und defaultTo steuern, wer mit dem Bot sprechen kann und wohin er normale Antworten sendet. Sie machen niemanden zu einem Exec-Genehmiger. Das erste genehmigte DM-Pairing bootstrapt commands.ownerAllowFrom, wenn noch kein Befehls-Owner existiert, sodass die Einrichtung mit einem Owner weiterhin funktioniert, ohne IDs unter execApprovals.approvers zu duplizieren.Kanalzustellung zeigt den Befehlstext im Chat; aktivieren Sie channel oder both nur in vertrauenswürdigen Gruppen/Topics. Wenn der Prompt in einem Forum-Topic landet, bewahrt OpenClaw das Topic für den Freigabe-Prompt und die Folgeantwort. Exec-Freigaben laufen standardmäßig nach 30 Minuten ab.Inline-Freigabeschaltflächen erfordern außerdem, dass channels.telegram.capabilities.inlineButtons die Zieloberfläche (dm, group oder all) erlaubt. Freigabe-IDs mit Präfix plugin: werden über Plugin-Freigaben aufgelöst; andere werden zuerst über Exec-Freigaben aufgelöst.Siehe Exec-Freigaben.Steuerung von Fehlerantworten
Wenn der Agent auf einen Zustell- oder Provider-Fehler stößt, kann Telegram entweder mit dem Fehlertext antworten oder ihn unterdrücken. Zwei Konfigurationsschlüssel steuern dieses Verhalten:| Schlüssel | Werte | Standard | Beschreibung |
|---|---|---|---|
channels.telegram.errorPolicy | reply, silent | reply | reply sendet eine freundliche Fehlermeldung an den Chat. silent unterdrückt Fehlerantworten vollständig. |
channels.telegram.errorCooldownMs | number (ms) | 60000 | Mindestzeit zwischen Fehlerantworten an denselben Chat. Verhindert Fehler-Spam während Ausfällen. |
Fehlerbehebung
Bot antwortet nicht auf Gruppennachrichten ohne Erwähnung
Bot antwortet nicht auf Gruppennachrichten ohne Erwähnung
- Wenn
requireMention=falseist, muss der Telegram-Datenschutzmodus vollständige Sichtbarkeit erlauben.- BotFather:
/setprivacy-> Deaktivieren - entfernen Sie den Bot anschließend aus der Gruppe und fügen Sie ihn erneut hinzu
- BotFather:
openclaw channels statuswarnt, wenn die Konfiguration nicht erwähnte Gruppennachrichten erwartet.openclaw channels status --probekann explizite numerische Gruppen-IDs prüfen; wildcard"*"kann nicht per Mitgliedschaft geprüft werden.- schneller Sitzungstest:
/activation always.
Bot sieht überhaupt keine Gruppennachrichten
Bot sieht überhaupt keine Gruppennachrichten
- wenn
channels.telegram.groupsvorhanden ist, muss die Gruppe aufgeführt sein (oder"*"enthalten) - prüfen Sie die Bot-Mitgliedschaft in der Gruppe
- prüfen Sie die Logs:
openclaw logs --followfür Gründe zum Überspringen
Befehle funktionieren nur teilweise oder gar nicht
Befehle funktionieren nur teilweise oder gar nicht
- autorisieren Sie Ihre Absenderidentität (Pairing und/oder numerisches
allowFrom) - die Befehlsautorisierung gilt weiterhin, auch wenn die Gruppenrichtlinie
openist setMyCommands failedmitBOT_COMMANDS_TOO_MUCHbedeutet, dass das native Menü zu viele Einträge hat; reduzieren Sie Plugin-/Skill-/benutzerdefinierte Befehle oder deaktivieren Sie native MenüsdeleteMyCommands- /setMyCommands-Startaufrufe undsendChatAction-Tippindikator-Aufrufe sind begrenzt und werden bei Request-Timeout einmal über Telegrams Transport-Fallback erneut versucht. Dauerhafte Netzwerk-/Fetch-Fehler weisen in der Regel auf DNS-/HTTPS-Erreichbarkeitsprobleme zuapi.telegram.orghin
Start meldet nicht autorisiertes Token
Start meldet nicht autorisiertes Token
getMe returned 401ist ein Telegram-Authentifizierungsfehler für das konfigurierte Bot-Token.- Kopieren Sie das Bot-Token in BotFather erneut oder generieren Sie es neu, und aktualisieren Sie dann
channels.telegram.botToken,channels.telegram.tokenFile,channels.telegram.accounts.<id>.botTokenoderTELEGRAM_BOT_TOKENfür das Standardkonto. deleteWebhook 401 Unauthorizedwährend des Starts ist ebenfalls ein Authentifizierungsfehler; dies als „kein Webhook vorhanden“ zu behandeln, würde denselben Fehler durch ein ungültiges Token nur auf spätere API-Aufrufe verschieben.
Polling- oder Netzwerkinstabilität
Polling- oder Netzwerkinstabilität
- Node 22+ + benutzerdefiniertes Fetch/Proxy können sofortiges Abbruchverhalten auslösen, wenn AbortSignal-Typen nicht übereinstimmen.
- Manche Hosts lösen
api.telegram.orgzuerst zu IPv6 auf; defekter IPv6-Egress kann zeitweise Telegram-API-Fehler verursachen. - Wenn Logs
TypeError: fetch failedoderNetwork request for 'getUpdates' failed!enthalten, versucht OpenClaw diese nun als behebbare Netzwerkfehler erneut. - Während des Polling-Starts verwendet OpenClaw den erfolgreichen Start-
getMe-Probe für grammY wieder, sodass der Runner kein zweitesgetMevor dem erstengetUpdatesbenötigt. - Wenn
deleteWebhookwährend des Polling-Starts mit einem transienten Netzwerkfehler fehlschlägt, fährt OpenClaw mit Long Polling fort, statt einen weiteren Control-Plane-Aufruf vor dem Polling auszuführen. Ein noch aktiver Webhook erscheint alsgetUpdates-Konflikt; OpenClaw baut dann den Telegram-Transport neu auf und versucht die Webhook-Bereinigung erneut. - Wenn Telegram-Sockets in einem kurzen festen Takt erneuert werden, prüfen Sie auf einen niedrigen Wert für
channels.telegram.timeoutSeconds; Bot-Clients begrenzen konfigurierte Werte unterhalb der Schutzwerte für ausgehende Requests undgetUpdates, ältere Releases konnten jedoch jedes Polling oder jede Antwort abbrechen, wenn dies unter diesen Schutzwerten gesetzt war. - Wenn Logs
Polling stall detectedenthalten, startet OpenClaw das Polling neu und baut den Telegram-Transport nach standardmäßig 120 Sekunden ohne abgeschlossene Long-Poll-Liveness neu auf. openclaw channels status --probeundopenclaw doctorwarnen, wenn ein laufendes Polling-KontogetUpdatesnach der Startnachfrist nicht abgeschlossen hat, wenn ein laufendes Webhook-KontosetWebhooknach der Startnachfrist nicht abgeschlossen hat oder wenn die letzte erfolgreiche Polling-Transportaktivität veraltet ist.- Erhöhen Sie
channels.telegram.pollingStallThresholdMsnur, wenn lang laufendegetUpdates-Aufrufe fehlerfrei sind, Ihr Host aber weiterhin falsche Polling-Stall-Neustarts meldet. Dauerhafte Stalls deuten in der Regel auf Proxy-, DNS-, IPv6- oder TLS-Egress-Probleme zwischen Host undapi.telegram.orghin. - Telegram berücksichtigt außerdem Prozess-Proxy-Umgebungsvariablen für den Bot-API-Transport, einschließlich
HTTP_PROXY,HTTPS_PROXY,ALL_PROXYund deren Varianten in Kleinschreibung.NO_PROXY/no_proxykannapi.telegram.orgweiterhin umgehen. - Wenn der von OpenClaw verwaltete Proxy über
OPENCLAW_PROXY_URLfür eine Dienstumgebung konfiguriert ist und keine standardmäßige Proxy-Umgebungsvariable vorhanden ist, verwendet Telegram diese URL ebenfalls für den Bot-API-Transport. - Leiten Sie Telegram-API-Aufrufe auf VPS-Hosts mit instabilem direktem Egress/TLS über
channels.telegram.proxy:
- Node 22+ verwendet standardmäßig
autoSelectFamily=true(außer WSL2). Die Reihenfolge der Telegram-DNS-Ergebnisse berücksichtigtOPENCLAW_TELEGRAM_DNS_RESULT_ORDER, dannchannels.telegram.network.dnsResultOrder, dann den Prozessstandard wieNODE_OPTIONS=--dns-result-order=ipv4first; wenn nichts davon zutrifft, fällt Node 22+ aufipv4firstzurück. - Wenn Ihr Host WSL2 ist oder ausdrücklich besser mit reinem IPv4-Verhalten funktioniert, erzwingen Sie die Familienauswahl:
- Antworten aus dem RFC-2544-Benchmark-Bereich (
198.18.0.0/15) sind für Telegram-Mediendownloads standardmäßig bereits erlaubt. Wenn ein vertrauenswürdiger Fake-IP- oder transparenter Proxyapi.telegram.orgwährend Mediendownloads auf eine andere private/interne/Special-Use-Adresse umschreibt, können Sie den nur für Telegram geltenden Bypass aktivieren:
- Dieselbe Opt-in-Option ist pro Konto unter
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetworkverfügbar. - Wenn Ihr Proxy Telegram-Medienhosts in
198.18.x.xauflöst, lassen Sie das gefährliche Flag zunächst deaktiviert. Telegram-Medien erlauben den RFC-2544-Benchmark-Bereich bereits standardmäßig.
- Umgebungsüberschreibungen (temporär):
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first
- DNS-Antworten validieren:
Konfigurationsreferenz
Primäre Referenz: Konfigurationsreferenz - Telegram.Wichtige Telegram-Felder
Wichtige Telegram-Felder
- Start/Auth:
enabled,botToken,tokenFile,accounts.*(tokenFilemuss auf eine reguläre Datei verweisen; Symlinks werden abgelehnt) - Zugriffskontrolle:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,groups.*.topics.*,bindings[]auf oberster Ebene (type: "acp") - Ausführungsgenehmigungen:
execApprovals,accounts.*.execApprovals - Befehl/Menü:
commands.native,commands.nativeSkills,customCommands - Threads/Antworten:
replyToMode,dm.threadReplies,direct.*.threadReplies - Streaming:
streaming(Vorschau),streaming.preview.toolProgress,blockStreaming - Formatierung/Zustellung:
textChunkLimit,chunkMode,linkPreview,responsePrefix - Medien/Netzwerk:
mediaMaxMb,mediaGroupFlushMs,timeoutSeconds,pollingStallThresholdMs,retry,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - benutzerdefinierter API-Root:
apiRoot(nur Bot-API-Root;/bot<TOKEN>nicht einschließen) - Webhook:
webhookUrl,webhookSecret,webhookPath,webhookHost - Aktionen/Fähigkeiten:
capabilities.inlineButtons,actions.sendMessage|editMessage|deleteMessage|reactions|sticker - Reaktionen:
reactionNotifications,reactionLevel - Fehler:
errorPolicy,errorCooldownMs - Schreibvorgänge/Verlauf:
configWrites,historyLimit,dmHistoryLimit,dms.*.historyLimit
channels.telegram.defaultAccount (oder fügen Sie channels.telegram.accounts.default ein), um das Standard-Routing explizit zu machen. Andernfalls fällt OpenClaw auf die erste normalisierte Konto-ID zurück und openclaw doctor warnt. Benannte Konten erben channels.telegram.allowFrom / groupAllowFrom, aber nicht accounts.default.*-Werte.