Telegram (Bot API)
Status: pronto para produção para DMs + grupos do bot via grammY. Long polling é o modo padrão; o modo Webhook é opcional.Pareamento
Solução de problemas do canal
Configuração do Gateway
Configuração rápida
Criar o token do bot no BotFather
@BotFather).Execute /newbot, siga as instruções e salve o token.Configurar 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 no config/env e depois inicie o Gateway.TELEGRAM_BOT_TOKEN se aplica apenas à conta padrão.Configurações do lado do Telegram
Modo de privacidade e visibilidade em grupos
Modo de privacidade e visibilidade em grupos
- desative o modo de privacidade com
/setprivacy, ou - torne o bot um 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ção a grupos/setprivacypara comportamento de visibilidade em grupos
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
channels.telegram.allowFrom aceita IDs numéricos de usuário do Telegram. Prefixos telegram: / tg: são aceitos e normalizados.
dmPolicy: "allowlist" com allowFrom vazio bloqueia todas as DMs e é rejeitado pela validação de configuração.
A configuração inicial 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 (best-effort; requer um token de bot do Telegram).
Se você antes dependia de arquivos de allowlist do armazenamento de pareamento, 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 um único proprietário, prefira dmPolicy: "allowlist" com IDs numéricos explícitos em allowFrom para manter a política de acesso persistente na configuração (em vez de depender de aprovações de pareamento anteriores).Confusão comum: aprovação de pareamento de DM não significa “este remetente está autorizado em qualquer lugar”.
O pareamento concede acesso somente a DM. A autorização de remetente em grupo ainda vem de allowlists explícitas na configuração.
Se você quiser “estou 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.Encontrando seu ID de usuário do Telegram
Mais seguro (sem bot de terceiros):- Envie DM para 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: respostas de entrada do Telegram voltam para o Telegram (o modelo não escolhe canais).
- Mensagens de entrada são normalizadas para o envelope compartilhado de canal com metadados de resposta e placeholders de mídia.
- Sessões de grupo são isoladas por ID do grupo. Tópicos de fórum acrescentam
:topic:<threadId>para manter tópicos isolados. - Mensagens de DM podem carregar
message_thread_id; o OpenClaw as roteia com chaves de sessão cientes de thread e preserva o ID da thread para respostas. - O long polling usa grammY runner com sequenciamento por chat/por thread. A concorrência geral do sink do runner usa
agents.defaults.maxConcurrent. - Reinicializações do watchdog de long polling são disparadas por padrão após 120 segundos sem liveness concluído de
getUpdates. Aumentechannels.telegram.pollingStallThresholdMsapenas se sua implantação ainda observar reinicializações falsas de polling travado durante trabalhos de longa duração. O valor está em milissegundos e é permitido de30000a600000; sobrescritas por conta são suportadas. - A Telegram Bot API não oferece suporte a confirmação de leitura (
sendReadReceiptsnão se aplica).
Referência de recursos
Prévia de streaming ao vivo (edições de mensagem)
Prévia de streaming 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)progressé mapeado parapartialno Telegram (compatibilidade com nomenclatura entre canais)streaming.preview.toolProgresscontrola se atualizações de ferramenta/progresso reutilizam a mesma mensagem de prévia editada (padrão:true). Definafalsepara manter mensagens separadas de ferramenta/progresso.channels.telegram.streamModelegado e valores booleanos destreamingsão mapeados automaticamente
- DM: o OpenClaw mantém a mesma mensagem de prévia e faz uma edição final no mesmo lugar (sem segunda mensagem)
- grupo/tópico: o OpenClaw mantém a mesma mensagem de prévia e faz uma edição final no mesmo lugar (sem segunda mensagem)
sendMessage + editMessageText.Stream de reasoning exclusivo do Telegram:/reasoning streamenvia reasoning para a prévia ao vivo durante a geração- a resposta final é enviada sem o texto de reasoning
Formatação e fallback para HTML
Formatação e fallback para HTML
parse_mode: "HTML".- Texto em estilo Markdown é renderizado para HTML seguro para Telegram.
- HTML bruto do modelo é escapado para reduzir falhas de parsing do Telegram.
- Se o Telegram rejeitar o HTML parseado, 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 Telegram
- nomes são normalizados (remove
/inicial, minúsculas) - padrão válido:
a-z,0-9,_, comprimento1..32 - comandos personalizados não podem sobrescrever 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 sejam mostrados 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.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 um 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 houver apenas 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. As verificações de escopo de bootstrap usam prefixo de função, então essa allowlist de operador atende apenas solicitações de operador; funções que não sejam 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"] legado é 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,mediaUrl,replyToMessageId,messageThreadIdopcionais)react(chatId,messageId,emoji)deleteMessage(chatId,messageId)editMessage(chatId,messageId,content)createForumTopic(chatId,name,iconColor,iconCustomEmojiIdopcionais)
send, react, delete, edit, sticker, sticker-search, topic-create).Controles de bloqueio:channels.telegram.actions.sendMessagechannels.telegram.actions.deleteMessagechannels.telegram.actions.reactionschannels.telegram.actions.sticker(padrão: desativado)
edit e topic-create estão atualmente ativados por padrão e não têm alternâncias channels.telegram.actions.* separadas.
Envios em runtime usam o snapshot ativo de config/secrets (inicialização/reload), portanto caminhos de ação não executam 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 thread
Tópicos de fórum e comportamento de thread
- chaves de sessão de tópico acrescentam
:topic:<threadId> - respostas e digitação são direcionadas à 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 é exclusivo do tópico e não é herdado 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:3Binding persistente de tópico ACP: tópicos de fórum podem fixar sessões do harness ACP por meio de bindings ACP tipados de nível superior:bindings[]comtype: "acp"ematch.channel: "telegram"
/acp spawn <agent> --thread here|autopode vincular o tópico atual do Telegram a uma nova sessão ACP.- Mensagens subsequentes do tópico são roteadas diretamente para a sessão ACP vinculada (sem necessidade de
/acp steer). - O OpenClaw fixa a mensagem de confirmação do spawn no tópico após um binding bem-sucedido.
- Requer
channels.telegram.threadBindings.spawnAcpSessions=true.
MessageThreadIdIsForum
- chats privados com
message_thread_idmantêm o roteamento de DM, mas usam chaves de sessão e alvos de resposta cientes de thread.
Á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
Mensagens de vídeo
O Telegram distingue arquivos de vídeo de video notes.Exemplo de ação de mensagem:Stickers
Tratamento de stickers de entrada:- WEBP estático: baixado e processado (placeholder
<media:sticker>) - TGS animado: ignorado
- WEBM em 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 ativado, 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 apenas reações de usuários a mensagens enviadas pelo bot (best-effort via cache de mensagens enviadas).- Eventos de reação ainda respeitam os controles de acesso do Telegram (
dmPolicy,allowFrom,groupPolicy,groupAllowFrom); remetentes não autorizados são descartados. - O Telegram não fornece IDs de thread em atualizações de reação.
- grupos que não são fórum são roteados para a sessão de chat do grupo
- grupos de fórum são roteados 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 está processando uma mensagem de entrada.Ordem de resolução:channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- fallback para emoji de identidade do agente (
agents.list[].identity.emoji, caso contrário"👀")
- O Telegram espera emoji Unicode (por exemplo
"👀"). - Use
""para desativar 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 ativação de comandos)
Long polling vs Webhook
Long polling vs Webhook
- defina
channels.telegram.webhookUrl - defina
channels.telegram.webhookSecret(obrigatório quandowebhookUrlestiver definido) - opcional
channels.telegram.webhookPath(padrão/telegram-webhook) - opcional
channels.telegram.webhookHost(padrão127.0.0.1) - opcional
channels.telegram.webhookPort(padrão8787)
127.0.0.1:8787.Se o seu endpoint público for diferente, coloque um proxy reverso na frente e aponte webhookUrl para a URL pública.
Defina webhookHost (por exemplo 0.0.0.0) quando você precisar intencionalmente de ingresso externo.Limites, retry e destinos de CLI
Limites, retry e destinos de CLI
- o padrão de
channels.telegram.textChunkLimité 4000. channels.telegram.chunkMode="newline"prefere limites de parágrafo (linhas em branco) antes da divisão por comprimento.channels.telegram.mediaMaxMb(padrão 100) limita o tamanho de mídia do Telegram de entrada e saída.channels.telegram.timeoutSecondssobrescreve o timeout do cliente da API do Telegram (se não definido, aplica-se o padrão do grammY).channels.telegram.pollingStallThresholdMstem padrão120000; ajuste entre30000e600000apenas para reinicializações falso-positivas de polling travado.- o histórico de contexto de grupo usa
channels.telegram.historyLimitoumessages.groupChat.historyLimit(padrão 50);0desativa. - contexto suplementar de resposta/citação/encaminhamento atualmente é repassado como recebido.
- allowlists do Telegram controlam principalmente quem pode acionar o agente, não um limite completo 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 aos helpers de envio do Telegram (CLI/tools/actions) para erros recuperáveis da API de saída.
openclaw message poll e oferecem suporte a 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.inlineButtonspermitir--pinou--delivery '{"pin":true}'para solicitar entrega fixada quando o bot puder fixar naquela conversa--force-documentpara enviar imagens e GIFs de saída como documentos em vez de uploads comprimidos de foto ou mídia animada
channels.telegram.actions.sendMessage=falsedesativa mensagens de saída do Telegram, incluindo pollschannels.telegram.actions.poll=falsedesativa a criação de polls no Telegram, mantendo envios regulares ativados
Aprovações de exec no Telegram
Aprovações de exec no Telegram
channels.telegram.execApprovals.enabledchannels.telegram.execApprovals.approvers(opcional; usa como fallback IDs numéricos do proprietário inferidos deallowFromedefaultTodireto quando possível)channels.telegram.execApprovals.target(dm|channel|both, padrão:dm)agentFilter,sessionFilter
enabled não está definido ou é "auto" e pelo menos um aprovador pode ser resolvido, seja de execApprovals.approvers ou da configuração numérica de proprietário da conta (allowFrom e defaultTo de mensagem direta). Defina enabled: false para desativar explicitamente o Telegram como cliente nativo de aprovação. Caso contrário, solicitações de aprovação recorrem a outras rotas de aprovação configuradas ou à política de fallback de aprovação de exec.O Telegram também renderiza os botões compartilhados de aprovação usados por outros canais de chat. O adaptador nativo do Telegram adiciona principalmente roteamento de DM de aprovador, fanout para canal/tópico e hints de digitação antes da entrega.
Quando esses botões estão presentes, eles são a UX principal de aprovação; o OpenClaw
só deve incluir um comando manual /approve quando o resultado da ferramenta disser
que aprovações por chat não estão disponíveis ou que a aprovação manual é o único caminho.Regras de entrega:target: "dm"envia prompts de aprovação apenas para DMs de aprovadores resolvidostarget: "channel"envia o prompt de volta para o chat/tópico de origem no Telegramtarget: "both"envia para DMs de aprovadores e para o chat/tópico de origem
/approve nem os botões de aprovação do Telegram.Comportamento de resolução de aprovação:- IDs com prefixo
plugin:sempre são resolvidos por aprovações de Plugin. - Outros IDs tentam primeiro
exec.approval.resolve. - Se o Telegram também estiver autorizado para aprovações de Plugin e o Gateway disser
que a aprovação de exec é desconhecida/expirada, o Telegram tenta novamente uma vez via
plugin.approval.resolve. - Negativas/erros reais de aprovação de exec não fazem fallback silencioso para resolução de aprovação de Plugin.
channel ou both em grupos/tópicos confiáveis. Quando o prompt chega em um tópico de fórum, o OpenClaw preserva o tópico tanto para o prompt de aprovação quanto para o acompanhamento pós-aprovação. Aprovações de exec expiram após 30 minutos por padrão.Botões inline de aprovação também dependem de channels.telegram.capabilities.inlineButtons permitir a superfície de destino (dm, group ou all).Documentação relacionada: Aprovações de execControles de resposta de erro
Quando o agente encontra um erro de entrega ou do provider, 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 ao 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 completa.- BotFather:
/setprivacy-> Disable - depois remova + 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 grupo; o curinga"*"não pode ser verificado por associação.- teste rápido de sessão:
/activation always.
O bot não está vendo mensagens de grupo de forma alguma
O bot não está vendo mensagens de grupo de forma alguma
- quando
channels.telegram.groupsexiste, o grupo deve estar listado (ou incluir"*") - verifique a participação do bot no grupo
- revise os logs:
openclaw logs --followpara motivos de ignorar
Os comandos funcionam parcialmente ou não funcionam
Os comandos funcionam parcialmente ou não funcionam
- autorize sua identidade de remetente (pareamento e/ou
allowFromnumérico) - a autorização de comando ainda se aplica mesmo quando a política de grupo é
open setMyCommands failedcomBOT_COMMANDS_TOO_MUCHsignifica que o menu nativo tem entradas demais; reduza comandos de Plugin/Skills/personalizados ou desative menus nativossetMyCommands failedcom erros de rede/fetch geralmente indica problemas de alcance DNS/HTTPS atéapi.telegram.org
Instabilidade de polling ou rede
Instabilidade de polling ou rede
- Node 22+ + fetch/proxy personalizado pode disparar comportamento de abort imediato se os tipos de AbortSignal não corresponderem.
- Alguns hosts resolvem
api.telegram.orgpara IPv6 primeiro; saída IPv6 com falha pode causar falhas intermitentes na API do Telegram. - Se os logs incluírem
TypeError: fetch failedouNetwork request for 'getUpdates' failed!, o OpenClaw agora tenta novamente esses casos como erros de rede recuperáveis. - 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ído de long poll por padrão. - Aumente
channels.telegram.pollingStallThresholdMsapenas quando chamadas longas degetUpdatesestiverem saudáveis, mas seu host ainda relatar reinicializações falso-positivas de polling travado. Stalls persistentes normalmente apontam para problemas de proxy, DNS, IPv6 ou saída TLS entre o host eapi.telegram.org. - Em hosts VPS com saída direta/TLS instável, roteie chamadas da API do Telegram por
channels.telegram.proxy:
- Node 22+ usa por padrão
autoSelectFamily=true(exceto WSL2) ednsResultOrder=ipv4first. - Se seu host for WSL2 ou funcionar explicitamente melhor com comportamento somente IPv4, force a seleção de família:
- Respostas na faixa 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 ativar o bypass exclusivo do Telegram:
- O mesmo opt-in 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 a faixa de benchmark RFC 2544 por padrão.
- Sobrescritas por variável 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:
Ponteiros para a referência de configuração do Telegram
Referência principal:-
channels.telegram.enabled: ativa/desativa a inicialização do canal. -
channels.telegram.botToken: token do bot (BotFather). -
channels.telegram.tokenFile: lê o token de um caminho de arquivo regular. Symlinks são rejeitados. -
channels.telegram.dmPolicy:pairing | allowlist | open | disabled(padrão: pairing). -
channels.telegram.allowFrom: allowlist de DM (IDs numéricos de usuário do Telegram).allowlistexige pelo menos um ID de remetente.openexige"*".openclaw doctor --fixpode resolver entradas legadas@usernamepara IDs e pode recuperar entradas de allowlist de arquivos do armazenamento de pareamento em fluxos de migração de allowlist. -
channels.telegram.actions.poll: ativa ou desativa a criação de polls no Telegram (padrão: ativado; ainda requersendMessage). -
channels.telegram.defaultTo: destino padrão do Telegram usado pelo CLI--deliverquando nenhum--reply-toexplícito é fornecido. -
channels.telegram.groupPolicy:open | allowlist | disabled(padrão: allowlist). -
channels.telegram.groupAllowFrom: allowlist de remetentes de grupo (IDs numéricos de usuário do Telegram).openclaw doctor --fixpode resolver entradas legadas@usernamepara IDs. Entradas não numéricas são ignoradas no momento da autenticação. A autenticação de grupo não usa fallback do armazenamento de pareamento de DM (2026.2.25+). -
Precedência de múltiplas contas:
- Quando dois ou mais IDs de conta estão configurados, defina
channels.telegram.defaultAccount(ou incluachannels.telegram.accounts.default) para tornar o roteamento padrão explícito. - Se nenhum dos dois estiver definido, o OpenClaw usa como fallback o primeiro ID de conta normalizado e
openclaw doctoremite um aviso. channels.telegram.accounts.default.allowFromechannels.telegram.accounts.default.groupAllowFromse aplicam apenas à contadefault.- Contas nomeadas herdam
channels.telegram.allowFromechannels.telegram.groupAllowFromquando valores no nível da conta não estão definidos. - Contas nomeadas não herdam
channels.telegram.accounts.default.allowFrom/groupAllowFrom.
- Quando dois ou mais IDs de conta estão configurados, defina
-
channels.telegram.groups: padrões por grupo + allowlist (use"*"para padrões globais).channels.telegram.groups.<id>.groupPolicy: sobrescrita por grupo para groupPolicy (open | allowlist | disabled).channels.telegram.groups.<id>.requireMention: padrão de bloqueio por menção.channels.telegram.groups.<id>.skills: filtro de Skills (omitir = todas as Skills, vazio = nenhuma).channels.telegram.groups.<id>.allowFrom: sobrescrita de allowlist de remetentes por grupo.channels.telegram.groups.<id>.systemPrompt: prompt de sistema extra para o grupo.channels.telegram.groups.<id>.enabled: desativa o grupo quandofalse.channels.telegram.groups.<id>.topics.<threadId>.*: sobrescritas por tópico (campos de grupo +agentIdexclusivo do tópico).channels.telegram.groups.<id>.topics.<threadId>.agentId: roteia este tópico para um agente específico (sobrescreve roteamento no nível de grupo e por binding).
-
channels.telegram.groups.<id>.topics.<threadId>.groupPolicy: sobrescrita por tópico para groupPolicy (open | allowlist | disabled). -
channels.telegram.groups.<id>.topics.<threadId>.requireMention: sobrescrita de bloqueio por menção por tópico. -
bindings[]de nível superior comtype: "acp"e ID canônico de tópicochatId:topic:topicIdemmatch.peer.id: campos persistentes de binding de tópico ACP (consulte ACP Agents). -
channels.telegram.direct.<id>.topics.<threadId>.agentId: roteia tópicos de DM para um agente específico (mesmo comportamento de tópicos de fórum). -
channels.telegram.execApprovals.enabled: ativa o Telegram como cliente de aprovação de exec baseado em chat para esta conta. -
channels.telegram.execApprovals.approvers: IDs de usuário do Telegram autorizados a aprovar ou negar solicitações de exec. Opcional quandochannels.telegram.allowFromou umchannels.telegram.defaultTodireto já identifica o proprietário. -
channels.telegram.execApprovals.target:dm | channel | both(padrão:dm).channelebothpreservam o tópico de origem do Telegram quando presente. -
channels.telegram.execApprovals.agentFilter: filtro opcional de ID de agente para prompts de aprovação encaminhados. -
channels.telegram.execApprovals.sessionFilter: filtro opcional de chave de sessão (substring ou regex) para prompts de aprovação encaminhados. -
channels.telegram.accounts.<account>.execApprovals: sobrescrita por conta para roteamento de aprovação de exec no Telegram e autorização de aprovador. -
channels.telegram.capabilities.inlineButtons:off | dm | group | all | allowlist(padrão: allowlist). -
channels.telegram.accounts.<account>.capabilities.inlineButtons: sobrescrita por conta. -
channels.telegram.commands.nativeSkills: ativa/desativa comandos nativos de Skills do Telegram. -
channels.telegram.replyToMode:off | first | all(padrão:off). -
channels.telegram.textChunkLimit: tamanho do bloco de saída (caracteres). -
channels.telegram.chunkMode:length(padrão) ounewlinepara dividir em linhas em branco (limites de parágrafo) antes da divisão por comprimento. -
channels.telegram.linkPreview: ativa/desativa pré-visualizações de link para mensagens de saída (padrão: true). -
channels.telegram.streaming:off | partial | block | progress(prévia de streaming ao vivo; padrão:partial;progressé mapeado parapartial;blocké compatibilidade legada com modo de prévia). O streaming de prévia no Telegram usa uma única mensagem de prévia que é editada no mesmo lugar. -
channels.telegram.streaming.preview.toolProgress: reutiliza a mensagem de prévia ao vivo para atualizações de ferramenta/progresso quando o streaming de prévia está ativo (padrão:true). Definafalsepara manter mensagens separadas de ferramenta/progresso. -
channels.telegram.mediaMaxMb: limite de mídia do Telegram de entrada/saída (MB, padrão: 100). -
channels.telegram.retry: política de retry para helpers de envio do Telegram (CLI/tools/actions) em erros recuperáveis da API de saída (tentativas, minDelayMs, maxDelayMs, jitter). -
channels.telegram.network.autoSelectFamily: sobrescreve autoSelectFamily do Node (true=ativar, false=desativar). O padrão é ativado no Node 22+, com WSL2 tendo padrão desativado. -
channels.telegram.network.dnsResultOrder: sobrescreve a ordem de resultado de DNS (ipv4firstouverbatim). O padrão éipv4firstno Node 22+. -
channels.telegram.network.dangerouslyAllowPrivateNetwork: opt-in perigoso para ambientes confiáveis de fake-IP ou proxy transparente em que downloads de mídia do Telegram resolvemapi.telegram.orgpara endereços privados/internos/de uso especial fora da faixa permitida padrão de benchmark RFC 2544. -
channels.telegram.proxy: URL de proxy para chamadas da Bot API (SOCKS/HTTP). -
channels.telegram.webhookUrl: ativa o modo Webhook (requerchannels.telegram.webhookSecret). -
channels.telegram.webhookSecret: segredo do Webhook (obrigatório quandowebhookUrlestá definido). -
channels.telegram.webhookPath: caminho local do Webhook (padrão/telegram-webhook). -
channels.telegram.webhookHost: host local de bind do Webhook (padrão127.0.0.1). -
channels.telegram.webhookPort: porta local de bind do Webhook (padrão8787). -
channels.telegram.actions.reactions: controla reações de ferramenta do Telegram. -
channels.telegram.actions.sendMessage: controla envios de mensagem de ferramenta do Telegram. -
channels.telegram.actions.deleteMessage: controla exclusões de mensagem de ferramenta do Telegram. -
channels.telegram.actions.sticker: controla ações de sticker do Telegram — enviar e pesquisar (padrão: false). -
channels.telegram.reactionNotifications:off | own | all— controla quais reações disparam eventos de sistema (padrão:ownquando não definido). -
channels.telegram.reactionLevel:off | ack | minimal | extensive— controla a capacidade de reação do agente (padrão:minimalquando não definido). -
channels.telegram.errorPolicy:reply | silent— controla o comportamento de resposta de erro (padrão:reply). Sobrescritas por conta/grupo/tópico são suportadas. -
channels.telegram.errorCooldownMs: mínimo em ms entre respostas de erro para o mesmo chat (padrão:60000). Evita spam de erros durante indisponibilidades. - Referência de configuração - 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 exec:
execApprovals,accounts.*.execApprovals - comando/menu:
commands.native,commands.nativeSkills,customCommands - threading/respostas:
replyToMode - streaming:
streaming(prévia),streaming.preview.toolProgress,blockStreaming - formatação/entrega:
textChunkLimit,chunkMode,linkPreview,responsePrefix - mídia/rede:
mediaMaxMb,timeoutSeconds,pollingStallThresholdMs,retry,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - 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