Todas as funções de envio ficam em $vzaps->messages().
No SDK, o id da instância vira instanceId e o header X-Instance-Token vira instanceToken.
$base = [
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'phone' => '5511999999999',
];
Campos comuns
Quase todos os envios aceitam os campos abaixo:
| Campo | Tipo | Obrigatório | Descrição |
|---|
instanceId | string | Sim | ID da instância VZaps. |
instanceToken | string | Sim | Token da instância. |
phone | string | Sim | Telefone destino em formato internacional, somente dígitos. |
id | string | Não | Identificador opcional da mensagem no pedido. |
delay | number | Não | Atraso de envio, quando suportado pela API. |
mentionedIds | string[] | Não | IDs citados no WhatsApp. |
replyToMessageId | string | Não | ID da mensagem do WhatsApp a ser respondida/citada. |
O SDK aceita DTOs para requests principais e arrays para campos adicionais do contrato público. Use os campos documentados aqui quando precisar de recursos avançados como id, delay ou replyToMessageId.
Texto
Função: $vzaps->messages()->sendText()
Payload:
| Campo | Tipo | Obrigatório |
|---|
phone | string | Sim |
message | string | Sim |
$vzaps->messages()->sendText([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'phone' => '5511999999999',
'message' => 'Olá, sua instância está conectada.',
'id' => 'MSG-TXT-001',
'replyToMessageId' => '3EB020510113BAA6561C',
]);
Retorno: envelope { code, success, data.message_id } — mensagem aceita/enfileirada.
Também pode usar DTO:
use VZaps\Sdk\Models\Messages\SendTextMessageRequest;
$vzaps->messages()->sendText(new SendTextMessageRequest(
instanceId: 'VZ...',
instanceToken: 'instance-token',
phone: '5511999999999',
message: 'Olá, sua instância está conectada.',
));
Imagem
Função: $vzaps->messages()->sendImage()
Payload:
| Campo | Tipo | Obrigatório |
|---|
phone | string | Sim |
image | string | Sim |
caption | string | Não |
image aceita URL pública https://... ou data URL base64 (data:image/<mime>;base64,<dados>).
$vzaps->messages()->sendImage([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'phone' => '5511999999999',
'image' => 'https://cdn.example.com/photo.jpg',
'caption' => 'Legenda opcional',
]);
Retorno: envelope { code, success, data.message_id } — mensagem aceita/enfileirada.
Áudio
Função: $vzaps->messages()->sendAudio()
Payload:
| Campo | Tipo | Obrigatório |
|---|
phone | string | Sim |
audio | string | Sim |
ptt | boolean | Nã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.
$vzaps->messages()->sendAudio([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'phone' => '5511999999999',
'audio' => 'https://cdn.example.com/audio.mp3',
'ptt' => false,
]);
Documento
Função: $vzaps->messages()->sendDocument()
Payload:
| Campo | Tipo | Obrigatório |
|---|
phone | string | Sim |
document | string | Sim |
fileName | string | Sim |
caption | string | Não |
$vzaps->messages()->sendDocument([
'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.message_id } — mensagem aceita/enfileirada.
Vídeo
Função: $vzaps->messages()->sendVideo()
Payload:
| Campo | Tipo | Obrigatório |
|---|
phone | string | Sim |
video | string | Sim |
caption | string | Não |
jpegThumbnail | string | Não |
$vzaps->messages()->sendVideo([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'phone' => '5511999999999',
'video' => 'https://cdn.example.com/video.mp4',
'caption' => 'Vídeo de demonstração',
]);
Sticker
Função: $vzaps->messages()->sendSticker()
Payload:
| Campo | Tipo | Obrigatório |
|---|
phone | string | Sim |
sticker | string | Sim |
pngThumbnail | string | Não |
$vzaps->messages()->sendSticker([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'phone' => '5511999999999',
'sticker' => 'https://cdn.example.com/sticker.webp',
]);
Retorno: envelope { code, success, data.message_id } — mensagem aceita/enfileirada.
GIF
Função: $vzaps->messages()->sendGif()
Payload:
| Campo | Tipo | Obrigatório |
|---|
phone | string | Sim |
gif | string | Sim |
caption | string | Não |
$vzaps->messages()->sendGif([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'phone' => '5511999999999',
'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: $vzaps->messages()->sendLocation()
Payload:
| Campo | Tipo | Obrigatório |
|---|
phone | string | Sim |
latitude | number | Sim |
longitude | number | Sim |
name | string | Não |
address | string | Não |
$vzaps->messages()->sendLocation([
'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.message_id } — mensagem aceita/enfileirada.
Contato
Função: $vzaps->messages()->sendContact()
Payload:
| Campo | Tipo | Obrigatório |
|---|
phone | string | Sim |
contactName | string | Sim |
contactPhone | string | Sim |
$vzaps->messages()->sendContact([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'phone' => '5511999999999',
'contactName' => 'Maria Silva',
'contactPhone' => '5511888888888',
]);
Retorno: envelope { code, success, data.message_id } — mensagem aceita/enfileirada.
Botões
Função: $vzaps->messages()->sendButtons()
Payload:
| Campo | Tipo | Obrigatório |
|---|
phone | string | Sim |
message | string | Sim |
buttons | array<int, array{id: string, text: string}> | Sim |
footer | string | Não |
$vzaps->messages()->sendButtons([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'phone' => '5511999999999',
'message' => 'Escolha uma opção',
'footer' => 'VZaps',
'buttons' => [
['id' => 'sales', 'text' => 'Comercial'],
['id' => 'support', 'text' => 'Suporte'],
],
]);
Retorno: envelope { code, success, data.message_id } — mensagem aceita/enfileirada.
Lista
Função: $vzaps->messages()->sendList()
Payload:
| Campo | Tipo | Obrigatório |
|---|
phone | string | Sim |
title | string | Sim |
description | string | Sim |
buttonText | string | Sim |
sections | array | Sim |
footer | string | Não |
$vzaps->messages()->sendList([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'phone' => '5511999999999',
'title' => 'Menu principal',
'description' => 'Escolha uma opção',
'buttonText' => 'Abrir menu',
'sections' => [
[
'title' => 'Departamentos',
'rows' => [
['id' => 'sales', 'title' => 'Comercial', 'description' => 'Falar com vendas'],
['id' => 'support', 'title' => 'Suporte', 'description' => 'Falar com suporte'],
],
],
],
]);
Retorno: envelope { code, success, data.message_id } — mensagem aceita/enfileirada.
Função: $vzaps->messages()->sendLink()
Payload:
| Campo | Tipo | Obrigatório |
|---|
phone | string | Sim |
message | string | Sim |
linkUrl | string | Sim |
title | string | Sim |
linkDescription | string | Sim |
jpegThumbnail | string | Não |
$vzaps->messages()->sendLink([
'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: $vzaps->messages()->sendPoll()
Payload:
| Campo | Tipo | Obrigatório |
|---|
phone | string | Sim |
name | string | Sim |
options | string[] | Sim |
selectableOptionsCount | number | Não |
hideParticipantNames | boolean | Não |
endTime | string | Não |
allowAddOption | boolean | Não |
$vzaps->messages()->sendPoll([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'phone' => '5511999999999',
'name' => 'Qual canal você prefere?',
'options' => ['WhatsApp', 'Email', 'Telefone'],
'selectableOptionsCount' => 1,
]);
Retorno: envelope { code, success, data.message_id } — mensagem aceita/enfileirada.
Votar em enquete
Função: $vzaps->messages()->pollVote()
$vzaps->messages()->pollVote([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'phone' => '5511999999999',
'messageId' => '3EB020510113BAA6561C',
'selectedOptions' => ['WhatsApp'],
]);
Reagir e remover reação
Funções:
$vzaps->messages()->react()
$vzaps->messages()->removeReaction()
$vzaps->messages()->react([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'phone' => '5511999999999',
'messageId' => '3EB020510113BAA6561C',
'reaction' => '+1',
]);
$vzaps->messages()->removeReaction([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'phone' => '5511999999999',
'messageId' => '3EB020510113BAA6561C',
]);
Presença e leitura
Funções:
$vzaps->messages()->presence()
$vzaps->messages()->markRead()
$vzaps->messages()->presence([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'phone' => '5511999999999',
'state' => 'composing',
]);
$vzaps->messages()->markRead([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'id' => ['3EB020510113BAA6561C'],
'chat' => '5511999999999@s.whatsapp.net',
]);
Retorno: envelope { code, success, data.details }.
Editar e deletar mensagem
Funções:
$vzaps->messages()->edit()
$vzaps->messages()->delete()
$vzaps->messages()->edit([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'messageId' => '3EB020510113BAA6561C',
'message' => 'Texto editado',
]);
$vzaps->messages()->delete([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'messageId' => '3EB020510113BAA6561C',
]);
Retorno: envelope { code, success, data.details }.
Download de mídia
Funções:
downloadImage()
downloadVideo()
downloadAudio()
downloadDocument()
$media = $vzaps->messages()->downloadImage([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
]);
print_r($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.
$result = $vzaps->messages()->sendText([
'instanceId' => 'VZ...',
'instanceToken' => 'instance-token',
'phone' => '5511999999999',
'message' => 'Olá',
]);
print_r($result);
Consulte a Referência da API para os schemas de resposta mais recentes.