Pular para o conteúdo principal
Este guia mostra o caminho recomendado para sair do zero até uma instância conectada enviando mensagens pela VZaps.

1. Instale e crie o cliente

composer require vzaps/sdk
require __DIR__ . '/vendor/autoload.php';

use VZaps\Sdk\VZapsClient;

$vzaps = new VZapsClient(
    clientToken: getenv('VZAPS_CLIENT_TOKEN'),
    clientSecret: getenv('VZAPS_CLIENT_SECRET'),
);

2. Valide autenticação

$jwt = $vzaps->auth()->getAccessToken();
echo substr($jwt, 0, 16) . PHP_EOL;
Na maioria dos fluxos, você não precisa chamar getAccessToken(). Os recursos do SDK fazem isso automaticamente.

3. Liste instâncias existentes

$instances = $vzaps->instances()->list([
    'page' => 1,
    'pageSize' => 20,
    'search' => 'atendimento',
]);

print_r($instances);

4. Crie uma instância

$created = $vzaps->instances()->create([
    'name' => 'Atendimento Comercial',
    'webhook' => 'https://example.com/webhooks/vzaps',
    'eventsSubscribe' => ['Message', 'ReadReceipt', 'Connected', 'Disconnected'],
]);

print_r($created);
Guarde do response:
  • id: identificador da instância.
  • token: token da instância. Use como instanceToken nas chamadas da instância.

5. Assine a instância

$subscription = $vzaps->instances()->subscribe(
    'VZ...',
    [],
    'instance-token',
);

print_r($subscription);
Se houver um cancelamento agendado e você quiser reativar a assinatura:
$resumed = $vzaps->instances()->resumeSubscription(
    'VZ...',
    'instance-token',
);

6. Pareie o WhatsApp

Consultar status:
$status = $vzaps->sessions()->status('VZ...', 'instance-token');

print_r($status);
Buscar QR code:
$qr = $vzaps->sessions()->qr('VZ...', 'instance-token');

print_r($qr);
Buscar código de pareamento por telefone:
$pairCode = $vzaps->sessions()->pairCode(
    'VZ...',
    '5511999999999',
    'instance-token',
);

print_r($pairCode);

7. Configure webhook

Vejá Webhooks para configuração completa, logs e exemplos.
$vzaps->webhooks()->set([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'webhookURL' => 'https://example.com/webhooks/vzaps',
    'events' => ['Message', 'ReadReceipt', 'Connected', 'Disconnected'],
]);

8. Assine realtime

Vejá Realtime para detalhes de assinatura, ack e reconexão.
use VZaps\Sdk\Models\Realtime\EventSubscribeRequest;
use VZaps\Sdk\Models\Realtime\VZapsEventType;

$subscription = $vzaps->events()->subscribe(new EventSubscribeRequest(
    instanceId: 'VZ...',
    instanceToken: 'instance-token',
    events: [VZapsEventType::Message, VZapsEventType::Connected, VZapsEventType::Disconnected],
    reconnect: true,
));

$subscription->on(VZapsEventType::Message, function ($event): void {
    echo $event->id . PHP_EOL;
    print_r($event->data);
});

$subscription->onError(function ($error): void {
    error_log((string) $error);
});

9. Envie a primeira mensagem

$vzaps->messages()->sendText([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'message' => 'Olá! Esta mensagem foi enviada pela VZaps.',
]);

10. Envie mídia

Imagem:
$vzaps->messages()->sendImage([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'image' => 'https://example.com/image.jpg',
    'caption' => 'Imagem enviada pela VZaps',
]);
Documento:
$vzaps->messages()->sendDocument([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'document' => 'https://example.com/contrato.pdf',
    'fileName' => 'contrato.pdf',
    'caption' => 'Segue o contrato',
]);
Vejá Mensagens para todos os tipos de envio e payloads.

11. Acompanhe filas

Vejá Filas para listar, remover e limpar filas.

12. Trate erros

use VZaps\Sdk\Exceptions\VZapsApiException;
use VZaps\Sdk\Exceptions\VZapsAuthenticationException;
use VZaps\Sdk\Exceptions\VZapsException;
use VZaps\Sdk\Exceptions\VZapsTimeoutException;

try {
    $vzaps->messages()->sendText([
        'instanceId' => 'VZ...',
        'instanceToken' => 'instance-token',
        'phone' => '5511999999999',
        'message' => 'Olá',
    ]);
} catch (VZapsAuthenticationException $error) {
    error_log('Credenciais inválidas');
} catch (VZapsTimeoutException $error) {
    error_log('Request expirou');
} catch (VZapsApiException $error) {
    error_log($error->statusCode . ' ' . $error->getMessage());
    print_r($error->details);
} catch (VZapsException $error) {
    error_log($error->getMessage());
}