> ## Documentation Index
> Fetch the complete documentation index at: https://zapo.to/llms.txt
> Use this file to discover all available pages before exploring further.

# Enviando mensagens

> Envie texto, respostas encadeadas, menções e prévias ricas de link no WhatsApp com client.message.send, o ponto de entrada tipado para conteúdo de saída.

Todo o conteúdo de saída passa por um único método:

```ts theme={null}
client.message.send(to, content, options?): Promise<WaMessagePublishResult>
```

* **`to`** — o <Tooltip tip="Endereço do WhatsApp para um usuário, grupo ou canal — ex.: 5511999999999@s.whatsapp.net" cta="PN vs LID" href="/pt-br/concepts/identities">JID</Tooltip> do destinatário (`5511999999999@s.whatsapp.net`, um grupo `...@g.us`, etc.). Veja [Helpers de JID](/pt-br/reference/jid-helpers) para construí-los.
* **`content`** — uma string, um objeto de conteúdo tipado ou um `Proto.IMessage` bruto.
* **`options`** — citação, menções, encaminhamento, visualização única, edições e mais.

A promise resolve para um `WaMessagePublishResult` assim que o servidor envia o ack:

```ts theme={null}
const result = await client.message.send(jid, 'Hello!')
console.log(result.id) // o id da mensagem (id da stanza)
```

<h2 id="plain-text">
  Texto simples
</h2>

O conteúdo mais simples é uma string:

```ts theme={null}
await client.message.send(jid, 'Hello from zapo!')
```

Para mais controle, use a forma de objeto de texto — ela permite anexar context info e ajustar as prévias de link:

```ts theme={null}
await client.message.send(jid, {
  type: 'text',
  text: 'Check this out: https://example.com',
  linkPreview: true // busca a prévia automaticamente
})
```

<h2 id="replying-quoting">
  Respondendo (citação)
</h2>

Passe o evento da mensagem original (ou uma referência) como `options.quote`:

```ts theme={null}
client.on('message', async (event) => {
  await client.message.send(event.key.remoteJid, 'Replying to you', {
    quote: event
  })
})
```

A citação é renderizada como um balão de resposta referenciando a mensagem original.

<h2 id="mentions">
  Menções
</h2>

`options.mentions` é uma lista de JIDs para marcar. Inclua o texto `@número` correspondente no corpo para que o WhatsApp renderize a menção:

```ts theme={null}
await client.message.send(groupJid, {
  type: 'text',
  text: 'Hey @5511999999999, welcome!'
}, {
  mentions: ['5511999999999@s.whatsapp.net']
})
```

<h2 id="link-previews">
  Prévias de link
</h2>

O comportamento da prévia de link é controlado por mensagem através do campo `linkPreview` do objeto de texto:

| Valor       | Comportamento                                                  |
| ----------- | -------------------------------------------------------------- |
| `undefined` | Segue o padrão global de `linkPreview`.                        |
| `false`     | Desabilita a prévia.                                           |
| `true`      | Força a busca automática da prévia.                            |
| objeto      | Pula a busca e usa os campos de prévia fornecidos diretamente. |

```ts theme={null}
// Forneça sua própria prévia em vez de buscar
await client.message.send(jid, {
  type: 'text',
  text: 'https://example.com',
  linkPreview: { title: 'Example', description: 'My custom preview' }
})
```

Configure o fetcher padrão globalmente com a opção `linkPreview` do client.

<h2 id="forwarding">
  Encaminhamento
</h2>

Defina `options.forward` para marcar uma mensagem como encaminhada:

```ts theme={null}
await client.message.send(jid, 'Forwarded text', { forward: true })
// ou com uma pontuação de encaminhamento frequente
await client.message.send(jid, content, { forward: { score: 4 } })
```

<h2 id="send-options-reference">
  Referência de opções de envio
</h2>

`WaSendMessageOptions` (terceiro argumento) inclui:

| Opção                                           | Tipo                                                   | Propósito                                                                                                                                                                                                                  |
| ----------------------------------------------- | ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `quote`                                         | `WaIncomingMessageEvent \| WaQuoteRef \| WaMessageKey` | Responder a uma mensagem — passe o evento literalmente, sua `key`, ou um `WaQuoteRef`.                                                                                                                                     |
| `mentions`                                      | `string[]`                                             | JIDs para mencionar.                                                                                                                                                                                                       |
| `forward`                                       | `boolean \| { score }`                                 | Marcar como encaminhada.                                                                                                                                                                                                   |
| `viewOnce`                                      | `boolean`                                              | Empacotar imagem/vídeo/áudio como visualização única.                                                                                                                                                                      |
| `editKey`                                       | `WaMessageKey \| WaSendEditKey \| WaMessageRef`        | Editar uma mensagem enviada anteriormente (veja [interativas](/pt-br/guides/interactive-messages#editing-a-message)).                                                                                                      |
| `expirationSeconds`                             | `number`                                               | TTL de disappearing-message para esta mensagem. **Vence** sobre `contextInfo.expirationSeconds` e sobre o injeção automática de group-ephemeral (a última é curto-circuitada assim que este campo é definido — mesmo `0`). |
| `disableGroupEphemeralAutoInject`               | `boolean`                                              | Pula a injeção automática do ephemeral-setting ao enviar para um grupo com disappearing-mode ligado. Redundante quando `expirationSeconds` está definido.                                                                  |
| `contextInfo`                                   | `WaSendContextInfo`                                    | Context info bruto (avançado).                                                                                                                                                                                             |
| `id`                                            | `string`                                               | Usar um id de mensagem específico.                                                                                                                                                                                         |
| `ackTimeoutMs` / `maxAttempts` / `retryDelayMs` | `number`                                               | Ajuste de retentativa por envio.                                                                                                                                                                                           |

<Tip>
  Para enviar uma única mensagem **sem** expiração para um grupo com disappearing-mode ligado, prefira `disableGroupEphemeralAutoInject: true` em vez de `expirationSeconds: 0` — o último ainda grava `expiration=0` no `contextInfo` de saída.
</Tip>

<h2 id="the-content-union">
  A union de conteúdo
</h2>

`content` aceita qualquer `WaSendMessageContent`. As variantes tipadas estão documentadas ao longo destes guias:

<CardGroup cols={2}>
  <Card title="Mídia" icon="image" href="/pt-br/guides/media" arrow>
    Imagens, vídeo, áudio, documentos, figurinhas.
  </Card>

  <Card title="Enquetes e reações" icon="square-poll-vertical" href="/pt-br/guides/interactive-messages" arrow>
    Enquetes, votos, reações, fixações, edições, revogações, eventos.
  </Card>
</CardGroup>

Você sempre pode recorrer a um `Proto.IMessage` bruto para qualquer coisa não coberta por um builder tipado:

```ts theme={null}
import { proto } from 'zapo-js'

await client.message.send(jid, {
  conversation: 'Raw protobuf message'
})
```

<h3 id="location-and-contact">
  Localização e contato
</h3>

Tipos de mensagem sem um builder tipado são enviados como campos `Proto.IMessage` brutos — por exemplo **localização** e **contato**:

```ts theme={null}
// Localização
await client.message.send(jid, {
  locationMessage: {
    degreesLatitude: -23.5613,
    degreesLongitude: -46.6565,
    name: 'Av. Paulista',
    address: 'São Paulo, BR'
  }
})

// Contato (vCard)
const vcard = [
  'BEGIN:VCARD',
  'VERSION:3.0',
  'FN:Jeff Singh',
  'TEL;type=CELL;type=VOICE;waid=5511999999999:+55 11 99999-9999',
  'END:VCARD'
].join('\n')

await client.message.send(jid, {
  contactMessage: { displayName: 'Jeff', vcard }
})

// Múltiplos contatos
await client.message.send(jid, {
  contactsArrayMessage: {
    displayName: '2 contacts',
    contacts: [{ displayName: 'Jeff', vcard }]
  }
})
```

O conjunto completo de campos `Proto.IMessage` reconhecidos (localização, localização ao vivo, contatos, convite de grupo, produto, pedido, …) está na [referência de tipos de mensagem](/pt-br/reference/message-types).
