Telegram (Bot API)
Status: produktionsreif für Bot-DMs + Gruppen über grammY. Long-Polling standardmäßig; Webhook optional.Schnellstart (Einsteiger)
- Erstellen Sie einen Bot mit @BotFather (Direktlink). Bestätigen Sie, dass der Handle exakt
@BotFatherist, und kopieren Sie anschließend das Token. - Setzen Sie das Token:
- Env:
TELEGRAM_BOT_TOKEN=... - Oder Konfiguration:
channels.telegram.botToken: "...". - Wenn beide gesetzt sind, hat die Konfiguration Vorrang (Env-Fallback gilt nur für das Standardkonto).
- Env:
- Starten Sie das Gateway.
- DM-Zugriff ist standardmäßig per Pairing aktiviert; genehmigen Sie beim ersten Kontakt den Pairing-Code.
Was es ist
- Ein Telegram Bot API-Kanal, der dem Gateway gehört.
- Deterministisches Routing: Antworten gehen zurück zu Telegram; das Modell wählt keine Kanäle.
- DMs teilen sich die Hauptsitzung des Agenten; Gruppen bleiben isoliert (
agent:<agentId>:telegram:group:<chatId>).
Einrichtung (Schnellpfad)
1. Bot-Token erstellen (BotFather)
- Öffnen Sie Telegram und chatten Sie mit @BotFather (Direktlink). Bestätigen Sie, dass der Handle exakt
@BotFatherist. - Führen Sie
/newbotaus und folgen Sie den Anweisungen (Name + Benutzername mit Endungbot). - Kopieren Sie das Token und bewahren Sie es sicher auf.
/setjoingroups— Hinzufügen des Bots zu Gruppen erlauben/verbieten./setprivacy— Steuern, ob der Bot alle Gruppennachrichten sieht.
2. Token konfigurieren (Env oder Konfiguration)
Beispiel:TELEGRAM_BOT_TOKEN=... (funktioniert für das Standardkonto).
Wenn Env und Konfiguration gesetzt sind, hat die Konfiguration Vorrang.
Multi-Account-Unterstützung: Verwenden Sie channels.telegram.accounts mit kontospezifischen Tokens und optional name. Siehe gateway/configuration für das gemeinsame Muster.
- Starten Sie das Gateway. Telegram startet, sobald ein Token aufgelöst ist (zuerst Konfiguration, dann Env-Fallback).
- DM-Zugriff ist standardmäßig Pairing. Genehmigen Sie den Code beim ersten Kontakt mit dem Bot.
- Für Gruppen: Fügen Sie den Bot hinzu, entscheiden Sie über Datenschutz-/Admin-Verhalten (unten) und setzen Sie dann
channels.telegram.groups, um Mention-Gating + Allowlists zu steuern.
Token + Datenschutz + Berechtigungen (Telegram-Seite)
Token-Erstellung (BotFather)
/newboterstellt den Bot und gibt das Token zurück (geheim halten).- Wenn ein Token kompromittiert wird, widerrufen/regenerieren Sie es über @BotFather und aktualisieren Sie Ihre Konfiguration.
Sichtbarkeit von Gruppennachrichten (Privacy Mode)
Telegram-Bots verwenden standardmäßig den Privacy Mode, der einschränkt, welche Gruppennachrichten sie empfangen. Wenn Ihr Bot alle Gruppennachrichten sehen muss, haben Sie zwei Optionen:- Privacy Mode mit
/setprivacydeaktivieren oder - Den Bot als Gruppen-Admin hinzufügen (Admin-Bots erhalten alle Nachrichten).
Gruppenberechtigungen (Admin-Rechte)
Der Admin-Status wird innerhalb der Gruppe (Telegram-UI) gesetzt. Admin-Bots erhalten immer alle Gruppennachrichten; verwenden Sie Admin, wenn Sie volle Sichtbarkeit benötigen.Funktionsweise (Verhalten)
- Eingehende Nachrichten werden in den gemeinsamen Kanal-Umschlag mit Antwortkontext und Medien-Platzhaltern normalisiert.
- Gruppenantworten erfordern standardmäßig eine Erwähnung (native @Erwähnung oder
agents.list[].groupChat.mentionPatterns/messages.groupChat.mentionPatterns). - Multi-Agent-Override: Setzen Sie agentenspezifische Muster auf
agents.list[].groupChat.mentionPatterns. - Antworten werden immer in denselben Telegram-Chat zurückgeroutet.
- Long-Polling nutzt den grammY-Runner mit Sequenzierung pro Chat; die Gesamtkonkurrenz ist durch
agents.defaults.maxConcurrentbegrenzt. - Die Telegram Bot API unterstützt keine Lesebestätigungen; es gibt keine Option
sendReadReceipts.
Entwurfs-Streaming
OpenClaw kann in Telegram-DMs partielle Antworten streamen, indemsendMessageDraft verwendet wird.
Voraussetzungen:
- Threaded Mode für den Bot in @BotFather aktiviert (Forum-Topic-Modus).
- Nur private Chat-Threads (Telegram enthält
message_thread_idin eingehenden Nachrichten). channels.telegram.streamModenicht auf"off"gesetzt (Standard:"partial";"block"aktiviert chunked Draft-Updates).
Formatierung (Telegram HTML)
- Ausgehender Telegram-Text verwendet
parse_mode: "HTML"(Telegram-unterstützter Tag-Subset). - Markdown-ähnliche Eingaben werden in Telegram-sicheres HTML gerendert (fett/kursiv/durchgestrichen/Code/Links); Block-Elemente werden zu Text mit Zeilenumbrüchen/Aufzählungen abgeflacht.
- Rohes HTML aus Modellen wird escaped, um Telegram-Parsefehler zu vermeiden.
- Wenn Telegram die HTML-Payload ablehnt, versucht OpenClaw dieselbe Nachricht erneut als Klartext zu senden.
Befehle (nativ + benutzerdefiniert)
OpenClaw registriert native Befehle (wie/status, /reset, /model) beim Start im Bot-Menü von Telegram.
Sie können über die Konfiguration benutzerdefinierte Befehle zum Menü hinzufügen:
Setup-Fehlerbehebung (Befehle)
setMyCommands failedin Logs bedeutet meist, dass ausgehendes HTTPS/DNS zuapi.telegram.orgblockiert ist.- Wenn Sie Fehler
sendMessageodersendChatActionsehen, prüfen Sie IPv6-Routing und DNS.
- Benutzerdefinierte Befehle sind nur Menüeinträge; OpenClaw implementiert sie nicht, sofern Sie sie nicht anderweitig behandeln.
- Some commands can be handled by plugins/skills without being registered in Telegram’s command menu. These still work when typed (they just won’t show up in
/commands/ the menu). - Befehlsnamen werden normalisiert (führendes
/entfernt, kleingeschrieben) und müssena-z,0-9,_entsprechen (1–32 Zeichen). - Benutzerdefinierte Befehle können native Befehle nicht überschreiben. Konflikte werden ignoriert und protokolliert.
- Wenn
commands.nativedeaktiviert ist, werden nur benutzerdefinierte Befehle registriert (oder gelöscht, falls keine vorhanden sind).
Device pairing commands (device-pair plugin)
If the device-pair plugin is installed, it adds a Telegram-first flow for pairing a new phone:
/pairgenerates a setup code (sent as a separate message for easy copy/paste).- Paste the setup code in the iOS app to connect.
/pair approveapproves the latest pending device request.
Limits
- Ausgehender Text wird auf
channels.telegram.textChunkLimitsegmentiert (Standard 4000). - Optionales Newline-Chunking: Setzen Sie
channels.telegram.chunkMode="newline", um vor der Längen-Segmentierung an Leerzeilen (Absatzgrenzen) zu teilen. - Medien-Downloads/Uploads sind durch
channels.telegram.mediaMaxMbbegrenzt (Standard 5). - Telegram Bot API-Anfragen laufen nach
channels.telegram.timeoutSecondsab (Standard 500 über grammY). Setzen Sie niedrigere Werte, um lange Hänger zu vermeiden. - Gruppenverlaufs-Kontext nutzt
channels.telegram.historyLimit(oderchannels.telegram.accounts.*.historyLimit) und fällt aufmessages.groupChat.historyLimitzurück. Setzen Sie0, um zu deaktivieren (Standard 50). - DM-Verlauf kann mit
channels.telegram.dmHistoryLimitbegrenzt werden (Benutzer-Turns). Pro-Benutzer-Overrides:channels.telegram.dms["<user_id>"].historyLimit.
Gruppenaktivierungsmodi
Standardmäßig antwortet der Bot in Gruppen nur auf Erwähnungen (@botname oder Muster in agents.list[].groupChat.mentionPatterns). Um dieses Verhalten zu ändern:
Über Konfiguration (empfohlen)
channels.telegram.groups erstellt eine Allowlist – nur aufgelistete Gruppen (oder "*") werden akzeptiert.
Forum-Themen erben die Konfiguration ihrer übergeordneten Gruppe (allowFrom, requireMention, Skills, Prompts), sofern Sie keine topic-spezifischen Overrides unter channels.telegram.groups.<groupId>.topics.<topicId> hinzufügen.
Alle Gruppen mit immer-antworten erlauben:
Über Befehl (Sitzungsebene)
Senden Sie in der Gruppe:/activation always– auf alle Nachrichten antworten/activation mention– Erwähnungen erforderlich (Standard)
Gruppen-Chat-ID ermitteln
Leiten Sie eine beliebige Nachricht aus der Gruppe an@userinfobot oder @getidsbot auf Telegram weiter, um die Chat-ID zu sehen (negative Zahl wie -1001234567890).
Tipp: Für Ihre eigene Benutzer-ID senden Sie dem Bot eine DM; er antwortet mit Ihrer Benutzer-ID (Pairing-Nachricht), oder verwenden Sie /whoami, sobald Befehle aktiviert sind.
Datenschutzhinweis: @userinfobot ist ein Drittanbieter-Bot. Alternativ fügen Sie den Bot der Gruppe hinzu, senden eine Nachricht und verwenden openclaw logs --follow, um chat.id zu lesen, oder nutzen Sie die Bot API getUpdates.
Konfigurationsschreibzugriffe
Standardmäßig darf Telegram durch Kanalereignisse oder/config set|unset ausgelöste Konfigurationsupdates schreiben.
Dies geschieht, wenn:
- Eine Gruppe zu einer Supergroup aufgewertet wird und Telegram
migrate_to_chat_idsendet (Chat-ID ändert sich). OpenClaw kannchannels.telegram.groupsautomatisch migrieren. - Sie
/config setoder/config unsetin einem Telegram-Chat ausführen (erfordertcommands.config: true).
Themen (Forum-Supergroups)
Telegram-Forum-Themen enthalten pro Nachricht einemessage_thread_id. OpenClaw:
- Hängt
:topic:<threadId>an den Sitzungsschlüssel der Telegram-Gruppe an, sodass jedes Thema isoliert ist. - Sendet Tippindikatoren und Antworten mit
message_thread_id, damit Antworten im Thema bleiben. - Allgemeines Thema (Thread-ID
1) ist speziell: Nachrichtensendungen lassenmessage_thread_idweg (Telegram lehnt es ab), Tippindikatoren enthalten es weiterhin. - Stellt
MessageThreadId+IsForumim Template-Kontext für Routing/Templating bereit. - Themenspezifische Konfiguration ist unter
channels.telegram.groups.<chatId>.topics.<threadId>verfügbar (Skills, Allowlists, Auto-Reply, System-Prompts, Deaktivieren). - Themenkonfigurationen erben Gruppeneinstellungen (requireMention, Allowlists, Skills, Prompts, Enabled), sofern nicht pro Thema überschrieben.
message_thread_id enthalten. OpenClaw behält den DM-Sitzungsschlüssel unverändert bei, nutzt die Thread-ID jedoch weiterhin für Antworten/Entwurfs-Streaming, wenn vorhanden.
Inline-Buttons
Telegram unterstützt Inline-Keyboards mit Callback-Buttons.off— Inline-Buttons deaktiviertdm— nur DMs (Gruppen-Ziele blockiert)group— nur Gruppen (DM-Ziele blockiert)all— DMs + Gruppenallowlist— DMs + Gruppen, aber nur Absender, die durchallowFrom/groupAllowFromerlaubt sind (gleiche Regeln wie Steuerbefehle)
allowlist.
Legacy: capabilities: ["inlineButtons"] = inlineButtons: "all".
Buttons senden
Verwenden Sie das Nachrichten-Werkzeug mit dem Parameterbuttons:
callback_data: value
Konfigurationsoptionen
Telegram-Fähigkeiten können auf zwei Ebenen konfiguriert werden (Objektform oben gezeigt; Legacy-String-Arrays werden weiterhin unterstützt):channels.telegram.capabilities: Globale Standard-Fähigkeitskonfiguration, die auf alle Telegram-Konten angewendet wird, sofern nicht überschrieben.channels.telegram.accounts.<account>.capabilities: Kontospezifische Fähigkeiten, die die globalen Standards für dieses Konto überschreiben.
Zugriffskontrolle (DMs + Gruppen)
DM-Zugriff
- Standard:
channels.telegram.dmPolicy = "pairing". Unbekannte Absender erhalten einen Pairing-Code; Nachrichten werden ignoriert, bis sie genehmigt sind (Codes verfallen nach 1 Stunde). - Genehmigung über:
openclaw pairing list telegramopenclaw pairing approve telegram <CODE>
- Pairing ist der Standard-Tokenaustausch für Telegram-DMs. Details: Pairing
channels.telegram.allowFromakzeptiert numerische Benutzer-IDs (empfohlen) oder@username-Einträge. Es ist nicht der Bot-Benutzername; verwenden Sie die ID des menschlichen Absenders. Der Assistent akzeptiert@usernameund löst sie, wenn möglich, zur numerischen ID auf.
Ihre Telegram-Benutzer-ID finden
Sicherer (kein Drittanbieter-Bot):- Starten Sie das Gateway und senden Sie Ihrem Bot eine DM.
- Führen Sie
openclaw logs --followaus und suchen Sie nachfrom.id.
- Senden Sie Ihrem Bot eine DM.
-
Rufen Sie Updates mit Ihrem Bot-Token ab und lesen Sie
message.from.id:
- Senden Sie eine DM an
@userinfobotoder@getidsbotund verwenden Sie die zurückgegebene Benutzer-ID.
Gruppenzugriff
Zwei unabhängige Kontrollen: 1. Welche Gruppen erlaubt sind (Gruppen-Allowlist überchannels.telegram.groups):
- Keine
groups-Konfiguration = alle Gruppen erlaubt - Mit
groups-Konfiguration = nur aufgelistete Gruppen oder"*"sind erlaubt - Beispiel:
"groups": { "-1001234567890": {}, "*": {} }erlaubt alle Gruppen
channels.telegram.groupPolicy):
"open"= alle Absender in erlaubten Gruppen können schreiben"allowlist"= nur Absender inchannels.telegram.groupAllowFromkönnen schreiben"disabled"= keine Gruppennachrichten werden akzeptiert Standard istgroupPolicy: "allowlist"(blockiert, sofern Sie nichtgroupAllowFromhinzufügen).
groupPolicy: "allowlist" + groupAllowFrom + spezifische Gruppen in channels.telegram.groups gelistet
Um jedem Gruppenmitglied in einer bestimmten Gruppe das Schreiben zu erlauben (während Steuerbefehle weiterhin auf autorisierte Absender beschränkt bleiben), setzen Sie ein gruppenspezifisches Override:
Long-Polling vs. Webhook
- Standard: Long-Polling (keine öffentliche URL erforderlich).
- Webhook-Modus: Setzen Sie
channels.telegram.webhookUrlundchannels.telegram.webhookSecret(optionalchannels.telegram.webhookPath).- Der lokale Listener bindet an
0.0.0.0:8787und stellt standardmäßigPOST /telegram-webhookbereit. - Wenn Ihre öffentliche URL abweicht, verwenden Sie einen Reverse Proxy und zeigen Sie
channels.telegram.webhookUrlauf den öffentlichen Endpunkt.
- Der lokale Listener bindet an
Antwort-Threading
Telegram unterstützt optionales Threading von Antworten über Tags:[[reply_to_current]]– Antwort auf die auslösende Nachricht.[[reply_to:<id>]]– Antwort auf eine bestimmte Nachrichten-ID.
channels.telegram.replyToMode:
first(Standard),all,off.
Audionachrichten (Sprachnotiz vs. Datei)
Telegram unterscheidet Sprachnotizen (runde Blase) von Audiodateien (Metadatenkarte). OpenClaw verwendet aus Gründen der Abwärtskompatibilität standardmäßig Audiodateien. Um in Agentenantworten eine Sprachnotiz-Blase zu erzwingen, fügen Sie dieses Tag irgendwo in der Antwort ein:[[audio_as_voice]]— Audio als Sprachnotiz statt als Datei senden.
asVoice: true mit einer sprachkompatiblen Audio-media-URL
(message ist optional, wenn Medien vorhanden sind):
Video messages (video vs video note)
Telegram distinguishes video notes (round bubble) from video files (rectangular). OpenClaw defaults to video files. For message tool sends, setasVideoNote: true with a video media URL:
Sticker
OpenClaw unterstützt das Empfangen und Senden von Telegram-Stickern mit intelligenter Zwischenspeicherung.Sticker empfangen
Wenn ein Benutzer einen Sticker sendet, verarbeitet OpenClaw ihn je nach Stickertyp:- Statische Sticker (WEBP): Heruntergeladen und über Vision verarbeitet. Der Sticker erscheint als
<media:sticker>-Platzhalter im Nachrichteninhalt. - Animierte Sticker (TGS): Übersprungen (Lottie-Format wird für die Verarbeitung nicht unterstützt).
- Video-Sticker (WEBM): Übersprungen (Videoformat wird für die Verarbeitung nicht unterstützt).
Sticker— Objekt mit:emoji— dem Sticker zugeordnetes EmojisetName— Name des Sticker-SetsfileId— Telegram-Datei-ID (denselben Sticker zurücksenden)fileUniqueId— stabile ID für Cache-LookupcachedDescription— zwischengespeicherte Vision-Beschreibung, sofern verfügbar
Sticker-Cache
Sticker werden über die Vision-Fähigkeiten der KI verarbeitet, um Beschreibungen zu erzeugen. Da dieselben Sticker häufig wiederholt gesendet werden, speichert OpenClaw diese Beschreibungen zwischen, um redundante API-Aufrufe zu vermeiden. So funktioniert es:- Erstkontakt: Das Stickerbild wird zur Vision-Analyse an die KI gesendet. Die KI erzeugt eine Beschreibung (z. B. „Eine Cartoon-Katze, die enthusiastisch winkt“).
- Cache-Speicherung: Die Beschreibung wird zusammen mit der Datei-ID des Stickers, dem Emoji und dem Set-Namen gespeichert.
- Weitere Kontakte: Wird derselbe Sticker erneut gesehen, wird die zwischengespeicherte Beschreibung direkt verwendet. Das Bild wird nicht erneut an die KI gesendet.
~/.openclaw/telegram/sticker-cache.json
Cache-Eintragsformat:
- Reduziert API-Kosten durch Vermeidung wiederholter Vision-Aufrufe für denselben Sticker
- Schnellere Antwortzeiten für gecachte Sticker (keine Vision-Verarbeitungsverzögerung)
- Ermöglicht Sticker-Suchfunktionen auf Basis zwischengespeicherter Beschreibungen
Sticker senden
Der Agent kann Sticker senden und suchen, indem er die Aktionensticker und sticker-search verwendet. Diese sind standardmäßig deaktiviert und müssen in der Konfiguration aktiviert werden:
fileId(erforderlich) — die Telegram-Datei-ID des Stickers. Erhalten Sie diese ausSticker.fileIdbeim Empfangen eines Stickers oder aus einemsticker-search-Ergebnis.replyTo(optional) — Nachrichten-ID, auf die geantwortet werden soll.threadId(optional) — Nachrichten-Thread-ID für Forum-Themen.
Streaming (Entwürfe)
Telegram kann Entwurfsblasen streamen, während der Agent eine Antwort generiert. OpenClaw verwendet die Bot APIsendMessageDraft (keine echten Nachrichten) und sendet anschließend die
finale Antwort als normale Nachricht.
Voraussetzungen (Telegram Bot API 9.3+):
- Private Chats mit aktivierten Themen (Forum-Topic-Modus für den Bot).
- Eingehende Nachrichten müssen
message_thread_identhalten (privater Topic-Thread). - Streaming wird für Gruppen/Supergroups/Kanäle ignoriert.
channels.telegram.streamMode: "off" | "partial" | "block"(Standard:partial)partial: Aktualisiert die Entwurfsblase mit dem neuesten Streaming-Text.block: Aktualisiert die Entwurfsblase in größeren Blöcken (chunked).off: Deaktiviert Entwurfs-Streaming.
- Optional (nur für
streamMode: "block"):channels.telegram.draftChunk: { minChars?, maxChars?, breakPreference? }- Standardwerte:
minChars: 200,maxChars: 800,breakPreference: "paragraph"(begrenzt aufchannels.telegram.textChunkLimit).
- Standardwerte:
channels.telegram.blockStreaming: true,
wenn Sie frühe Telegram-Nachrichten statt Entwurfs-Updates wünschen.
Reasoning-Stream (nur Telegram):
/reasoning streamstreamt die Begründung in die Entwurfsblase, während die Antwort generiert wird, und sendet anschließend die finale Antwort ohne Begründung.- Wenn
channels.telegram.streamModeaufoffgesetzt ist, ist der Reasoning-Stream deaktiviert. Weitere Informationen: Streaming + Chunking.
Retry-Richtlinie
Ausgehende Telegram-API-Aufrufe werden bei transienten Netzwerk-/429-Fehlern mit exponentiellem Backoff und Jitter wiederholt. Konfigurieren Sie dies überchannels.telegram.retry. Siehe Retry policy.
Agenten-Werkzeug (Nachrichten + Reaktionen)
- Werkzeug:
telegrammit AktionsendMessage(to,content, optionalmediaUrl,replyToMessageId,messageThreadId). - Werkzeug:
telegrammit Aktionreact(chatId,messageId,emoji). - Werkzeug:
telegrammit AktiondeleteMessage(chatId,messageId). - Semantik zum Entfernen von Reaktionen: siehe /tools/reactions.
- Werkzeug-Gating:
channels.telegram.actions.reactions,channels.telegram.actions.sendMessage,channels.telegram.actions.deleteMessage(Standard: aktiviert) undchannels.telegram.actions.sticker(Standard: deaktiviert).
Reaktionsbenachrichtigungen
So funktionieren Reaktionen: Telegram-Reaktionen treffen als separatemessage_reaction-Ereignisse ein, nicht als Eigenschaften in Nachrichten-Payloads. Wenn ein Benutzer eine Reaktion hinzufügt, führt OpenClaw aus:
- Empfang des
message_reaction-Updates von der Telegram API - Umwandlung in ein Systemereignis mit Format:
"Telegram reaction added: {emoji} by {user} on msg {id}" - Ruft das Systemereignis mit dem gleichen Sitzungsschlüssel als reguläre Nachrichten ein
- Wenn die nächste Nachricht in dieser Konversation eintrifft, werden Systemereignisse abgearbeitet und dem Kontext des Agenten vorangestellt
-
channels.telegram.reactionNotifications: Steuert, welche Reaktionen Benachrichtigungen auslösen"off"— alle Reaktionen ignorieren"own"— benachrichtigen, wenn Benutzer auf Bot-Nachrichten reagieren (Best-Effort; In-Memory) (Standard)"all"— für alle Reaktionen benachrichtigen
-
channels.telegram.reactionLevel: Steuert die Reaktionsfähigkeit des Agenten"off"— Agent kann nicht reagieren"ack"— Bot sendet Bestätigungsreaktionen (👀 während der Verarbeitung) (Standard)"minimal"— Agent kann sparsam reagieren (Richtwert: 1 pro 5–10 Austauschvorgänge)"extensive"— Agent kann bei Bedarf großzügig reagieren
message_thread_id und verwenden Sitzungsschlüssel wie agent:main:telegram:group:{chatId}:topic:{threadId}. Dadurch bleiben Reaktionen und Nachrichten im selben Thema zusammen.
Beispielkonfiguration:
- Telegram-Bots müssen explizit
message_reactioninallowed_updatesanfordern (automatisch durch OpenClaw konfiguriert) - Im Webhook-Modus sind Reaktionen im Webhook
allowed_updatesenthalten - Im Polling-Modus sind Reaktionen im
getUpdatesallowed_updatesenthalten
Zustellziele (CLI/Cron)
- Verwenden Sie eine Chat-ID (
123456789) oder einen Benutzernamen (@name) als Ziel. - Beispiel:
openclaw message send --channel telegram --target 123456789 --message "hi".
Fehlerbehebung
Bot antwortet in einer Gruppe nicht auf Nachrichten ohne Erwähnung:- Wenn Sie
channels.telegram.groups.*.requireMention=falsegesetzt haben, muss der Privacy Mode der Telegram Bot API deaktiviert sein.- BotFather:
/setprivacy→ Disable (anschließend Bot aus der Gruppe entfernen und erneut hinzufügen)
- BotFather:
openclaw channels statuszeigt eine Warnung, wenn die Konfiguration nicht erwähnte Gruppennachrichten erwartet.openclaw channels status --probekann zusätzlich die Mitgliedschaft für explizite numerische Gruppen-IDs prüfen (Wildcard-"*"-Regeln können nicht geprüft werden).- Schnelltest:
/activation always(nur Sitzung; für Persistenz Konfiguration verwenden)
- Wenn
channels.telegram.groupsgesetzt ist, muss die Gruppe gelistet sein oder"*"verwenden - Prüfen Sie die Datenschutzeinstellungen in @BotFather → „Group Privacy“ sollte OFF sein
- Verifizieren Sie, dass der Bot tatsächlich Mitglied ist (nicht nur Admin ohne Lesezugriff)
- Prüfen Sie die Gateway-Logs:
openclaw logs --follow(nach „skipping group message“ suchen)
/activation always:
- Der Befehl
/activationaktualisiert den Sitzungszustand, persistiert aber nicht in die Konfiguration - Für persistentes Verhalten fügen Sie die Gruppe zu
channels.telegram.groupsmitrequireMention: falsehinzu
/status funktionieren nicht:
- Stellen Sie sicher, dass Ihre Telegram-Benutzer-ID autorisiert ist (über Pairing oder
channels.telegram.allowFrom) - Befehle erfordern Autorisierung, selbst in Gruppen mit
groupPolicy: "open"
- Node 22+ ist strenger bei
AbortSignal-Instanzen; fremde Signale könnenfetch-Aufrufe sofort abbrechen. - Aktualisieren Sie auf einen OpenClaw-Build, der Abort-Signale normalisiert, oder betreiben Sie das Gateway auf Node 20, bis Sie upgraden können.
HttpError: Network request ... failed):
- Einige Hosts lösen
api.telegram.orgzuerst zu IPv6 auf. Wenn Ihr Server keinen funktionierenden IPv6-Egress hat, kann grammY bei IPv6-only-Anfragen hängen bleiben. - Beheben Sie dies, indem Sie IPv6-Egress aktivieren oder IPv4-Auflösung für
api.telegram.orgerzwingen (z. B. einen/etc/hosts-Eintrag mit dem IPv4-A-Record hinzufügen oder IPv4 im OS-DNS-Stack bevorzugen) und starten Sie das Gateway neu. - Schnellcheck:
dig +short api.telegram.org Aunddig +short api.telegram.org AAAA, um zu bestätigen, was DNS zurückgibt.
Konfigurationsreferenz (Telegram)
Vollständige Konfiguration: Konfiguration Anbieteroptionen:channels.telegram.enabled: Kanalstart aktivieren/deaktivieren.channels.telegram.botToken: Bot-Token (BotFather).channels.telegram.tokenFile: Token aus Dateipfad lesen.channels.telegram.dmPolicy:pairing | allowlist | open | disabled(Standard: Pairing).channels.telegram.allowFrom: DM-Allowlist (IDs/Benutzernamen).openerfordert"*".channels.telegram.groupPolicy:open | allowlist | disabled(Standard: Allowlist).channels.telegram.groupAllowFrom: Gruppen-Absender-Allowlist (IDs/Benutzernamen).channels.telegram.groups: Gruppen-Standards + Allowlist (verwenden Sie"*"für globale Defaults).channels.telegram.groups.<id>.groupPolicy: Gruppenspezifisches Override für groupPolicy (open | allowlist | disabled).channels.telegram.groups.<id>.requireMention: Standard für Mention-Gating.channels.telegram.groups.<id>.skills: Skill-Filter (weglassen = alle Skills, leer = keine).channels.telegram.groups.<id>.allowFrom: Gruppenspezifisches Absender-Allowlist-Override.channels.telegram.groups.<id>.systemPrompt: Zusätzliches System-Prompt für die Gruppe.channels.telegram.groups.<id>.enabled: Deaktiviert die Gruppe, wennfalse.channels.telegram.groups.<id>.topics.<threadId>.*: Themenspezifische Overrides (gleiche Felder wie Gruppe).channels.telegram.groups.<id>.topics.<threadId>.groupPolicy: Themenspezifisches Override für groupPolicy (open | allowlist | disabled).channels.telegram.groups.<id>.topics.<threadId>.requireMention: Themenspezifisches Mention-Gating-Override.
channels.telegram.capabilities.inlineButtons:off | dm | group | all | allowlist(Standard: Allowlist).channels.telegram.accounts.<account>.capabilities.inlineButtons: Kontospezifisches Override.channels.telegram.replyToMode:off | first | all(Standard:first).channels.telegram.textChunkLimit: Ausgehende Chunk-Größe (Zeichen).channels.telegram.chunkMode:length(Standard) odernewline, um vor der Längen-Segmentierung an Leerzeilen (Absatzgrenzen) zu teilen.channels.telegram.linkPreview: Link-Vorschauen für ausgehende Nachrichten umschalten (Standard: true).channels.telegram.streamMode:off | partial | block(Entwurfs-Streaming).channels.telegram.mediaMaxMb: Eingehende/ausgehende Medienbegrenzung (MB).channels.telegram.retry: Wiederholungsrichtlinie für ausgehende Telegram-API-Aufrufe (Versuche, minDelayMs, maxDelayMs, Jitter).channels.telegram.network.autoSelectFamily: Override für Node autoSelectFamily (true=aktivieren, false=deaktivieren). Standardmäßig auf Node 22 deaktiviert, um Happy-Eyeballs-Timeouts zu vermeiden.channels.telegram.proxy: Proxy-URL für Bot-API-Aufrufe (SOCKS/HTTP).channels.telegram.webhookUrl: Webhook-Modus aktivieren (erfordertchannels.telegram.webhookSecret).channels.telegram.webhookSecret: Webhook-Secret (erforderlich, wenn webhookUrl gesetzt ist).channels.telegram.webhookPath: Lokaler Webhook-Pfad (Standard/telegram-webhook).channels.telegram.actions.reactions: Telegram-Werkzeugreaktionen steuern.channels.telegram.actions.sendMessage: Telegram-Werkzeug-Nachrichtensendungen steuern.channels.telegram.actions.deleteMessage: Telegram-Werkzeug-Nachrichtenlöschungen steuern.channels.telegram.actions.sticker: Telegram-Sticker-Aktionen steuern — Senden und Suchen (Standard: false).channels.telegram.reactionNotifications:off | own | all— steuert, welche Reaktionen Systemereignisse auslösen (Standard:own, wenn nicht gesetzt).channels.telegram.reactionLevel:off | ack | minimal | extensive— steuert die Reaktionsfähigkeit des Agenten (Standard:minimal, wenn nicht gesetzt).
agents.list[].groupChat.mentionPatterns(Mention-Gating-Muster).messages.groupChat.mentionPatterns(globaler Fallback).commands.native(Standard:"auto"→ an für Telegram/Discord, aus für Slack),commands.text,commands.useAccessGroups(Befehlsverhalten). Überschreiben mitchannels.telegram.commands.native.messages.responsePrefix,messages.ackReaction,messages.ackReactionScope,messages.removeAckAfterReply.