Webhook por número
Registra una URL y cada mensaje que recibe ese número llega a tu servidor por POST.
SDK·ts
01await bot.message.registerWebhook({02 number: "51966446311", // tu número conectado03 webhookUrl: "https://tu-app.com/api/whatsapp",04})
También puedes registrarlo en el paso 4 de plazbot whatsapp setup. Para quitarlo: delete-webhook.
Qué llega a tu URL
POST → tu webhook·json
01{02 "id": "msg_...",03 "content": "Hola, ¿tienen envío a Cusco?",04 "contactId": "cnt_...",05 "recipientPhone": "51912345678",06 "agentId": "agt_...",07 "agentName": "Soporte",08 "reference": { "object": "whatsapp_business_account" }09}
| Campo | Descripción |
|---|---|
id | ID del mensaje en Plazbot |
content | Texto del mensaje (o descripción del archivo) |
contactId | ID del contacto en Plazbot |
recipientPhone | Número de quien escribió, con código de país |
agentId, agentName | Agente asignado al contacto, si hay |
reference | Payload original que envió Meta |
Ejemplo de handler
app/api/whatsapp/route.ts·ts
01export async function POST(req: Request) {02 const msg = await req.json()0304 console.log(msg.recipientPhone, "escribió:", msg.content)0506 return new Response("ok")07}
Para probar sin servidor usa una URL de webhook.site: escribe a tu número y verás el POST en tiempo real.
El webhook por número envía los mensajes entrantes. Los estados de entrega (enviado, entregado, leído) todavía no se envían a tu webhook.
Eventos con Workers
Los Workers son funciones que Plazbot ejecuta por ti cuando ocurre un evento, sin montar servidor. Tienen acceso a WhatsApp, contactos y conversaciones desde plz.
workers/bienvenida.ts·ts
01import { defineWorker } from "plazbot/workers"0203export default defineWorker({04 name: "bienvenida",05 events: ["contact.created"],06 async handler(event, plz) {07 const { contact } = event.data08 if (!contact?.phoneNumber) return0910 await plz.whatsapp.send({11 to: contact.phoneNumber,12 message: "¡Bienvenido! ¿En qué te ayudamos?",13 })14 },15})
bash
01plazbot workers deploy ./workers/bienvenida.ts
| Grupo | Eventos |
|---|---|
message.* | received, image.received, audio.received, document.received |
contact.* | created, existing, deleted, blocked, from.ad |
conversation.* | assigned, resolved, reopened |
Más en Workers.