Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.plazbot.com/llms.txt

Use this file to discover all available pages before exploring further.

Existen 5 tipos de workers, cada uno diseñado para un caso de uso diferente. El tipo se define por la funcion define* que utilices.

Tabla comparativa

TipoFuncionTriggerUso principal
TooldefineToolEl agente IA lo invocaConsultas a APIs durante conversaciones
WorkerdefineWorkerBajo demanda (API, acciones, otros workers)Logica de negocio reutilizable
SyncdefineSyncCron programadoSincronizacion periodica de datos
ScheduledefineScheduleCron programadoTareas automaticas recurrentes
WebhookdefineWebhookHTTP request externoRecibir eventos de servicios externos

Tool (defineTool)

Herramientas que el agente IA puede invocar durante una conversacion. Ideales para consultas a APIs externas, busquedas en base de datos, o cualquier operacion en tiempo real. Campos de configuracion:
CampoTipoDescripcion
namestringNombre unico del tool.
referencestringDescripcion para que el agente entienda cuando usarlo.
agentsstring[]IDs de los agentes que pueden invocar este tool.
parametersarrayParametros que el agente debe recopilar del usuario.
Signature del handler:
async run(payload, plz) {
  // payload contiene los parametros + contactId
  // Retorna datos que el agente usara en su respuesta
  return { ... }
}
Cada parametro tiene:
CampoTipoDescripcion
namestringNombre del parametro.
typestringTipo: string, number, array, boolean.
descriptionstringDescripcion para que el agente sepa que pedir al usuario.
examplestringEjemplo de pregunta que el agente puede hacer.
Ejemplo:
import { defineTool } from 'plz/workers'

export default defineTool({
  name: 'consultar-stock',
  reference: 'Consulta disponibilidad de productos en inventario',
  agents: ['agent_abc123'],
  parameters: [
    { name: 'producto', type: 'string', description: 'Nombre del producto' }
  ],

  async run(payload, plz) {
    const res = await fetch(`${plz.env.API_URL}/stock?q=${payload.producto}`)
    return await res.json()
  }
})

Worker (defineWorker)

Funciones de proposito general invocadas bajo demanda. Se ejecutan desde automatizaciones, acciones del agente (action.worker), otros workers o la API. Campos de configuracion:
CampoTipoDescripcion
namestringNombre unico del worker.
referencestringDescripcion del proposito.
Signature del handler:
async run(payload, plz) {
  // payload contiene los datos enviados al ejecutar
  // payload.contactId y payload.contact disponibles si se invoca desde una accion
  return { ... }
}
Ejemplo:
import { defineWorker } from 'plz/workers'

export default defineWorker({
  name: 'notificar-equipo',
  reference: 'Envia notificacion al equipo por Slack',

  async run(payload, plz) {
    const { contactId, mensaje } = payload

    plz.log.info('Enviando notificacion', { contactId })

    await fetch(plz.env.SLACK_WEBHOOK, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ text: mensaje })
    })

    return { success: true }
  }
})
Este es el unico tipo de worker que puede ser invocado desde las acciones del agente de IA usando action.worker.

Sync (defineSync)

Sincronizaciones programadas que mantienen datos actualizados entre la plataforma y sistemas externos. Se ejecutan en intervalos regulares via cron. Campos de configuracion:
CampoTipoDescripcion
namestringNombre unico del sync.
referencestringDescripcion del proposito.
cronstringExpresion cron que define la frecuencia.
timezonestringZona horaria para el cron (ej: America/Mexico_City).
Signature del handler:
async run(plz) {
  // No recibe payload - se ejecuta automaticamente
  return { ... }
}
Ejemplo:
import { defineSync } from 'plz/workers'

export default defineSync({
  name: 'sync-crm-contacts',
  reference: 'Sincroniza contactos modificados en el CRM',
  cron: '*/30 * * * *',
  timezone: 'America/Lima',

  async run(plz) {
    const contacts = await plz.contacts.list({ limit: 100 })
    // ... logica de sincronizacion
    return { synced: 15 }
  }
})

Schedule (defineSchedule)

Tareas programadas que se ejecutan automaticamente en horarios definidos. Utiles para reportes, limpiezas, notificaciones periodicas y mas. Campos de configuracion:
CampoTipoDescripcion
namestringNombre unico del schedule.
referencestringDescripcion del proposito.
cronstringExpresion cron que define cuando se ejecuta.
timezonestringZona horaria para el cron.
Signature del handler:
async run(plz) {
  // No recibe payload - se ejecuta automaticamente
  return { ... }
}
La diferencia entre defineSync y defineSchedule es conceptual: sync se usa para sincronizar datos entre sistemas, schedule para tareas autonomas. Tecnicamente funcionan igual.
Ejemplo:
import { defineSchedule } from 'plz/workers'

export default defineSchedule({
  name: 'reporte-diario',
  reference: 'Envia resumen diario de chats pendientes',
  cron: '0 22 * * 1-5',
  timezone: 'America/Mexico_City',

  async run(plz) {
    const contacts = await plz.contacts.list({ limit: 200 })
    const pending = contacts.filter(c => !c.isSolved)
    // ... enviar reporte
    return { pending: pending.length }
  }
})

Webhook (defineWebhook)

Endpoints HTTP que reciben eventos de servicios externos en tiempo real. Al desplegarse, se genera una URL unica que puedes configurar en el servicio externo. Campos de configuracion:
CampoTipoDescripcion
namestringNombre unico del webhook.
referencestringDescripcion del proposito.
methodstringMetodo HTTP aceptado: POST, GET, PUT.
Signature del handler:
async run(payload, plz) {
  // payload contiene el body del request HTTP
  return { ... }
}
Ejemplo:
import { defineWebhook } from 'plz/workers'

export default defineWebhook({
  name: 'webhook-pagos',
  reference: 'Recibe eventos de pago de Stripe',
  method: 'POST',

  async run(payload, plz) {
    if (payload.type !== 'checkout.session.completed') {
      return { ignored: true }
    }

    const email = payload.data.object.customer_details.email
    const matches = await plz.contacts.search({ email })

    if (matches.length > 0) {
      await plz.contacts.addTag(matches[0].id, 'cliente-pagado')
    }

    return { success: true }
  }
})
Al desplegar un webhook, el sistema genera automaticamente una URL. Puedes verla en el dashboard o con plazbot workers list. Usa esa URL para configurar el webhook en el servicio externo (Stripe, Shopify, etc).

Expresiones Cron

Los workers de tipo sync y schedule usan expresiones cron para definir su frecuencia de ejecucion.
ExpresionSignificado
*/5 * * * *Cada 5 minutos
*/30 * * * *Cada 30 minutos
0 * * * *Cada hora en punto
0 9 * * *Todos los dias a las 9:00
0 22 * * 1-5Lunes a viernes a las 22:00
0 0 * * 0Domingos a medianoche
0 */6 * * *Cada 6 horas
El campo timezone determina en que zona horaria se evalua la expresion cron. Valores comunes:
  • America/Mexico_City
  • America/Lima
  • America/Bogota
  • America/Santiago
  • America/Argentina/Buenos_Aires