Pronto para produção em DMs de bot e grupos via grammY. Long polling é o modo padrão; o modo Webhook é opcional.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.
Emparelhamento
Solução de problemas de canais
Configuração do Gateway
Configuração rápida
Crie o token do bot no BotFather
@BotFather).Execute /newbot, siga as instruções e salve o token.Configure o token e a política de DM
TELEGRAM_BOT_TOKEN=... (somente conta padrão).
O Telegram não usa openclaw channels login telegram; configure o token na configuração/env e então inicie o gateway.Adicione o bot a um grupo
- seu ID de usuário do Telegram, usado em
allowFrom/groupAllowFrom - o ID do chat de grupo do Telegram, usado como chave em
channels.telegram.groups
openclaw logs --follow, por um bot de ID encaminhado ou pelo getUpdates da Bot API. Depois que o grupo for permitido, /whoami@<bot_username> pode confirmar os IDs de usuário e grupo.IDs negativos de supergrupo do Telegram que começam com -100 são IDs de chat de grupo. Coloque-os em channels.telegram.groups, não em groupAllowFrom.TELEGRAM_BOT_TOKEN se aplica somente à conta padrão.Configurações no lado do Telegram
Modo de privacidade e visibilidade em grupo
Modo de privacidade e visibilidade em grupo
- desative o modo de privacidade via
/setprivacy, ou - torne o bot administrador do grupo.
Permissões de grupo
Permissões de grupo
Alternâncias úteis do BotFather
Alternâncias úteis do BotFather
/setjoingroupspara permitir/negar adições a grupos/setprivacypara comportamento de visibilidade em grupo
Controle de acesso e ativação
- Política de DM
- Política de grupo e allowlists
- Comportamento de menção
channels.telegram.dmPolicy controla o acesso por mensagem direta:pairing(padrão)allowlist(exige pelo menos um ID de remetente emallowFrom)open(exige queallowFrominclua"*")disabled
dmPolicy: "open" com allowFrom: ["*"] permite que qualquer conta do Telegram que encontre ou adivinhe o nome de usuário do bot comande o bot. Use isso somente para bots intencionalmente públicos com ferramentas fortemente restritas; bots de proprietário único devem usar allowlist com IDs numéricos de usuário.channels.telegram.allowFrom aceita IDs numéricos de usuário do Telegram. Prefixos telegram: / tg: são aceitos e normalizados.
Em configurações de múltiplas contas, um channels.telegram.allowFrom restritivo de nível superior é tratado como uma fronteira de segurança: entradas allowFrom: ["*"] em nível de conta não tornam essa conta pública, a menos que a allowlist efetiva da conta ainda contenha um curinga explícito após a mesclagem.
dmPolicy: "allowlist" com allowFrom vazio bloqueia todas as DMs e é rejeitado pela validação de configuração.
A configuração solicita apenas IDs numéricos de usuário.
Se você fez upgrade e sua configuração contém entradas @username na allowlist, execute openclaw doctor --fix para resolvê-las (melhor esforço; exige um token de bot do Telegram).
Se você dependia anteriormente de arquivos de allowlist do armazenamento de emparelhamento, openclaw doctor --fix pode recuperar entradas para channels.telegram.allowFrom em fluxos de allowlist (por exemplo, quando dmPolicy: "allowlist" ainda não tem IDs explícitos).Para bots de proprietário único, prefira dmPolicy: "allowlist" com IDs numéricos explícitos em allowFrom para manter a política de acesso durável na configuração (em vez de depender de aprovações de emparelhamento anteriores).Confusão comum: aprovação de emparelhamento por DM não significa “este remetente está autorizado em todos os lugares”.
O emparelhamento concede acesso por DM. Se ainda não existir proprietário de comandos, o primeiro emparelhamento aprovado também define commands.ownerAllowFrom para que comandos somente do proprietário e aprovações de exec tenham uma conta de operador explícita.
A autorização de remetente em grupo ainda vem de allowlists explícitas na configuração.
Se você quer “eu sou autorizado uma vez e tanto DMs quanto comandos de grupo funcionam”, coloque seu ID numérico de usuário do Telegram em channels.telegram.allowFrom; para comandos somente do proprietário, garanta que commands.ownerAllowFrom contenha telegram:<your user id>.Encontrando seu ID de usuário do Telegram
Mais seguro (sem bot de terceiros):- Envie uma DM ao seu bot.
- Execute
openclaw logs --follow. - Leia
from.id.
@userinfobot ou @getidsbot.Comportamento em runtime
- O Telegram é controlado pelo processo do Gateway.
- O roteamento é determinístico: mensagens de entrada do Telegram respondem de volta ao Telegram (o modelo não escolhe canais).
- Mensagens de entrada são normalizadas no envelope de canal compartilhado com metadados de resposta, placeholders de mídia e contexto persistido de cadeia de respostas para respostas do Telegram que o Gateway observou.
- Sessões de grupo são isoladas por ID de grupo. Tópicos de fórum acrescentam
:topic:<threadId>para manter tópicos isolados. - Mensagens de DM podem carregar
message_thread_id; o OpenClaw preserva o ID da thread para respostas, mas mantém DMs na sessão plana por padrão. Configurechannels.telegram.dm.threadReplies: "inbound",channels.telegram.direct.<chatId>.threadReplies: "inbound",requireTopic: trueou uma configuração de tópico correspondente quando você quiser intencionalmente isolamento de sessão por tópico em DM. - Long polling usa grammY runner com sequenciamento por chat/por thread. A concorrência geral do sink do runner usa
agents.defaults.maxConcurrent. - Long polling é protegido dentro de cada processo do Gateway para que apenas um poller ativo possa usar um token de bot por vez. Se você ainda vir conflitos
getUpdates409, é provável que outro Gateway do OpenClaw, script ou poller externo esteja usando o mesmo token. - Reinícios por watchdog de long polling são acionados após 120 segundos sem liveness de
getUpdatesconcluído por padrão. Aumentechannels.telegram.pollingStallThresholdMssomente se seu deployment ainda vir reinícios falsos por polling stall durante trabalho de longa duração. O valor é em milissegundos e é permitido de30000a600000; overrides por conta são compatíveis. - A Telegram Bot API não tem suporte a confirmação de leitura (
sendReadReceiptsnão se aplica).
Referência de recursos
Prévia de stream ao vivo (edições de mensagem)
Prévia de stream ao vivo (edições de mensagem)
- chats diretos: mensagem de prévia +
editMessageText - grupos/tópicos: mensagem de prévia +
editMessageText
channels.telegram.streamingéoff | partial | block | progress(padrão:partial)progressmantém um rascunho de status editável para o progresso das ferramentas, limpa-o ao concluir e envia a resposta final como uma mensagem normalstreaming.preview.toolProgresscontrola se as atualizações de ferramenta/progresso reutilizam a mesma mensagem de prévia editada (padrão:truequando o streaming de prévia está ativo)streaming.preview.commandTextcontrola os detalhes de comando/execução dentro dessas linhas de progresso de ferramenta:raw(padrão, preserva o comportamento lançado) oustatus(somente o rótulo da ferramenta)- valores legados de
channels.telegram.streamModee booleanos destreamingsão detectados; executeopenclaw doctor --fixpara migrá-los parachannels.telegram.streaming.mode
v2026.4.22. Para manter a prévia editada do texto da resposta, mas ocultar as linhas de progresso de ferramenta, defina:progress quando quiser progresso de ferramenta visível sem editar a resposta final nessa mesma mensagem. Coloque a política de texto de comando em streaming.progress:streaming.mode: "off" somente quando quiser entrega apenas final: edições de prévia do Telegram são desativadas e conversas genéricas de ferramenta/progresso são suprimidas em vez de serem enviadas como mensagens de status independentes. Solicitações de aprovação, cargas de mídia e erros ainda passam pela entrega final normal. Use streaming.preview.toolProgress: false quando quiser apenas manter as edições de prévia da resposta enquanto oculta as linhas de status de progresso de ferramenta.replyToMode é "first", "all" ou "batched" e a mensagem de entrada inclui texto de citação selecionada, o OpenClaw envia a resposta final pelo caminho nativo de resposta com citação do Telegram em vez de editar a prévia da resposta, então streaming.preview.toolProgress não consegue mostrar as linhas curtas de status para essa interação. Respostas à mensagem atual sem texto de citação selecionada ainda mantêm o streaming de prévia. Defina replyToMode: "off" quando a visibilidade do progresso de ferramenta for mais importante que respostas nativas com citação, ou defina streaming.preview.toolProgress: false para reconhecer a troca.- prévias curtas em DM/grupo/tópico: o OpenClaw mantém a mesma mensagem de prévia e faz a edição final no mesmo lugar
- finais de texto longos que se dividem em várias mensagens do Telegram reutilizam a prévia existente como o primeiro trecho final quando possível, depois enviam somente os trechos restantes
- finais em modo de progresso limpam o rascunho de status e usam a entrega final normal em vez de editar o rascunho para virar a resposta
- se a edição final falhar antes de o texto concluído ser confirmado, o OpenClaw usa a entrega final normal e limpa a prévia obsoleta
/reasoning streamenvia o raciocínio para a prévia ao vivo durante a geração- a prévia de raciocínio é excluída após a entrega final; use
/reasoning onquando o raciocínio deve permanecer visível - a resposta final é enviada sem texto de raciocínio
Formatação e fallback HTML
Formatação e fallback HTML
parse_mode: "HTML" do Telegram.- Texto semelhante a Markdown é renderizado como HTML seguro para Telegram.
- Tags HTML compatíveis com o Telegram são preservadas; HTML não compatível é escapado.
- Se o Telegram rejeitar o HTML analisado, o OpenClaw tenta novamente como texto simples.
channels.telegram.linkPreview: false.Comandos nativos e comandos personalizados
Comandos nativos e comandos personalizados
setMyCommands.Padrões de comandos nativos:commands.native: "auto"ativa comandos nativos para o Telegram
- nomes são normalizados (remove
/inicial, converte para minúsculas) - padrão válido:
a-z,0-9,_, comprimento1..32 - comandos personalizados não podem substituir comandos nativos
- conflitos/duplicatas são ignorados e registrados em log
- comandos personalizados são apenas entradas de menu; eles não implementam comportamento automaticamente
- comandos de Plugin/Skills ainda podem funcionar quando digitados, mesmo que não apareçam no menu do Telegram
setMyCommands failedcomBOT_COMMANDS_TOO_MUCHsignifica que o menu do Telegram ainda excedeu o limite após o corte; reduza comandos de Plugin/Skills/personalizados ou desativechannels.telegram.commands.native.- falha de
deleteWebhook,deleteMyCommandsousetMyCommandscom404: Not Foundenquanto comandos curl diretos da Bot API funcionam pode significar quechannels.telegram.apiRootfoi definido para o endpoint completo/bot<TOKEN>.apiRootdeve ser apenas a raiz da Bot API, eopenclaw doctor --fixremove um/bot<TOKEN>final acidental. getMe returned 401significa que o Telegram rejeitou o token de bot configurado. AtualizebotToken,tokenFileouTELEGRAM_BOT_TOKENcom o token atual do BotFather; o OpenClaw para antes do polling, então isso não é relatado como falha de limpeza de Webhook.setMyCommands failedcom erros de rede/fetch geralmente significa que DNS/HTTPS de saída paraapi.telegram.orgestá bloqueado.
Comandos de pareamento de dispositivo (Plugin device-pair)
Quando o Plugin device-pair está instalado:/pairgera código de configuração- cole o código no app iOS
/pair pendinglista solicitações pendentes (incluindo função/escopos)- aprove a solicitação:
/pair approve <requestId>para aprovação explícita/pair approvequando há somente uma solicitação pendente/pair approve latestpara a mais recente
scopes: []; qualquer token de operador transferido permanece limitado a operator.approvals, operator.read, operator.talk.secrets e operator.write. Verificações de escopo de bootstrap têm prefixo de função, então essa allowlist de operador satisfaz apenas solicitações de operador; funções que não são de operador ainda precisam de escopos sob seu próprio prefixo de função.Se um dispositivo tentar novamente com detalhes de autenticação alterados (por exemplo função/escopos/chave pública), a solicitação pendente anterior será substituída e a nova solicitação usará um requestId diferente. Execute /pair pending novamente antes de aprovar.Mais detalhes: Pareamento.Botões inline
Botões inline
offdmgroupallallowlist(padrão)
capabilities: ["inlineButtons"] é mapeado para inlineButtons: "all".Exemplo de ação de mensagem:callback_data: <value>Ações de mensagem do Telegram para agentes e automação
Ações de mensagem do Telegram para agentes e automação
sendMessage(to,content, opcionalmediaUrl,replyToMessageId,messageThreadId)react(chatId,messageId,emoji)deleteMessage(chatId,messageId)editMessage(chatId,messageId,content)createForumTopic(chatId,name, opcionaliconColor,iconCustomEmojiId)
send, react, delete, edit, sticker, sticker-search, topic-create).Controles de gating:channels.telegram.actions.sendMessagechannels.telegram.actions.deleteMessagechannels.telegram.actions.reactionschannels.telegram.actions.sticker(padrão: desativado)
edit e topic-create atualmente são ativados por padrão e não têm seletores channels.telegram.actions.* separados.
Envios em runtime usam o snapshot ativo de configuração/segredos (inicialização/recarregamento), então caminhos de ação não fazem nova resolução ad hoc de SecretRef por envio.Semântica de remoção de reação: /tools/reactionsTags de encadeamento de resposta
Tags de encadeamento de resposta
Tópicos de fórum e comportamento de threads
Tópicos de fórum e comportamento de threads
- chaves de sessão de tópico acrescentam
:topic:<threadId> - respostas e indicador de digitação apontam para a thread do tópico
- caminho de configuração do tópico:
channels.telegram.groups.<chatId>.topics.<threadId>
threadId=1):- envios de mensagem omitem
message_thread_id(o Telegram rejeitasendMessage(...thread_id=1)) - ações de digitação ainda incluem
message_thread_id
requireMention, allowFrom, skills, systemPrompt, enabled, groupPolicy).
agentId é somente de tópico e não herda dos padrões do grupo.Roteamento de agente por tópico: Cada tópico pode rotear para um agente diferente definindo agentId na configuração do tópico. Isso dá a cada tópico seu próprio workspace, memória e sessão isolados. Exemplo:agent:zu:telegram:group:-1001234567890:topic:3Vinculação persistente de tópico ACP: Tópicos de fórum podem fixar sessões do harness ACP por meio de vinculações ACP tipadas de nível superior (bindings[] com type: "acp" e match.channel: "telegram", peer.kind: "group" e um ID qualificado por tópico como -1001234567890:topic:42). Atualmente limitado a tópicos de fórum em grupos/supergrupos. Consulte Agentes ACP.Geração de ACP vinculada à conversa a partir do chat: /acp spawn <agent> --thread here|auto vincula o tópico atual a uma nova sessão ACP; acompanhamentos são roteados diretamente para lá. O OpenClaw fixa a confirmação de geração no tópico. Requer que channels.telegram.threadBindings.spawnSessions permaneça habilitado (padrão: true).O contexto do modelo expõe MessageThreadId e IsForum. Chats de DM com message_thread_id mantêm o roteamento de DM e metadados de resposta em sessões planas por padrão; eles só usam chaves de sessão cientes de conversa quando configurados com threadReplies: "inbound", threadReplies: "always", requireTopic: true ou uma configuração de tópico correspondente. Use channels.telegram.dm.threadReplies de nível superior para o padrão da conta, ou direct.<chatId>.threadReplies para uma DM.Áudio, vídeo e stickers
Áudio, vídeo e stickers
Mensagens de áudio
O Telegram distingue notas de voz de arquivos de áudio.- padrão: comportamento de arquivo de áudio
- tag
[[audio_as_voice]]na resposta do agente para forçar envio como nota de voz - transcrições de notas de voz recebidas são enquadradas como texto gerado por máquina, não confiável, no contexto do agente; a detecção de menção ainda usa a transcrição bruta, então mensagens de voz controladas por menção continuam funcionando.
Mensagens de vídeo
O Telegram distingue arquivos de vídeo de notas de vídeo.Exemplo de ação de mensagem:Stickers
Tratamento de stickers recebidos:- WEBP estático: baixado e processado (placeholder
<media:sticker>) - TGS animado: ignorado
- WEBM de vídeo: ignorado
Sticker.emojiSticker.setNameSticker.fileIdSticker.fileUniqueIdSticker.cachedDescription
~/.openclaw/telegram/sticker-cache.json
Notificações de reação
Notificações de reação
message_reaction (separadas dos payloads de mensagem).Quando habilitado, o OpenClaw enfileira eventos de sistema como:Telegram reaction added: 👍 by Alice (@alice) on msg 42
channels.telegram.reactionNotifications:off | own | all(padrão:own)channels.telegram.reactionLevel:off | ack | minimal | extensive(padrão:minimal)
ownsignifica reações de usuários apenas a mensagens enviadas pelo bot (melhor esforço via cache de mensagens enviadas).- Eventos de reação ainda respeitam controles de acesso do Telegram (
dmPolicy,allowFrom,groupPolicy,groupAllowFrom); remetentes não autorizados são descartados. - O Telegram não fornece IDs de conversa em atualizações de reação.
- grupos que não são fórum roteiam para a sessão de chat do grupo
- grupos de fórum roteiam para a sessão do tópico geral do grupo (
:topic:1), não para o tópico exato de origem
allowed_updates para polling/Webhook inclui message_reaction automaticamente.Reações de confirmação
Reações de confirmação
ackReaction envia um emoji de confirmação enquanto o OpenClaw processa uma mensagem recebida.Ordem de resolução:channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- fallback do emoji da identidade do agente (
agents.list[].identity.emoji, caso contrário ”👀”)
- O Telegram espera emoji unicode (por exemplo, ”👀”).
- Use
""para desabilitar a reação para um canal ou conta.
Gravações de configuração a partir de eventos e comandos do Telegram
Gravações de configuração a partir de eventos e comandos do Telegram
configWrites !== false).Gravações acionadas pelo Telegram incluem:- eventos de migração de grupo (
migrate_to_chat_id) para atualizarchannels.telegram.groups /config sete/config unset(requer habilitação de comando)
Polling longo vs Webhook
Polling longo vs Webhook
channels.telegram.webhookUrl e channels.telegram.webhookSecret; opcionais webhookPath, webhookHost, webhookPort (padrões /telegram-webhook, 127.0.0.1, 8787).No modo de polling longo, o OpenClaw persiste seu marcador de reinício apenas depois que uma atualização é despachada com sucesso. Se um handler falhar, essa atualização permanece retentável no mesmo processo e não é gravada como concluída para deduplicação de reinício.O listener local se vincula a 127.0.0.1:8787. Para ingresso público, coloque um proxy reverso na frente da porta local ou defina webhookHost: "0.0.0.0" intencionalmente.O modo Webhook valida guardas de solicitação, o token secreto do Telegram e o corpo JSON antes de retornar 200 ao Telegram.
O OpenClaw então processa a atualização de forma assíncrona pelas mesmas filas de bot por chat/por tópico usadas pelo polling longo, então turnos lentos de agente não seguram o ACK de entrega do Telegram.Limites, nova tentativa e destinos da CLI
Limites, nova tentativa e destinos da CLI
- O padrão de
channels.telegram.textChunkLimité 4000. channels.telegram.chunkMode="newline"prefere limites de parágrafo (linhas em branco) antes de dividir por comprimento.channels.telegram.mediaMaxMb(padrão 100) limita o tamanho de mídia do Telegram recebida e enviada.channels.telegram.mediaGroupFlushMs(padrão 500) controla por quanto tempo álbuns/grupos de mídia do Telegram são armazenados em buffer antes que o OpenClaw os despache como uma mensagem recebida. Aumente se partes do álbum chegarem atrasadas; reduza para diminuir a latência de resposta do álbum.channels.telegram.timeoutSecondssubstitui o timeout do cliente da API do Telegram (se não definido, o padrão do grammY se aplica). Clientes de bot limitam valores configurados abaixo do guarda de solicitação de texto/digitação enviada de 60 segundos, para que o grammY não aborte a entrega de resposta visível antes que o guarda de transporte e o fallback do OpenClaw possam executar. O polling longo ainda usa um guarda de solicitaçãogetUpdatesde 45 segundos, para que polls ociosos não sejam abandonados indefinidamente.channels.telegram.pollingStallThresholdMstem padrão120000; ajuste entre30000e600000apenas para reinícios por travamento de polling falso-positivos.- o histórico de contexto de grupo usa
channels.telegram.historyLimitoumessages.groupChat.historyLimit(padrão 50);0desabilita. - contexto suplementar de resposta/citação/encaminhamento é normalizado em uma janela de contexto de conversa selecionada quando o Gateway observou as mensagens pai; o cache de mensagens observadas é persistido ao lado do armazenamento de sessão. O Telegram inclui apenas um
reply_to_messagesuperficial nas atualizações, então cadeias mais antigas que o cache ficam limitadas ao payload de atualização atual do Telegram. - allowlists do Telegram principalmente controlam quem pode acionar o agente, não uma fronteira completa de redação de contexto suplementar.
- controles de histórico de DM:
channels.telegram.dmHistoryLimitchannels.telegram.dms["<user_id>"].historyLimit
- A configuração
channels.telegram.retryse aplica a helpers de envio do Telegram (CLI/ferramentas/ações) para erros recuperáveis da API enviada. A entrega da resposta final recebida também usa uma nova tentativa de envio seguro limitada para falhas de pré-conexão do Telegram, mas não tenta novamente envelopes de rede ambíguos pós-envio que poderiam duplicar mensagens visíveis.
openclaw message poll e aceitam tópicos de fórum:--poll-duration-seconds(5-600)--poll-anonymous--poll-public--thread-idpara tópicos de fórum (ou use um destino:topic:)
--presentationcom blocosbuttonspara teclados inline quandochannels.telegram.capabilities.inlineButtonspermite--pinou--delivery '{"pin":true}'para solicitar entrega fixada quando o bot pode fixar nesse chat--force-documentpara enviar imagens, GIFs e vídeos de saída como documentos em vez de uploads compactados de foto, mídia animada ou vídeo
channels.telegram.actions.sendMessage=falsedesabilita mensagens de saída do Telegram, incluindo pollschannels.telegram.actions.poll=falsedesabilita a criação de polls do Telegram, mantendo envios regulares habilitados
Aprovações de exec no Telegram
Aprovações de exec no Telegram
channels.telegram.execApprovals.enabled(auto-habilita quando pelo menos um aprovador pode ser resolvido)channels.telegram.execApprovals.approvers(recorre a IDs numéricos de proprietários decommands.ownerAllowFrom)channels.telegram.execApprovals.target:dm(padrão) |channel|bothagentFilter,sessionFilter
channels.telegram.allowFrom, groupAllowFrom e defaultTo controlam quem pode falar com o bot e onde ele envia respostas normais. Eles não tornam alguém um aprovador de exec. O primeiro pareamento de DM aprovado inicializa commands.ownerAllowFrom quando ainda não existe proprietário de comando, então a configuração com um proprietário ainda funciona sem duplicar IDs em execApprovals.approvers.A entrega no canal mostra o texto do comando no chat; habilite channel ou both apenas em grupos/tópicos confiáveis. Quando o prompt chega em um tópico de fórum, o OpenClaw preserva o tópico para o prompt de aprovação e o acompanhamento. Aprovações de exec expiram após 30 minutos por padrão.Botões de aprovação inline também exigem que channels.telegram.capabilities.inlineButtons permita a superfície de destino (dm, group ou all). IDs de aprovação prefixados com plugin: são resolvidos por meio de aprovações de plugin; outros são resolvidos primeiro por meio de aprovações de exec.Consulte Aprovações de exec.Controles de resposta de erro
Quando o agente encontra um erro de entrega ou de provedor, o Telegram pode responder com o texto do erro ou suprimi-lo. Duas chaves de configuração controlam esse comportamento:| Chave | Valores | Padrão | Descrição |
|---|---|---|---|
channels.telegram.errorPolicy | reply, silent | reply | reply envia uma mensagem de erro amigável para o chat. silent suprime totalmente respostas de erro. |
channels.telegram.errorCooldownMs | número (ms) | 60000 | Tempo mínimo entre respostas de erro para o mesmo chat. Evita spam de erros durante indisponibilidades. |
Solução de problemas
O bot não responde a mensagens de grupo sem menção
O bot não responde a mensagens de grupo sem menção
- Se
requireMention=false, o modo de privacidade do Telegram deve permitir visibilidade total.- BotFather:
/setprivacy-> Desativar - depois remova e adicione novamente o bot ao grupo
- BotFather:
openclaw channels statusavisa quando a configuração espera mensagens de grupo sem menção.openclaw channels status --probepode verificar IDs numéricos explícitos de grupos; o curinga"*"não pode ter a associação sondada.- teste rápido de sessão:
/activation always.
O bot não vê nenhuma mensagem do grupo
O bot não vê nenhuma mensagem do grupo
- quando
channels.telegram.groupsexiste, o grupo deve estar listado (ou incluir"*") - verifique a associação do bot ao grupo
- revise os logs:
openclaw logs --followpara motivos de ignorar mensagens
Os comandos funcionam parcialmente ou não funcionam
Os comandos funcionam parcialmente ou não funcionam
- autorize a identidade do remetente (pareamento e/ou
allowFromnumérico) - a autorização de comandos ainda se aplica mesmo quando a política do grupo é
open setMyCommands failedcomBOT_COMMANDS_TOO_MUCHsignifica que o menu nativo tem entradas demais; reduza comandos de plugin/skill/personalizados ou desative menus nativos- chamadas de inicialização
deleteMyCommands/setMyCommandse chamadas de digitaçãosendChatActionsão limitadas e tentam novamente uma vez por meio do fallback de transporte do Telegram em caso de tempo limite da solicitação. Erros persistentes de rede/fetch geralmente indicam problemas de acessibilidade DNS/HTTPS paraapi.telegram.org
A inicialização informa token não autorizado
A inicialização informa token não autorizado
getMe returned 401é uma falha de autenticação do Telegram para o token de bot configurado.- Copie novamente ou regenere o token de bot no BotFather, depois atualize
channels.telegram.botToken,channels.telegram.tokenFile,channels.telegram.accounts.<id>.botTokenouTELEGRAM_BOT_TOKENpara a conta padrão. deleteWebhook 401 Unauthorizeddurante a inicialização também é uma falha de autenticação; tratá-lo como “nenhum webhook existe” apenas adiaria a mesma falha de token inválido para chamadas de API posteriores.
Instabilidade de polling ou rede
Instabilidade de polling ou rede
- Node 22+ + fetch/proxy personalizado podem disparar comportamento de aborto imediato se os tipos de AbortSignal não corresponderem.
- Alguns hosts resolvem
api.telegram.orgpara IPv6 primeiro; saída IPv6 com defeito pode causar falhas intermitentes da API do Telegram. - Se os logs incluírem
TypeError: fetch failedouNetwork request for 'getUpdates' failed!, o OpenClaw agora repete essas tentativas como erros de rede recuperáveis. - Durante a inicialização do polling, o OpenClaw reutiliza a sonda
getMebem-sucedida da inicialização para o grammY, de modo que o executor não precise de um segundogetMeantes do primeirogetUpdates. - Se
deleteWebhookfalhar com um erro de rede transitório durante a inicialização do polling, o OpenClaw continua para long polling em vez de fazer outra chamada de plano de controle antes do polling. Um webhook ainda ativo aparece como um conflito degetUpdates; então o OpenClaw reconstrói o transporte do Telegram e tenta novamente a limpeza do webhook. - Se os sockets do Telegram forem reciclados em uma cadência fixa curta, verifique se há um
channels.telegram.timeoutSecondsbaixo; clientes de bot limitam valores configurados abaixo das proteções de solicitação de saída e degetUpdates, mas versões mais antigas podiam abortar todo polling ou resposta quando isso era definido abaixo dessas proteções. - Se os logs incluírem
Polling stall detected, o OpenClaw reinicia o polling e reconstrói o transporte do Telegram após 120 segundos sem liveness concluída de long-poll por padrão. openclaw channels status --probeeopenclaw doctoravisam quando uma conta de polling em execução não concluiugetUpdatesapós a tolerância de inicialização, quando uma conta de webhook em execução não concluiusetWebhookapós a tolerância de inicialização ou quando a última atividade bem-sucedida de transporte de polling está obsoleta.- Aumente
channels.telegram.pollingStallThresholdMsapenas quando chamadasgetUpdatesde longa duração estiverem saudáveis, mas seu host ainda relatar reinicializações falsas por travamento de polling. Travamentos persistentes geralmente apontam para problemas de proxy, DNS, IPv6 ou saída TLS entre o host eapi.telegram.org. - O Telegram também respeita o env de proxy do processo para transporte da Bot API, incluindo
HTTP_PROXY,HTTPS_PROXY,ALL_PROXYe suas variantes em minúsculas.NO_PROXY/no_proxyainda podem ignorarapi.telegram.org. - Se o proxy gerenciado do OpenClaw estiver configurado por meio de
OPENCLAW_PROXY_URLpara um ambiente de serviço e nenhum env de proxy padrão estiver presente, o Telegram também usará essa URL para transporte da Bot API. - Em hosts VPS com saída/TLS direta instável, roteie chamadas da API do Telegram por
channels.telegram.proxy:
- Node 22+ usa
autoSelectFamily=truepor padrão (exceto WSL2). A ordem de resultados DNS do Telegram respeitaOPENCLAW_TELEGRAM_DNS_RESULT_ORDER, depoischannels.telegram.network.dnsResultOrder, depois o padrão do processo, comoNODE_OPTIONS=--dns-result-order=ipv4first; se nada se aplicar, Node 22+ recorre aipv4first. - Se seu host for WSL2 ou funcionar explicitamente melhor com comportamento somente IPv4, force a seleção de família:
- Respostas de intervalo de benchmark RFC 2544 (
198.18.0.0/15) já são permitidas para downloads de mídia do Telegram por padrão. Se um fake-IP confiável ou proxy transparente reescreverapi.telegram.orgpara algum outro endereço privado/interno/de uso especial durante downloads de mídia, você pode optar pelo bypass somente do Telegram:
- A mesma opção está disponível por conta em
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork. - Se seu proxy resolver hosts de mídia do Telegram para
198.18.x.x, deixe a flag perigosa desativada primeiro. A mídia do Telegram já permite o intervalo de benchmark RFC 2544 por padrão.
- Substituições de ambiente (temporárias):
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first
- Valide respostas DNS:
Referência de configuração
Referência principal: Referência de configuração - Telegram.Campos de alto sinal do Telegram
Campos de alto sinal do Telegram
- inicialização/autenticação:
enabled,botToken,tokenFile,accounts.*(tokenFiledeve apontar para um arquivo regular; symlinks são rejeitados) - controle de acesso:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,groups.*.topics.*,bindings[]de nível superior (type: "acp") - aprovações de execução:
execApprovals,accounts.*.execApprovals - comando/menu:
commands.native,commands.nativeSkills,customCommands - threads/respostas:
replyToMode,dm.threadReplies,direct.*.threadReplies - streaming:
streaming(prévia),streaming.preview.toolProgress,blockStreaming - formatação/entrega:
textChunkLimit,chunkMode,linkPreview,responsePrefix - mídia/rede:
mediaMaxMb,mediaGroupFlushMs,timeoutSeconds,pollingStallThresholdMs,retry,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - raiz de API personalizada:
apiRoot(somente raiz da Bot API; não inclua/bot<TOKEN>) - webhook:
webhookUrl,webhookSecret,webhookPath,webhookHost - ações/capacidades:
capabilities.inlineButtons,actions.sendMessage|editMessage|deleteMessage|reactions|sticker - reações:
reactionNotifications,reactionLevel - erros:
errorPolicy,errorCooldownMs - gravações/histórico:
configWrites,historyLimit,dmHistoryLimit,dms.*.historyLimit
channels.telegram.defaultAccount (ou inclua channels.telegram.accounts.default) para tornar o roteamento padrão explícito. Caso contrário, o OpenClaw recorre ao primeiro ID de conta normalizado e openclaw doctor avisa. Contas nomeadas herdam channels.telegram.allowFrom / groupAllowFrom, mas não valores de accounts.default.*.