En esta sección
Guías / Tareas

Tareas

Checklists del workspace que reparten trabajo entre personas, con pasos, comentarios, vistas y actividad.

Actualizada el Ver .md

Una tarea es un checklist del workspace: un trabajo con un responsable, una fecha límite opcional y pasos que va marcando la persona a la que se le asignan. La API te deja crearlas, llenarlas y leer en qué punto quedaron, para que el trabajo que nace en tu sistema aparezca en el tablero de tareas de Meteor y al revés.

Usa los scopes tasks:read y tasks:write.

La API ya no ejecuta tareas. Hasta el 31 de agosto de 2026 (contrato 3.0.0) una tarea se podía disparar, correr paso a paso con un Met y detenerse a pedir aprobación. Eso se retiró: tasks.execute(), el historial de ejecuciones, approveStep(), rejectStep(), completeHumanStep(), cancelExecution(), tasks.triggers y met tasks run ya no existen, y sus endpoints responden 404. Lo que corre solo se arma hoy en Funciones y flujos, y para que un Met haga el trabajo se usa un Run. El evento task.completed dejó de emitirse (ver Webhooks).

Crear una tarea

Una tarea tiene un responsable: una persona (responsible_user_id) o un Met (responsible_met_id), nunca los dos.

const tarea = await met.tasks.create({
  name: 'Calificar leads nuevos',
  description: 'Revisar los contactos sin etapa y dejar una calificación.',
  responsible_user_id: 77,
  deadline: '2026-11-05T17:00:00-05:00',
});
// → { id, name, status, ... }
tarea = met.tasks.create(
    name="Calificar leads nuevos",
    description="Revisar los contactos sin etapa y dejar una calificación.",
    responsible_user_id=77,
    deadline="2026-11-05T17:00:00-05:00",
)

Con contact_id la tarea queda como seguimiento de un contacto del CRM, y met.tasks.iterate({ contactId }) te devuelve solo las de ese contacto. list() se corta en 100; iterate() recorre todas.

Pasos

Los pasos son el checklist. Se crean de a uno, quedan al final (o justo debajo de otro con after_step_id) y se asignan a una persona: un paso no se asigna a un Met.

const paso = await met.tasks.steps.create(tarea.id, {
  name: 'Traer contactos sin etapa',
  assigned_to_user_id: 77,
});

// Quien hace el paso lo marca hecho; tu sistema también puede hacerlo.
await met.tasks.steps.update(tarea.id, paso.id, { status: 'completed' });

await met.tasks.steps.reorder(tarea.id, [pasoB.id, pasoA.id]);

Un paso está pending o completed. Las tareas creadas antes del retiro del ejecutor pueden conservar running, failed o cancelled en algún paso; nadie los escribe ya.

steps.updateResult() reemplaza el resultado del paso con bloques de contenido. Sirve cuando el trabajo real lo hizo tu sistema y quieres dejar el entregable en la tarea:

await met.tasks.steps.updateResult(tarea.id, paso.id, {
  blocks: [{ type: 'text', data: { html: '<p>42 contactos calificados</p>' } }],
});

Reemplaza, no agrega: el arreglo que mandas queda como el resultado completo.

Saber en qué quedó

const detalle = await met.tasks.retrieve(tarea.id);   // la tarea con sus pasos
const pasos = (detalle.steps ?? []) as Array<{ id: string; name: string; status?: string }>;
const pendientes = pasos.filter((p) => p.status !== 'completed');

No hay evento de tareas: para enterarte de un cambio, consulta el detalle o la actividad cuando lo necesites, no en un bucle cada pocos segundos.

Estado

await met.tasks.setStatus(tarea.id, 'completed');

Acepta pending, running, paused, completed, failed y cancelled; qué significa cada uno en el día a día lo define el tablero de tu workspace, no la API. Cambiar el estado no hace correr nada.

Comentarios y adjuntos

El hilo de la tarea acepta archivos. Se sube primero y se manda la metadata después:

const adjunto = await met.tasks.comments.upload(tarea.id, archivo, {
  filename: 'reporte.pdf',
  contentType: 'application/pdf',
});

await met.tasks.comments.create(tarea.id, {
  body: 'Adjunto el reporte del cierre.',
  attachments: [adjunto],
});

Un comentario necesita body o attachments; vacío responde 400.

Contexto y actividad

const actividad = await met.tasks.activity(tarea.id);          // de una tarea
const todo = await met.tasks.workspaceActivity({ limit: 50 }); // de todo el workspace

const vinculados = await met.tasks.linkedItems(tarea.id);      // ítems donde está la tarea

linkedItems() devuelve los ítems de colección que tienen la tarea embebida en su contenido: es cómo sabes desde qué ficha se pidió el trabajo. Mira Colecciones e ítems.

Vistas guardadas

Las vistas son del workspace, no de una tarea: filtros guardados sobre el listado del panel.

await met.tasks.views.create({
  name: 'En pausa',
  filters: [{ field: 'status', operator: 'is', value: 'paused' }],
});

views.reorder() está deprecado y deja de responder el 2027-04-08: es el orden del menú del panel, no un dato del workspace.