Pular para o conteúdo principal
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.
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 GoObrigatórioDescrição
InstanceIDSimID da instância VZaps (header).
InstanceTokenSimToken da instância (header).
phonePhoneSimTelefone destino em formato internacional, somente dígitos.
idNãoIdentificador opcional da mensagem no pedido.
delayNãoAtraso de envio, quando suportado pela API.
mentioned_idsNãoIDs citados no WhatsApp.
reply_to_message_idNãoID da mensagem do WhatsApp a ser respondida/citada.
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.

Texto

Função: client.Messages.SendText() Payload:
Campo (JSON)Campo GoObrigatório
phonePhoneSim
messageMessageSim
_, 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 GoObrigatório
phonePhoneSim
imageImageSim
captionCaptionNão
image aceita URL pública https://... ou data URL base64 (data:image/<mime>;base64,<data>).
_, 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 GoObrigatório
phonePhoneSim
audioAudioSim
pttPTTNã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.
_, 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 GoObrigatório
phonePhoneSim
documentDocumentSim
file_nameFileNameSim
captionCaptionNão
_, 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 GoObrigatório
phonePhoneSim
videoVideoSim
captionCaptionNão
jpeg_thumbnailNão
_, 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 GoObrigatório
phonePhoneSim
stickerStickerSim
png_thumbnailNão
_, 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 GoObrigatório
phonePhoneSim
gifGIFSim
captionCaptionNão
_, 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 GoObrigatório
phonePhoneSim
latitudeLatitudeSim
longitudeLongitudeSim
nameNameNão
addressAddressNão
_, 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 GoObrigatório
phonePhoneSim
contact_nameContactNameSim
contact_phoneContactPhoneSim
_, 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 GoObrigatório
phonePhoneSim
messageMessageSim
buttonsButtonsSim
footerFooterNão
_, 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 GoObrigatório
phonePhoneSim
titleTitleSim
descriptionDescriptionSim
button_textButtonTextSim
sectionsSectionsSim
footerFooterNão
_, 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. Função: client.Messages.SendLink() Payload:
Campo (JSON)Campo GoObrigatório
phonePhoneSim
messageMessageSim
link_urlLinkURLSim
titleTitleSim
link_descriptionLinkDescriptionSim
jpeg_thumbnailJPEGThumbnailNão
_, 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 GoObrigatório
phonePhoneSim
nameNameSim
optionsOptionsSim
selectable_options_countSelectableOptionsCountNão
hide_participant_namesHideParticipantNamesNão
end_timeEndTimeNão
allow_add_optionAllowAddOptionNão
_, 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()
_, 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()
_, 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()
_, 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()
_, 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()
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.
result, err := client.Messages.SendText(ctx, vzaps.MessageSendTextRequest{
	MessageSendBaseRequest: base,
	Message: "Olá",
})
fmt.Printf("%#v\n", result)
Veja a referência da API para os schemas de resposta mais recentes.