Integración Tareas
Enviar Resultado
Registra el resultado de una gestión de tipo tarea.
POST /api/integration/activity-results/tasks
Envía el resultado de una gestión de tipo tarea. El resultado se asocia a la actividad correspondiente y actualiza su estado en Reten.
Autenticación: Requerida — permiso SUBMIT_ACTIVITY_RESULT
Headers requeridos
| Header | Valor |
|---|---|
x-api-key | YOUR_API_KEY |
Content-Type | application/json |
Cuerpo de la solicitud
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
activity_id | string (UUID) | No* | ID de la actividad en Reten |
provider_activity_id | string | No* | ID de la actividad en el sistema externo (para correlación) |
commerce_external_id | string | Sí | ID externo del comercio |
occurred_at | string (ISO 8601) | Sí | Fecha y hora en que se realizó la gestión |
status | string | Sí | Estado del resultado: EFFECTIVE, NOT_EFFECTIVE, o PENDING |
external_status | string | No | Estado personalizado del sistema externo |
hard_override | boolean | No | Forzar sobreescritura de un resultado existente |
raw_payload | object | No | Datos adicionales del sistema externo (almacenados sin procesar) |
task_result | object | Sí | Detalle del resultado de la tarea (ver tabla abajo) |
Se debe enviar al menos uno de activity_id o provider_activity_id para identificar la actividad. Si se envían ambos, activity_id tiene prioridad.
Campos de task_result
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
result | string | Sí | Código del tipo de resultado (obtenido de /integration/task-result-type-configs) |
comment | string | No | Comentario del operador sobre la gestión |
contact_type | string | No | Dirección del contacto: INBOUND o OUTBOUND |
operator_external_id | string | No | ID externo del operador que realizó la gestión |
future_scheduled_at | string (ISO 8601) | Condicional | Fecha de reprogramación. Requerido si el tipo de resultado tiene requiresFutureScheduledAt: true |
payload | object | No | Datos adicionales del resultado |
Ejemplo
curl -X POST BASE_URL/api/integration/activity-results/tasks \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"activity_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"commerce_external_id": "COM-001",
"occurred_at": "2026-04-11T10:30:00.000Z",
"status": "EFFECTIVE",
"task_result": {
"result": "SALE_COMPLETED",
"comment": "Cliente aceptó oferta de renovación",
"operator_external_id": "OP-042",
"contact_type": "OUTBOUND"
}
}'const response = await fetch(
`${BASE_URL}/api/integration/activity-results/tasks`,
{
method: "POST",
headers: {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
activity_id: "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
commerce_external_id: "COM-001",
occurred_at: "2026-04-11T10:30:00.000Z",
status: "EFFECTIVE",
task_result: {
result: "SALE_COMPLETED",
comment: "Cliente aceptó oferta de renovación",
operator_external_id: "OP-042",
contact_type: "OUTBOUND",
},
}),
}
);
const data = await response.json();import requests
response = requests.post(
f"{BASE_URL}/api/integration/activity-results/tasks",
headers={
"x-api-key": "YOUR_API_KEY",
},
json={
"activity_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"commerce_external_id": "COM-001",
"occurred_at": "2026-04-11T10:30:00.000Z",
"status": "EFFECTIVE",
"task_result": {
"result": "SALE_COMPLETED",
"comment": "Cliente aceptó oferta de renovación",
"operator_external_id": "OP-042",
"contact_type": "OUTBOUND",
},
},
)
data = response.json()Respuesta 201 Created
{
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"activityId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"resultStatus": "EFFECTIVE",
"source": "INTEGRATION",
"origin": "API",
"occurredAt": "2026-04-11T10:30:00.000Z",
"createdAt": "2026-04-11T10:30:05.000Z",
"resultDetails": {
"type": "TASK",
"result": {
"code": "SALE_COMPLETED",
"label": "Venta completada",
"isPositive": true
},
"comment": "Cliente aceptó oferta de renovación",
"externalOperatorId": "OP-042",
"operator": {
"externalId": "OP-042",
"name": "Carlos Pérez"
},
"requiresFutureScheduledAt": false
}
}Reglas de validación
- El
commerce_external_iddebe existir en el tenant - El código de
resultdebe ser un tipo de resultado válido (consulta Listar Configuraciones) - Si el tipo de resultado tiene
requiresFutureScheduledAt: true, el campofuture_scheduled_ates obligatorio y debe ser una fecha futura - Si la actividad ya tiene un resultado, la solicitud retorna
409 Conflict(a menos quehard_override: true)
Errores
| Status | Descripción |
|---|---|
400 | Error de validación — campos faltantes, tipo de resultado inválido, o future_scheduled_at requerido |
401 | Clave de API faltante o inválida |
403 | La clave no tiene el permiso SUBMIT_ACTIVITY_RESULT |
404 | Actividad o comercio no encontrado en el tenant |
409 | La actividad ya tiene un resultado registrado |