Apariencia
Ejemplos con cURL
Esta sección proporciona ejemplos completos de uso de la API TSALVA utilizando cURL. Estos ejemplos pueden ser usados directamente desde la línea de comandos o adaptados para scripts automatizados.
📍 Importante: En todos los ejemplos de este documento, reemplaza
[URL_API]con la URL base proporcionada por el área de TI de RobPixels. Para obtenerla, contacta: gerencia@robpixels.com o soporte@robpixels.com
Variables de Entorno
Configura tus credenciales como variables de entorno:
bash
# Exportar credenciales
export TSALVA_USERNAME="tu_usuario"
export TSALVA_PASSWORD="tu_password"
export TSALVA_BASE_URL="[URL_API]"
# Verificar configuración
echo "Usuario: $TSALVA_USERNAME"
echo "URL Base: $TSALVA_BASE_URL"Autenticación Básica
bash
# Opción 1: Usar --user (recomendado)
curl --user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json" \
"$TSALVA_BASE_URL/api/v2/types"
# Opción 2: Header Authorization manual
AUTH_HEADER=$(echo -n "$TSALVA_USERNAME:$TSALVA_PASSWORD" | base64)
curl -H "Authorization: Basic $AUTH_HEADER" \
-H "Content-Type: application/json" \
"$TSALVA_BASE_URL/api/v2/types"Consultas (GET)
Obtener Tipos de Servicio
bash
curl -X GET "$TSALVA_BASE_URL/api/v2/types" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json"Respuesta esperada:
json
[
{
"id": 1,
"type": "Conductor elegido",
"required_origin": true,
"required_destination": false
},
{
"id": 2,
"type": "Grúa Liviana",
"required_origin": true,
"required_destination": true
}
]Obtener Opciones de Historial
bash
# Todas las opciones
curl -X GET "$TSALVA_BASE_URL/api/v2/queries/history-options" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json"
# Solo estados de tareas
curl -X GET "$TSALVA_BASE_URL/api/v2/queries/history-options?q=task_status" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json"Crear Oferta de Servicio
Ejemplo Básico
bash
curl -X POST "$TSALVA_BASE_URL/api/v2/oferta" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"ciudad": "Medellín",
"departamento": "Antioquia",
"latitudOrigen": 6.2442,
"longitudOrigen": -75.5812,
"direccionOrigen": "Carrera 25A #1A Sur-45",
"tipoServicio": "1",
"descripcionServicio": "Grúa liviana para automóvil averiado"
}'Ejemplo Completo con Destino y Callback
bash
curl -X POST "$TSALVA_BASE_URL/api/v2/oferta" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"ciudad": "Medellín",
"departamento": "Antioquia",
"latitudOrigen": 6.2442,
"longitudOrigen": -75.5812,
"puntoReferenciaOrigen": "Frente al centro comercial El Tesoro",
"direccionOrigen": "Carrera 25A #1A Sur-45",
"latitudDestino": 6.2518,
"longitudDestino": -75.5636,
"puntoReferenciaDestino": "Hospital Pablo Tobón Uribe",
"direccionDestino": "Calle 78B #69-240",
"fechaCita": "2025-07-03",
"horaCita": "14:30",
"observaciones": "Vehículo con falla mecánica en el motor",
"descripcionServicio": "Grúa liviana para traslado de automóvil averiado",
"tipoServicio": "2",
"callbackUrl": "https://tu-servidor.com/api/webhook/aceptacion"
}'Con Archivo JSON
bash
# Crear archivo oferta.json
cat > oferta.json << 'EOF'
{
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"ciudad": "Bogotá",
"departamento": "Cundinamarca",
"latitudOrigen": 4.6097,
"longitudOrigen": -74.0817,
"direccionOrigen": "Calle 26 #57-83",
"tipoServicio": "1",
"descripcionServicio": "Conductor para vehículo del cliente",
"callbackUrl": "https://tu-servidor.com/callback"
}
EOF
# Enviar oferta
curl -X POST "$TSALVA_BASE_URL/api/v2/oferta" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json" \
-d @oferta.jsonAsignar Detalles del Cliente
bash
curl -X POST "$TSALVA_BASE_URL/api/v2/asignacion" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"codigoServicio": "TSV202507030001",
"riesgo": "POL-2025-001234",
"primerNombre": "Carlos",
"segundoNombre": "Andrés",
"primerApellido": "Rodríguez",
"segundoApellido": "García",
"telefonoSolicitante": "+57 300-123-4567",
"telefonoSolicitante2": "+57 301-234-5678",
"claseVehiculo": "Automóvil",
"marcaVehiculo": "Toyota",
"tipoTransmisionVehiculo": "Automática",
"observaciones": "Cliente prefiere contacto vía WhatsApp"
}'Asignación Directa
Ejemplo Mínimo
bash
curl -X POST "$TSALVA_BASE_URL/api/v2/asignacion-directa" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"uuid": "123e4567-e89b-12d3-a456-426614174001",
"dniPrestador": "900123456",
"tipoServicio": "1",
"descripcionServicio": "Grúa liviana urgente",
"latitudOrigen": "6.2442",
"longitudOrigen": "-75.5812",
"direccionOrigen": "Autopista Norte Km 15",
"ciudad": "Medellín",
"departamento": "Antioquia"
}'Ejemplo Completo
bash
curl -X POST "$TSALVA_BASE_URL/api/v2/asignacion-directa" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"uuid": "123e4567-e89b-12d3-a456-426614174001",
"dniPrestador": "900123456",
"dniGenerador": "98765432",
"tipoServicio": "2",
"descripcionServicio": "Grúa liviana para vehículo averiado",
"latitudOrigen": "6.2442",
"longitudOrigen": "-75.5812",
"puntoReferenciaOrigen": "Autopista Norte Km 15, carril de emergencia",
"direccionOrigen": "Autopista Norte Km 15",
"latitudDestino": "6.2518",
"longitudDestino": "-75.5636",
"puntoReferenciaDestino": "Taller Los Ángeles",
"direccionDestino": "Calle 78B #69-240",
"ciudad": "Medellín",
"departamento": "Antioquia",
"fechaCita": "2025-07-03",
"horaCita": "16:30",
"observaciones": "Vehículo en carril de emergencia",
"codigoServicio": "GOT00356",
"riesgo": "POL-2025-001234",
"primerNombre": "Carlos",
"primerApellido": "Rodríguez",
"telefonoSolicitante": "+57 300-123-4567",
"claseVehiculo": "Automóvil",
"marcaVehiculo": "Toyota"
}'Cancelaciones
Cancelar Servicio Simple
bash
curl -X POST "$TSALVA_BASE_URL/api/v2/cancelacion" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"idServicio": "TSV202507030001",
"razon": "Cliente solucionó el problema por cuenta propia"
}'Cancelar con Código de Solicitud
bash
curl -X POST "$TSALVA_BASE_URL/api/v2/cancelacion" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"idServicio": "TSV202507030001",
"razon": "Cambio de ubicación del cliente",
"codigoSolicitud": "MOV01"
}'Retirar Oferta
bash
curl -X POST "$TSALVA_BASE_URL/api/v2/no-asignacion" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"uuid": "123e4567-e89b-12d3-a456-426614174000"
}'Agregar Dirección Adicional
bash
curl -X POST "$TSALVA_BASE_URL/api/v2/add-address" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"latitudDireccion": "6.2500",
"longitudDireccion": "-75.5700",
"puntoReferenciaDireccion": "Estación de gasolina Texaco",
"direccion": "Carrera 65 #45-30",
"observaciones": "Parada adicional para combustible"
}'Consultas Históricas
Por Número de Autorización
bash
curl -X POST "$TSALVA_BASE_URL/api/v2/queries/history" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"line": "1",
"autNumber": "TSV12345678"
}'Por Rango de Fechas
bash
curl -X POST "$TSALVA_BASE_URL/api/v2/queries/history" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"line": "1",
"startDate": "2025-07-01 00:00",
"endDate": "2025-07-03 23:59"
}'Con Filtros Adicionales
bash
curl -X POST "$TSALVA_BASE_URL/api/v2/queries/history" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"line": "LINE-COL01",
"startDate": "2025-07-01 00:00",
"endDate": "2025-07-01 23:59",
"businessNit": ["901666", "556989"],
"serviceStatus": ["Completado", "En proceso"],
"serviceType": ["Grúa Liviana"]
}'Scripts de Automatización
Script de Flujo Completo
bash
#!/bin/bash
# Configuración
export TSALVA_USERNAME="tu_usuario"
export TSALVA_PASSWORD="tu_password"
export TSALVA_BASE_URL="[URL_API]"
UUID=$(uuidgen)
echo "Creando oferta con UUID: $UUID"
# 1. Crear oferta
echo "1. Creando oferta..."
OFERTA_RESPONSE=$(curl -s -X POST "$TSALVA_BASE_URL/api/v2/oferta" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"uuid": "'$UUID'",
"ciudad": "Medellín",
"departamento": "Antioquia",
"latitudOrigen": 6.2442,
"longitudOrigen": -75.5812,
"direccionOrigen": "Carrera 25A #1A Sur-45",
"tipoServicio": "1",
"descripcionServicio": "Grúa liviana para automóvil"
}')
echo "Respuesta oferta: $OFERTA_RESPONSE"
# Verificar éxito
if echo "$OFERTA_RESPONSE" | grep -q '"status":true'; then
echo "✅ Oferta creada exitosamente"
# 2. Esperar un momento (simular callback)
echo "2. Esperando aceptación..."
sleep 5
# 3. Asignar detalles
echo "3. Asignando detalles del cliente..."
ASIGNACION_RESPONSE=$(curl -s -X POST "$TSALVA_BASE_URL/api/v2/asignacion" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"uuid": "'$UUID'",
"codigoServicio": "TSV'$(date +%Y%m%d%H%M%S)'",
"riesgo": "POL-2025-001234",
"primerNombre": "Carlos",
"primerApellido": "Rodríguez",
"telefonoSolicitante": "+57 300-123-4567"
}')
echo "Respuesta asignación: $ASIGNACION_RESPONSE"
if echo "$ASIGNACION_RESPONSE" | grep -q '"status":true'; then
echo "✅ Servicio completamente configurado"
else
echo "❌ Error en asignación"
fi
else
echo "❌ Error creando oferta"
fiScript de Validación de Conectividad
bash
#!/bin/bash
echo "🔍 Validando conectividad con API TSALVA..."
# Test 1: Conectividad básica
echo "1. Probando conectividad básica..."
if curl -s --connect-timeout 10 "$TSALVA_BASE_URL" > /dev/null; then
echo "✅ Servidor accesible"
else
echo "❌ No se puede conectar al servidor"
exit 1
fi
# Test 2: Autenticación
echo "2. Probando autenticación..."
AUTH_RESPONSE=$(curl -s -w "%{http_code}" -o /dev/null \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
"$TSALVA_BASE_URL/api/v2/types")
if [ "$AUTH_RESPONSE" = "200" ]; then
echo "✅ Autenticación correcta"
elif [ "$AUTH_RESPONSE" = "401" ]; then
echo "❌ Credenciales inválidas"
exit 1
else
echo "⚠️ Respuesta inesperada: $AUTH_RESPONSE"
fi
# Test 3: Endpoint funcional
echo "3. Probando endpoint de tipos..."
TYPES_RESPONSE=$(curl -s --user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
"$TSALVA_BASE_URL/api/v2/types")
if echo "$TYPES_RESPONSE" | grep -q "type"; then
echo "✅ API funcionando correctamente"
echo "📋 Tipos disponibles:"
echo "$TYPES_RESPONSE" | jq -r '.[] | " - \(.id): \(.type)"' 2>/dev/null || echo "$TYPES_RESPONSE"
else
echo "❌ Respuesta de API inválida"
fi
echo "🎉 Validación completada"Manejo de Errores
Script con Manejo de Errores
bash
#!/bin/bash
# Función para manejar errores
handle_error() {
local response="$1"
local operation="$2"
if echo "$response" | grep -q '"status":false'; then
local error_msg=$(echo "$response" | jq -r '.msg' 2>/dev/null || echo "Error desconocido")
echo "❌ Error en $operation: $error_msg"
return 1
fi
echo "✅ $operation exitoso"
return 0
}
# Crear oferta con manejo de errores
create_offer() {
local uuid="$1"
local response=$(curl -s -X POST "$TSALVA_BASE_URL/api/v2/oferta" \
--user "$TSALVA_USERNAME:$TSALVA_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"uuid": "'$uuid'",
"ciudad": "Medellín",
"departamento": "Antioquia",
"latitudOrigen": 6.2442,
"longitudOrigen": -75.5812,
"direccionOrigen": "Carrera 25A #1A Sur-45",
"tipoServicio": "1",
"descripcionServicio": "Grúa liviana"
}')
if handle_error "$response" "creación de oferta"; then
echo "Oferta creada con UUID: $uuid"
return 0
else
return 1
fi
}
# Uso
UUID=$(uuidgen)
create_offer "$UUID"Consejo
Guarda estos comandos en archivos .sh y hazlos ejecutables con chmod +x archivo.sh para automatizar tus pruebas y operaciones frecuentes.
Importante
Nunca hardcodees credenciales en scripts. Usa siempre variables de entorno o archivos de configuración seguros.