From triagem-pro
CLI completo para WhatsApp via API Zappfy. Para triagem de mensagens SEMPRE use o comando `triagem` (nao `unread`). 45+ comandos: triagem, mensagens, grupos, CRM/leads, contatos. Dual output (human + --json).
How this skill is triggered — by the user, by Claude, or both
Slash command
/triagem-pro:whatsappThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
CLI completo para operar WhatsApp via API Zappfy.
CLI completo para operar WhatsApp via API Zappfy.
Quando o usuario pedir "verifica meu zap", "tem msg?", "o que tem no zap", "o que eu tenho pendente", "quem ta me devendo", ou QUALQUER variacao sobre ver mensagens/pendencias:
SEMPRE use triagem. NUNCA use unread.
unreadO comando unread usa o contador wa_unreadCount da API Zappfy, que tem DOIS problemas estruturais que o tornam inutil:
Device-scoped (desincroniza com o celular): a Zappfy/uazapi e um dispositivo companheiro do WhatsApp. O contador dela e totalmente independente do contador do celular do usuario. Msgs ja lidas no celular continuam aparecendo como "unread" na Zappfy — historicamente acumulam ate milhares de fantasmas.
Conta as proprias mensagens do usuario como "nao lidas": quando o usuario envia msgs pelo celular, a Zappfy recebe como evento novo e tambem incrementa o contador — mesmo essa msg sendo from_me: true. Resultado: o comando unread devolve conversas onde a ultima mensagem foi ENVIADA pelo proprio usuario, contadas erroneamente como "nao lidas".
triagempython3 skills/whatsapp/scripts/whatsapp.py --json triagem 24
Parametro 24 = janela em horas. Use 6 pra urgencias, 48 pra panorama amplo, 168 pra semana toda.
O triagem resolve os 2 problemas acima:
from_me: true — msgs do proprio usuario vao pra categoria items_respondidos (nao pra pendencias)config.json → urgent_keywordsconfig.json → silence_keywordstriagem| Categoria | Significado |
|---|---|
URGENTE | palavra-chave critica no texto (definida em config.json) |
ATRASADA | ultima msg deles, gap > threshold configurado (default 24h) |
IMPORTANTE | ultima msg deles, gap dentro da faixa configurada (default 4-24h) |
NORMAL | ultima msg deles, gap dentro da faixa configurada (default 1-4h) |
RECENTE | ultima msg deles, gap abaixo do minimo configurado (default < 1h) |
EQUIPE_CUIDANDO | ultima msg no grupo e de um membro da equipe interna (definida em config.json → team). NAO e pendencia do operador — apenas acompanhar. |
items_respondidos | ultima msg e sua (bola esta com o outro lado) |
Thresholds e equipe sao configurados em config.json. Ver config.json.example para referencia.
triagemtriagem com a janela apropriada (padrao 24h)$CONFIG_DIR/memory/_index.md pra lookup de contatos, SE o arquivo existir (populado pelo assistente de instalacao no Sprint 2)config.json (campo team), ja aplicada pelo CLI na triagem — NAO ha arquivo team.md separadoitems_pendentes:
last_sender com team do config.json → se for membro da equipe, deduzir area do casoname com arquivos em memory/contacts/ e memory/groups/ e carregar o card pra ter contextoitems_respondidos como "voce ja respondeu X conversas (bola com o outro lado), sem acao necessaria"unread pra triagem — use triagemfrom_me: true em categorias de pendencia (vao pra items_respondidos)EQUIPE_CUIDANDOlast_text na apresentacao, pra o operador saber o contexto sem precisar abrir o grupolast_sender (nome de quem enviou a ultima msg) junto com o nome do chatEQUIPE_CUIDANDO como "a equipe esta tocando" — operador so acompanha, nao precisa agirAntes de qualquer comando, garantir que config.env esta preenchido com o token Zappfy:
# Copiar e preencher
cp skills/whatsapp/config.env.example "$CONFIG_DIR/config.env"
# editar config.env com seu ZAPPFY_TOKEN
Script principal:
python3 skills/whatsapp/scripts/whatsapp.py [--json] <comando> [args...]
--json: output estruturado para parsing por agentes AITodos os comandos que aceitam <numero|nome> fazem smart resolution:
55119999999995511999999999@s.whatsapp.net ou GROUPID@g.us"Fulano" (fuzzy match contra lista de chats)Se multiplos resultados, retorna lista para desambiguacao.
| Comando | Descricao |
|---|---|
status | Status da conexao |
presence <available|unavailable> | Define presenca online/offline |
| Comando | Descricao |
|---|---|
unread [limite] | Conversas com msgs nao lidas (padrao: 50) — ver aviso acima |
chats [limite] | Ultimas conversas (padrao: 20) |
messages <numero|nome> [limite] | Mensagens de um contato (padrao: 20) |
search-chat <termo> | Busca conversas por nome |
search-msg <termo> [numero|nome] | Busca mensagens por conteudo |
contact-info <numero|nome> | Info detalhada de contato + dados de lead |
| Comando | Descricao |
|---|---|
send <numero|nome> <texto> | Envia texto |
reply <numero|nome> <msgid> <texto> | Responde mensagem especifica |
send-media <numero|nome> <url> [tipo] [legenda] | Envia midia (image/video/audio/document) |
send-contact <numero|nome> <nome_contato> <numero_contato> | Envia cartao de contato |
send-location <numero|nome> <lat> <lon> [nome] [endereco] | Envia localizacao |
send-menu <numero|nome> <json> | Envia menu interativo (JSON inline ou arquivo) |
A API Zappfy as vezes retorna senderName='' em mensagens enviadas por WhatsApp Web (vem so o LID — Linked Identifier). O CLI mantem cache persistente em memory/lid_cache.json que aprende LID → nome automaticamente.
| Comando | Descricao |
|---|---|
lid-bootstrap [chats] [msgs_por_chat] | Scan inicial pra popular cache (default: 200 chats × 30 msgs). Rodar uma vez ao instalar |
lid-stats | Mostra total de LIDs cacheados e amostra |
O cache e atualizado automaticamente sempre que rodar messages, search-msg, triagem ou group-recap. Quanto mais uso, mais completo o cache.
| Comando | Descricao |
|---|---|
markread <numero|nome> | Marca conversa como lida |
react <numero|nome> <msgid> <emoji> | Reage com emoji |
delete <numero|nome> <msgid> [everyone] | Deleta mensagem |
edit <numero|nome> <msgid> <novo_texto> | Edita mensagem enviada |
typing <numero|nome> [duracao] | Envia indicador de digitando |
| Comando | Descricao |
|---|---|
pin <numero|nome> | Fixa/desfixa conversa |
archive <numero|nome> | Arquiva/desarquiva |
mute <numero|nome> [horas] | Silencia conversa |
labels <numero|nome> [list|add|remove] [label] | Gerencia labels |
block <numero|nome> | Bloqueia contato |
unblock <numero|nome> | Desbloqueia contato |
| Comando | Descricao |
|---|---|
lead-info <numero|nome> | Info completa do lead |
lead-update <numero|nome> <json_campos> | Atualiza campos (JSON) |
lead-tag <numero|nome> <add|remove> <tag> | Gerencia tags |
lead-assign <numero|nome> <attendant_id> | Atribui a atendente |
lead-ticket <numero|nome> <open|close> | Abre/fecha ticket |
lead-status <numero|nome> <status> | Atualiza status do lead |
| Comando | Descricao |
|---|---|
groups [limite] | Lista grupos |
group-info <nome|id> | Info detalhada com participantes |
group-recap <nome> [horas] | Recap de mensagens (padrao: 48h) |
group-create <nome> <num1> [num2...] | Cria grupo |
group-participants <nome|id> <add|remove|promote|demote> <num...> | Gerencia participantes |
group-update <nome|id> <name|description|image> <valor> | Atualiza grupo |
group-invite <nome|id> | Gera link de convite |
group-admin-only <nome|id> <on|off> | Modo somente admins |
| Comando | Descricao |
|---|---|
contacts [limite] [pagina] | Lista contatos com paginacao |
contact-add <numero> <nome> | Adiciona contato |
contact-remove <numero> | Remove contato |
| Comando | Descricao |
|---|---|
raw <GET|POST> <endpoint> [json_body] | Chamada direta a API |
Para endpoints nao cobertos pelos comandos acima, consultar:
skills/whatsapp/references/api-reference.md
O agente mantem memoria persistente em $CONFIG_DIR/memory/ (populada pelo assistente de instalacao — ver Sprint 2):
| Arquivo | Proposito |
|---|---|
_index.md | Tabela de lookup rapido: nome, numero, empresa, categoria |
_pending.md | Follow-ups prometidos, esperando resposta, alertas |
_patterns.md | Padroes de comunicacao (horarios, comportamentos) |
contacts/<numero>.md | Contact card individual com perfil e contexto |
groups/<groupid>.md | Group card com regras, tipo e contexto |
ANTES de qualquer acao:
_index.md para identificar quem esta envolvido_pending.md para cruzar com pendenciasAPOS interacao significativa:
_pending.md_index.md se contato novoNAO atualizar para: mensagens triviais (ok, obrigado), info ja registrada.
raw com referencia ao api-reference.mdnpx claudepluginhub sbroggioadv/triagem-pro-marketplace --plugin triagem-proProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.