Pular para o conteúdo principal
Todas as funções de envio ficam em client.Messages. No SDK, o id da instância vira InstanceId e o header X-Instance-Token vira InstanceToken.
var instanceId = "VZ...";
var instanceToken = "instance-token";
var phone = "5511999999999";

Campos comuns

Quase todos os envios aceitam os campos abaixo:
CampoTipoObrigatórioDescrição
InstanceIdstringSimID da instância VZaps.
InstanceTokenstringSimToken da instância.
PhonestringSimTelefone destino em formato internacional, somente dígitos.
idstringNãoIdentificador opcional da mensagem no pedido.
delaynumberNãoAtraso de envio, quando suportado pela API.
mentionedIdsstring[]NãoIDs citados no WhatsApp.
replyToMessageIdstringNãoID da mensagem do WhatsApp a ser respondida/citada.
O SDK é tipado, mas os models herdam de VZapsModel e aceitam AdditionalData para campos públicos adicionais. Para payloads totalmente dinâmicos, use client.RequestAsync<TResponse>().

Texto

Função: client.Messages.SendTextAsync<TResponse>() Payload:
CampoTipoObrigatório
PhonestringSim
MessagestringSim
await client.Messages.SendTextAsync<object>(new SendTextMessageRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    Message = "Olá, sua instância está conectada.",
});
Retorno: envelope { Code, Success, Data.MessageId } — mensagem aceita/enfileirada.

Imagem

Função: client.Messages.SendImageAsync<TResponse>() Payload:
CampoTipoObrigatório
PhonestringSim
ImagestringSim
CaptionstringNão
Image aceita URL pública https://... ou data URL base64 (data:image/<mime>;base64,<dados>).
await client.Messages.SendImageAsync<object>(new SendImageMessageRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    Image = "https://cdn.example.com/photo.jpg",
    Caption = "Legenda opcional",
});
Retorno: envelope { Code, Success, Data.MessageId } — mensagem aceita/enfileirada.

Áudio

Função: client.Messages.SendAudioAsync<TResponse>() Payload:
CampoTipoObrigatório
PhonestringSim
AudiostringSim
PttboolNão
Audio aceita URL pública ou data URL base64 (data:audio/<mime>;base64,...). Use Ptt = true quando quiser enviar como áudio de voz, se suportado pelo fluxo da conta.
await client.Messages.SendAudioAsync<object>(new SendAudioMessageRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    Audio = "https://cdn.example.com/audio.mp3",
    Ptt = false,
});

Documento

Função: client.Messages.SendDocumentAsync<TResponse>() Payload:
CampoTipoObrigatório
PhonestringSim
DocumentstringSim
FileNamestringSim
CaptionstringNão
await client.Messages.SendDocumentAsync<object>(new SendDocumentMessageRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    Document = "https://cdn.example.com/contract.pdf",
    FileName = "contract.pdf",
    Caption = "Segue o contrato",
});
Retorno: envelope { Code, Success, Data.MessageId } — mensagem aceita/enfileirada.

Vídeo

Função: client.Messages.SendVideoAsync<TResponse>() Payload:
CampoTipoObrigatório
PhonestringSim
VideostringSim
CaptionstringNão
jpegThumbnailstringNão
await client.Messages.SendVideoAsync<object>(new SendVideoMessageRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    Video = "https://cdn.example.com/video.mp4",
    Caption = "Vídeo de demonstração",
});

Sticker

Função: client.Messages.SendStickerAsync<TResponse>() Payload:
CampoTipoObrigatório
PhonestringSim
StickerstringSim
pngThumbnailstringNão
await client.Messages.SendStickerAsync<object>(new SendStickerMessageRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    Sticker = "https://cdn.example.com/sticker.webp",
});
Retorno: envelope { Code, Success, Data.MessageId } — mensagem aceita/enfileirada.

GIF

Função: client.Messages.SendGifAsync<TResponse>() Payload:
CampoTipoObrigatório
PhonestringSim
GifstringSim
CaptionstringNão
await client.Messages.SendGifAsync<object>(new SendGifMessageRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    Gif = "https://media.giphy.com/media/example/giphy.gif",
    Caption = "GIF animado",
});
Retorno: envelope { Code, Success, Data.MessageId } — mensagem aceita/enfileirada.

Localização

Função: client.Messages.SendLocationAsync<TResponse>() Payload:
CampoTipoObrigatório
PhonestringSim
LatitudedoubleSim
LongitudedoubleSim
NamestringNão
AddressstringNão
await client.Messages.SendLocationAsync<object>(new SendLocationMessageRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    Latitude = -23.55052,
    Longitude = -46.633308,
    Name = "São Paulo",
    Address = "São Paulo, SP",
});
Retorno: envelope { Code, Success, Data.MessageId } — mensagem aceita/enfileirada.

Contato

Função: client.Messages.SendContactAsync<TResponse>() Payload:
CampoTipoObrigatório
PhonestringSim
ContactNamestringSim
ContactPhonestringSim
await client.Messages.SendContactAsync<object>(new SendContactMessageRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    ContactName = "Maria Silva",
    ContactPhone = "5511888888888",
});
Retorno: envelope { Code, Success, Data.MessageId } — mensagem aceita/enfileirada.

Botões

Função: client.Messages.SendButtonsAsync<TResponse>() Payload:
CampoTipoObrigatório
PhonestringSim
MessagestringSim
ButtonsIReadOnlyList<MessageButton>Sim
FooterstringNão
await client.Messages.SendButtonsAsync<object>(new SendButtonsMessageRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    Message = "Escolha uma opção",
    Footer = "VZaps",
    Buttons = new[]
    {
        new MessageButton { Id = "sales", Text = "Comercial" },
        new MessageButton { Id = "support", Text = "Suporte" },
    },
});
Retorno: envelope { Code, Success, Data.MessageId } — mensagem aceita/enfileirada.

Lista

Função: client.Messages.SendListAsync<TResponse>() Payload:
CampoTipoObrigatório
PhonestringSim
TitlestringSim
DescriptionstringSim
ButtonTextstringSim
SectionsIReadOnlyList<MessageListSection>Sim
FooterstringNão
await client.Messages.SendListAsync<object>(new SendListMessageRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    Title = "Menu principal",
    Description = "Escolha uma opção",
    ButtonText = "Abrir menu",
    Sections = new[]
    {
        new MessageListSection
        {
            Title = "Departamentos",
            Rows = new[]
            {
                new MessageListRow { Id = "sales", Title = "Comercial", Description = "Falar com vendas" },
                new MessageListRow { Id = "support", Title = "Suporte", Description = "Falar com suporte" },
            },
        },
    },
});
Retorno: envelope { Code, Success, Data.MessageId } — mensagem aceita/enfileirada. Função: client.Messages.SendLinkAsync<TResponse>() Payload:
CampoTipoObrigatório
PhonestringSim
MessagestringSim
LinkUrlstringSim
TitlestringSim
LinkDescriptionstringSim
JpegThumbnailstringNão
await client.Messages.SendLinkAsync<object>(new SendLinkMessageRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    Message = "Confira este link",
    LinkUrl = "https://vzaps.com",
    Title = "VZaps",
    LinkDescription = "API de WhatsApp para integrações",
});

Enquete

Função: client.Messages.SendPollAsync<TResponse>() Payload:
CampoTipoObrigatório
PhonestringSim
NamestringSim
OptionsIReadOnlyList<string>Sim
SelectableOptionsCountintNão
HideParticipantNamesboolNão
EndTimestringNão
AllowAddOptionboolNão
await client.Messages.SendPollAsync<object>(new SendPollMessageRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    Name = "Qual canal você prefere?",
    Options = new[] { "WhatsApp", "Email", "Telefone" },
    SelectableOptionsCount = 1,
});
Retorno: envelope { Code, Success, Data.MessageId } — mensagem aceita/enfileirada.

Votar em enquete

Função: client.Messages.PollVoteAsync<TResponse>()
await client.Messages.PollVoteAsync<object>(new MessagePollVoteRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    MessageId = "3EB020510113BAA6561C",
    SelectedOptions = new[] { "WhatsApp" },
});

Reagir e remover reação

Funções:
  • client.Messages.ReactAsync<TResponse>()
  • client.Messages.RemoveReactionAsync<TResponse>()
await client.Messages.ReactAsync<object>(new MessageReactRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    MessageId = "3EB020510113BAA6561C",
    Reaction = "ok",
});

await client.Messages.RemoveReactionAsync<object>(new MessageReactRemoveRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    MessageId = "3EB020510113BAA6561C",
});

Presença e leitura

Funções:
  • client.Messages.PresenceAsync<TResponse>()
  • client.Messages.MarkReadAsync<TResponse>()
await client.Messages.PresenceAsync<object>(new MessagePresenceRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    State = "composing",
});

await client.Messages.MarkReadAsync<object>(new MessageMarkReadRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Id = new[] { "3EB020510113BAA6561C" },
    Chat = "5511999999999@s.whatsapp.net",
});
Retorno: envelope { Code, Success, Data.Details }.

Editar e deletar mensagem

Funções:
  • client.Messages.EditAsync<TResponse>()
  • client.Messages.DeleteAsync<TResponse>()
await client.Messages.EditAsync<object>(new MessageEditRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    MessageId = "3EB020510113BAA6561C",
    Message = "Texto editado",
});

await client.Messages.DeleteAsync<object>(new MessageDeleteRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    MessageId = "3EB020510113BAA6561C",
});
Retorno: envelope { Code, Success, Data.Details }.

Download de mídia

Funções:
  • DownloadImageAsync<TResponse>()
  • DownloadVideoAsync<TResponse>()
  • DownloadAudioAsync<TResponse>()
  • DownloadDocumentAsync<TResponse>()
var media = await client.Messages.DownloadImageAsync<object>(new MessageDownloadRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
});

Console.WriteLine(media);
Retorno: envelope { Code, Success, Data } com Data.Mimetype e Data.Data (base64 ou data URL).

Resposta padrão

Os métodos de envio retornam um envelope da API indicando que a mensagem foi aceita/enfileirada.
var result = await client.Messages.SendTextAsync<object>(new SendTextMessageRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    Message = "Olá",
});

Console.WriteLine(result);
Consulte a Referência da API para os schemas de resposta mais recentes.