---
title: "Como responder mensagem citada no WhatsApp pela API"
description: "Tutorial passo a passo para responder mensagem citada (reply) no WhatsApp pela API: texto, imagem, áudio, documento e localização, com exemplos em cURL."
url: "https://wame.api.br/blog/tutorial-responder-mensagem-citada-whatsapp-api"
language: "pt-BR"
og:type: "article"
published_time: "2026-09-17"
modified_time: "2026-09-17"
author: "Raphael Serafim"
keywords: "responder mensagem citada whatsapp api, reply mensagem whatsapp api, citar mensagem whatsapp api, responder mensagem especifica whatsapp, quote reply whatsapp business"
reading_time: "8 min de leitura"
---

# Como responder mensagem citada no WhatsApp pela API

> Tutorial passo a passo para responder mensagem citada (reply) no WhatsApp pela API: texto, imagem, áudio, documento e localização, com exemplos em cURL.

**Responder uma mensagem específica no WhatsApp pela API — em vez de mandar uma mensagem solta — usa o mesmo MSG_ID da mensagem original numa rota diferente, e isso muda como a conversa fica organizada para quem lê.** Este tutorial mostra o passo a passo para responder com texto, imagem, áudio, documento e localização.

## Por que usar resposta citada em vez de envio comum

Numa conversa com várias mensagens seguidas — um cliente manda três perguntas de uma vez, por exemplo — responder cada uma citando a pergunta original evita ambiguidade. Sem a citação, quem lê a conversa depois não sabe a qual pergunta aquela resposta se refere.

Isso importa especialmente em [atendimento com múltiplos atendentes no mesmo número](/blog/multiatendimento-mesmo-numero-whatsapp): quando mais de uma pessoa responde no mesmo chat, a citação evita que uma resposta pareça estar fora de contexto para quem entra na conversa depois.

## Pré-requisitos

- Uma instância da API já conectada (QR Code ou pareamento).
- Um webhook configurado recebendo mensagens, porque é de lá que vem o `MSG_ID` da mensagem que você vai responder.
- A key da sua instância, usada na URL de toda chamada (`https://server.wame.api.br/{KEY}/...`).

## Passo a passo

### 1. Capture o `MSG_ID` da mensagem recebida

Toda mensagem recebida chega no seu webhook com um identificador único. Guarde esse valor no momento em que a mensagem chega — é ele que entra na URL da resposta:

```json
{
  "id": "3EB0C767D097B4C5A1F2",
  "from": "5511999999999",
  "text": "Vocês entregam aos sábados?"
}
```

### 2. Responda com texto

```sh
curl -X POST https://server.wame.api.br/{KEY}/message/3EB0C767D097B4C5A1F2/text \
  -H "Content-Type: application/json" \
  -d '{"to": "5511999999999", "text": "Sim, entregamos aos sábados até 14h!"}'
```

Note a diferença para um envio comum: o `MSG_ID` entra na própria URL, entre a key e o tipo de conteúdo (`text`).

### 3. Responda com imagem, áudio ou documento

O padrão se repete para cada tipo de mídia, só muda o segmento final da URL e o corpo da requisição:

```sh
# Responder com imagem
curl -X POST https://server.wame.api.br/{KEY}/message/3EB0C767D097B4C5A1F2/image \
  -H "Content-Type: application/json" \
  -d '{"to": "5511999999999", "url": "https://exemplo.com/tabela-horarios.jpg", "caption": "Nossos horários de entrega"}'

# Responder com áudio
curl -X POST https://server.wame.api.br/{KEY}/message/3EB0C767D097B4C5A1F2/audio \
  -H "Content-Type: application/json" \
  -d '{"to": "5511999999999", "url": "https://exemplo.com/audio-resposta.mp3"}'

# Responder com documento
curl -X POST https://server.wame.api.br/{KEY}/message/3EB0C767D097B4C5A1F2/document \
  -H "Content-Type: application/json" \
  -d '{"to": "5511999999999", "url": "https://exemplo.com/catalogo.pdf", "filename": "catalogo.pdf"}'
```

### 4. Responda com localização

Útil quando a pergunta original é sobre endereço ou ponto de retirada:

```sh
curl -X POST https://server.wame.api.br/{KEY}/message/3EB0C767D097B4C5A1F2/location \
  -H "Content-Type: application/json" \
  -d '{"to": "5511999999999", "lat": -23.5505, "lng": -46.6333, "name": "Loja Centro"}'
```

### 5. Automatize a captura e resposta pelo webhook

Na prática, os passos 1 e 2 acontecem no mesmo handler: seu webhook recebe a mensagem, decide a resposta e já chama a API de volta usando o `id` que acabou de receber, sem precisar de um passo manual no meio.

```js
app.post('/webhook', async (req, res) => {
  const { id, from, text } = req.body;
  if (text?.toLowerCase().includes('sábado')) {
    await fetch(`https://server.wame.api.br/${KEY}/message/${id}/text`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ to: from, text: 'Sim, entregamos aos sábados até 14h!' }),
    });
  }
  res.sendStatus(200);
});
```

## Respondendo com base no tipo de conteúdo recebido

Um agente de atendimento completo não responde sempre com o mesmo tipo de conteúdo — a escolha depende do que a pergunta pede. Uma regra simples de decisão, aplicada no mesmo handler que já captura o `MSG_ID`:

```js
async function responderAdequado(id, from, textoRecebido) {
  const base = `https://server.wame.api.br/${KEY}/message/${id}`;

  if (/foto|imagem|catálogo/i.test(textoRecebido)) {
    return fetch(`${base}/image`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ to: from, url: CATALOGO_URL, caption: 'Nosso catálogo atualizado' }),
    });
  }

  if (/endereço|localização|onde fica/i.test(textoRecebido)) {
    return fetch(`${base}/location`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ to: from, lat: -23.5505, lng: -46.6333, name: 'Loja Centro' }),
    });
  }

  return fetch(`${base}/text`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ to: from, text: 'Como posso ajudar?' }),
  });
}
```

Esse tipo de roteamento simples resolve boa parte das perguntas recorrentes sem precisar de um modelo de IA — só entra em jogo quando a variação da pergunta é grande demais para um conjunto de regras.

## Testando a resposta antes de colocar em produção

Antes de automatizar em volume, vale confirmar manualmente que a citação está funcionando como esperado:

1. Mande uma mensagem de teste do seu próprio número para a instância;
2. Capture o `id` que chega no webhook (log simples já resolve nessa etapa);
3. Chame o endpoint de resposta usando esse `id` copiado manualmente;
4. Confirme no app que a resposta chegou citando a mensagem original, e não como uma mensagem solta.

Esse teste manual, feito uma vez por tipo de conteúdo (texto, imagem, áudio, documento, localização), evita descobrir um erro de formato só depois que a automação já está respondendo clientes de verdade.

## Erros comuns

**Usar o endpoint de envio comum por engano.** `/message/text` manda uma mensagem solta; `/message/{MSG_ID}/text` manda uma resposta citando a original. Os dois endpoints coexistem, e o erro mais comum de quem começa é esquecer o `{MSG_ID}` na URL — a mensagem sai, só que sem a citação.

**Guardar o `MSG_ID` errado.** Se sua aplicação processa várias mensagens em lote, é fácil associar o identificador errado à resposta errada. Vale sempre amarrar o `id` recebido diretamente à lógica que decide a resposta, no mesmo escopo do handler.

**Responder a uma mensagem que já foi apagada.** Se a mensagem original foi removida (por você ou pelo remetente) antes da resposta sair, a citação pode não aparecer do jeito esperado. Isso é raro, mas vale considerar em fluxo de resposta com atraso.

## Resposta citada em conversa de grupo

O mesmo endpoint funciona também quando a mensagem original veio de um grupo, não só de uma conversa individual — a diferença está no `to`, que passa a ser o identificador do grupo em vez do número do contato:

```sh
curl -X POST https://server.wame.api.br/{KEY}/message/3EB0C767D097B4C5A1F2/text \
  -H "Content-Type: application/json" \
  -d '{"to": "120363012345678901@g.us", "text": "Boa pergunta! A resposta está fixada no início do grupo."}'
```

Isso é útil para um bot de moderação ou de FAQ dentro de um [grupo automatizado pela API](/blog/automatizar-grupos-whatsapp-api): responder citando a pergunta específica, mesmo com várias mensagens simultâneas no grupo, deixa claro para todo mundo qual pergunta está sendo respondida.

## Diferença entre resposta citada e encaminhamento

Vale não confundir os dois conceitos, porque a URL de cada um é parecida mas o efeito é bem diferente:

| Ação | O que acontece | Endpoint |
| --- | --- | --- |
| Responder (reply) | Cria mensagem nova, citando a original acima | `POST /message/{MSG_ID}/text` (ou outro tipo) |
| Encaminhar (forward) | Reenvia o conteúdo original, sem criar citação | `POST /message/{MSG_ID}/forwarding` |

Responder é a escolha certa quando o contexto da mensagem original importa para quem lê a resposta. Encaminhar é a escolha certa quando o objetivo é levar o mesmo conteúdo para outro destinatário, sem vínculo visual com a conversa de origem — mais detalhe em [editar, apagar e encaminhar mensagem pela API](/blog/editar-apagar-encaminhar-mensagem-whatsapp-api).

## Próximos passos

Depois de dominar a resposta citada, o próximo recurso que combina bem é a [presença "digitando..." pela API](/blog/tutorial-presenca-digitando-whatsapp-api), que deixa a resposta automática com um tempo de reação mais natural antes de chegar. Para consolidar o fluxo de webhook que alimenta tudo isso, vale revisar [webhook em produção: assinatura, retry e idempotência](/blog/webhook-producao-assinatura-retry-idempotencia).

## Perguntas frequentes

### Qual a diferença entre responder e simplesmente enviar uma mensagem?

Enviar cria uma mensagem solta na conversa. Responder (reply) cria uma mensagem que aparece citando a original, com uma prévia dela acima do texto novo — igual ao gesto de deslizar a mensagem no app. Isso deixa claro para qual pergunta ou comentário aquela resposta se refere.

### Como eu descubro o MSG_ID para responder a uma mensagem recebida?

O identificador chega no payload do seu webhook, junto de cada evento de mensagem recebida. É esse valor que sua aplicação guarda e usa depois como {MSG_ID} na chamada de resposta.

### Dá para responder com qualquer tipo de mídia?

Sim. O endpoint de resposta aceita texto, imagem, áudio, documento e localização — cada um com sua própria rota, todas seguindo o mesmo padrão de citar o MSG_ID da mensagem original.

### Responder uma mensagem antiga funciona normalmente?

Sim, não há uma janela de tempo que expire a possibilidade de responder — diferente de editar ou apagar, que têm prazo. O reply funciona enquanto a mensagem original ainda existir na conversa.

### Por que minha resposta chegou sem a citação da mensagem original?

O erro mais comum é usar o endpoint de envio comum (/message/text) em vez do endpoint de resposta (/message/{MSG_ID}/text). Sem o MSG_ID na URL, a API manda uma mensagem solta, sem nenhuma citação.
