Prompt: extração de conversas do WhatsApp Web + respostas na minha voz

Uso: colar em um agente com controle de navegador (Claude in Chrome, Chrome MCP, Playwright/Puppeteer com sessão logada). Ajuste os campos entre <> antes de rodar.

Formato: Prompt Versões: completa e curta Envio de mensagem: nunca

Requisitos

O que precisa estar pronto antes de colar o prompt.

Uma conta paga do Claude

Plano Pro no mínimo. O controle de navegador não está disponível no plano gratuito.

A extensão do Claude para o Google Chrome

É ela que dá ao Claude o controle da aba onde o WhatsApp Web já está autenticado.

Prompt principal

Mais completo, mas consome mais tokens

prompt-principal.txt
Você é um assistente operando o WhatsApp Web já autenticado na minha sessão.
Sua tarefa tem duas partes: (1) extrair as conversas dos últimos 30 dias e
(2) redigir respostas na minha voz.

## REGRAS INEGOCIÁVEIS
1. Você NUNCA envia mensagem. Não clica em enviar, não pressiona Enter no campo
   de texto, não usa atalhos. Todo output é rascunho para minha aprovação.
2. Não abre, arquiva, silencia ou apaga nada. Somente leitura e scroll.
3. Se um seletor não existir mais, você inspeciona o DOM e me diz o que achou,
   em vez de inventar dados ou completar lacunas.
4. Se uma conversa contiver dado sensível (senha, documento, dado bancário,
   assunto jurídico ou de saúde), você marca como `sensivel: true` e não
   redige resposta automática. Só sinaliza.
5. Trabalhe em lotes. Reporte progresso a cada 10 conversas.

## ETAPA 1 - RECONHECIMENTO DO DOM
Antes de extrair, inspecione a página e confirme os seletores atuais.
Os que costumam funcionar (valide cada um, o WhatsApp muda com frequência):

- Painel da lista de conversas: `#pane-side`
- Item de conversa: `#pane-side div[role="listitem"]`
- Painel de mensagens da conversa aberta: `#main div.copyable-area` (a div
  scrollável interna é a que recebe o scroll)
- Bolha de mensagem: `div[data-id]`
- Metadados de autor/horário: atributo `data-pre-plain-text` no elemento
  `.copyable-text`, no formato `[HH:MM, DD/MM/AAAA] Nome: `
- Texto: `span.selectable-text`
- Direção: classe `message-in` (recebida) ou `message-out` (enviada por mim)

Me devolva um mapa dos seletores que você validou antes de seguir.

## ETAPA 2 - LISTAR CONVERSAS DA JANELA
Percorra `#pane-side` com scroll incremental até o fim da lista.
Para cada conversa capture: nome/telefone, data da última mensagem,
se é grupo ou individual, se tem mensagens não lidas.

Filtre e mantenha apenas conversas com atividade nos últimos 30 dias
(referência: hoje é <DATA_DE_HOJE>).

Excluir da extração:
- Listas de transmissão e status
- Grupos com mais de <N> participantes (ruído operacional alto)
- Contatos em <LISTA_DE_EXCLUSAO>

## ETAPA 3 - EXTRAIR MENSAGENS POR CONVERSA
Para cada conversa filtrada: abra, role o painel de mensagens para cima em
loop até alcançar mensagens anteriores a 30 dias ou o topo do histórico.
A lista é virtualizada, então extraia a cada scroll e faça deduplicação por
`data-id`.

Script base de extração (rode no console da aba, adaptando os seletores
validados na Etapa 1):

function extrairVisiveis() {
  return [...document.querySelectorAll('div[data-id]')].map(el => {
    const meta = el.querySelector('.copyable-text')?.getAttribute('data-pre-plain-text') || '';
    const m = meta.match(/\[(\d{2}:\d{2}), (\d{2}\/\d{2}\/\d{4})\] (.*?):/);
    return {
      id: el.getAttribute('data-id'),
      hora: m?.[1] || null,
      data: m?.[2] || null,
      autor: m?.[3] || null,
      texto: el.querySelector('span.selectable-text')?.innerText || '',
      direcao: el.classList.contains('message-out') || el.querySelector('.message-out') ? 'enviada' : 'recebida',
      anexo: !!el.querySelector('[data-icon="audio-play"], [data-icon="document"], img[src^="blob:"]')
    };
  }).filter(x => x.texto || x.anexo);
}

Saída em JSON, um objeto por conversa:

{
  "contato": "",
  "tipo": "individual|grupo",
  "ultima_mensagem_em": "AAAA-MM-DD HH:MM",
  "quem_falou_por_ultimo": "eu|contato",
  "dias_sem_resposta": 0,
  "sensivel": false,
  "mensagens": [
    {"data":"","hora":"","autor":"","direcao":"","texto":"","anexo":false}
  ]
}

Áudios, imagens e documentos: registre como `[áudio 0:42]`, `[imagem]`,
`[documento: nome.pdf]`. Não tente transcrever.

## ETAPA 4 - TRIAGEM
Classifique cada conversa em uma categoria e atribua prioridade de 1 a 3:

- `responder_agora`: pergunta direta aberta, decisão travada em mim, prazo citado
- `responder_hoje`: assunto ativo sem urgência explícita
- `follow_up`: eu falei por último e não houve retorno, cabe reativar
- `so_reconhecer`: agradecimento, confirmação, mensagem social
- `ignorar`: encerrada, spam, grupo sem menção a mim

Entregue primeiro uma tabela: contato | categoria | prioridade | assunto em
uma linha | dias parada. Espere meu ok antes de redigir.

## ETAPA 5 - CALIBRAR MINHA VOZ
Antes de escrever qualquer resposta, analise apenas as mensagens com
`direcao: "enviada"` do meu histórico e extraia:

- Tamanho médio das minhas mensagens e se eu quebro em várias ou mando bloco
- Uso de emoji: quais, com que frequência, em que contexto
- Saudações e encerramentos que eu realmente uso
- Nível de formalidade por tipo de contato (cliente, time, pessoal)
- Vícios de linguagem, abreviações, pontuação, uso de áudio vs texto

Me apresente esse perfil em até 10 linhas antes de gerar as respostas.
Se o padrão for inconsistente, aponte a inconsistência em vez de escolher um
padrão médio.

## ETAPA 6 - REDIGIR AS RESPOSTAS
Para cada conversa das categorias `responder_agora`, `responder_hoje` e
`follow_up`, escreva a resposta seguindo o perfil da Etapa 5.

Restrições de escrita:
- Nada de travessão
- Nada de construção "não é X, é Y"
- Sem buzzword genérico
- Sem sequência de frases curtas em estilo publicitário
- Se a mensagem exige informação que eu não te dei, escreva a resposta com
  `<<LACUNA: o que falta>>` no lugar, sem inventar

Formato de entrega por conversa:

**Contato** | categoria | prioridade
Contexto: 1 linha
Resposta sugerida:
"..."
Alternativa mais curta:
"..."
Precisa de mim: sim/não (o quê)

## ETAPA 7 - FECHAMENTO
Ao final entregue:
- JSON completo da extração em arquivo
- Tabela de triagem
- Lista das conversas marcadas como sensíveis
- Lista das lacunas que dependem de mim
Pacote com 22 skills para o Claude
Guia · Claude e Claude Code

22 skills pra instalar no Claude

Gostou desse prompt? O guia reúne 22 skills de Build, Design, Research e Marketing, cada uma com o link oficial e o passo a passo de instalação.

R$ 660 R$29,90
Ver o guia →

Versão curta

Para rodar rápido

prompt-curto.txt
WhatsApp Web logado. Não envie nada, só leia e escreva rascunhos.

1. Valide os seletores atuais do DOM antes de extrair.
2. Percorra #pane-side e liste conversas com atividade nos últimos 30 dias.
3. Em cada uma, role o histórico para cima até 30 dias, extraia por
   data-id (dedupe) autor, data, hora, direção e texto. Anexos viram
   [áudio], [imagem], [documento].
4. Classifique: responder_agora / responder_hoje / follow_up /
   so_reconhecer / ignorar. Me mostre a tabela e pare.
5. Depois do meu ok: analise só as minhas mensagens enviadas para calibrar
   tom, tamanho e emoji, e escreva as respostas nesse padrão.
   Sem travessão, sem buzzword, sem "não é X, é Y".
   O que faltar de informação vira <<LACUNA: ...>>.

Notas operacionais

Quer aplicar isso na sua operação?

Prompt é o começo. O ganho real aparece quando o fluxo vira rotina do time, com regras claras do que a IA pode e não pode fazer.

Conheça nossos Workshops →