Pular para o conteúdo
WbizTool

Envie mensagens de WhatsApp com PHP

Envie textos, imagens e arquivos de WhatsApp pelo seu site ou app em PHP, do seu próprio número conectado ao WbizTool como no WhatsApp Web. Basta a extensão cURL do PHP e um POST para um endpoint documentado.

Teste grátis: 50 mensagens em quaisquer 30 dias, sem cartão.

Como funciona

  1. Pegue sua chave de API e conecte seu número

    Cadastre-se e conecte seu número de WhatsApp na página Números do WhatsApp com um código QR ou um código de login, como no WhatsApp Web. Em Configurações → Chaves de API, crie uma chave e copie seu Client ID (o guia de chaves de API abaixo mostra onde). O ID no cartão do número (como ID 678) é o seu whatsapp_client.

  2. Monte a requisição

    Coloque client_id, api_key, whatsapp_client, o número de telefone e msg em um array. Envie como JSON com a extensão cURL do PHP – ou com qualquer cliente HTTP que você já usa, com os mesmos campos.

  3. Envie a mensagem

    Faça um POST para https://wbiztool.com/api/v1/send_msg/. Uma resposta com "status": 1 e um msg_id significa que a mensagem está na fila do seu número.

  4. Confira se ela saiu

    Passe uma URL em webhook para ser avisado quando a mensagem for enviada ou falhar, ou consulte o endpoint de status da mensagem com o msg_id.

Exemplos de código: PHP

Enviar um texto
<?php
$payload = [
    'client_id'       => 12345,
    'api_key'         => 'YOUR_API_KEY',
    'whatsapp_client' => 678,
    'msg_type'        => 0,
    'country_code'    => '91',
    'phone'           => '9876543210',
    'msg'             => 'Hi Aman, your order #4821 has shipped and will arrive on Thursday.',
];

$ch = curl_init('https://wbiztool.com/api/v1/send_msg/');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);

if (($result['status'] ?? 0) === 1) {
    echo 'Queued with msg_id ' . $result['msg_id'];
} else {
    echo 'Failed: ' . ($result['message'] ?? 'no response');
}
Resposta
{"status": 1, "message": "Created", "msg_id": 9817263}
Enviar uma imagem a partir de uma URL
<?php
$ch = curl_init('https://wbiztool.com/api/v1/send_msg/');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode([
        'client_id'       => 12345,
        'api_key'         => 'YOUR_API_KEY',
        'whatsapp_client' => 678,
        'msg_type'        => 1,
        'country_code'    => '91',
        'phone'           => '9876543210',
        'img_url'         => 'https://example.com/offers/diwali-sale.jpg',
        'msg'             => 'Our Diwali sale starts today 🎉',
    ]),
    CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
curl_close($ch);
Enviar um PDF (upload de arquivo)
<?php
$ch = curl_init('https://wbiztool.com/api/v1/send_msg/');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    // An array body (not json_encode) makes cURL send multipart/form-data.
    CURLOPT_POSTFIELDS     => [
        'client_id'       => 12345,
        'api_key'         => 'YOUR_API_KEY',
        'whatsapp_client' => 678,
        'msg_type'        => 2,
        'country_code'    => '91',
        'phone'           => '9876543210',
        'msg'             => 'Your invoice for order #4821 is attached.',
        'file_name'       => 'invoice-4821.pdf',
        'file'            => new CURLFile('/path/to/invoice-4821.pdf', 'application/pdf', 'invoice-4821.pdf'),
    ],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 120,
]);
echo curl_exec($ch);
curl_close($ch);
Agendar uma mensagem
<?php
$payload = [
    'client_id'       => 12345,
    'api_key'         => 'YOUR_API_KEY',
    'whatsapp_client' => 678,
    'msg_type'        => 0,
    'country_code'    => '91',
    'phone'           => '9876543210',
    'msg'             => 'Hi Aman, a reminder that your appointment is today at 11:30 AM.',
    'date'            => '24/12/2026',
    'time'            => '09:00',
    'timezone'        => 'Asia/Kolkata',
];

$ch = curl_init('https://wbiztool.com/api/v1/schedule_msg/');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);

if (($result['status'] ?? 0) === 1) {
    echo 'Scheduled with msg_id ' . $result['msg_id'];
} else {
    echo 'Failed: ' . ($result['message'] ?? 'no message in response');
}
Consultar o status da mensagem
<?php
$msgId = 9817263;
$payload = [
    'client_id' => 12345,
    'api_key'   => 'YOUR_API_KEY',
];

$ch = curl_init("https://wbiztool.com/api/v1/message/status/{$msgId}/");
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);

if (($result['message'] ?? '') === 'Unknown message id') {
    echo 'No message with this ID in your workspace';
} elseif (!isset($result['status_text'])) {
    echo 'Request failed: ' . ($result['message'] ?? 'no message in response');
} elseif ($result['status'] === 1) {
    echo 'Sent';
} elseif ($result['status'] === 2) {
    echo 'Failed: ' . $result['error'];
} else {
    echo 'Status: ' . $result['status_text'];
}
Receber o webhook de status
<?php
// webhook.php – WbizTool posts form fields, so they arrive in $_POST.
$msgId  = $_POST['msg_id'] ?? '';
$status = $_POST['status'] ?? ''; // SENT, FAILED, CANCELLED or EXPIRED
error_log("WbizTool message $msgId: $status");
http_response_code(200);

O que você pode fazer

  • Nenhuma biblioteca para instalar

    Os exemplos usam só a extensão cURL do PHP. A API aceita JSON, campos de formulário ou multipart form data quando você envia um arquivo.

  • Textos, imagens e arquivos

    Defina msg_type como 0 para texto, 1 para imagem ou 2 para arquivo. Informe uma img_url ou file_url pública, ou envie o arquivo com CURLFile.

  • Agende para depois

    Faça um POST para /api/v1/schedule_msg/ com date (dd/mm/aaaa), time (HH:MM) e um timezone como Asia/Kolkata ou America/New_York.

  • Webhooks para cada status

    Passe webhook e o seu script recebe um POST form-encoded – leia $_POST['msg_id'] e $_POST['status'] (SENT, FAILED, CANCELLED ou EXPIRED).

  • Usa WordPress? Use o plugin

    O plugin do WbizTool para WordPress envia mensagens de WhatsApp para pedidos do WooCommerce, agendamentos do WP Amelia e formulários do Contact Form 7, sem código.

Bom saber

  • "status": 1 significa que a mensagem está na fila, não que foi entregue. Enviada é o estado final de sucesso; a API não informa se a mensagem foi entregue ou lida.
  • Os erros de envio de mensagem voltam com HTTP 400 (429 no limite diário); os erros de agendamento costumam voltar com HTTP 200 e "status": 0, então sempre decodifique o corpo e confira status.
  • Para um upload de arquivo, passe um array para CURLOPT_POSTFIELDS, não json_encode, para que o cURL envie multipart/form-data com o arquivo em um campo chamado file.
  • Guarde a chave de API no seu servidor, por exemplo em uma variável de ambiente. Quem tiver a chave pode enviar dos seus números, então nunca a coloque em JavaScript do navegador, em um app de celular ou em código que você publica.
  • O teste grátis tem 50 mensagens em quaisquer 30 dias e 1 número, sem cartão. Os planos pagos começam em US$ 25 por mês nos EUA (o seu preço aparece em Preços) e enviam mensagens ilimitadas dentro do uso justo: até 1.000 por dia por número.
  • As mensagens saem do seu próprio número de WhatsApp, então as regras do próprio WhatsApp valem: mande mensagens para quem espera ter notícias suas.

Perguntas frequentes

Existe um SDK para PHP?
Não há um pacote PHP oficial, e você não precisa de um: cada chamada é um único POST com a extensão cURL, como mostrado acima. Qualquer cliente HTTP do PHP funciona com a mesma URL e os mesmos campos.
Como envio uma fatura em PDF pelo PHP?
Use msg_type 2. Informe uma file_url pública, ou envie o arquivo com new CURLFile(...) em um campo chamado file. Defina file_name com a extensão, como invoice-4821.pdf.
Como sei que a mensagem foi enviada?
Uma resposta com "status": 1 e um msg_id significa que ela está na fila. Passe uma URL em webhook para receber um POST com SENT, FAILED, CANCELLED ou EXPIRED, ou chame o endpoint de status da mensagem com o msg_id. Enviada é o estado final: a API não informa se a mensagem foi entregue ou lida.
Em que formato envio o número de telefone?
Envie o número com o código do país (919876543210), ou sem ele (9876543210) junto com country_code (91). Espaços, +, hífens e parênteses são removidos para você, então +91 98765-43210 também funciona.
Preciso da API oficial do WhatsApp Business ou de aprovação da Meta?
Não. O WbizTool envia do seu próprio número de WhatsApp ou WhatsApp Business, conectado como no WhatsApp Web. Não há aprovação da Meta nem modelos de mensagem para aprovar.
A cobrança é por mensagem?
Não. O teste grátis inclui 50 mensagens em quaisquer 30 dias. Os planos pagos enviam mensagens ilimitadas dentro do uso justo, até 1.000 por dia por número: Lite US$ 25, Standard US$ 59 e Advanced US$ 149 por mês nos EUA; Preços mostra o preço do seu país.

Leia os guias

Veja também

Envie hoje sua primeira mensagem automática de WhatsApp

Crie uma conta, escaneie o QR code e envie uma mensagem em menos de cinco minutos.

Comece grátis

Planos pagos a partir de US$ 25 por mês nos EUA. Preços