Skip to main content
As operações de grupo ficam em client.group (WaGroupCoordinator). Os JIDs de grupo terminam em @g.us.

Consultando grupos

WaGroupMetadata inclui o assunto, o dono, a lista de participantes (WaGroupParticipant[] com isAdmin / isSuperAdmin) e o conjunto completo de flags do grupo (announce, restrict, ephemeral, flags de comunidade, …).

Criando um grupo

createGroup retorna o WaGroupMetadata completo do novo grupo — não é preciso chamar queryGroupMetadata depois:

Gerenciando participantes

Os quatro métodos de participantes (addParticipants, removeParticipants, promoteParticipants, demoteParticipants) retornam um WaParticipantActionResult[] tipado — uma entrada por jid que você passou. O IQ como um todo tem sucesso mesmo quando alguns participantes falham (te bloquearam, configurações de privacidade impedem o add, já é membro, …), então inspecione o code por jid para identificar falhas parciais.
Cada resultado também traz phoneNumber e username quando o servidor os resolveu, mais o BinaryNode cru em raw para quaisquer tags extras que o servidor anexou (algumas falhas parciais 409/408 dão dicas de como recuperar).

Configurações do grupo

O setSetting também cobre os toggles booleanos ephemeral, group_history, allow_admin_reports, no_frequently_forwarded e as flags de comunidade. Use-o para ligar/desligar uma flag; para configurações que precisam de um valor (modo ou duração), use os setters dedicados abaixo.

Quem pode adicionar, compartilhar link e ver histórico

Todos os três são apenas para admins — não-admins recebem o erro 403 not-authorized.

Mensagens temporárias

setSetting(groupJid, 'ephemeral', false) é o caminho explícito para desligar. Para ligar com uma duração específica, use setEphemeralDuration:
Apenas para admins. Passar 0 desliga as mensagens temporárias — o mesmo que setSetting('ephemeral', false).

Convites

queryInviteCode e revokeInvite são operações de admin — não-admins recebem 403 not-authorized.

Saindo

leaveGroup resolve para void assim que o servidor confirma a requisição.

Aprovação de entrada

Para grupos que exigem aprovação do admin para entrar:

Comunidades

Comunidades são grupos-pai que vinculam subgrupos:
Outras operações de comunidade incluem deactivateCommunity, transferCommunityOwnership e fetchSubgroupSuggestions.

Compartilhando o histórico do grupo

Quando um novo membro entra em um grupo cujo memberShareGroupHistoryMode expõe o backlog, qualquer membro existente pode empurrar as mensagens recentes para ele diretamente. Os dois lados vivem em client.message.

Enviando

shareGroupHistory(groupJid, input) resolve toJids contra a lista de participantes ao vivo, faz upload do payload GroupHistory comprimido em zlib e faz o fanout do bundle apenas para esses destinatários mais esta conta — membros que não estão recebendo nunca veem a stanza. Uma mensagem de aviso para todo o grupo é enviada depois, para que outros clients possam renderizar o marcador “histórico foi compartilhado”. Campos de input:
  • toJids — obrigatório. Escritos no modo de endereçamento próprio do grupo (um grupo endereçado por LID só bate com entradas @lid; um por PN só bate com @s.whatsapp.net). Leia o modo em client.group.queryGroupMetadata(), cujos participantes carregam ambas as formas. Qualquer outra coisa lança.
  • count?: number — quantas das mensagens mais recentes ler da store messages. Ignorado quando messages é fornecido.
  • sinceMs?: number — ler apenas mensagens em ou após este timestamp (ms) da store. Ignorado quando messages é fornecido.
  • messages?: readonly Proto.IWebMessageInfo[] — fornece as mensagens diretamente, contornando a mailbox store. Obrigatório quando o domínio da store messages é 'none' (o padrão) — não há nada para ler de volta.
  • outOfWindowPinnedMessages?: readonly Proto.IWebMessageInfo[] — mensagens fixadas mais antigas que a janela compartilhada; o receiver injeta essas independentemente do corte de idade.
WaShareGroupHistoryResult retorna bundleMessageId, noticeMessageId? (ausente quando o aviso falhou depois de o bundle já ter sido entregue — não retente o share), messagesCount, historyReceivers e nonHistoryReceivers.
O lado do sender é gated por conta pela AB prop group_history_send. Quando ela está off, o servidor rejeita a stanza com SMAX_INVALID depois do upload ter sido gasto, então o client checa a prop antes e lança antes do upload. Grupos admin-only (memberShareGroupHistoryMode: 'admin_share') rejeitam um share de um membro comum no lado do servidor — cheque o modo com queryGroupMetadata primeiro.

Recebendo

Baixar um bundle é opt-in — um bundle é mídia que um terceiro empurra para esta conta sem solicitação. Habilite na config do client:
O receiver verifica que esta conta está em historyReceivers antes de gastar um fetch no CDN, descarta stubs / chats estranhos / entradas expiradas por idade / expiradas por efêmero, persiste o resto e emite group_history_bundle. Pins fora da janela vão junto isentos do corte de idade. Os limites da janela vêm das AB props sincronizadas pelo servidor, não de padrões hardcoded. Bundles derivam suas media keys de um contexto HKDF Group History — distinto do WhatsApp History Keys usado pelo history sync. Bundles endereçados a outros membros são descartados de qualquer forma.

Eventos de grupo

Mudanças feitas por outras pessoas (assunto, participantes, configurações) chegam no evento group:
Veja Eventos para o payload completo.
Última modificação em 1 de agosto de 2026