Enviando Mensagens
Todas as mensagens na MessageFy são enviadas através de um único endpoint:content.type no corpo da requisição. Isso permite uma interface unificada para todos os tipos de conteúdo suportados.
Estrutura do Package
Toda mensagem enviada é encapsulada em um Package — o envelope padrão da API. O Package contém o identificador do canal e o conteúdo polimórfico:uuid
required
Identificador do canal pelo qual a mensagem será enviada. O canal deve estar ativo e vinculado a sua conta.
string
ID de rastreamento definido pelo cliente. Útil para correlacionar a requisição com eventos recebidos via webhook.
object
Controle de idempotência. Quando informado, a API rejeita requisições duplicadas com o mesmo
key dentro do ttl.object
required
Conteúdo polimórfico da mensagem. O campo
type determina qual tipo de mensagem será enviado.Idempotência
Use o campoidempotency para evitar envios duplicados quando houver falha de rede ou timeout. A API rejeita requisições com o mesmo key dentro do ttl com status 409 Conflict.
string
Chave única que identifica a requisição. Use um valor determinístico (por exemplo, ID do pedido ou combinação de usuário + timestamp). Requisições subsequentes com o mesmo
key dentro do ttl retornam 409 Conflict.string
required
Tempo de vida da chave em formato compacto:
s (segundos), m (minutos), h (horas), d (dias), w (semanas). Exemplos: "30m", "1h30m", "4h". Máximo: 4h.Resposta
Ao enviar uma mensagem com sucesso, a API retorna umpackageId que identifica unicamente aquele envio:
Endereçamento (Address)
O campoto em todas as mensagens define o destinatário. O formato depende do tipo de canal.
string
required
Tipo do endereço. Valores:
WHATSAPP, EMAIL, SMS, GOOGLE_CHAT.string
Número de telefone no formato internacional (código do país + DDD + número), sem
+ ou espaços. Exemplo: 5511999999999.string
JID (Jabber ID) do WhatsApp. Para contatos individuais:
número@s.whatsapp.net. Para grupos: id@g.us.string
LID (LinkedID) do WhatsApp. Identificador alternativo que o WhatsApp pode usar no lugar do JID em endereços recebidos. Presente principalmente em mensagens recebidas.
string
Nome do contato (opcional, usado para exibição).
Prefira sempre o
jid. Em canais whatsapp-web (provider whatsmeow), o envio usa
exclusivamente o campo jid — o number sozinho não é suficiente. O number como
alternativa ao jid funciona apenas em canais do WhatsApp oficial (WABA). Para mensagens
em grupos, use sempre o jid com sufixo @g.us.Outros tipos de endereço
Além deWHATSAPP, o campo type do endereço aceita:
string
Identificador do espaço do Google Chat (formato
spaces/{id}). Use para enviar mensagens em espaços já assinados pelo router.string
Identificador do usuário do Google Chat (formato
users/{id}). Use para envio avulso em DM 1:1 — o router localiza ou cria o DM antes de postar.Para endereços
GOOGLE_CHAT, use exatamente UM dos campos: spaceId ou userId. Enviar ambos causa erro de validação. O spaceId é o caminho comum (Fase 5); userId é usado quando você precisa enviar uma mensagem avulsa a uma pessoa específica sem espaço pré-existente (Fase 7).Campos Comuns
Todos os tipos de mensagem herdam estes campos opcionais:integer
default:"0"
Estratégia de entrega, enviada como número:
0 = DEFAULT, 10 = TRANSACIONAL,
20 = MARKETING. Afeta a priorização e roteamento interno. Enviar o nome como string
(ex.: "TRANSACIONAL") causa erro 400 de desserialização.byte
default:"0"
Prioridade da mensagem, de 1 (mais alta) a 5 (mais baixa). Valor 0 indica prioridade padrão.
datetime
Data/hora limite para entrega da mensagem. Mensagens não entregues até o prazo serão descartadas.
boolean
default:"false"
Marca a mensagem como encaminhada. Também é preenchido nas mensagens recebidas para indicar conteúdo repassado.
object
Mensagem citada (resposta). Permite enviar a mensagem como resposta a uma mensagem anterior.
boolean
default:"false"
Marca a mensagem como vinda de um canal/newsletter do WhatsApp (JID @newsletter).
boolean
default:"false"
Marca a mensagem como vinda de uma lista de transmissão (JID @broadcast). Inclui status/stories.
boolean
default:"false"
Marca a mensagem como vinda de um grupo em modo somente-admin (announce).
boolean
default:"false"
Marca a mensagem como vinda do grupo “Avisos” de uma comunidade do WhatsApp.
Responder a uma mensagem (quotedMessage)
Para enviar uma mensagem como resposta a outra:participant deve ser o LID do autor da mensagem citada:
string
ID da mensagem original que está sendo citada.
string
Autor da mensagem original que está sendo citada. Em grupos, use o LID do autor
(ex.:
252780317044848@lid) — não use o JID, ou a mensagem será entregue sem a citação.
Em conversas individuais, use o JID do autor (ex.: 5511999999999@s.whatsapp.net).
O LID do autor chega nos webhooks de mensagem recebida em content.from.lid.string
Texto ou descrição do conteúdo da mensagem original.
string
Tipo da mensagem original (
TEXT, IMAGE, etc.).string
Miniatura (base64) da mensagem original, quando disponível.
boolean
default:"false"
true quando a citação é uma resposta a um status (story).Tipos de Mensagem
A tabela abaixo lista todos os tipos de mensagem suportados:Operações sobre Mensagens
Além do envio, a API permite operar sobre mensagens já enviadas:Exemplo Completo
Ciclo de Vida da Mensagem
Após o envio, cada mensagem passa por uma sequência de status que você pode acompanhar via webhooks. O diagrama abaixo mostra o fluxo completo:MESSAGE_SENT
Enviado quando a mensagem é aceita pelo servidor do WhatsApp. Confirma que a mensagem saiu do MessageFy e está a caminho do destinatário.O
messageId retornado neste webhook é o identificador definitivo da mensagem no WhatsApp.
Use-o para rastrear os status subsequentes (entrega, leitura, etc.).MESSAGE_DELIVERED
Enviado quando a mensagem é entregue no dispositivo do destinatário (ticks cinzas duplos).Múltiplas mensagens podem ser confirmadas como entregues em um único webhook.
Isso acontece quando o destinatário fica online e recebe várias mensagens de uma vez.
MESSAGE_READ
Enviado quando o destinatário lê a mensagem (ticks azuis).Se o destinatário desativou a confirmação de leitura nas configurações de privacidade
do WhatsApp, este webhook não será enviado.
MESSAGE_PLAYED
Enviado quando o destinatário reproduz uma mensagem de áudio ou vídeo.Recebendo Mensagens
Quando uma mensagem chega no WhatsApp conectado ao seu canal, o MessageFy envia um webhook para a URL configurada. O campocontent.type indica o tipo da mensagem recebida.
Estrutura geral
Toda mensagem recebida chega dentro do mesmo envelope Package. O envelope carrega os identificadores de rastreamento e ocontent polimórfico, cujo type indica o tipo da mensagem.
Os endereços em from/to seguem o mesmo formato polimórfico do envio (type + campos do canal):
Campos do envelope
Campos comuns do content
O campo
isFromMe é true quando a mensagem foi enviada pelo próprio dispositivo
(por exemplo, se o usuário enviou uma mensagem pelo celular enquanto o canal está conectado).
Isso permite sincronizar mensagens enviadas de outros dispositivos vinculados.Os endereços recebidos podem vir identificados por
jid (Jabber ID) e/ou lid (LinkedID).
Use number para o telefone e name para o nome de exibição, quando presentes.Anúncios Click-to-WhatsApp (metaReferralAds)
Quando o usuário inicia a conversa clicando em um anúncio do Facebook/Instagram (Click-to-WhatsApp Ads), a primeira mensagem recebida traz o objetometaReferralAds com o contexto do anúncio:
Tipos de mensagem recebida
Exemplos por tipo
TEXT - Mensagem de texto
TEXT - Mensagem de texto
IMAGE - Imagem
IMAGE - Imagem
Imagens, vídeos, áudios, documentos e stickers não incluem o arquivo binário diretamente
no webhook. Quando o download fica pronto, você recebe um evento separado
DOWNLOAD_AVAILABLE com a URL em externalDownloadUrl.VIDEO - Vídeo
VIDEO - Vídeo
Assim como imagens, o arquivo de vídeo não é incluído diretamente no webhook.
Você receberá um evento
DOWNLOAD_AVAILABLE com a URL para download.AUDIO - Áudio
AUDIO - Áudio
isPTT indica que o áudio é uma nota de voz push-to-talk (gravada no microfone),
e não um arquivo de áudio enviado da galeria.DOCUMENT - Documento
DOCUMENT - Documento
STICKER - Figurinha
STICKER - Figurinha
LOCATION - Localização
LOCATION - Localização
CONTACT_MESSAGE - Cartão de contato
CONTACT_MESSAGE - Cartão de contato
ORDER - Pedido do catálogo
ORDER - Pedido do catálogo
Os valores
totalAmount1000 e items[].price estão em milésimos da moeda: divida por
1000 para obter o valor real (ex.: 13500 = R$ 13,50). As imagens dos itens (imageUrl) são
URLs presigned do StorageFy que podem chegar via evento DOWNLOAD_AVAILABLE.REACTION - Reação
REACTION - Reação
FLOW_RECEIVED - Resposta de Flow
FLOW_RECEIVED - Resposta de Flow
O
flowToken é o mesmo token usado no botão flow da mensagem de template que disparou o Flow.
Use-o para correlacionar a resposta com a mensagem original. O campo response contém os dados
do formulário preenchido pelo usuário, como JSON opaco.TEMPLATE_RECEIVED - Template recebido
TEMPLATE_RECEIVED - Template recebido
O
TEMPLATE_RECEIVED chega quando o número recebe uma mensagem de template (por exemplo, de
uma empresa que usa a API oficial). Tudo vem já renderizado: text é o corpo com as
variáveis resolvidas, sem header nem footer. Se você só precisa do conteúdo, leia text e
ignore o resto. O template identifica o template na origem e pode vir incompleto ou
ausente (no WhatsApp Web normalmente só o id). O header traz texto, mídia ou
localização conforme o format; quando é mídia, segue o mesmo fluxo de download das
mensagens de mídia. buttons lista os botões na ordem de exibição (QUICK_REPLY, URL,
PHONE_NUMBER, COPY_CODE, FLOW, ORDER_DETAILS, entre outros).Download de mídia (DOWNLOAD_AVAILABLE)
Para mensagens de mídia (imagem, vídeo, áudio, documento, sticker), o arquivo binário não é incluído diretamente no webhook. Quando o upload para o StorageFy é concluído, um evento separadoDOWNLOAD_AVAILABLE é enviado com a URL de download em externalDownloadUrl: