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

# Mensagens

> Todas as funções de envio do SDK Go, payloads aceitos e exemplos completos

Todas as funções de envio ficam em `client.Messages`.

Defina `InstanceID` e `InstanceToken` em cada struct de request. Eles vão nos headers, não no corpo JSON.

```go theme={null}
base := vzaps.MessageSendBaseRequest{
	InstanceScopedRequest: vzaps.InstanceScopedRequest{
		InstanceID:    "VZ...",
		InstanceToken: "instance-token",
	},
	Phone: "5511999999999",
}
```

## Campos comuns

Quase todos os envios aceitam os campos abaixo:

| Campo (JSON wire)     | Campo Go        | Obrigatório | Descrição                                                   |
| --------------------- | --------------- | ----------- | ----------------------------------------------------------- |
| —                     | `InstanceID`    | Sim         | ID da instância VZaps (header).                             |
| —                     | `InstanceToken` | Sim         | Token da instância (header).                                |
| `phone`               | `Phone`         | Sim         | Telefone destino em formato internacional, somente dígitos. |
| `id`                  | —               | Não         | Identificador opcional da mensagem no pedido.               |
| `delay`               | —               | Não         | Atraso de envio, quando suportado pela API.                 |
| `mentioned_ids`       | —               | Não         | IDs citados no WhatsApp.                                    |
| `reply_to_message_id` | —               | Não         | ID da mensagem do WhatsApp a ser respondida/citada.         |

<Note>
  Structs exportadas cobrem os campos principais do contrato público. Para opções avançadas como `id`, `delay` ou `reply_to_message_id`, use `client.Messages.Send()` ou `client.Request()` com um map no body.
</Note>

## Texto

Função: `client.Messages.SendText()`

Payload:

| Campo (JSON) | Campo Go  | Obrigatório |
| ------------ | --------- | ----------- |
| `phone`      | `Phone`   | Sim         |
| `message`    | `Message` | Sim         |

```go theme={null}
_, err := client.Messages.SendText(ctx, vzaps.MessageSendTextRequest{
	MessageSendBaseRequest: vzaps.MessageSendBaseRequest{
		InstanceScopedRequest: vzaps.InstanceScopedRequest{
			InstanceID:    "VZ...",
			InstanceToken: "instance-token",
		},
		Phone: "5511999999999",
	},
	Message: "Olá, sua instância está conectada.",
})
```

**Retorno:** envelope `{ code, success, data.message_id }` — mensagem aceita/enfileirada.

## Imagem

Função: `client.Messages.SendImage()`

Payload:

| Campo (JSON) | Campo Go  | Obrigatório |
| ------------ | --------- | ----------- |
| `phone`      | `Phone`   | Sim         |
| `image`      | `Image`   | Sim         |
| `caption`    | `Caption` | Não         |

`image` aceita URL pública `https://...` ou data URL base64 (`data:image/<mime>;base64,<data>`).

```go theme={null}
_, err := client.Messages.SendImage(ctx, vzaps.MessageSendImageRequest{
	MessageSendBaseRequest: base,
	Image:   "https://cdn.example.com/photo.jpg",
	Caption: "Legenda opcional",
})
```

**Retorno:** envelope `{ code, success, data.message_id }` — mensagem aceita/enfileirada.

## Áudio

Função: `client.Messages.SendAudio()`

Payload:

| Campo (JSON) | Campo Go | Obrigatório |
| ------------ | -------- | ----------- |
| `phone`      | `Phone`  | Sim         |
| `audio`      | `Audio`  | Sim         |
| `ptt`        | `PTT`    | Não         |

`audio` aceita URL pública ou data URL base64 (`data:audio/<mime>;base64,...`). Use `PTT: true` para enviar nota de voz, se suportado pelo fluxo da conta.

```go theme={null}
_, err := client.Messages.SendAudio(ctx, vzaps.MessageSendAudioRequest{
	MessageSendBaseRequest: base,
	Audio: "https://cdn.example.com/audio.mp3",
	PTT:   false,
})
```

## Documento

Função: `client.Messages.SendDocument()`

Payload:

| Campo (JSON) | Campo Go   | Obrigatório |
| ------------ | ---------- | ----------- |
| `phone`      | `Phone`    | Sim         |
| `document`   | `Document` | Sim         |
| `file_name`  | `FileName` | Sim         |
| `caption`    | `Caption`  | Não         |

```go theme={null}
_, err := client.Messages.SendDocument(ctx, vzaps.MessageSendDocumentRequest{
	MessageSendBaseRequest: base,
	Document: "https://cdn.example.com/contract.pdf",
	FileName: "contract.pdf",
	Caption:  "Aqui está o contrato",
})
```

**Retorno:** envelope `{ code, success, data.message_id }` — mensagem aceita/enfileirada.

## Vídeo

Função: `client.Messages.SendVideo()`

Payload:

| Campo (JSON)     | Campo Go  | Obrigatório |
| ---------------- | --------- | ----------- |
| `phone`          | `Phone`   | Sim         |
| `video`          | `Video`   | Sim         |
| `caption`        | `Caption` | Não         |
| `jpeg_thumbnail` | —         | Não         |

```go theme={null}
_, err := client.Messages.SendVideo(ctx, vzaps.MessageSendVideoRequest{
	MessageSendBaseRequest: base,
	Video:   "https://cdn.example.com/video.mp4",
	Caption: "Vídeo demo",
})
```

## Sticker

Função: `client.Messages.SendSticker()`

Payload:

| Campo (JSON)    | Campo Go  | Obrigatório |
| --------------- | --------- | ----------- |
| `phone`         | `Phone`   | Sim         |
| `sticker`       | `Sticker` | Sim         |
| `png_thumbnail` | —         | Não         |

```go theme={null}
_, err := client.Messages.SendSticker(ctx, vzaps.MessageSendStickerRequest{
	MessageSendBaseRequest: base,
	Sticker: "https://cdn.example.com/sticker.webp",
})
```

**Retorno:** envelope `{ code, success, data.message_id }` — mensagem aceita/enfileirada.

## GIF

Função: `client.Messages.SendGif()`

Payload:

| Campo (JSON) | Campo Go  | Obrigatório |
| ------------ | --------- | ----------- |
| `phone`      | `Phone`   | Sim         |
| `gif`        | `GIF`     | Sim         |
| `caption`    | `Caption` | Não         |

```go theme={null}
_, err := client.Messages.SendGif(ctx, vzaps.MessageSendGifRequest{
	MessageSendBaseRequest: base,
	GIF:     "https://media.giphy.com/media/example/giphy.gif",
	Caption: "GIF animado",
})
```

**Retorno:** envelope `{ code, success, data.message_id }` — mensagem aceita/enfileirada.

## Localização

Função: `client.Messages.SendLocation()`

Payload:

| Campo (JSON) | Campo Go    | Obrigatório |
| ------------ | ----------- | ----------- |
| `phone`      | `Phone`     | Sim         |
| `latitude`   | `Latitude`  | Sim         |
| `longitude`  | `Longitude` | Sim         |
| `name`       | `Name`      | Não         |
| `address`    | `Address`   | Não         |

```go theme={null}
_, err := client.Messages.SendLocation(ctx, vzaps.MessageSendLocationRequest{
	MessageSendBaseRequest: base,
	Latitude:  -23.55052,
	Longitude: -46.633308,
	Name:      "São Paulo",
	Address:   "São Paulo, SP",
})
```

**Retorno:** envelope `{ code, success, data.message_id }` — mensagem aceita/enfileirada.

## Contato

Função: `client.Messages.SendContact()`

Payload:

| Campo (JSON)    | Campo Go       | Obrigatório |
| --------------- | -------------- | ----------- |
| `phone`         | `Phone`        | Sim         |
| `contact_name`  | `ContactName`  | Sim         |
| `contact_phone` | `ContactPhone` | Sim         |

```go theme={null}
_, err := client.Messages.SendContact(ctx, vzaps.MessageSendContactRequest{
	MessageSendBaseRequest: base,
	ContactName:  "Maria Silva",
	ContactPhone: "5511888888888",
})
```

**Retorno:** envelope `{ code, success, data.message_id }` — mensagem aceita/enfileirada.

## Botões

Função: `client.Messages.SendButtons()`

Payload:

| Campo (JSON) | Campo Go  | Obrigatório |
| ------------ | --------- | ----------- |
| `phone`      | `Phone`   | Sim         |
| `message`    | `Message` | Sim         |
| `buttons`    | `Buttons` | Sim         |
| `footer`     | `Footer`  | Não         |

```go theme={null}
_, err := client.Messages.SendButtons(ctx, vzaps.MessageSendButtonsRequest{
	MessageSendBaseRequest: base,
	Message: "Escolha uma opção",
	Footer:  "VZaps",
	Buttons: []vzaps.MessageButton{
		{ID: "sales", Text: "Vendas"},
		{ID: "support", Text: "Suporte"},
	},
})
```

**Retorno:** envelope `{ code, success, data.message_id }` — mensagem aceita/enfileirada.

## Lista

Função: `client.Messages.SendList()`

Payload:

| Campo (JSON)  | Campo Go      | Obrigatório |
| ------------- | ------------- | ----------- |
| `phone`       | `Phone`       | Sim         |
| `title`       | `Title`       | Sim         |
| `description` | `Description` | Sim         |
| `button_text` | `ButtonText`  | Sim         |
| `sections`    | `Sections`    | Sim         |
| `footer`      | `Footer`      | Não         |

```go theme={null}
_, err := client.Messages.SendList(ctx, vzaps.MessageSendListRequest{
	MessageSendBaseRequest: base,
	Title:       "Menu principal",
	Description: "Escolha uma opção",
	ButtonText:  "Abrir menu",
	Sections: []vzaps.MessageListSection{
		{
			Title: "Departamentos",
			Rows: []vzaps.MessageListRow{
				{ID: "sales", Title: "Vendas", Description: "Falar com vendas"},
				{ID: "support", Title: "Suporte", Description: "Falar com suporte"},
			},
		},
	},
})
```

**Retorno:** envelope `{ code, success, data.message_id }` — mensagem aceita/enfileirada.

## Link preview

Função: `client.Messages.SendLink()`

Payload:

| Campo (JSON)       | Campo Go          | Obrigatório |
| ------------------ | ----------------- | ----------- |
| `phone`            | `Phone`           | Sim         |
| `message`          | `Message`         | Sim         |
| `link_url`         | `LinkURL`         | Sim         |
| `title`            | `Title`           | Sim         |
| `link_description` | `LinkDescription` | Sim         |
| `jpeg_thumbnail`   | `JPEGThumbnail`   | Não         |

```go theme={null}
_, err := client.Messages.SendLink(ctx, vzaps.MessageSendLinkRequest{
	MessageSendBaseRequest: base,
	Message:         "Confira este link",
	LinkURL:         "https://vzaps.com",
	Title:           "VZaps",
	LinkDescription: "API WhatsApp para integrações",
})
```

**Retorno:** envelope `{ code, success, data.message_id }` — mensagem aceita/enfileirada.

## Enquete

Função: `client.Messages.SendPoll()`

Payload:

| Campo (JSON)               | Campo Go                 | Obrigatório |
| -------------------------- | ------------------------ | ----------- |
| `phone`                    | `Phone`                  | Sim         |
| `name`                     | `Name`                   | Sim         |
| `options`                  | `Options`                | Sim         |
| `selectable_options_count` | `SelectableOptionsCount` | Não         |
| `hide_participant_names`   | `HideParticipantNames`   | Não         |
| `end_time`                 | `EndTime`                | Não         |
| `allow_add_option`         | `AllowAddOption`         | Não         |

```go theme={null}
_, err := client.Messages.SendPoll(ctx, vzaps.MessageSendPollRequest{
	MessageSendBaseRequest: base,
	Name:                   "Qual canal você prefere?",
	Options:                []string{"WhatsApp", "Email", "Telefone"},
	SelectableOptionsCount: 1,
})
```

**Retorno:** envelope `{ code, success, data.message_id }` — mensagem aceita/enfileirada.

## Votar em enquete

Função: `client.Messages.PollVote()`

```go theme={null}
_, err := client.Messages.PollVote(ctx, vzaps.MessagePollVoteRequest{
	MessageSendBaseRequest: base,
	MessageID:       "3EB020510113BAA6561C",
	SelectedOptions: []string{"WhatsApp"},
})
```

## Reagir e remover reação

Funções:

* `client.Messages.React()`
* `client.Messages.RemoveReaction()`

```go theme={null}
_, err = client.Messages.React(ctx, vzaps.MessageReactRequest{
	MessageSendBaseRequest: base,
	MessageID: "3EB020510113BAA6561C",
	Reaction:  "👍",
})

_, err = client.Messages.RemoveReaction(ctx, vzaps.MessageReactRemoveRequest{
	MessageSendBaseRequest: base,
	MessageID: "3EB020510113BAA6561C",
})
```

## Presença e confirmação de leitura

Funções:

* `client.Messages.Presence()`
* `client.Messages.MarkRead()`

```go theme={null}
_, err = client.Messages.Presence(ctx, vzaps.MessagePresenceRequest{
	MessageSendBaseRequest: base,
	State: "composing",
})

_, err = client.Messages.MarkRead(ctx, vzaps.MessageMarkReadRequest{
	InstanceScopedRequest: vzaps.InstanceScopedRequest{
		InstanceID:    "VZ...",
		InstanceToken: "instance-token",
	},
	ID:   []string{"3EB020510113BAA6561C"},
	Chat: "5511999999999@s.whatsapp.net",
})
```

## Editar e excluir mensagem

Funções:

* `client.Messages.Edit()`
* `client.Messages.Delete()`

```go theme={null}
_, err = client.Messages.Edit(ctx, vzaps.MessageEditRequest{
	InstanceScopedRequest: vzaps.InstanceScopedRequest{
		InstanceID:    "VZ...",
		InstanceToken: "instance-token",
	},
	MessageID: "3EB020510113BAA6561C",
	Message:   "Texto editado",
})

_, err = client.Messages.Delete(ctx, vzaps.MessageDeleteRequest{
	InstanceScopedRequest: vzaps.InstanceScopedRequest{
		InstanceID:    "VZ...",
		InstanceToken: "instance-token",
	},
	MessageID: "3EB020510113BAA6561C",
})
```

## Baixar mídia

Funções:

* `DownloadImage()`
* `DownloadVideo()`
* `DownloadAudio()`
* `DownloadDocument()`

```go theme={null}
media, err := client.Messages.DownloadImage(ctx, vzaps.MessageDownloadRequest{
	InstanceScopedRequest: vzaps.InstanceScopedRequest{
		InstanceID:    "VZ...",
		InstanceToken: "instance-token",
	},
})
fmt.Printf("%#v\n", media)
```

**Retorno:** envelope `{ code, success, data }` com `data.mimetype` e `data.data` (base64 ou data URL).

## Resposta padrão

Métodos de envio retornam um envelope da API indicando que a mensagem foi aceita/enfileirada.

```go theme={null}
result, err := client.Messages.SendText(ctx, vzaps.MessageSendTextRequest{
	MessageSendBaseRequest: base,
	Message: "Olá",
})
fmt.Printf("%#v\n", result)
```

Veja a [referência da API](/pt-BR/api-reference/introduction) para os schemas de resposta mais recentes.
