Quando um bot do Telegram no NanoClaw para de responder, o primeiro passo não é uma correção — é decidir se as mensagens recebidas estão chegando ao host, porque duas falhas do NanoClaw relatadas separadamente produzem essa reclamação com sinais opostos. Em uma, o recebimento morre enquanto a entrega de saída e as tarefas agendadas continuam funcionando, então todas as superfícies verificadas pelo operador parecem saudáveis. Na outra, nada é enviado, e o log marca como entregues mensagens que nunca foram enviadas. A mesma reclamação, causas diferentes, e um remédio para uma não faz nada pela outra.
Uma desambiguação antes de qualquer coisa, porque os resultados de busca para essa expressão são em sua maioria sobre outro produto. OpenClaw é um projeto separado e muito maior — 390.207 estrelas e uma licença NOASSERTION quando o registro do repositório na API foi lido em 21 de setembro de 2026 — e a própria página inicial do NanoClaw se posiciona contra ele. NanoClaw é nanocoai/nanoclaw: MIT, não arquivado, não é um fork, 30.818 estrelas, 1.068 issues abertas, último push em 19 de setembro de 2026 (GitHub API, mesma data). O endereço antigo qwibitai/nanoclaw retorna 301 para ele, portanto é o mesmo projeto renomeado, não um segundo projeto. Os dois projetos não compartilham nenhum caminho de código do Telegram — o NanoClaw instala seu próprio adaptador copiando o código-fonte de seu branch channels (habilidade add-telegram) — portanto uma solução do OpenClaw não se aplica. Para a diferença completa, consulte NanoClaw vs OpenClaw.
Leia o sinal antes de tocar em qualquer coisa
Cada linha abaixo é uma falha distinta, relatada separadamente, com sua própria verificação de confirmação. Todas as oito foram lidas em 21 de setembro de 2026 no próprio rastreador de issues do NanoClaw, nas skills lançadas e na documentação do canal.
| O que você observa | Causa mais provável | A verificação que confirma isso |
|---|---|---|
| Nada do que você envia é respondido, mas respostas, mensagens agendadas e entrega de saída continuam funcionando | O loop de polling está falhando e tentando novamente para sempre — issue #3728, aberta | Uma linha Telegram polling request failed contendo um valor consecutiveFailures grande; o sucesso não é registrado, portanto um log silencioso não prova que está saudável |
Nada é enviado; o log principal mostra Message delivered com platformMsgId=undefined ao lado de No adapter for channel type | Duas instâncias do host ao mesmo tempo — o segundo poller recebe um 409 do Telegram, que interrompe a configuração antes que o adaptador seja registrado (/debug skill, PR #2225) | A ausência de uma linha Channel adapter started para telegram, além de um segundo processo em ps aux |
| Mensagens diretas e grupos funcionam; channel posts nunca chegam | Um filtro de atualização obsoleto no servidor para o token do bot — issue #2989, aberta | Esse token já foi usado anteriormente em polling pelo NanoClaw v1 ou por outra biblioteca de bot? A própria Bot API do Telegram diz sobre allowed_updates: "Se não for especificada, a configuração anterior será usada." |
| O bot responde a mensagens diretas, mas ignora textos comuns de grupos | O Group Privacy está ativado (add-telegram skill) | BotFather, /mybots, Bot Settings, Group Privacy — e depois adicione o bot novamente ao grupo |
| As mensagens funcionam, mas o pareamento nunca termina | O getMe na inicialização falhou uma vez e um nome de usuário de bot nulo fica armazenado em cache durante toda a vida do processo — issue #3162, aberta | Um aviso Telegram getMe failed na inicialização, minutos antes de você tentar parear; a issue relata que uma reinicialização limpa o problema |
| A configuração é interrompida com "Couldn't reach Telegram", ou a inicialização trava por cerca de um minuto e meio | IPv6 configurado sem uma rota funcional — issue #2377, aberta | curl -4 contra a Bot API é bem-sucedido, enquanto curl -6 não consegue se conectar |
| A maioria das respostas chega, mas as que contêm determinadas URLs nunca chegam | Formatação de saída, não recebimento: a issue #3569 relata que o adaptador fixado trunca mensagens com uma quantidade ímpar de marcadores não escapados | O Telegram rejeita o envio; duas URLs com sublinhado simples se cancelam, fazendo o problema parecer intermitente |
| Um segundo bot que você acabou de adicionar nunca fica online | As variáveis de instância são lidas uma vez na inicialização, e um token duplicado é ignorado (channel documentation) | Um aviso em logs/nanoclaw.error.log (add-telegram skill); o Telegram permite um poller por token, portanto cada bot precisa de seu próprio token do BotFather |
Os diagnósticos oficiais de primeira linha do NanoClaw são dois arquivos de log mais ncl sessions list, ncl dropped-messages list e ncl wirings list. Nenhuma versão lançada oferece um comando de verificação de atividade do canal, portanto a triagem abaixo se apoia nas linhas de log.
# 1. Is inbound polling failing, and for how long?
# A rising consecutiveFailures count is the #3728 signature.
grep "Telegram polling request failed" logs/nanoclaw.error.log | tail -5
# 2. Did the Telegram adapter ever register this boot?
# Its ABSENCE is the duplicate-host signature, not an error line.
grep "Channel adapter started" logs/nanoclaw.log | tail -10
# 3. Is a second host holding the polling session?
ps aux | grep 'nanoclaw/dist/index.js' | grep -v grep
systemctl --user list-units 'nanoclaw*' --all # Linux systemd installsPor que tudo parece saudável enquanto o recebimento está morto
Isso é estrutural e é a parte que mais desperdiça tempo. O README do NanoClaw descreve o caminho como aplicativo de mensagens para o roteador do host, depois para um banco de dados de entrada, para dentro do contêiner, para um banco de dados de saída e de volta pela entrega. A entrega consulta o banco de dados de saída por conta própria, e uma varredura do host a cada 60 segundos desperta independentemente as mensagens cujo horário de envio chegou e as mensagens recorrentes. O recebimento é a única etapa que depende do poller do Telegram — exatamente por isso o autor da issue #3728 viu o host permanecer ativo, a entrega de saída continuar funcionando e as tarefas agendadas continuarem sendo executadas durante cerca de quatro dias de silêncio total no recebimento, com 11.178 falhas consecutivas registradas.
O hook de saúde que deveria ter detectado isso não funciona. A referência da interface do adaptador publicada pelo NanoClaw afirma sobre isConnected() que ele "atualmente não é chamado pelo host fora dos testes" e que "a ponte sempre retorna true". O trunk avançou desde então: um comando ncl status que informa uma flag de conexão por adaptador entrou em main em 15 de setembro de 2026, depois do lançamento da v2.3.0, tornando a documentação correta para todas as versões lançadas e obsoleta para o trunk. Trate esse comando como implementação interna não lançada, não como orientação — ele é registrado como oculto e apenas para o host e não aparece em nenhuma documentação. No Telegram, os dois caminhos acabam se encontrando: nem a versão 4.29.0 nem a 4.41.0 do adaptador implementa isConnected (as duas builds de distribuição foram pesquisadas para esta página), então a sonda recorre a true de qualquer forma.
A documentação tem uma lacuna correspondente. A página de solução de problemas contém uma seção intitulada "Webhook channel is silent" e nenhuma equivalente para polling, e seu passo a passo "Agent never replies" começa em "Did the router accept it?" com ncl dropped-messages list — uma etapa que já pressupõe que a mensagem chegou ao host. Quando o poller está morto, não há linhas de mensagens descartadas para encontrar, porque o roteador nunca viu a mensagem. A issue #2989 registra o mesmo beco sem saída para sua própria causa: nenhuma linha de log, nenhuma linha de mensagem descartada, nada para depurar.
Não há uma versão corrigida, então planeje em torno disso
A issue #3728 está aberta, com zero comentários, zero rótulos e nenhum milestone, e seu timestamp de atualização ainda é igual ao timestamp de criação de 6 de setembro de 2026. A versão mais recente é a v2.3.0, de 24 de agosto de 2026, e o único commit no branch channels desde 1º de setembro é uma correção do Mattermost. O mesmo vale para o caso do filtro obsoleto: o pull request que fixaria uma lista explícita de atualizações está aberto contra channels desde 22 de agosto de 2026, e o código-fonte do branch atual não contém nenhuma ocorrência de allowedUpdates. O bloqueio do host de instância única que teria evitado o caso de host duplicado foi encerrado sem merge. Portanto, o enquadramento honesto é mitigação, não um número de versão.
Vale a pena saber três coisas antes de escrever seu próprio patch. Primeiro, uma edição local em src/channels/telegram.ts não persiste: a skill add-telegram copia esse arquivo do branch channels com a instrução de sobrescrevê-lo porque o branch é canônico, e a skill de atualização atualiza todos os canais instalados — exatamente como o autor da #3728 perdeu essa correção a cada atualização. Segundo, o watchdog do autor do relatório é tanto um aviso quanto uma receita: a primeira versão, baseada apenas no contador, causou uma interrupção de três dias pior, porque o poller acabou parado em vez de falhar, então nenhuma falha adicional foi registrada e o contador nunca atingiu seu limite. A segunda versão usou dois sinais independentes e nunca deixou o poller parado. Nada disso foi lançado, endossado ou verificado de forma independente. Terceiro, seja qual for o seu desenvolvimento, teste a recuperação nas duas direções: o sucesso de saída não prova nada sobre o recebimento, portanto a verificação relevante é uma mensagem nova enviada do chat pareado que produza uma nova linha de entrada.
Uma falha de canal do Telegram não é um problema de modelo ou API
Vale dizer isso claramente, porque a próxima busca óbvia leva as pessoas na direção errada. A documentação de credenciais do NanoClaw diz que tokens de canais como TELEGRAM_BOT_TOKEN permanecem em .env e são usados pelo processo do host, não pelos contêineres, enquanto as credenciais do modelo ficam no vault e são injetadas nas solicitações de saída durante o tráfego. As mensagens recebidas chegam ao roteador e ao banco de dados de entrada da sessão antes que qualquer provedor seja escolhido, pois o provedor é resolvido quando o contêiner é iniciado (agent providers documentation). Nenhuma troca de URL base, chave, gateway ou provedor repara um loop de polling morto, um filtro de atualização obsoleto, uma colisão de pollers, o Group Privacy ou uma rota IPv6 quebrada.
A verdadeira interseção ocorre no sentido inverso. O README do NanoClaw lista o Claude Code entre seus requisitos especificamente para /customize, /debug e todas as skills /add-channel, portanto reparar um canal exige que ele esteja no host mesmo que os grupos do seu agente sejam executados em outra coisa. Os requisitos do host são macOS ou Linux, Windows por meio do WSL2, Node.js 22 ou mais recente, pnpm 10 ou mais recente e Docker — e observe que nanoclaw.dev ainda anuncia Node.js 20 ou mais recente, enquanto o README e o changelog da v2.3.0 estabelecem 22 como piso obrigatório. Siga o changelog, que chama a atualização de breaking.
Quanto o NanoClaw e seu canal do Telegram realmente custam
| Item | Quanto custa | De onde vem essa informação |
|---|---|---|
| O próprio NanoClaw | $0, licenciado sob MIT, sem plano pago e sem contas de usuário | nanoclaw.dev: "O NanoClaw é gratuito e open source sob a licença MIT." |
| A conta do portal da comunidade | Gratuita e opcional; todo o resto funciona sem ela | O README do projeto |
| O token do bot do Telegram | $0 para criar no BotFather, e nada para comprar para um chat pareado — o nível opcional Paid Broadcasts do Telegram só se aplica acima de 30 mensagens por segundo | Telegram Bot API; o modo polling também significa que não há URL pública, webhook ou porta aberta, segundo a documentação do canal |
| Uso do modelo | O que quer que o provedor conectado cobre; o próprio NanoClaw não cobra nada por isso | FAQ do nanoclaw.dev: "Seu provedor de agentes pode cobrar pelo uso do modelo." |
| Docker | Obrigatório no host; os próprios termos de assinatura do Docker se aplicam acima dos limites de uso gratuito | Não verificado para esta página — consulte a página de preços do Docker antes de incluí-lo no orçamento |
Não há um plano pago para comprar e se livrar de um bot que não responde, que é a informação útil transmitida pela tabela. O dinheiro só começa a ser gasto quando o canal volta a funcionar e o agente responde. Os valores abaixo são aritmética ilustrativa de tokens, não custos de tarefas medidos nem um teto de cobrança: suponha um chat pareado com 25 turnos por dia, 20.000 tokens de entrada não armazenados em cache e 900 tokens de saída por turno, durante 30 dias. As tarifas são preços atuais do catálogo da Kunavo por milhão de tokens.
| Modelo | Entrada / saída por 1M | Mês estimado |
|---|---|---|
| Claude Haiku 4.5 | $0.70 / $3.50 | $12.86 |
| GPT-5.6 Terra | $0.70 / $4.20 | $13.34 |
| Claude Sonnet 4.6 | $2.10 / $10.50 | $38.59 |
| Claude Opus 5 | $3.50 / $17.50 | $64.31 |
Escale isso de acordo com seu próprio tráfego antes de tratá-lo como um orçamento e observe a suposição que mais pesa: nada é servido a partir do cache. Uma sessão de agente de longa duração reenvia o contexto, portanto o comportamento do cache altera esse número mais do que a diferença por token entre dois modelos vizinhos. O valor do catálogo da Kunavo é um piso de cobrança, não um teto — quando o upstream informa sua cobrança, a conta é o maior valor entre o custo do catálogo e o custo do upstream multiplicado pela margem aplicável. O recarregamento mínimo é de $10 em crédito pré-pago, um mínimo de financiamento, não uma taxa por tarefa nem uma assinatura; consulte billing details.
| Rota para o modelo do agente | Vantagens | O que isso não faz |
|---|---|---|
| API direta do fornecedor | Você permanece no modelo principal de um fornecedor e quer o próprio cache e os próprios termos de processamento em lote desse fornecedor | Um segundo fornecedor significa uma segunda conta e um segundo saldo |
| Um gateway compatível com OpenAI ou compatível com Anthropic | Você troca de modelo por grupo de agentes e quer uma única chave e um único saldo | O provedor nativo do NanoClaw é o Claude Agent SDK, portanto uma URL base personalizada precisa falar esse formato de comunicação; um endpoint no formato OpenAI é acessado pela skill de provedor OpenCode, que roteia os modelos usando a própria configuração do OpenCode |
| Uma assinatura | O uso intenso diário com tarifa fixa é mais adequado para você do que tokens medidos | O NanoClaw não vende uma assinatura própria; a tarifa fixa pertence ao provedor |
| Um modelo local | Trabalho pequeno ou privado sem cobrança de modelo hospedado | A própria skill Ollama do NanoClaw é descrita como direcionada a um caminho de configuração mais antigo e não como uma troca direta compatível e suportada no main atual |
Nenhuma dessas quatro opções toca no caminho do Telegram. Para conhecer a parte do provedor em detalhes — as duas variáveis de ambiente lidas pela configuração, o que o contêiner realmente vê e onde OpenCode e Codex se encaixam — consulte NanoClaw API costs and providers. Se você estiver conectando o runtime Claude padrão a um endpoint personalizado, o Claude Code integration guide e a base URL reference explicam a configuração, e você pode criar uma conta Kunavo quando estiver pronto para financiar uma chave. A Kunavo não testou o NanoClaw em runtime, e um guia de configuração publicado é uma referência de configuração, não um teste de compatibilidade.
Perguntas frequentes
Por que meu bot do NanoClaw no Telegram parou de responder?
Comece perguntando se as mensagens ainda estão saindo do host. Se as respostas e as mensagens agendadas continuam chegando, mas nada do que você envia é respondido, a suspeita é a consulta de entrada: a issue #3728 do NanoClaw relata que o loop de consulta do adaptador tenta getUpdates indefinidamente, com um limite de espera de 30 segundos, nunca desiste e não registra nada em uma consulta bem-sucedida, tornando a falha invisível. Se nada também for enviado e o log mostrar entradas "Message delivered" com platformMsgId=undefined próximas de avisos "No adapter for channel type", a própria skill /debug do NanoClaw identifica duas instâncias do serviço em execução simultaneamente como a causa. Esses dois casos exigem correções opostas, portanto identifique a assinatura antes de alterar qualquer coisa.
Existe uma versão corrigida do bug de polling do Telegram no NanoClaw?
Não, até 21 de setembro de 2026. A issue #3728 está aberta, com zero comentários, zero rótulos e nenhum milestone, e seu timestamp de atualização ainda é igual à data em que foi aberta, 6 de setembro de 2026. A versão mais recente do NanoClaw é a v2.3.0, de 24 de agosto de 2026, portanto nada foi lançado desde o relatório, e o único commit no branch channels desde 1º de setembro é uma correção do Mattermost. Quem disser para você atualizar para uma versão específica do NanoClaw por causa disso está citando uma versão que não existe.
Atualizar @chat-adapter/telegram resolve o problema?
Não no caminho de morte silenciosa. O NanoClaw fixa @chat-adapter/telegram exatamente na versão 4.29.0, publicada em 18 de maio de 2026, enquanto a dist-tag mais recente do npm é a 4.41.0, de 18 de setembro de 2026. Os dois tarballs foram baixados e comparados para esta página: o branch de falha de transporte de getUpdates é materialmente idêntico nas duas builds — o mesmo contador consecutiveFailures, o mesmo teto de backoff de 30 segundos, a mesma linha de aviso, sem desistência nem escalonamento, e um polling bem-sucedido ainda não registra nada. A 4.41.0 reescreveu outras partes do loop. Esta página afirma isso como um fato sobre o código e não recomenda atualizar o pin: a skill add-telegram do NanoClaw diz que a política de supply chain rejeita intervalos, os dois pull requests de atualização analisados para esta página (#3460 e #3570) estão abertos e não foram mesclados, e ninguém aqui testou o que mais uma atualização altera.
Alterar meu provedor de API ou a URL base resolverá um problema do Telegram?
Não. A documentação de credenciais do NanoClaw afirma que tokens de canais como TELEGRAM_BOT_TOKEN permanecem em .env e são usados pelo processo do host, não pelos contêineres, enquanto as credenciais do modelo vão para o vault e são injetadas no tráfego dos contêineres. Uma mensagem recebida pelo Telegram chega ao roteador e ao banco de dados de entrada da sessão antes que qualquer provedor seja resolvido, o que acontece quando o contêiner é iniciado. Portanto, outro endpoint, chave ou gateway não pode reparar um loop de polling morto, um filtro de atualização obsoleto no servidor, uma colisão de pollers, o Group Privacy ou uma rota IPv6 quebrada. A única interseção real ocorre no sentido inverso: o README do NanoClaw lista o Claude Code como requisito para /debug e todas as skills /add-channel, portanto o reparo do canal precisa dele no host mesmo em uma instalação cujo agente é executado em outro lugar.
O bot responde a mensagens diretas, mas ignora o grupo. Por quê?
Isso geralmente é a configuração Group Privacy do Telegram, não um defeito do NanoClaw. A skill add-telegram do NanoClaw afirma que, com o Group Privacy ativado, o bot só vê comandos e respostas direcionados a ele, não textos comuns, e que você deve desativá-lo no BotFather em /mybots, seu bot, Bot Settings, Group Privacy — depois remover e adicionar o bot novamente ao grupo para que a alteração tenha efeito. Um caso separado parece semelhante, mas não é: a issue #2989 do NanoClaw relata que um token de bot que anteriormente foi usado em polling com um filtro allowed_updates mais restrito mantém esse filtro no servidor para sempre, descartando silenciosamente channel posts enquanto mensagens diretas e grupos continuam funcionando.
O pareamento nunca termina, mas o bot continua funcionando. O que está errado?
A issue #3162 do NanoClaw descreve exatamente esse formato: se a chamada getMe no início do canal falhar uma vez, o nome de usuário do bot fica armazenado em cache como null durante toda a vida do processo e todo código de pareamento enviado é tratado como uma mensagem comum, sem tentativa registrada e com o instalador esperando para sempre. O único vestígio é uma única linha de aviso na inicialização, minutos antes de você tentar parear, e a issue diz que uma reinicialização sem nenhuma outra alteração resolve o problema. O adaptador atual do branch channels ainda faz essa consulta uma vez, sem nova tentativa, e armazena o resultado em cache. Observe também que a documentação do NanoClaw descreve um código único de 6 dígitos com até 5 códigos regenerados por execução, enquanto a issue #3162 o chama de código de 4 dígitos; siga a documentação.
Verificado em 21 de setembro de 2026: o registro do repositório nanocoai/nanoclaw e a lista de releases, os estados aberto/fechado das issues #2377, #2989, #3162, #3569 e #3728 e dos pull requests #2225, #2697, #3449, #3460 e #3570, o código-fonte do adaptador Telegram do branch channels, as builds do adaptador 4.29.0 fixada e 4.41.0 atual do npm, a documentação de canais, credenciais, solução de problemas e interface de adaptadores do NanoClaw, suas skills add-telegram e debug e a página da Bot API do Telegram. Nada nesta página foi executado contra uma instalação do NanoClaw em funcionamento. As tarifas de tokens da Kunavo vêm do catálogo atual, e os valores em dólares são aritmética ilustrativa de tokens.