Skip to content

Cancelar Servicio

Endpoint

POST /api/v2/cancelacion

Descripción

Permite cancelar un servicio que ya ha sido asignado a una central. La cancelación puede realizarse en cualquier estado del servicio antes de su finalización.

Casos de uso:

  • Cancelación por parte del cliente
  • Cancelación por circunstancias imprevistas
  • Cancelación por fuerza mayor

Autenticación

Authorization: Basic <credentials>

Parámetros de Entrada

Body (JSON)

CampoTipoRequeridoDescripción
idServiciostringIdentificador único del servicio a cancelar
razonstringNoMotivo o razón de la cancelación del servicio
codigoSolicitudstring❌*Código adicional para servicios con múltiples consecutivos

*Requerido únicamente para servicios con múltiples consecutivos (2 o más códigos de seguimiento)

Ejemplo de Request

json
{
  "idServicio": "TSV202507030001",
  "razon": "Cliente solucionó el problema por cuenta propia",
  "codigoSolicitud": "MOV01"
}

Ejemplo Básico (servicio simple)

json
{
  "idServicio": "TSV202507030001",
  "razon": "Cliente canceló el servicio"
}

Respuestas

Éxito (200 Correcto)

json
{
  "status": true,
  "msg": "Servicio cancelado exitosamente y notificación enviada a la central asignada"
}

Error de Validación (400 Solicitud Incorrecta)

json
{
  "status": false,
  "msg": "Servicio no encontrado o ya ha sido finalizado"
}

Errores comunes:

  • ID de servicio no existe
  • Servicio ya completado o cancelado
  • Código de solicitud requerido pero no proporcionado
  • Servicio no asignado a ninguna central

Error Interno (500 Error Interno del Servidor)

json
{
  "status": false,
  "msg": "Ha ocurrido un error interno del servidor, por favor intenta más tarde"
}

Estados que Permiten Cancelación

EstadoSe puede cancelarDescripción
AceptadoCentral aceptó pero técnico no asignado
Técnico asignadoTécnico asignado pero no en camino
En caminoTécnico en camino al sitio
En sitioTécnico llegó al lugar
En procesoNoServicio en ejecución
CompletadoNoServicio finalizado exitosamente
CanceladoNoYa cancelado anteriormente

Ejemplos de Código

cURL

bash
# Cancelación simple
curl -X POST "[URL_API]/api/v2/cancelacion" \
  --user "tu_usuario:tu_password" \
  -H "Content-Type: application/json" \
  -d '{
    "idServicio": "TSV202507030001",
    "razon": "Cliente canceló el servicio"
  }'

# Cancelación con código de solicitud
curl -X POST "[URL_API]/api/v2/cancelacion" \
  --user "tu_usuario:tu_password" \
  -H "Content-Type: application/json" \
  -d '{
    "idServicio": "TSV202507030001",
    "razon": "Cambio de ubicación del cliente",
    "codigoSolicitud": "MOV01"
  }'

JavaScript

javascript
const cancelarServicio = async (idServicio, razon, codigoSolicitud = null) => {
  const body = {
    idServicio,
    razon
  };
  
  if (codigoSolicitud) {
    body.codigoSolicitud = codigoSolicitud;
  }

  const response = await fetch('[URL_API]/api/v2/cancelacion', {
    method: 'POST',
    headers: {
      'Authorization': `Basic ${btoa('usuario:password')}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(body)
  });

  const result = await response.json();
  
  if (!result.status) {
    throw new Error(result.msg);
  }
  
  return result;
};

// Ejemplos de uso
try {
  // Cancelación simple
  await cancelarServicio(
    'TSV202507030001', 
    'Cliente solucionó el problema'
  );
  
  // Cancelación con código adicional
  await cancelarServicio(
    'TSV202507030001', 
    'Cambio de ubicación', 
    'MOV01'
  );
  
  console.log('Servicio cancelado exitosamente');
} catch (error) {
  console.error('Error al cancelar:', error.message);
}

Python

python
import requests
from requests.auth import HTTPBasicAuth

def cancelar_servicio(id_servicio, razon, codigo_solicitud=None):
    url = '[URL_API]/api/v2/cancelacion'
    
    data = {
        'idServicio': id_servicio,
        'razon': razon
    }
    
    if codigo_solicitud:
        data['codigoSolicitud'] = codigo_solicitud
    
    response = requests.post(
        url,
        auth=HTTPBasicAuth('usuario', 'password'),
        json=data
    )
    
    result = response.json()
    
    if not result['status']:
        raise Exception(result['msg'])
    
    return result

# Ejemplos de uso
try:
    # Cancelación simple
    resultado = cancelar_servicio(
        'TSV202507030001',
        'Cliente canceló el servicio'
    )
    
    print(f"Éxito: {resultado['msg']}")
    
except Exception as error:
    print(f"Error: {error}")

Servicios con Múltiples Consecutivos

Para servicios que tienen múltiples códigos de seguimiento asociados, es necesario especificar el codigoSolicitud:

¿Cuándo usar codigoSolicitud?

mermaid
flowchart TD
    A[¿Servicio tiene múltiples consecutivos?] --> B{¿2 o más códigos?}
    B -->|Sí| C[codigoSolicitud REQUERIDO]
    B -->|No| D[codigoSolicitud OPCIONAL]
    
    C --> E[Ejemplo: TSV001 + MOV01]
    D --> F[Ejemplo: Solo TSV001]

Ejemplo de servicio múltiple:

json
{
  "idServicio": "TSV202507030001",
  "codigoSolicitud": "MOV01",
  "razon": "Cancelación del movimiento específico MOV01"
}

Efectos de la Cancelación

Notificaciones Automáticas

  • ✅ La central asignada recibe notificación inmediata
  • ✅ El técnico es liberado para otros servicios
  • ✅ Se genera webhook de cambio de estado

Estado Final

  • El servicio queda marcado como Cancelado
  • No se puede reactivar una vez cancelado
  • Queda registro histórico de la cancelación

Razones Comunes de Cancelación

RazónDescripción
Cliente solucionó el problemaCliente resolvió por cuenta propia
Cambio de ubicaciónCliente se trasladó a otro lugar
Servicio ya no requeridoCliente ya no necesita el servicio
Fuerza mayorCircunstancias imprevistas
Error en la solicitudInformación incorrecta en la oferta

Importante

La cancelación es irreversible. Una vez cancelado un servicio, no se puede reactivar. Si necesitas el servicio nuevamente, debes crear una nueva oferta.

Buena Práctica

Siempre proporciona una razón clara para la cancelación. Esto ayuda a las centrales a entender el motivo y mejorar sus procesos.

Tsalva API - Documentación desarrollada por RobPixels