O que Prova E2E Telegram Crabbox faz?
Use isso para revisão de PR do Telegram ou reprodução de bugs quando a prova bot-to-bot não é suficiente. O objetivo é permitir que o agente mantenha uma sessão de usuário real do Telegram aberta até que esteja satisfeito, então anexe prova visual.
Não use contas pessoais. Não adicione credenciais ao repositório, prompt ou pacote de artefatos. O executor aluga a conta descartável compartilhada do Convex.
Início
Execute a partir do repositório OpenClaw e branch em teste:
proof_cmd="${OPENCLAW_TELEGRAM_USER_PROOF_CMD:-openclaw-telegram-user-crabbox-proof}"
"$proof_cmd" start \
--tdlib-url http://artifacts.openclaw.ai/tdlib-v1.8.0-linux-x64.tgz \
--output-dir .artifacts/qa-e2e/telegram-user-crabbox/pr-review
Isso inicia uma sessão retida:
- aluga a credencial exclusiva
telegram-userdo Convex - restaura TDLib e Telegram Desktop com a mesma conta de usuário
- inicia um mock do OpenClaw Telegram SUT a partir do checkout atual
- seleciona o chat Telegram configurado no desktop Linux visível
- inicia uma gravação de desktop a 24fps
- escreve
.artifacts/qa-e2e/telegram-user-crabbox/pr-review/session.json
Mantenha a sessão ativa enquanto investiga. É válido para o agente testar por minutos, executar vários comandos, usar WebVNC, inspecionar transcrições, e só finalizar quando o comportamento for compreendido.
Para reproduções visuais determinísticas, coloque a resposta mock exata em um arquivo e passe para start:
proof_cmd="${OPENCLAW_TELEGRAM_USER_PROOF_CMD:-openclaw-telegram-user-crabbox-proof}"
"$proof_cmd" start \
--tdlib-url http://artifacts.openclaw.ai/tdlib-v1.8.0-linux-x64.tgz \
--mock-response-file .artifacts/qa-e2e/telegram-user-crabbox/reply.txt \
--output-dir .artifacts/qa-e2e/telegram-user-crabbox/pr-review
O executor padrão é --class standard, --record-fps 24, --preview-fps 24, e --preview-width 1920. Mantenha esses padrões a menos que a prova precise de algo diferente.
Durante o Teste
Para prova visual, primeiro envie ou identifique uma mensagem de marcação inferior, então abra o grupo/tópico diretamente pelo id da mensagem:
proof_cmd="${OPENCLAW_TELEGRAM_USER_PROOF_CMD:-openclaw-telegram-user-crabbox-proof}"
"$proof_cmd" view \
--session .artifacts/qa-e2e/telegram-user-crabbox/pr-review/session.json \
--message-id <id-da-mensagem>
Isso usa o Telegram Desktop diretamente com tg://privatepost, não xdg-open. Também redimensiona o Telegram para 650x1000 na posição testada do desktop para que o corte possa isolar o painel do chat mesmo que o Telegram mantenha um layout de divisão/barra lateral. Não pressione Escape depois disso; Escape pode fechar o chat selecionado.
Comportamento inferior importa:
- vincular profundamente à mensagem mais nova mantém o Telegram fixado no final, então mensagens posteriores aparecem ao vivo na gravação
- vincular profundamente a uma mensagem mais antiga não rola automaticamente para novas chegadas; vincule novamente ao marcador mais novo/final em vez de clicar na seta para baixo
- o GIF cortado usa intencionalmente o painel do chat, não o desktop inteiro ou a janela inteira do Telegram
Envie como o usuário real do Telegram:
proof_cmd="${OPENCLAW_TELEGRAM_USER_PROOF_CMD:-openclaw-telegram-user-crabbox-proof}"
"$proof_cmd" send \
--session .artifacts/qa-e2e/telegram-user-crabbox/pr-review/session.json \
--text /status
Para comandos de barra, omita o nome de usuário do bot; o executor direciona o bot SUT.
Execute comandos arbitrários no Crabbox:
proof_cmd="${OPENCLAW_TELEGRAM_USER_PROOF_CMD:-openclaw-telegram-user-crabbox-proof}"
"$proof_cmd" run \
--session .artifacts/qa-e2e/telegram-user-crabbox/pr-review/session.json \
-- bash -lc 'source /tmp/openclaw-telegram-user-crabbox/env.sh && python3 /tmp/openclaw-telegram-user-crabbox/user-driver.py transcript --limit 20 --json'
Comandos úteis do user-driver remoto:
source /tmp/openclaw-telegram-user-crabbox/env.sh
python3 /tmp/openclaw-telegram-user-crabbox/user-driver.py status --json
python3 /tmp/openclaw-telegram-user-crabbox/user-driver.py chats --json
python3 /tmp/openclaw-telegram-user-crabbox/user-driver.py transcript --limit 20 --json
python3 /tmp/openclaw-telegram-user-crabbox/user-driver.py send --text '/status@{sut}'
python3 /tmp/openclaw-telegram-user-crabbox/user-driver.py probe --text '@{sut} Reply exactly: USER-E2E-{run}' --expect USER-E2E-
Capture o desktop atual sem encerrar a sessão:
proof_cmd="${OPENCLAW_TELEGRAM_USER_PROOF_CMD:-openclaw-telegram-user-crabbox-proof}"
"$proof_cmd" screenshot \
--session .artifacts/qa-e2e/telegram-user-crabbox/pr-review/session.json
Verifique o estado do aluguel e obtenha o comando WebVNC:
proof_cmd="${OPENCLAW_TELEGRAM_USER_PROOF_CMD:-openclaw-telegram-user-crabbox-proof}"
"$proof_cmd" status \
--session .artifacts/qa-e2e/telegram-user-crabbox/pr-review/session.json
Finalizar
Sempre finalize ou mantenha explicitamente o box:
proof_cmd="${OPENCLAW_TELEGRAM_USER_PROOF_CMD:-openclaw-telegram-user-crabbox-proof}"
"$proof_cmd" finish \
--session .artifacts/qa-e2e/telegram-user-crabbox/pr-review/session.json \
--preview-crop telegram-window
finish para a gravação, cria artefatos MP4/GIF com corte de movimento, captura uma captura de tela final e logs, libera a credencial do Convex, para o SUT local e encerra o aluguel do Crabbox. --preview-crop telegram-window também cria um GIF de geometria fixa a partir da janela de prova do Telegram testada para tabelas limpas de PR lado a lado; o vídeo/GIF completo do desktop permanece no diretório de artefatos. Passe --keep-box apenas quando um humano precisar continuar a depuração VNC após a credencial ser liberada.
Após qualquer falha ou interrupção, verifique a limpeza:
crabbox list --provider aws
Se um arquivo de sessão existir e a credencial ainda puder estar alugada, execute finish com esse arquivo de sessão antes de tentar novamente.
Anexar Prova
Anexe apenas o artefato visual útil ao PR, a menos que logs sejam necessários. O executor é apenas GIF por padrão:
proof_cmd="${OPENCLAW_TELEGRAM_USER_PROOF_CMD:-openclaw-telegram-user-crabbox-proof}"
"$proof_cmd" publish \
--session .artifacts/qa-e2e/telegram-user-crabbox/pr-review/session.json \
--pr <número-do-pr> \
--summary 'GIF de sessão Crabbox com usuário real do Telegram'
Isso copia apenas o GIF útil para um pacote de publicação temporário e comenta esse GIF. Se finish --preview-crop telegram-window produziu um GIF cortado, publish usa esse; caso contrário, usa telegram-user-crabbox-session-motion.gif. Use --full-artifacts apenas quando o PR precisar de logs ou saída JSON. Nunca publique cargas de credenciais, arquivos env locais, bancos de dados TDLib, perfis do Telegram Desktop ou arquivos de sessão brutos.
Para prova antes/depois, execute uma sessão no main e uma no cabeçalho do PR, então publique apenas os GIFs pretendidos de um pacote limpo:
mkdir -p .artifacts/qa-e2e/telegram-user-crabbox/pr-123/comparison
cp <saída-main>/telegram-user-crabbox-session-motion-telegram-window.gif \
.artifacts/qa-e2e/telegram-user-crabbox/pr-123/comparison/main-before.gif
cp <saída-pr>/telegram-user-crabbox-session-motion-telegram-window.gif \
.artifacts/qa-e2e/telegram-user-crabbox/pr-123/comparison/pr-after.gif
crabbox artifacts publish \
--repo openclaw/openclaw \
--pr 123 \
--dir .artifacts/qa-e2e/telegram-user-crabbox/pr-123/comparison \
--summary 'Prova antes/depois Telegram' \
--no-comment
Em seguida, publique uma tabela markdown concisa com essas duas URLs. Não publique diretórios de trabalho que contenham capturas de tela, vídeos brutos, logs, JSON de sessão ou experimentos de corte, a menos que esses artefatos sejam explicitamente necessários.
Verificação Rápida
Para uma verificação única rápida, use:
proof_cmd="${OPENCLAW_TELEGRAM_USER_PROOF_CMD:-openclaw-telegram-user-crabbox-proof}"
"$proof_cmd" --text /status
Isso é um atalho start/send/finish. Prefira a sessão retida para revisão de PR, reprodução de problemas ou qualquer tarefa onde o agente possa precisar de várias tentativas.