wsperu.devDocs

Mensajes

Enviar texto, archivos y envíos masivos; consultar estado e historial.

Todos los envíos se encolan y se despachan con delays aleatorios (anti-bloqueo). La respuesta inmediata incluye el messageId para seguimiento.

Enviar texto

POST /messages/send/text
{
  "sessionId": "665f...",
  "to": "51912345678",
  "text": "Su pedido está listo 🎉"
}
  • sessionId es opcional: si lo omites, se usa automáticamente tu primera línea conectada.
  • to acepta un número (con código de país, sin +) o un JID de grupo (...@g.us).
{ "messageId": "665f...", "status": "queued", "jobId": "1234" }

Enviar archivo

POST /messages/send/file
Content-Type: multipart/form-data
Campo Tipo Descripción
sessionId text Línea emisora
to text Destinatario
caption text Texto que acompaña al archivo (opcional) — enviar antes del campo file
file file El archivo a enviar (cualquier tipo, ver abajo)

Se acepta cualquier tipo de archivo. Según su extensión se envía como imagen, video, audio o documento:

Llega como Extensiones
Imagen png jpg jpeg gif webp
Video mp4 3gp mov
Audio mp3 ogg
Documento pdf doc docx xls xlsx ppt pptx odt ods odp rtf txt csv xml json html zip rar 7z

Cualquier otra extensión también se envía: llega como documento (archivo descargable con su nombre original). El caption acompaña a imágenes, videos y documentos.

¿Necesitás enviar un PDF en base64 (por ejemplo desde Facturador PRO 8)? Usá el endpoint dedicado Comprobantes PDF.

Enviar archivo en base64

Igual que /send/file pero recibís el archivo como base64 en JSON — útil cuando tu sistema genera el archivo en memoria (comprobantes, reportes). Acepta cualquier tipo y el tipo se detecta por la extensión del filename.

POST /messages/send/document
{
  "sessionId": "665f...",
  "to": "51912345678",
  "file": "UEsDBBQABgAIAAAAIQ...",
  "filename": "cotizacion.xlsx",
  "caption": "Adjunto tu cotización"
}
  • sessionId es opcional: si lo omites, se usa tu primera línea conectada.
  • file: contenido en base64 (acepta el prefijo data:<mime>;base64,).
  • filename: nombre con extensión — de ahí se detecta el tipo (imagen, video, audio o documento; ver tabla de arriba).
  • caption es opcional. Admite archivos de hasta ~35 MB.
{ "messageId": "665f...", "status": "queued", "jobId": "1234" }

Envío masivo

POST /messages/send/bulk
{
  "sessionId": "665f...",
  "messages": [
    { "to": "51911111111", "text": "Hola Ana" },
    { "to": "51922222222", "text": "Hola Luis" },
    { "to": "51933333333", "fileUrl": "https://tu-cdn.com/promo.jpg", "caption": "Nueva promo" }
  ]
}

Los mensajes se espacian automáticamente según los delays de tu plan. El total no puede exceder tu cuota mensual disponible.

Estado de un mensaje

GET /messages/{id}/status
{
  "messageId": "665f...",
  "status": "sent",
  "sentAt": "2026-08-12T15:05:11.000Z"
}

status: queued → processing → sent | failed. Además del estado de envío, el estado de entrega (delivered/read) llega por webhook message.status.

Historial

GET /messages/history?page=1&limit=20&status=sent&from=2026-08-01&to=2026-08-12

Todos los filtros son opcionales. Respuesta paginada con pagination: { page, limit, total }.