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. Los resultados pueden vincularse a actividades existentes de Reten o crearse como entradas independientes.
Auth: Requerida — permiso CREATE_ACTIVITY
Cuerpo de la Solicitud
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
activityId | UUID | No | ID de actividad en Reten (uno de activityId o providerActivityId) |
providerActivityId | string | No | ID de actividad del proveedor externo |
commerceExternalId | string | Sí | ID externo del comercio |
status | string | Sí | PENDING, COMPLETED, NOT_EXECUTED, CANCELED, TRANSFERRED |
resultTypeCode | string | No | Código del tipo de resultado de tarea (ej., success, not_home) |
comment | string | No | Comentario de texto libre |
contactDirection | string | No | INBOUND o OUTBOUND |
operatorExternalId | string | No | ID externo del operador |
occurredAt | ISO 8601 | Sí | Cuándo ocurrió el resultado |
rawPayload | object | No | Payload crudo del proveedor (almacenado tal cual) |
hardOverride | boolean | No | Omitir validación de transición de estado |
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 '{
"providerActivityId": "ext-123",
"commerceExternalId": "store-001",
"status": "COMPLETED",
"resultTypeCode": "success",
"comment": "Order placed successfully",
"contactDirection": "OUTBOUND",
"occurredAt": "2025-01-16T14:30:00.000Z"
}'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({
providerActivityId: "ext-123",
commerceExternalId: "store-001",
status: "COMPLETED",
resultTypeCode: "success",
comment: "Order placed successfully",
contactDirection: "OUTBOUND",
occurredAt: "2025-01-16T14:30:00.000Z",
}),
});
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={
"providerActivityId": "ext-123",
"commerceExternalId": "store-001",
"status": "COMPLETED",
"resultTypeCode": "success",
"comment": "Order placed successfully",
"contactDirection": "OUTBOUND",
"occurredAt": "2025-01-16T14:30:00.000Z",
},
)
result = response.json()Respuesta 201 Created
{
"id": "770e8400-e29b-41d4-a716-446655440000",
"activityId": "ee0e8400-e29b-41d4-a716-446655440000",
"source": "RETEN_ACTIVITY",
"status": "COMPLETED",
"taskDetails": {
"result": {
"code": "success",
"label": "Exito"
},
"comment": "Order placed successfully",
"contactDirection": "OUTBOUND"
}
}Notas
- Si
activityIdoproviderActivityIdcoincide con una actividad existente, el origen esRETEN_ACTIVITY - Si no se encuentra ninguna actividad, el origen es
STANDALONE - Para resultados independientes, se crea automáticamente un comercio placeholder si es necesario
- Las actualizaciones aplican una guardia temporal (
occurredAtdebe ser posterior alupdatedAtdel resultado existente) - El estado de la actividad padre se sincroniza según el estado del resultado