Pronto per la produzione per DM e gruppi di bot tramite grammY. Il long polling è la modalità predefinita; la modalità webhook è facoltativa.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.
Abbinamento
Risoluzione dei problemi dei canali
Configurazione Gateway
Configurazione rapida
Crea il token del bot in BotFather
@BotFather).Esegui /newbot, segui le istruzioni e salva il token.Configura token e policy DM
TELEGRAM_BOT_TOKEN=... (solo account predefinito).
Telegram non usa openclaw channels login telegram; configura il token in config/env, poi avvia il gateway.Aggiungi il bot a un gruppo
- il tuo ID utente Telegram, usato in
allowFrom/groupAllowFrom - l’ID chat del gruppo Telegram, usato come chiave sotto
channels.telegram.groups
openclaw logs --follow, da un bot per ID inoltrati o da Bot API getUpdates. Dopo che il gruppo è stato consentito, /whoami@<bot_username> può confermare gli ID utente e gruppo.Gli ID negativi dei supergruppi Telegram che iniziano con -100 sono ID chat di gruppo. Inseriscili sotto channels.telegram.groups, non sotto groupAllowFrom.TELEGRAM_BOT_TOKEN si applica solo all’account predefinito.Impostazioni lato Telegram
Modalità privacy e visibilità nei gruppi
Modalità privacy e visibilità nei gruppi
- disabilitare la modalità privacy tramite
/setprivacy, oppure - rendere il bot amministratore del gruppo.
Permessi di gruppo
Permessi di gruppo
Opzioni BotFather utili
Opzioni BotFather utili
/setjoingroupsper consentire/negare l’aggiunta ai gruppi/setprivacyper il comportamento di visibilità nei gruppi
Controllo accessi e attivazione
- Policy DM
- Criterio di gruppo e liste consentite
- Comportamento delle menzioni
channels.telegram.dmPolicy controlla l’accesso ai messaggi diretti:pairing(predefinito)allowlist(richiede almeno un ID mittente inallowFrom)open(richiede cheallowFromincluda"*")disabled
dmPolicy: "open" con allowFrom: ["*"] consente a qualsiasi account Telegram che trovi o indovini il nome utente del bot di comandare il bot. Usalo solo per bot intenzionalmente pubblici con strumenti strettamente limitati; i bot con un solo proprietario dovrebbero usare allowlist con ID utente numerici.channels.telegram.allowFrom accetta ID utente Telegram numerici. I prefissi telegram: / tg: sono accettati e normalizzati.
Nelle configurazioni multi-account, un channels.telegram.allowFrom restrittivo di livello superiore viene trattato come un limite di sicurezza: le voci allowFrom: ["*"] a livello di account non rendono pubblico quell’account, a meno che l’allowlist effettiva dell’account contenga ancora un wildcard esplicito dopo l’unione.
dmPolicy: "allowlist" con allowFrom vuoto blocca tutti i DM ed è rifiutato dalla convalida della configurazione.
La configurazione richiede solo ID utente numerici.
Se hai aggiornato e la tua configurazione contiene voci allowlist @username, esegui openclaw doctor --fix per risolverle (best-effort; richiede un token bot Telegram).
Se in precedenza ti affidavi ai file allowlist dello store di abbinamento, openclaw doctor --fix può recuperare le voci in channels.telegram.allowFrom nei flussi allowlist (ad esempio quando dmPolicy: "allowlist" non ha ancora ID espliciti).Per i bot con un solo proprietario, preferisci dmPolicy: "allowlist" con ID numerici espliciti in allowFrom per mantenere la policy di accesso durevole nella configurazione (invece di dipendere da approvazioni di abbinamento precedenti).Confusione comune: l’approvazione dell’abbinamento DM non significa “questo mittente è autorizzato ovunque”.
L’abbinamento concede l’accesso ai DM. Se non esiste ancora un proprietario dei comandi, il primo abbinamento approvato imposta anche commands.ownerAllowFrom, così i comandi riservati al proprietario e le approvazioni exec hanno un account operatore esplicito.
L’autorizzazione del mittente nei gruppi deriva comunque da allowlist esplicite nella configurazione.
Se vuoi “sono autorizzato una volta e funzionano sia i DM sia i comandi di gruppo”, inserisci il tuo ID utente Telegram numerico in channels.telegram.allowFrom; per i comandi riservati al proprietario, assicurati che commands.ownerAllowFrom contenga telegram:<your user id>.Trovare il tuo ID utente Telegram
Più sicuro (nessun bot di terze parti):- Invia un DM al tuo bot.
- Esegui
openclaw logs --follow. - Leggi
from.id.
@userinfobot o @getidsbot.Comportamento del runtime
- Telegram è di proprietà del processo Gateway.
- L’instradamento è deterministico: le risposte in ingresso da Telegram tornano a Telegram (il modello non sceglie i canali).
- I messaggi in ingresso vengono normalizzati nell’involucro di canale condiviso con metadati di risposta, segnaposto multimediali e contesto persistito della catena di risposte per le risposte Telegram che il gateway ha osservato.
- Le sessioni di gruppo sono isolate per ID gruppo. Gli argomenti dei forum aggiungono
:topic:<threadId>per mantenere isolati gli argomenti. - I messaggi DM possono contenere
message_thread_id; OpenClaw conserva l’ID del thread per le risposte ma mantiene i DM sulla sessione piatta per impostazione predefinita. Configurachannels.telegram.dm.threadReplies: "inbound",channels.telegram.direct.<chatId>.threadReplies: "inbound",requireTopic: trueo una configurazione di argomento corrispondente quando vuoi intenzionalmente l’isolamento delle sessioni per argomento nei DM. - Il polling lungo usa grammY runner con sequenziamento per chat/per thread. La concorrenza complessiva del sink del runner usa
agents.defaults.maxConcurrent. - Il polling lungo è protetto all’interno di ciascun processo Gateway in modo che un solo poller attivo possa usare un token bot alla volta. Se vedi ancora conflitti
getUpdates409, probabilmente un altro Gateway OpenClaw, script o poller esterno sta usando lo stesso token. - I riavvii del watchdog del polling lungo si attivano dopo 120 secondi senza completamento della vitalità di
getUpdatesper impostazione predefinita. Aumentachannels.telegram.pollingStallThresholdMssolo se la tua distribuzione vede ancora falsi riavvii per stallo del polling durante lavori di lunga durata. Il valore è in millisecondi ed è consentito da30000a600000; sono supportate override per account. - La Telegram Bot API non supporta le conferme di lettura (
sendReadReceiptsnon si applica).
Riferimento delle funzionalità
Anteprima dello stream live (modifiche dei messaggi)
Anteprima dello stream live (modifiche dei messaggi)
- chat dirette: messaggio di anteprima +
editMessageText - gruppi/argomenti: messaggio di anteprima +
editMessageText
channels.telegram.streamingèoff | partial | block | progress(predefinito:partial)progressmantiene una bozza di stato modificabile per l’avanzamento degli strumenti, la cancella al completamento e invia la risposta finale come messaggio normalestreaming.preview.toolProgresscontrolla se gli aggiornamenti di strumenti/avanzamento riutilizzano lo stesso messaggio di anteprima modificato (predefinito:truequando lo streaming dell’anteprima è attivo)streaming.preview.commandTextcontrolla i dettagli di comando/exec dentro quelle righe di avanzamento degli strumenti:raw(predefinito, preserva il comportamento rilasciato) ostatus(solo etichetta dello strumento)- i valori legacy
channels.telegram.streamModee booleanistreamingvengono rilevati; eseguiopenclaw doctor --fixper migrarli achannels.telegram.streaming.mode
v2026.4.22 e versioni successive. Per mantenere l’anteprima modificata per il testo della risposta ma nascondere le righe di avanzamento degli strumenti, imposta:progress quando vuoi un avanzamento degli strumenti visibile senza modificare la risposta finale dentro quello stesso messaggio. Inserisci la policy del testo dei comandi sotto streaming.progress:streaming.mode: "off" solo quando vuoi la consegna esclusivamente finale: le modifiche dell’anteprima Telegram sono disabilitate e il chatter generico di strumenti/avanzamento viene soppresso invece di essere inviato come messaggi di stato autonomi. Le richieste di approvazione, i payload multimediali e gli errori continuano a passare tramite la normale consegna finale. Usa streaming.preview.toolProgress: false quando vuoi soltanto mantenere le modifiche dell’anteprima della risposta nascondendo le righe di stato dell’avanzamento degli strumenti.replyToMode è "first", "all" o "batched" e il messaggio in ingresso include testo di citazione selezionato, OpenClaw invia la risposta finale tramite il percorso nativo di risposta con citazione di Telegram invece di modificare l’anteprima della risposta, quindi streaming.preview.toolProgress non può mostrare le brevi righe di stato per quel turno. Le risposte al messaggio corrente senza testo di citazione selezionato continuano a mantenere lo streaming dell’anteprima. Imposta replyToMode: "off" quando la visibilità dell’avanzamento degli strumenti conta più delle risposte con citazione native, oppure imposta streaming.preview.toolProgress: false per accettare il compromesso.- anteprime brevi in DM/gruppo/topic: OpenClaw mantiene lo stesso messaggio di anteprima ed esegue la modifica finale sul posto
- i finali di testo lunghi che vengono divisi in più messaggi Telegram riutilizzano l’anteprima esistente come primo frammento finale quando possibile, poi inviano solo i frammenti rimanenti
- i finali in modalità progress cancellano la bozza di stato e usano la normale consegna finale invece di modificare la bozza nella risposta
- se la modifica finale fallisce prima che il testo completato sia confermato, OpenClaw usa la normale consegna finale e pulisce l’anteprima obsoleta
/reasoning streaminvia il reasoning all’anteprima live durante la generazione- l’anteprima del reasoning viene eliminata dopo la consegna finale; usa
/reasoning onquando il reasoning deve rimanere visibile - la risposta finale viene inviata senza testo di reasoning
Formattazione e fallback HTML
Formattazione e fallback HTML
parse_mode: "HTML".- Il testo simile a Markdown viene renderizzato in HTML sicuro per Telegram.
- I tag HTML supportati da Telegram vengono preservati; l’HTML non supportato viene sottoposto a escape.
- Se Telegram rifiuta l’HTML analizzato, OpenClaw riprova come testo semplice.
channels.telegram.linkPreview: false.Comandi nativi e comandi personalizzati
Comandi nativi e comandi personalizzati
setMyCommands.Valori predefiniti dei comandi nativi:commands.native: "auto"abilita i comandi nativi per Telegram
- i nomi vengono normalizzati (rimozione dello
/iniziale, minuscole) - pattern valido:
a-z,0-9,_, lunghezza1..32 - i comandi personalizzati non possono sovrascrivere i comandi nativi
- conflitti/duplicati vengono saltati e registrati nei log
- i comandi personalizzati sono solo voci di menu; non implementano automaticamente un comportamento
- i comandi di Plugin/skill possono comunque funzionare quando vengono digitati, anche se non sono mostrati nel menu Telegram
setMyCommands failedconBOT_COMMANDS_TOO_MUCHsignifica che il menu Telegram ha comunque superato il limite dopo il trimming; riduci i comandi di Plugin/skill/personalizzati o disabilitachannels.telegram.commands.native.deleteWebhook,deleteMyCommandsosetMyCommandsnon riusciti con404: Not Foundmentre i comandi curl diretti della Bot API funzionano possono significare chechannels.telegram.apiRootè stato impostato sull’endpoint completo/bot<TOKEN>.apiRootdeve essere solo la radice della Bot API, eopenclaw doctor --fixrimuove un/bot<TOKEN>finale accidentale.getMe returned 401significa che Telegram ha rifiutato il token bot configurato. AggiornabotToken,tokenFileoTELEGRAM_BOT_TOKENcon il token BotFather corrente; OpenClaw si ferma prima del polling, quindi questo non viene segnalato come errore di pulizia del Webhook.setMyCommands failedcon errori di rete/fetch di solito significa che DNS/HTTPS in uscita versoapi.telegram.orgè bloccato.
Comandi di associazione dispositivo (Plugin device-pair)
Quando il Plugin device-pair è installato:/pairgenera il codice di configurazione- incolla il codice nell’app iOS
/pair pendingelenca le richieste in sospeso (inclusi ruolo/scopes)- approva la richiesta:
/pair approve <requestId>per approvazione esplicita/pair approvequando c’è una sola richiesta in sospeso/pair approve latestper la più recente
scopes: []; qualsiasi token operatore passato rimane limitato a operator.approvals, operator.read, operator.talk.secrets e operator.write. I controlli dello scope di bootstrap hanno prefisso di ruolo, quindi quella allowlist operatore soddisfa solo richieste operatore; i ruoli non operatore hanno comunque bisogno di scope sotto il proprio prefisso di ruolo.Se un dispositivo ritenta con dettagli di autenticazione cambiati (per esempio ruolo/scopes/chiave pubblica), la precedente richiesta in sospeso viene sostituita e la nuova richiesta usa un requestId diverso. Riesegui /pair pending prima di approvare.Altri dettagli: Associazione.Pulsanti inline
Pulsanti inline
offdmgroupallallowlist(predefinito)
capabilities: ["inlineButtons"] mappa a inlineButtons: "all".Esempio di azione messaggio:callback_data: <value>Azioni dei messaggi Telegram per agenti e automazione
Azioni dei messaggi Telegram per agenti e automazione
sendMessage(to,content, opzionalemediaUrl,replyToMessageId,messageThreadId)react(chatId,messageId,emoji)deleteMessage(chatId,messageId)editMessage(chatId,messageId,content)createForumTopic(chatId,name, opzionaleiconColor,iconCustomEmojiId)
send, react, delete, edit, sticker, sticker-search, topic-create).Controlli di gating:channels.telegram.actions.sendMessagechannels.telegram.actions.deleteMessagechannels.telegram.actions.reactionschannels.telegram.actions.sticker(predefinito: disabilitato)
edit e topic-create sono attualmente abilitati per impostazione predefinita e non hanno toggle channels.telegram.actions.* separati.
Gli invii runtime usano lo snapshot di configurazione/segreti attivo (avvio/ricarica), quindi i percorsi delle azioni non eseguono una nuova risoluzione SecretRef ad hoc per ogni invio.Semantica di rimozione delle reazioni: /tools/reactionsTag di threading delle risposte
Tag di threading delle risposte
[[reply_to_current]]risponde al messaggio attivante[[reply_to:<id>]]risponde a un ID messaggio Telegram specifico
channels.telegram.replyToMode controlla la gestione:off(predefinito)firstall
off disabilita il threading implicito delle risposte. I tag espliciti [[reply_to_*]] vengono comunque rispettati.Topic dei forum e comportamento dei thread
Topic dei forum e comportamento dei thread
- le chiavi di sessione dei topic aggiungono
:topic:<threadId> - le risposte e la digitazione hanno come destinazione il thread del topic
- percorso di configurazione del topic:
channels.telegram.groups.<chatId>.topics.<threadId>
threadId=1):- gli invii di messaggi omettono
message_thread_id(Telegram rifiutasendMessage(...thread_id=1)) - le azioni di digitazione includono comunque
message_thread_id
requireMention, allowFrom, skills, systemPrompt, enabled, groupPolicy).
agentId è solo del topic e non eredita dai valori predefiniti del gruppo.Routing agente per topic: ogni topic può instradare a un agente diverso impostando agentId nella configurazione del topic. Questo dà a ogni topic il proprio workspace, memoria e sessione isolati. Esempio:agent:zu:telegram:group:-1001234567890:topic:3Associazione persistente dei topic ACP: i topic del forum possono fissare le sessioni dell’harness ACP tramite associazioni ACP tipizzate di primo livello (bindings[] con type: "acp" e match.channel: "telegram", peer.kind: "group" e un ID qualificato per topic come -1001234567890:topic:42). Attualmente l’ambito è limitato ai topic del forum in gruppi/supergruppi. Vedi Agenti ACP.Spawn ACP vincolato al thread dalla chat: /acp spawn <agent> --thread here|auto associa il topic corrente a una nuova sessione ACP; i follow-up vengono instradati direttamente lì. OpenClaw fissa la conferma dello spawn nel topic. Richiede che channels.telegram.threadBindings.spawnSessions rimanga abilitato (predefinito: true).Il contesto del template espone MessageThreadId e IsForum. Le chat DM con message_thread_id mantengono per impostazione predefinita l’instradamento DM e i metadati di risposta su sessioni piatte; usano chiavi di sessione consapevoli del thread solo quando configurate con threadReplies: "inbound", threadReplies: "always", requireTopic: true o una configurazione di topic corrispondente. Usa channels.telegram.dm.threadReplies di primo livello per il valore predefinito dell’account, oppure direct.<chatId>.threadReplies per un DM.Audio, video e sticker
Audio, video e sticker
Messaggi audio
Telegram distingue tra note vocali e file audio.- predefinito: comportamento da file audio
- tag
[[audio_as_voice]]nella risposta dell’agente per forzare l’invio come nota vocale - le trascrizioni delle note vocali in ingresso sono incorniciate come testo generato da macchina, non attendibile, nel contesto dell’agente; il rilevamento delle menzioni usa comunque la trascrizione grezza, quindi i messaggi vocali filtrati per menzione continuano a funzionare.
Messaggi video
Telegram distingue tra file video e note video.Esempio di azione messaggio:Sticker
Gestione degli sticker in ingresso:- WEBP statico: scaricato ed elaborato (placeholder
<media:sticker>) - TGS animato: saltato
- WEBM video: saltato
Sticker.emojiSticker.setNameSticker.fileIdSticker.fileUniqueIdSticker.cachedDescription
~/.openclaw/telegram/sticker-cache.json
Notifiche di reazione
Notifiche di reazione
message_reaction (separati dai payload dei messaggi).Quando abilitato, OpenClaw accoda eventi di sistema come:Telegram reaction added: 👍 by Alice (@alice) on msg 42
channels.telegram.reactionNotifications:off | own | all(predefinito:own)channels.telegram.reactionLevel:off | ack | minimal | extensive(predefinito:minimal)
ownindica solo le reazioni degli utenti ai messaggi inviati dal bot (best effort tramite cache dei messaggi inviati).- Gli eventi di reazione rispettano comunque i controlli di accesso di Telegram (
dmPolicy,allowFrom,groupPolicy,groupAllowFrom); i mittenti non autorizzati vengono scartati. - Telegram non fornisce ID di thread negli aggiornamenti delle reazioni.
- i gruppi non-forum vengono instradati alla sessione della chat di gruppo
- i gruppi forum vengono instradati alla sessione del topic generale del gruppo (
:topic:1), non al topic esatto di origine
allowed_updates per polling/webhook include automaticamente message_reaction.Reazioni ack
Reazioni ack
ackReaction invia un’emoji di conferma mentre OpenClaw elabora un messaggio in ingresso.Ordine di risoluzione:channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- fallback all’emoji dell’identità dell’agente (
agents.list[].identity.emoji, altrimenti ”👀”)
- Telegram si aspetta emoji unicode (per esempio ”👀”).
- Usa
""per disabilitare la reazione per un canale o un account.
Scritture di configurazione da eventi e comandi Telegram
Scritture di configurazione da eventi e comandi Telegram
configWrites !== false).Le scritture attivate da Telegram includono:- eventi di migrazione dei gruppi (
migrate_to_chat_id) per aggiornarechannels.telegram.groups /config sete/config unset(richiede l’abilitazione dei comandi)
Long polling vs webhook
Long polling vs webhook
channels.telegram.webhookUrl e channels.telegram.webhookSecret; opzionali webhookPath, webhookHost, webhookPort (predefiniti /telegram-webhook, 127.0.0.1, 8787).In modalità long polling, OpenClaw persiste il proprio watermark di riavvio solo dopo che un aggiornamento viene inviato correttamente. Se un handler fallisce, quell’aggiornamento rimane ritentabile nello stesso processo e non viene scritto come completato per la deduplicazione al riavvio.Il listener locale si associa a 127.0.0.1:8787. Per l’ingresso pubblico, metti un reverse proxy davanti alla porta locale oppure imposta intenzionalmente webhookHost: "0.0.0.0".La modalità webhook valida le protezioni della richiesta, il token segreto Telegram e il corpo JSON prima di restituire 200 a Telegram.
OpenClaw elabora poi l’aggiornamento in modo asincrono tramite le stesse corsie bot per chat/per topic usate dal long polling, quindi i turni lenti dell’agente non bloccano l’ACK di consegna di Telegram.Limiti, tentativi e target CLI
Limiti, tentativi e target CLI
- Il valore predefinito di
channels.telegram.textChunkLimitè 4000. channels.telegram.chunkMode="newline"preferisce i confini dei paragrafi (righe vuote) prima della suddivisione per lunghezza.channels.telegram.mediaMaxMb(predefinito 100) limita la dimensione dei media Telegram in ingresso e in uscita.channels.telegram.mediaGroupFlushMs(predefinito 500) controlla per quanto tempo gli album/gruppi media di Telegram vengono bufferizzati prima che OpenClaw li invii come un unico messaggio in ingresso. Aumentalo se parti dell’album arrivano in ritardo; diminuiscilo per ridurre la latenza delle risposte agli album.channels.telegram.timeoutSecondssovrascrive il timeout del client API Telegram (se non impostato, si applica il predefinito di grammY). I client bot limitano i valori configurati sotto la protezione di 60 secondi per richieste di testo/typing in uscita, così grammY non interrompe la consegna visibile della risposta prima che la protezione di trasporto e il fallback di OpenClaw possano eseguire. Il long polling usa comunque una protezione di 45 secondi per la richiestagetUpdates, così i poll inattivi non vengono abbandonati indefinitamente.channels.telegram.pollingStallThresholdMsha valore predefinito120000; regolalo tra30000e600000solo per riavvii da stallo del polling falsi positivi.- la cronologia del contesto di gruppo usa
channels.telegram.historyLimitomessages.groupChat.historyLimit(predefinito 50);0disabilita. - il contesto supplementare di risposta/citazione/inoltro viene normalizzato in una finestra di contesto conversazionale selezionata quando il Gateway ha osservato i messaggi padre; la cache dei messaggi osservati viene persistita accanto allo store di sessione. Telegram include negli aggiornamenti solo un
reply_to_messagesuperficiale, quindi le catene più vecchie della cache sono limitate al payload di aggiornamento corrente di Telegram. - Le allowlist Telegram controllano principalmente chi può attivare l’agente, non sono un confine completo di redazione del contesto supplementare.
- Controlli della cronologia DM:
channels.telegram.dmHistoryLimitchannels.telegram.dms["<user_id>"].historyLimit
- La configurazione
channels.telegram.retrysi applica agli helper di invio Telegram (CLI/strumenti/azioni) per errori API in uscita recuperabili. Anche la consegna della risposta finale in ingresso usa un safe-send retry limitato per errori Telegram prima della connessione, ma non ritenta envelope di rete ambigui dopo l’invio che potrebbero duplicare messaggi visibili.
openclaw message poll e supportano i topic forum:--poll-duration-seconds(5-600)--poll-anonymous--poll-public--thread-idper i topic forum (oppure usa un target:topic:)
--presentationcon blocchibuttonsper tastiere inline quandochannels.telegram.capabilities.inlineButtonslo consente--pino--delivery '{"pin":true}'per richiedere la consegna fissata quando il bot può fissare in quella chat--force-documentper inviare immagini, GIF e video in uscita come documenti invece che come foto compressa, media animato o caricamenti video
channels.telegram.actions.sendMessage=falsedisabilita i messaggi Telegram in uscita, inclusi i pollchannels.telegram.actions.poll=falsedisabilita la creazione di poll Telegram lasciando abilitati gli invii regolari
Approvazioni exec in Telegram
Approvazioni exec in Telegram
channels.telegram.execApprovals.enabled(si abilita automaticamente quando almeno un approvatore è risolvibile)channels.telegram.execApprovals.approvers(ripiega sugli ID owner numerici dacommands.ownerAllowFrom)channels.telegram.execApprovals.target:dm(predefinito) |channel|bothagentFilter,sessionFilter
channels.telegram.allowFrom, groupAllowFrom e defaultTo controllano chi può parlare con il bot e dove invia le risposte normali. Non rendono qualcuno un approvatore exec. Il primo abbinamento DM approvato inizializza commands.ownerAllowFrom quando non esiste ancora alcun proprietario dei comandi, quindi la configurazione con un solo owner funziona comunque senza duplicare gli ID in execApprovals.approvers.La consegna sul canale mostra il testo del comando nella chat; abilita channel o both solo in gruppi/topic attendibili. Quando il prompt arriva in un topic forum, OpenClaw conserva il topic per il prompt di approvazione e per il follow-up. Le approvazioni exec scadono per impostazione predefinita dopo 30 minuti.I pulsanti di approvazione inline richiedono anche che channels.telegram.capabilities.inlineButtons consenta la superficie target (dm, group o all). Gli ID di approvazione con prefisso plugin: vengono risolti tramite le approvazioni Plugin; gli altri vengono risolti prima tramite le approvazioni exec.Vedi Approvazioni exec.Controlli delle risposte di errore
Quando l’agente riscontra un errore di consegna o del provider, Telegram può rispondere con il testo dell’errore oppure sopprimerlo. Due chiavi di configurazione controllano questo comportamento:| Chiave | Valori | Predefinito | Descrizione |
|---|---|---|---|
channels.telegram.errorPolicy | reply, silent | reply | reply invia un messaggio di errore amichevole alla chat. silent sopprime del tutto le risposte di errore. |
channels.telegram.errorCooldownMs | number (ms) | 60000 | Tempo minimo tra risposte di errore alla stessa chat. Previene lo spam di errori durante le interruzioni. |
Risoluzione dei problemi
Il bot non risponde ai messaggi di gruppo senza menzione
Il bot non risponde ai messaggi di gruppo senza menzione
- Se
requireMention=false, la modalità privacy di Telegram deve consentire visibilità completa.- BotFather:
/setprivacy-> Disabilita - quindi rimuovi e aggiungi di nuovo il bot al gruppo
- BotFather:
openclaw channels statusavvisa quando la configurazione prevede messaggi di gruppo senza menzione.openclaw channels status --probepuò controllare ID di gruppo numerici espliciti; il wildcard"*"non può essere verificato tramite probing dell’appartenenza.- test rapido della sessione:
/activation always.
Il bot non vede affatto i messaggi di gruppo
Il bot non vede affatto i messaggi di gruppo
- quando
channels.telegram.groupsesiste, il gruppo deve essere elencato (o includere"*") - verifica l’appartenenza del bot al gruppo
- esamina i log:
openclaw logs --followper i motivi di skip
I comandi funzionano parzialmente o non funzionano affatto
I comandi funzionano parzialmente o non funzionano affatto
- autorizza l’identità del mittente (associazione e/o
allowFromnumerico) - l’autorizzazione dei comandi si applica comunque anche quando la policy del gruppo è
open setMyCommands failedconBOT_COMMANDS_TOO_MUCHsignifica che il menu nativo ha troppe voci; riduci comandi plugin/skill/personalizzati oppure disabilita i menu nativi- le chiamate di avvio
deleteMyCommands/setMyCommandse le chiamate di digitazionesendChatActionsono limitate e riprovano una volta tramite il fallback di trasporto di Telegram in caso di timeout della richiesta. Errori persistenti di rete/fetch di solito indicano problemi di raggiungibilità DNS/HTTPS versoapi.telegram.org
L'avvio segnala token non autorizzato
L'avvio segnala token non autorizzato
getMe returned 401è un errore di autenticazione Telegram per il token del bot configurato.- Ricopia o rigenera il token del bot in BotFather, quindi aggiorna
channels.telegram.botToken,channels.telegram.tokenFile,channels.telegram.accounts.<id>.botTokenoTELEGRAM_BOT_TOKENper l’account predefinito. - Anche
deleteWebhook 401 Unauthorizeddurante l’avvio è un errore di autenticazione; trattarlo come “nessun webhook esistente” rinvierebbe soltanto lo stesso errore di token non valido alle chiamate API successive.
Instabilità di polling o rete
Instabilità di polling o rete
- Node 22+ + fetch/proxy personalizzato può attivare un comportamento di abort immediato se i tipi AbortSignal non corrispondono.
- Alcuni host risolvono prima
api.telegram.orgin IPv6; un egress IPv6 non funzionante può causare errori intermittenti dell’API Telegram. - Se i log includono
TypeError: fetch failedoNetwork request for 'getUpdates' failed!, OpenClaw ora li ritenta come errori di rete recuperabili. - Durante l’avvio del polling, OpenClaw riutilizza il probe
getMedi avvio riuscito per grammY, così il runner non deve eseguire un secondogetMeprima del primogetUpdates. - Se
deleteWebhookfallisce con un errore di rete transitorio durante l’avvio del polling, OpenClaw continua con il long polling invece di effettuare un’altra chiamata di control plane prima del polling. Un webhook ancora attivo emerge come conflitto digetUpdates; OpenClaw quindi ricostruisce il trasporto Telegram e ritenta la pulizia del webhook. - Se i socket Telegram vengono riciclati con una cadenza fissa breve, controlla se
channels.telegram.timeoutSecondsè basso; i client bot limitano i valori configurati sotto le guardie delle richieste in uscita egetUpdates, ma le versioni precedenti potevano interrompere ogni poll o risposta quando questo valore era impostato sotto tali guardie. - Se i log includono
Polling stall detected, OpenClaw riavvia il polling e ricostruisce il trasporto Telegram dopo 120 secondi senza liveness di long-poll completata per impostazione predefinita. openclaw channels status --probeeopenclaw doctoravvisano quando un account di polling in esecuzione non ha completatogetUpdatesdopo il periodo di grazia dell’avvio, quando un account webhook in esecuzione non ha completatosetWebhookdopo il periodo di grazia dell’avvio, oppure quando l’ultima attività riuscita del trasporto di polling è obsoleta.- Aumenta
channels.telegram.pollingStallThresholdMssolo quando le chiamategetUpdatesdi lunga durata sono sane ma il tuo host segnala ancora falsi riavvii per stallo del polling. Stalli persistenti di solito indicano problemi di proxy, DNS, IPv6 o egress TLS tra l’host eapi.telegram.org. - Telegram rispetta anche le env proxy del processo per il trasporto Bot API, incluse
HTTP_PROXY,HTTPS_PROXY,ALL_PROXYe le relative varianti minuscole.NO_PROXY/no_proxypuò comunque bypassareapi.telegram.org. - Se il proxy gestito da OpenClaw è configurato tramite
OPENCLAW_PROXY_URLper un ambiente di servizio e non è presente alcuna env proxy standard, Telegram usa quell’URL anche per il trasporto Bot API. - Su host VPS con egress/TLS diretto instabile, instrada le chiamate all’API Telegram tramite
channels.telegram.proxy:
- Node 22+ usa per impostazione predefinita
autoSelectFamily=true(eccetto WSL2). L’ordine dei risultati DNS di Telegram rispettaOPENCLAW_TELEGRAM_DNS_RESULT_ORDER, poichannels.telegram.network.dnsResultOrder, poi il predefinito del processo comeNODE_OPTIONS=--dns-result-order=ipv4first; se nessuno si applica, Node 22+ ripiega suipv4first. - Se il tuo host è WSL2 o funziona esplicitamente meglio con comportamento solo IPv4, forza la selezione della famiglia:
- Le risposte dell’intervallo di benchmark RFC 2544 (
198.18.0.0/15) sono già consentite per i download dei media Telegram per impostazione predefinita. Se un fake-IP attendibile o un proxy trasparente riscriveapi.telegram.orgverso qualche altro indirizzo privato/interno/a uso speciale durante i download dei media, puoi attivare il bypass solo per Telegram:
- Lo stesso opt-in è disponibile per account in
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork. - Se il tuo proxy risolve gli host media Telegram in
198.18.x.x, lascia prima disattivato il flag pericoloso. I media Telegram consentono già per impostazione predefinita l’intervallo di benchmark RFC 2544.
- Override di ambiente (temporanei):
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first
- Valida le risposte DNS:
Riferimento di configurazione
Riferimento principale: Riferimento di configurazione - Telegram.Campi Telegram ad alto segnale
Campi Telegram ad alto segnale
- avvio/autenticazione:
enabled,botToken,tokenFile,accounts.*(tokenFiledeve puntare a un file regolare; i symlink vengono rifiutati) - controllo degli accessi:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,groups.*.topics.*,bindings[]di primo livello (type: "acp") - approvazioni exec:
execApprovals,accounts.*.execApprovals - comando/menu:
commands.native,commands.nativeSkills,customCommands - thread/risposte:
replyToMode,dm.threadReplies,direct.*.threadReplies - streaming:
streaming(anteprima),streaming.preview.toolProgress,blockStreaming - formattazione/consegna:
textChunkLimit,chunkMode,linkPreview,responsePrefix - media/rete:
mediaMaxMb,mediaGroupFlushMs,timeoutSeconds,pollingStallThresholdMs,retry,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - root API personalizzata:
apiRoot(solo root Bot API; non includere/bot<TOKEN>) - webhook:
webhookUrl,webhookSecret,webhookPath,webhookHost - azioni/capacità:
capabilities.inlineButtons,actions.sendMessage|editMessage|deleteMessage|reactions|sticker - reazioni:
reactionNotifications,reactionLevel - errori:
errorPolicy,errorCooldownMs - scritture/cronologia:
configWrites,historyLimit,dmHistoryLimit,dms.*.historyLimit
channels.telegram.defaultAccount (o includi channels.telegram.accounts.default) per rendere esplicito il routing predefinito. Altrimenti OpenClaw ripiega sul primo ID account normalizzato e openclaw doctor avvisa. Gli account nominati ereditano channels.telegram.allowFrom / groupAllowFrom, ma non i valori accounts.default.*.