Skip to main content
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 cada tipo bruto vivem no guia de envios proto brutos. Esta referência traz apenas as tabelas de mapeamento de tipos acima; o guia tem os exemplos de envio mais os cards de pagamento (PIX / review-and-pay).

Wrapper de mensagem temporária (ephemeralMessage)

Envolva qualquer mensagem para que ela herde o timer ephemeral do chat. Isto é uma mecânica de wrapper — a mensagem interna é o que efetivamente renderiza:
Para o toggle ephemeral do chat inteiro (protocolMessage + EPHEMERAL_SETTING), veja a seção Alternar mensagens temporárias no guia.
Última modificação em 19 de agosto de 2026