Resultados de Actividades
Crear Resultado de Actividad
Crear el resultado de una actividad de tarea.
POST /api/activity-results/tasks
Crea un resultado para una actividad de tarea desde la app interna de admin/operador. Los resultados pueden vincularse a una actividad existente de Reten (con activity_id) o crearse como entradas independientes (omitiéndolo).
Auth: Requerida — header Authorization: Bearer <token> + x-tenant-id, con el permiso SUBMIT_ACTIVITY_RESULT.
Este es el endpoint interno. Los proveedores externos usan el endpoint de integración POST /api/integration/activity-results/tasks, que tiene otra forma de request y se autentica con x-api-key.
Cuerpo de la Solicitud
Todos los campos son snake_case.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
activity_id | UUID | No | ID de actividad en Reten. Omitir para crear un resultado STANDALONE no vinculado a una actividad existente. |
commerce_id | UUID | No | ID interno del comercio en Reten. |
channel | enum | No | Canal por el que se accionó la actividad. Uno de SALESMAN, CALLCENTER, WHATSAPP, EMAIL, SMS, PUSH. |
result | string | Sí | Código del tipo de resultado (ej., success, not_home). Patrón ^[a-zA-Z0-9_-]+$, máx 100 caracteres. |
comment | string | No | Comentario de texto libre, máx 500 caracteres. |
future_scheduled_at | ISO 8601 | Condicional | Requerido solo cuando el tipo de resultado seleccionado exige una fecha de seguimiento. |
Ejemplo
curl -X POST https://api.reten.ai/api/activity-results/tasks \
-H "Authorization: Bearer <token>" \
-H "x-tenant-id: <tenant-id>" \
-H "Content-Type: application/json" \
-d '{
"activity_id": "ee0e8400-e29b-41d4-a716-446655440000",
"channel": "SALESMAN",
"result": "success",
"comment": "Order placed successfully"
}'const response = await fetch("https://api.reten.ai/api/activity-results/tasks", {
method: "POST",
headers: {
"Authorization": "Bearer <token>",
"x-tenant-id": "<tenant-id>",
"Content-Type": "application/json",
},
body: JSON.stringify({
activity_id: "ee0e8400-e29b-41d4-a716-446655440000",
channel: "SALESMAN",
result: "success",
comment: "Order placed successfully",
}),
});
const result = await response.json();import requests
response = requests.post(
"https://api.reten.ai/api/activity-results/tasks",
headers={
"Authorization": "Bearer <token>",
"x-tenant-id": "<tenant-id>",
},
json={
"activity_id": "ee0e8400-e29b-41d4-a716-446655440000",
"channel": "SALESMAN",
"result": "success",
"comment": "Order placed successfully",
},
)
result = response.json()Respuesta 201 Created
El endpoint interno retorna directamente la entidad enriquecida del resultado de actividad. El subconjunto representativo:
{
"id": "770e8400-e29b-41d4-a716-446655440000",
"source": "RETEN_ACTIVITY",
"origin": "PLATFORM",
"activityId": "ee0e8400-e29b-41d4-a716-446655440000",
"commerceId": "c1d2e3f4-a5b6-7890-cdef-1234567890ab",
"resultStatus": "COMPLETED",
"occurredAt": "2026-04-11T10:30:00.000Z",
"createdAt": "2026-04-11T10:30:05.000Z",
"updatedAt": "2026-04-11T10:30:05.000Z",
"taskDetails": {
"comment": "Order placed successfully",
"futureScheduledAt": null,
"result": {
"code": "success",
"label": "Éxito"
}
}
}Notas
- Si
activity_idcoincide con una actividad existente, elsourceesRETEN_ACTIVITY; si se omite, elsourceesSTANDALONE. - El estado de la actividad asociada al resultado pasa a completado (independiente si el resultado es positivo o negativo por ejemplo "no hubo venta" o "programar para otro día).