Ir al contenido
ApiWsp

API de WhatsApp con Node.js

Con fetch, que viene en Node 18 o superior, y Express para el webhook.

Requisitos

  • Node.js 18 o superior
  • Tu API key y tu número conectado
  • Express para el webhook: npm install express

Enviar un mensaje

Guárdalo como enviar.mjs y ejecútalo con node enviar.mjs.

Node.js
const respuesta = await fetch('https://api.kontacto.pro/send-message', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    api_key: process.env.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.',
  }),
  signal: AbortSignal.timeout(30_000),
});

const datos = await respuesta.json();

if (!datos.status) {
  throw new Error(`No se envió: ${datos.msg}`);
}
console.log('Enviado');

Enviar una imagen

Con caption, el texto aparece debajo de la imagen.

Node.js
await fetch('https://api.kontacto.pro/send-media', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    api_key: process.env.WSP_API_KEY,
    sender: '51999888777',
    number: '51987654321',
    media_type: 'image',
    caption: 'Nueva colección de temporada',
    url: 'https://tusistema.com/img/coleccion.jpg',
  }),
});

Recibir mensajes con Express

Si respondes un JSON con text, ese mensaje le llega al cliente.

Node.js
import express from 'express';

const app = express();
app.use(express.json({ limit: '10mb' })); // bufferImage puede pesar

const atendidos = new Set();

app.post('/webhook', (req, res) => {
  const { id, message = '', from } = req.body;

  if (atendidos.has(id)) return res.end(); // ya respondido
  atendidos.add(id);

  if (message.includes('precio')) {
    return res.json({ text: 'Hola {name}, te envío la lista de precios.', quoted: true });
  }

  res.end(); // sin respuesta automática
});

app.listen(3000);

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

¿Puedo usar axios?

Sí: axios.post('https://api.kontacto.pro/send-message', datos) envía el mismo JSON.

¿Necesito una librería de WhatsApp como Baileys?

No. La conexión con WhatsApp ya la mantiene el servidor; tú solo haces peticiones HTTP.

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.