await bot.message.onWhatsappMessage({to: "51912345678",message: "Hola Ana, gracias por escribir.",})
whatsapp.cloud/*
Conecta números, envía cualquier tipo de mensaje, recibe 12 webhooks en tiempo real y orquesta tu agente IA sobre WhatsApp Cloud API. Todo por SDK, CLI, REST o Workers — sin BSP intermedio y con plantillas aprobadas directo desde Meta.
01// send.ts — WhatsApp Cloud API · BSP Meta02import { Plazbot } from "plazbot"0304const bot = new Plazbot({05 apiKey: process.env.PLAZBOT_KEY!,06 workspaceId: "ws_...",07 zone: "LA" // LA | EU08})0910// envía una plantilla aprobada con variables11await bot.message.onConversation({12 to: "5491123456789",13 template: "welcome",14 variablesBody: [{ variable: "1", value: "Ana" }]15})16
whatsapp.capabilities/*
Todo lo que puedes hacer sobre WhatsApp desde el código. Cada ítem mapea a un método real del SDK (v2.1.4) o un comando del CLI (v0.2.22). Sin invenciones.
messages.flow/*
La misma operación expresada en SDK TypeScript, CLI Bash y REST HTTP. Body y parámetros idénticos — elige la superficie según el contexto (app vs ops vs cualquier stack).
await bot.message.onConversation({to: "51912345678",template: "welcome",variablesBody: [{ variable: "1", value: "Ana" }],variablesHeader: [{ variable: "1", value: "Q3 2025" }],})
await bot.message.onConversation({to: "51912345678",template: "factura_mensual",variablesBody: [{ variable: "1", value: "Ana" }],file: {fileUrl: "https://cdn.tu-app.com/facturas/u/123.pdf",fileName: "factura.pdf",},})
webhooks.stream/*
Registra una URL y recibe los 12 eventos del ciclo de vida de WhatsApp en JSON. Mismo wrapper PlazbotEvent para todos — discriminado por type.
- [01]
message.receivedtexto - [02]
message.image.receivedimagen - [03]
message.audio.receivedaudio - [04]
message.document.receiveddocumento
- [01]
contact.creatednuevo contacto creado - [02]
contact.existingcontacto ya conocido interactuó - [03]
contact.deletedcontacto eliminado - [04]
contact.blockedcontacto bloqueado - [05]
contact.from.adclick-to-WhatsApp desde anuncio
- [01]
conversation.assignedasignada a agente / miembro - [02]
conversation.resolvedmarcada como resuelta - [03]
conversation.reopenedreabierta
await bot.message.registerWebhook({number: "51912345678",url: "https://tu-app.com/wa-events",})
01// shape verificado en plazbot-sdk v2.1.402interface PlazbotEvent {03 type: PlazbotEventType // uno de los 12 literales04 workspaceId: string05 timestamp: string // ISO-860106 data: PlazbotEventData07}0809interface PlazbotEventData {10 contact?: EventContact11 message?: EventMessage12 conversation?: EventConversation13 metadata?: Record<string, unknown>14}1516interface EventMessage {17 id: string18 content?: string19 contentUrl?: string20 contentType: 'text' | 'image' | 'audio' | 'document' | 'video' | 'location' | 'sticker'21 platform: 'whatsapp' | 'telegram' | 'instagram' | 'webchat'22 direction: 'incoming' | 'outgoing'23 timestamp: string24}2526interface EventContact {27 id: string28 name?: string29 phoneNumber?: string30 email?: string31 tags?: string[]32 stage?: string33 assignedAgentId?: string34 assignedAgentName?: string35 variables?: Record<string, string>36}3738interface EventConversation {39 contactId: string40 isSolved: boolean41 assignedAgentId?: string42 assignedMemberId?: string43 lastMessageAt?: string44}
01// POST https://tu-app.com/wa-events02{03 "type": "message.image.received",04 "workspaceId": "ws_018f...",05 "timestamp": "2025-05-24T13:42:01.812Z",06 "data": {07 "contact": {08 "id": "cnt_018f...",09 "name": "Ana Quispe",10 "phoneNumber": "51912345678",11 "tags": ["lead", "ventas"]12 },13 "message": {14 "id": "msg_018f...",15 "contentUrl": "https://media.plazbot.com/.../img.jpg",16 "contentType": "image",17 "platform": "whatsapp",18 "direction": "incoming",19 "timestamp": "2025-05-24T13:42:01.700Z"20 }21 }22}
regions.{la,eu}/*
El SDK resuelve el host según la zona del workspace. Elige la región correcta y el cliente apunta automáticamente al host operativo de esa zona.
Cobertura para América Latina, Caribe y Estados Unidos
- ├── BSP Meta operando 24/7 con plantillas locales
- ├── Soporte en español y portugués
- └── Optimizado para tráfico desde MX · CO · PE · CL · AR · BR
const bot = new Plazbot({apiKey: process.env.PLAZBOT_KEY!,workspaceId: "ws_...",zone: "LA",})
Cobertura para Europa con residencia de datos en la región
- ├── Procesamiento y almacenamiento dentro de la UE
- ├── Compatible con requisitos de GDPR / soberanía de datos
- └── Optimizado para tráfico desde ES · PT · IT · FR · DE
const bot = new Plazbot({apiKey: process.env.PLAZBOT_KEY!,workspaceId: "ws_...",zone: "EU",})
new Plazbot({ apiKey, workspaceId, customUrl: "https://api.tu-cluster.com" })whatsapp.quickstart/*
Tres pasos copia-pega para mandar tu primera plantilla a un número real. Requiere PLAZBOT_KEY y PLAZBOT_WORKSPACE_ID (los obtienes en el panel).
- step [01/03]instala el SDK
Un solo paquete. Sin dependencias externas extra.
~/terminal·bash01$ npm install plazbot02# o si prefieres CLI global para ops:03$ npm install -g plazbot - step [02/03]inicializa el cliente
Lleva apiKey, workspaceId y zona (LA / EU). El host se resuelve solo.
~/lib/plazbot.ts·typescript01import { Plazbot } from "plazbot"0203export const bot = new Plazbot({04 apiKey: process.env.PLAZBOT_KEY!,05 workspaceId: process.env.PLAZBOT_WORKSPACE_ID!,06 zone: "LA", // "LA" | "EU"07}) - step [03/03]manda tu primer mensaje
Plantilla aprobada con variables. La respuesta trae messageId para tracking.
~/scripts/welcome.ts·typescript01import { bot } from "@/lib/plazbot"0203const res = await bot.message.onConversation({04 to: "51912345678",05 template: "welcome",06 variablesBody: [{ variable: "1", value: "Ana" }],07})0809console.log(res.messageId) // → "msg_018f..."
$ build.with.whatsapp/*
Crea tu workspace gratis, conecta un número y manda tu primera plantilla en minutos. Si necesitas volumen, BSP dedicado u on-premise, hablamos.
- ├── docs.plazbot.com
- ├── github.com/plazbot
- ├── /developers
- └── status