WSGetServicios
Consulta de tareas (servicios) con filtros. Reproduce byte a byte el contrato GeneXus wsgetservicios de DespachoCloudV2 sirviéndolo desde las tablas modernas de GeoTareas.
Obtener servicios
/apidev/legacy/WSGetServiciosTodos los servicios legacy son POST a /apidev/legacy/<WSName> y no usan headers Authorization, X-API-Key ni tenant. La autenticación viaja en el cuerpo como objeto WSAutorizacion, donde Guid es la API key de la compañía. El servicio siempre responde HTTP 200: cualquier error viaja en el campo WSSDTDatosServicios.Error del envelope, nunca como código 4xx/5xx.
Este WS es un puente: valida únicamente Guid (→ ciaid) y la URL de origen (no valida usuario/contraseña). La respuesta del backend pasa por un saneo null → "", por lo que en este payload nunca aparece null — los valores vacíos son "", 0 o false.
Cuerpo de la solicitud
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
WSAutorizacion | object | Sí | Credenciales legacy { Guid, Usuario, Password } |
WSAutorizacion.Guid | string | Sí | API key de la compañía (resuelve ciaid) |
WSAutorizacion.Usuario | string | Sí | Usuario |
WSAutorizacion.Password | string | Sí | Contraseña (no validada en este WS puente) |
WSSDTFiltroServicio | object | Sí | SDT de filtros; todos sus campos son opcionales |
WSSDTFiltroServicio (campos)
Todos opcionales. Los campos no enviados se asumen "" / 0 / false. Las claves respetan el casing exacto de GeneXus (atención a ciaid, usuid, soloenproceso en minúsculas y SerFchLLamadaFin con doble L).
| Campo | Tipo | Notas |
|---|---|---|
Id | string (int18) | Id de servicio |
SuperiorId | string (int18) | |
NroServicio | string (int10) | Número de servicio |
NroAsistencia | string (int10) | Número de asistencia |
IdExterno | string | Id externo |
Estado | string | Estado |
FechaLlamadaInicial | string | Fecha libre (texto) |
FechaLlamadaFinal | string | Fecha libre (texto) |
SerFchLlamadaIni | string (datetime) | REST datetime YYYY-MM-DDTHH:MM:SS |
SerFchLLamadaFin | string (datetime) | Casing: doble L LLamada |
Procedencia | string | |
Prestador | string | |
Movil | string | |
Operador | string | |
Telefonista | string | |
Prestacion | string | |
Causa | string | |
SubCausa | string | |
Motivo | string | |
Pais | string | |
Departamento | string | |
Ciudad | string | |
Zona | string | |
ColTarea | string | Lista de ids estilo coma (string crudo) |
ColId | string | |
ColExterno | string | |
NroTracking | string | |
FechaFinalizadoInicial | string | |
FechaFinalizadoFinal | string | |
SerFchFinIni | string (datetime) | |
SerFchFinFin | string (datetime) | |
FechaProgramadoInicial | string | |
FechaProgramadoFinal | string | |
SerProgramadoIni | string (datetime) | |
SerProgramadoFin | string (datetime) | |
ciaid | string (int18) | Clave en minúsculas |
usuid | string (int18) | Clave en minúsculas |
SerPaiId | string (int18) | |
SerPaiDepLin | string (int10) | |
SerPaiDepCiuLin | string (int10) | |
SerPaiDepCiuZonLin | string (int10) | |
SerPrestaId | string (int18) | |
SerCauId | string (int18) | |
SerCauSubCauLin | string (int10) | |
SerPreId | string (int18) | |
SerProId | string (int18) | |
SerEst | string (int18) | |
SerMovVehId | string (int18) | |
SerOpeUsuId | string (int18) | |
SerTelUsuId | string (int18) | |
SerMotId | string (int18) | |
soloenproceso | boolean | Clave en minúsculas |
OrigenCerca | number (short) |
Respuesta
El objeto raíz es WSSDTDatosServicios: contiene el envelope de error (Error) y el arreglo de datos (SDTDatosServicios).
| Campo | Tipo | Notas |
|---|---|---|
WSSDTDatosServicios.Error | string | Envelope de error. "" en éxito; "GUID Inválido" / "URL Inválida" en fallo de auth; o el mensaje del backend |
WSSDTDatosServicios.SDTDatosServicios | array<object> | Un elemento por servicio |
SDTDatosServicios[] (ítem)
Claves en orden de declaración. Atención a TiempoLLegada (doble L) y a etiqueta/valor (minúsculas) dentro de CamposDinamicos.
| Campo | Tipo | Notas |
|---|---|---|
Id | string (int18) | Id de servicio |
IdExterno | string | |
NroServicio | string (int10) | |
NroAsistencia | string (int10) | |
Estado | string | |
Cliente | string | |
Cuenta | string | |
CuentaCodigoExterno | string | |
CuentaDocumento | string | |
Contacto | string | |
Telefono | string | |
Celular | string | |
Detalle | string | |
Procedencia | string | |
Producto | string | |
Prestacion | string | |
Motivo | string | |
Origen | string | |
OrigenCausa | string | |
OrigenSubCausa | string | |
OrigenPais | string | |
OrigenDepartamento | string | |
OrigenCiudad | string | |
OrigenZona | string | |
Destino | string | |
DestinoPais | string | |
DestinoDepartamento | string | |
DestinoCiudad | string | |
DestinoZona | string | |
Programado | string (datetime) | |
ProgramadoHasta | string (datetime) | |
Computa | boolean | |
Movil | string | |
Personal | string | |
PersonalCodigoExterno | string | |
MovilReservado | string | |
ConductorReservado | string | |
PrestadorReservado | string | |
UsuarioReservado | string | |
Prestador | string | |
OrigenLatitud | string (dec18,14) | |
OrigenLongitud | string (dec18,14) | |
DestinoLatitud | string (dec18,14) | |
DestinoLongitud | string (dec18,14) | |
FechaLlamada | string (datetime) | |
FechaCorta | string (datetime) | |
FechaAsignacion | string (datetime) | |
FechaTomado | string (datetime) | |
FechaLlegada | string (datetime) | |
FechaTerminado | string (datetime) | |
MedioComunicacion | string | |
TiempoLLegada | string | Clave con doble L TiempoLLegada |
TiempoTrabajo | string | |
CodigoFin | string | |
NroTracking | string | |
Marca | string | |
Modelo | string | |
Matricula | string | |
Anio | number (short) | |
Telefonista | string | |
Operador | string | |
OrigenCerca | array<string> | Lista de cercas |
DestinoCerca | array<string> | Lista de cercas |
Pausas | array<object> | Ver abajo |
CamposDinamicos | array<object> | Ver abajo |
Eventos | array<object> | Ver abajo |
Formulario | array<object> | Ver abajo |
Archivos | array<object> | Ver abajo |
Pausas[]
| Campo | Tipo |
|---|---|
FechaInicio | string (datetime) |
FechaFin | string (datetime) |
Usuario | string |
Conductor | string |
Vehiculo | string |
Motivo | string |
Notas | string |
CamposDinamicos[] (claves en minúsculas)
| Campo | Tipo |
|---|---|
etiqueta | string |
valor | string |
Eventos[]
| Campo | Tipo |
|---|---|
Id | string (int) |
EstadoFechaHora | string (datetime) |
Estado | string |
EstadoEvento | string |
EstadoLatitud | string (dec) |
EstadoLongitud | string (dec) |
EstadoUsuario | string |
EstadoMovil | string |
EstadoPersonal | string |
EstadoPersonalCodExt | string |
EstadoPrestador | string |
EstadoOdometro | string / number |
EstadoAddress | string |
EventoParametros | array<object> |
EventoParametros[]: Parametro (string), Valor (string), Formulario (array<object>).
EventoParametros.Formulario[]: Nombre (string), Valor (string).
Formulario[]
| Campo | Tipo |
|---|---|
Formulario | string |
Conductor | string |
Movil | string |
FormularioFecha | string (datetime) |
FormTab | array<object> |
Archivos | array<object> |
Formulario.FormTab[]: Seccion (string), SeccionOrden (string / number), FormularioTabParametro (array<object>).
Formulario.FormTab.FormularioTabParametro[]: Parametro (string), ParametroOrden (string / number), ParametroValor (string).
Formulario.Archivos[]: Nombre (string), Tipo (string), Size (string / number), Fecha (string (datetime)), Notas (string).
Archivos[] (nivel superior)
| Campo | Tipo |
|---|---|
Nombre | string |
Tipo | string |
Size | string / number |
Fecha | string (datetime) |
Notas | string |
Ejemplos de código
- cURL
- JavaScript
- Python
curl -s -X POST "https://$TENANT/apidev/legacy/WSGetServicios" \
-H "Content-Type: application/json" \
-d '{
"WSAutorizacion": {
"Guid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"Usuario": "usuario@empresa.com",
"Password": "contrasena"
},
"WSSDTFiltroServicio": {
"Estado": "FIN",
"SerFchLlamadaIni": "2026-04-01T00:00:00",
"SerFchLLamadaFin": "2026-04-03T23:59:59",
"soloenproceso": false
}
}'
const res = await fetch(`https://${TENANT}/apidev/legacy/WSGetServicios`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
WSAutorizacion: {
Guid: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
Usuario: 'usuario@empresa.com',
Password: 'contrasena',
},
WSSDTFiltroServicio: {
Estado: 'FIN',
SerFchLlamadaIni: '2026-04-01T00:00:00',
SerFchLLamadaFin: '2026-04-03T23:59:59',
soloenproceso: false,
},
}),
});
// Siempre HTTP 200: revisar el envelope de error
const { WSSDTDatosServicios } = await res.json();
if (WSSDTDatosServicios.Error) {
throw new Error(WSSDTDatosServicios.Error);
}
const servicios = WSSDTDatosServicios.SDTDatosServicios;
import requests
response = requests.post(
f"https://{TENANT}/apidev/legacy/WSGetServicios",
json={
"WSAutorizacion": {
"Guid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"Usuario": "usuario@empresa.com",
"Password": "contrasena",
},
"WSSDTFiltroServicio": {
"Estado": "FIN",
"SerFchLlamadaIni": "2026-04-01T00:00:00",
"SerFchLLamadaFin": "2026-04-03T23:59:59",
"soloenproceso": False,
},
},
)
# Siempre HTTP 200: el error viaja en el envelope
data = response.json()["WSSDTDatosServicios"]
if data["Error"]:
raise RuntimeError(data["Error"])
servicios = data["SDTDatosServicios"]
Ejemplo de respuesta
{
"WSSDTDatosServicios": {
"Error": "",
"SDTDatosServicios": [
{
"Id": "103878",
"IdExterno": "EXT-001",
"NroServicio": "103878",
"NroAsistencia": "103490",
"Estado": "FINALIZADO",
"Cliente": "Regional Distributors",
"Cuenta": "Juan Perez",
"CuentaCodigoExterno": "CTA-001",
"CuentaDocumento": "12345678",
"Contacto": "Juan Perez",
"Telefono": "+59821234567",
"Celular": "+59899123456",
"Detalle": "Asistencia mecanica",
"Procedencia": "Seguros",
"Producto": "Asistencia Vehicular",
"Prestacion": "Remolque",
"Motivo": "",
"Origen": "Av. 18 de Julio 1234",
"OrigenCausa": "Averia",
"OrigenSubCausa": "Motor",
"OrigenPais": "Uruguay",
"OrigenDepartamento": "Montevideo",
"OrigenCiudad": "Montevideo",
"OrigenZona": "Centro",
"Destino": "Gral. Rivera 2200",
"DestinoPais": "Uruguay",
"DestinoDepartamento": "Montevideo",
"DestinoCiudad": "Montevideo",
"DestinoZona": "Pocitos",
"Programado": "",
"ProgramadoHasta": "",
"Computa": true,
"Movil": "ABC-1234",
"Personal": "Carlos Gomez",
"PersonalCodigoExterno": "P-001",
"MovilReservado": "",
"ConductorReservado": "",
"PrestadorReservado": "",
"UsuarioReservado": "",
"Prestador": "Taller Sanca",
"OrigenLatitud": "-34.90110000000000",
"OrigenLongitud": "-56.16450000000000",
"DestinoLatitud": "-34.88330000000000",
"DestinoLongitud": "-56.16700000000000",
"FechaLlamada": "2026-04-03T10:30:00",
"FechaCorta": "2026-04-03T10:30:00",
"FechaAsignacion": "2026-04-03T10:35:00",
"FechaTomado": "2026-04-03T10:40:00",
"FechaLlegada": "2026-04-03T11:05:00",
"FechaTerminado": "2026-04-03T11:50:00",
"MedioComunicacion": "Telefono",
"TiempoLLegada": "25",
"TiempoTrabajo": "45",
"CodigoFin": "OK",
"NroTracking": "TRK-103878",
"Marca": "Toyota",
"Modelo": "Hilux",
"Matricula": "ABC-1234",
"Anio": 2021,
"Telefonista": "Maria Lopez",
"Operador": "Pedro Diaz",
"OrigenCerca": [],
"DestinoCerca": [],
"Pausas": [],
"CamposDinamicos": [
{ "etiqueta": "Poliza", "valor": "POL-9981" }
],
"Eventos": [],
"Formulario": [],
"Archivos": []
}
]
}
}
Errores
El servicio responde siempre con HTTP 200. El error viaja como string en el campo WSSDTDatosServicios.Error del envelope ("" cuando no hay error).
Valor de Error | Causa |
|---|---|
GUID Inválido | El Guid no resuelve a una compañía (ciaid == 0). |
URL Inválida | La URL de origen no está habilitada (no aplica para admincloud@logicsat.com). |
| (mensaje del backend) | Cualquier otro error devuelto por el backend al procesar el filtro. |
No esperes códigos 4xx/5xx para errores de negocio: el código HTTP es 200 y el detalle está en Error. Recuerda además que el payload está saneado null → "", por lo que los campos vacíos llegan como "", 0 o false, nunca como null.