Ir al contenido
ApiWsp

API de WhatsApp con PHP

Con la extensión cURL que trae cualquier hosting PHP. Al final, la versión con Laravel.

Requisitos

  • PHP 7.4 o superior con la extensión curl
  • Tu API key y tu número conectado
  • Un servidor con HTTPS para el webhook

Enviar un mensaje

Guarda tu API key en una variable de entorno y no en el código.

PHP
<?php
$datos = [
    'api_key' => getenv('WSP_API_KEY'),
    'sender'  => '51999888777',   // tu número conectado
    'number'  => '51987654321',   // destino con código de país
    'message' => 'Hola Ana, tu pedido #1024 ya salió a reparto.',
];

$ch = curl_init('https://api.kontacto.pro/send-message');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($datos),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 30,
]);
$cuerpo = curl_exec($ch);
$http   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$respuesta = json_decode((string) $cuerpo, true);

if ($http === 200 && !empty($respuesta['status'])) {
    echo "Enviado\n";
} else {
    echo 'No se envió: ' . ($respuesta['msg'] ?? 'sin respuesta del servidor') . "\n";
}

Enviar un PDF

El archivo debe estar en una URL pública con enlace directo.

PHP
<?php
$datos = [
    'api_key'    => getenv('WSP_API_KEY'),
    'sender'     => '51999888777',
    'number'     => '51987654321',
    'media_type' => 'pdf',
    'caption'    => 'F001-2045.pdf',   // en documentos, es el nombre del archivo
    'url'        => 'https://tusistema.com/comprobantes/F001-2045.pdf',
];

$ch = curl_init('https://api.kontacto.pro/send-media');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($datos),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 60,
]);
$respuesta = json_decode((string) curl_exec($ch), true);
curl_close($ch);

Recibir mensajes con un webhook

Pon la URL de este archivo en el panel (Webhooks). Si respondes un JSON con text, ese mensaje le llega al cliente.

PHP
<?php
// webhook.php
$entrada = json_decode(file_get_contents('php://input'), true) ?: [];

$texto  = $entrada['message'] ?? '';   // en minúsculas y sin tildes
$numero = $entrada['from'] ?? '';
$id     = $entrada['id'] ?? '';        // guárdalo para no responder dos veces

header('Content-Type: application/json');

if (strpos($texto, 'horario') !== false) {
    echo json_encode([
        'text'   => 'Hola {name}, atendemos de lunes a sábado de 9:00 a 19:00.',
        'quoted' => true,
    ]);
    exit;
}

// Respuesta vacía: no se envía nada automático.

Con Laravel

El cliente HTTP de Laravel arma el JSON y lee la respuesta.

PHP
use Illuminate\Support\Facades\Http;

$respuesta = Http::timeout(30)->post('https://api.kontacto.pro/send-message', [
    'api_key' => config('services.wsp.key'),
    'sender'  => '51999888777',
    'number'  => '51987654321',
    'message' => 'Hola desde Laravel',
]);

if (! $respuesta->json('status')) {
    report(new RuntimeException($respuesta->json('msg', 'Error de WhatsApp')));
}

Todos los endpoints, parámetros y errores están en la documentación de la API.

Preguntas frecuentes

Si tu duda no está aquí, escríbenos por WhatsApp.

Ver todas las preguntas

¿Funciona en un hosting compartido?

Sí. Solo necesitas PHP con la extensión curl, que viene activada en casi todos los hosting.

¿Puedo usar Guzzle?

Sí. Envía el mismo cuerpo con $client->post('https://api.kontacto.pro/send-message', ['json' => $datos]).

La API en otros lenguajes

Envía tu primer mensaje hoy

Escríbenos por WhatsApp, conectamos tu número con un QR y te damos tu API key para que pruebes desde tu sistema.