Skip to main content

Enviando Mensagens

Todas as mensagens na MessageFy são enviadas através de um único endpoint:
O tipo de mensagem é determinado pelo campo 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
required
Conteúdo polimórfico da mensagem. O campo type determina qual tipo de mensagem será enviado.

Resposta

Ao enviar uma mensagem com sucesso, a API retorna um packageId que identifica unicamente aquele envio:
Guarde o packageId retornado. Ele será referenciado nos eventos de webhook como MESSAGE_SENT, MESSAGE_DELIVERED e MESSAGE_READ, permitindo rastrear o ciclo de vida completo da mensagem.

Endereçamento (Address)

O campo to em todas as mensagens define o destinatário. O formato depende do tipo de canal.

WhatsApp

Para canais WhatsApp, você pode endereçar usando número ou JID:
string
required
Tipo do endereço. Valores: WHATSAPP, EMAIL, SMS.
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 de WHATSAPP, o campo type do endereço aceita:

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:
Em grupos, o participant deve ser o LID do autor da mensagem citada:
A API não valida o participant. Se o valor estiver errado (por exemplo, JID em vez de LID em um grupo), a requisição retorna 200 OK e a mensagem é entregue sem a citação, sem nenhum erro ou aviso. Guarde o content.from.lid recebido nos webhooks para usá-lo como participant ao responder mensagens de grupo.
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

Resposta:

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:
Implemente um sistema de rastreamento de status usando o messageId como chave. Atualize o status da mensagem a cada webhook recebido para ter visibilidade completa do ciclo de vida de cada mensagem enviada.

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 campo content.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 o content 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 objeto metaReferralAds com o contexto do anúncio:

Tipos de mensagem recebida

Exemplos por tipo

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.
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.
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.
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.

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 separado DOWNLOAD_AVAILABLE é enviado com a URL de download em externalDownloadUrl:
A URL de download é temporária. Faça o download do arquivo assim que receber o webhook e armazene-o no seu próprio sistema de arquivos.
Use o messageId para correlacionar o evento DOWNLOAD_AVAILABLE com a mensagem original recebida. Processe a mensagem primeiro e baixe a mídia em segundo plano.