Pular para o conteúdo principal
Tudo o que você envia passa por client.message.send(to, content, options?). O argumento content é um WaSendMessageContent:
Existem duas maneiras de enviar: um builder tipado (um objeto com um discriminador type — a biblioteca valida e preenche os campos de protocolo para você) ou um Proto.IMessage bruto (você mesmo monta o protobuf). O mesmo send() aceita ambos.

Atalho

Uma string simples é enviada como uma mensagem de texto:

Builders tipados

Cada builder é discriminado pelo seu campo type. Campos em negrito são obrigatórios.

Texto e mídia

Os builders de mídia também aceitam qualquer campo não-gerenciado da mensagem protobuf subjacente (por exemplo caption, gifPlayback, ptt, fileName) via o mapeamento UserMediaFields. Campos gerenciados pelo protocolo (url, mediaKey, fileSha256, directPath, …) são preenchidos pelo builder. mimetype é opcional. A ordem de resolução é: um mimetype explícito que você passa vence; senão o builder chama media.processor.detectMimetype (fornecido por @zapo-js/media-utils quando file-type está instalado); senão lança erro para image/video/audio/document/ptv. Stickers usam image/webp por padrão.

Interativos

target é um WaMessageTargetInput — uma WaMessageKey ({ remoteJid, id, fromMe, participant? }) ou um evento message recebido passado literalmente (sua key é usada). Os pais de poll/event exigem adicionalmente authorJid e o messageSecret de 32 bytes. Para revoke, sender vs admin é auto-detectado por target.fromMe (false dispara um admin revoke). Não há opção subtype.

Proto.IMessage bruto

Para qualquer coisa sem um builder tipado, passe uma mensagem protobuf bruta. A biblioteca inspeciona o campo preenchido e resolve automaticamente os atributos da stanza — type da mensagem ([resolveMessageTypeAttr]), type de mídia, polltype, event_type, view_once e edit — então você só define o campo de conteúdo.

Texto

Mídia

Campos de mídia brutos exigem mídia previamente enviada (as chaves de criptografia, o directPath e os digests já devem estar definidos). Para enviar a partir de bytes/um arquivo, use os builders de mídia tipados em vez disso — eles realizam o upload para você.

Localização e contatos

Interativos e business

Enquetes e eventos (bruto)

Mensagens de criação de enquete e de evento auto-persistem seu messageSecret para que votos/respostas posteriores possam ser criptografados.

Protocolo, edições e sistema

Wrappers

Estes envolvem uma mensagem interna; a biblioteca os desembrulha ao resolver os atributos: ephemeralMessage, viewOnceMessage, viewOnceMessageV2, deviceSentMessage, groupMentionedMessage, botInvokeMessage, documentWithCaptionMessage. Para visualização única especificamente, prefira a opção de envio viewOnce em vez de embrulhar manualmente.
A superfície protobuf completa está disponível sob o namespace proto exportado — proto.Message, proto.Message.ProtocolMessage.Type, etc. Use-o para construir qualquer campo acima e para referenciar valores de enum.

Cookbook de proto bruto

Payloads concretos de client.message.send(jid, …) para os tipos brutos comuns. Importe proto para os valores de enum:

Texto simples

Texto com menções + resposta

Localização estática

Localização ao vivo

Cartão de contato (vCard)

Múltiplos contatos

Convite de grupo

Botões (bruto)

Até três botões de quick-reply. O header é um oneof — escolha texto, imagem, vídeo, localização ou documento (pré-upload pra mídia):

Menu de lista (bruto)

Uma lista single-select de rows agrupadas em sections:

Interactive native flow (bruto)

A superfície interativa moderna — botões cujos parâmetros são payloads ad-hoc codificados em JSON:

Produto (bruto)

Envie um produto do catálogo. O productImage interno precisa estar pré-uploadado:

Pedido (bruto)

Confirmação / consulta de pedido:

Convite de admin de newsletter (bruto)

Convide um contato para ser co-admin de uma das suas newsletters:

Reação (bruto)

Fixar / desafixar (bruto)

Manter / desfazer manter no chat (bruto)

Revogar / apagar para todos (protocolMessage)

Alternar mensagens temporárias (configuração ephemeral)

Enquete (bruto)

Solicitar um número de telefone

Wrapper de mensagem temporária (ephemeralMessage)

Envolva qualquer mensagem para que ela herde o timer ephemeral do chat:

Wrapper de visualização única

Snippets que citam uma mensagem usam uma key de { remoteJid, fromMe, id, participant? } (um proto.IMessageKey). Para os equivalentes tipados (reação, revogação, fixar, manter, enquete), prefira os builders — eles gerenciam o message secret e o encadeamento da key para você.
Última modificação em 3 de junho de 2026