# Whatsapp

> Use when someone mentions WhatsApp, asks to read messages, check what someone sent on zap, or send a WhatsApp message.

- Skill: `alelopesjr-ai/whatsapp` (Agent Skill)
- Install (CLI): `npx skillmds@latest add alelopesjr-ai/whatsapp`
- Raw SKILL.md: https://api.skillmd.com/api/skills/alelopesjr-ai/whatsapp/raw
- Safety review: pending (external: skill-scanner PASS, skillspector CAUTION)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: alelopesjr-ai (https://skillmd.com/u/alelopesjr-ai)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/alelopesjr-ai/whatsapp

---


# WhatsApp

Acessa mensagens, resume o dia, ou envia mensagem pelo WhatsApp. Usa o MCP `whatsapp_*` para tudo.

> O caminho do servidor MCP abaixo é um exemplo (`~/whatsapp-mcp-skill`). Troque pelo caminho onde você clonou o repositório.

---

## Antes de executar

Dois erros diferentes, dois tratamentos diferentes. Leia a mensagem antes de agir.

### 1. Conflito de browser / lock (NÃO é problema de auth)

Sintoma: erro com `browser is already running`, `SingletonLock`, ou `userDataDir`.

Causa: sobrou um Chrome órfão de uma sessão anterior travando o lock, ou subiu mais de uma instância do servidor MCP. O `index.js` já limpa locks órfãos sozinho no próximo start, então **na maioria das vezes basta chamar a ferramenta de novo** que ele se recupera.

Se persistir, mate os processos presos e os locks, depois tente de novo:

```
pkill -f "whatsapp-mcp-skill/index.js"; pkill -f "wwebjs_auth/session"
rm -f ~/whatsapp-mcp-skill/.wwebjs_auth/session/Singleton*
```

NUNCA rode `auth.js` para resolver isso. A sessão continua válida, o problema é só o lock.

### 2. Falha de autenticação (sessão perdida)

Sintoma: `auth_failure`, `not authenticated`, ou QR pedindo novo pareamento. Só aqui o `auth.js` entra.

Pré-requisito: o servidor MCP NÃO pode estar usando a sessão ao mesmo tempo. Pare primeiro (`pkill -f "whatsapp-mcp-skill/index.js"`), depois:

> "WhatsApp não autenticado. Abra um terminal separado e rode:
> `node ~/whatsapp-mcp-skill/auth.js`
> Quando aparecer o QR code, escaneie no celular: WhatsApp > Dispositivos vinculados > Vincular dispositivo.
> Quando aparecer `Connected.`, pode fechar o terminal e tentar de novo."

---

## Intake

**Se houver um nome de chat no argumento** (ex: `/whatsapp Stefano`), usar como alvo e perguntar apenas: ler mensagens ou mandar mensagem?

**Se invocada sem argumento**, perguntar antes de executar qualquer ferramenta:

1. O que você quer fazer? (ler mensagens / resumo do dia / mandar mensagem)
2. (Se ler ou mandar) De quem ou qual chat?
3. (Se ler) Quantas mensagens? (padrão: 30)

---

## Execução por caso de uso

### Ler mensagens de um chat específico

1. `whatsapp_list_chats` (limit: 30) para localizar o nome exato do chat
2. Confirmar o match se houver ambiguidade (ex: dois contatos com nome parecido)
3. `whatsapp_get_messages` com o nome exato e o limit solicitado (padrão: 30)
4. Apresentar no formato: `[HH:MM] Nome: mensagem`

### Resumo do que chegou hoje

1. `whatsapp_daily_summary` com `include_groups: false` por padrão
2. Se pedir grupos explicitamente, rodar com `include_groups: true`
3. Agrupar por remetente e destacar chats com mais de 3 mensagens

### Mandar mensagem

1. `whatsapp_list_chats` para localizar o nome exato do chat
2. Mostrar o nome encontrado e o conteúdo da mensagem para confirmar antes de enviar
3. Só após confirmação explícita: `whatsapp_send_message` com o nome exato
4. Confirmar o envio com o `messageId` retornado

### Ver chats disponíveis

1. `whatsapp_list_chats` com limit padrão 20 (ou mais se solicitado)
2. Listar: nome, não lidas, última mensagem, se é grupo

---

## Regras

- Nunca enviar mensagem sem confirmação explícita do destinatário e conteúdo
- `list_chats` sempre antes de `get_messages` ou `send_message` -- o servidor exige match exato
- Grupos excluídos do daily_summary por padrão
- Não inferir chats por apelido -- usar sempre o nome retornado pelo `list_chats`

---

## Transcrição de áudio (opcional)

Áudios (`ptt`/`audio`) são transcritos automaticamente se o [Whisper](https://github.com/openai/whisper) estiver instalado. Sem Whisper, áudios aparecem como `[Áudio - erro: ...]` e o resto funciona normal. Para apontar um binário específico, defina `WHISPER_PATH` no ambiente do servidor MCP.

