Integraciones Externas

Integración con Infor WMS - Básica
API para recibir solicitudes de impresión desde Infor WMS (usa cliente por defecto)

Endpoint

POST /api/external/infor/create-label

Headers requeridos

x-api-key: tu-api-key-aqui
Content-Type: application/json

Formato de solicitud

{
  "FilePath": "https://example.com/labels/PALLET_LBL.nlbl",
  "Printer": "PM45",
  "Quantity": 1,
  "Variables": [
    {
      "CONSIGNEEADDLINE1": "39-40 GRAND TRUNK RD. ",
      "CONSIGNEEADDLINE3": "JALANDHARPB144001",
      "CONSIGNEEDESCR": "JASWANT MOTORS",
      "CONSIGNEEKEY": "10000",
      "DESCR": "Item 01",
      "DROPID": "0000000019AS",
      "QTY": "3.0",
      "SKU": "ITEM001",
      "SUPPLIER": "500519",
      "SUPPLIERDESCR": "AA AUTOMOTIVE",
      "caseid": "0000000019AS"
    }
  ],
  "_LabelType_": "Type:HERO_PALLET_LBL DROPID=0000000019AS"
}

Respuesta exitosa

{
  "message": "Se han creado 1 trabajos de impresión",
  "jobs": [
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "label_id": "123e4567-e89b-12d3-a456-426614174001",
      "printer_id": "123e4567-e89b-12d3-a456-426614174002",
      "status": "pending"
    }
  ]
}
Integración con Infor WMS - Procesamiento en Lote
API para procesar múltiples etiquetas en una sola solicitud (batch)

Endpoint

POST /api/external/infor/create-label-batch

Headers requeridos

x-api-key: tu-api-key-aqui
Content-Type: application/json

Formato de solicitud

{
  "labels": [
    {
      "FilePath": "https://example.com/labels/PALLET_LBL.nlbl",
      "Printer": "PM45",
      "Quantity": 2,
      "Variables": [
        {
          "CONSIGNEEADDLINE1": "39-40 GRAND TRUNK RD. ",
          "CONSIGNEEADDLINE3": "JALANDHARPB144001",
          "CONSIGNEEDESCR": "JASWANT MOTORS",
          "CONSIGNEEKEY": "10000",
          "DESCR": "Item 01",
          "DROPID": "0000000019AS",
          "QTY": "3.0",
          "SKU": "ITEM001",
          "SUPPLIER": "500519",
          "SUPPLIERDESCR": "AA AUTOMOTIVE",
          "caseid": "0000000019AS"
        }
      ],
      "_LabelType_": "Type:HERO_PALLET_LBL DROPID=0000000019AS"
    },
    {
      "FilePath": "https://example.com/labels/PRODUCT_LBL.nlbl",
      "Printer": "ZT230",
      "Quantity": 1,
      "Variables": [
        {
          "PRODUCT_NAME": "Product XYZ",
          "BARCODE": "123456789",
          "PRICE": "99.99"
        }
      ],
      "_LabelType_": "Type:PRODUCT_LBL"
    }
  ]
}

Respuesta exitosa

{
  "message": "Batch procesado: 2 exitosos, 0 fallidos",
  "summary": {
    "total_labels": 2,
    "successful": 2,
    "failed": 0,
    "total_jobs_created": 3
  },
  "results": [
    {
      "batch_index": 0,
      "jobs_created": 2,
      "label_used": {
        "id": "123e4567-e89b-12d3-a456-426614174001",
        "name": "Etiqueta Pallet"
      },
      "printer_used": {
        "id": "123e4567-e89b-12d3-a456-426614174002",
        "name": "PM45"
      },
      "job_ids": ["job-1", "job-2"]
    },
    {
      "batch_index": 1,
      "jobs_created": 1,
      "label_used": {
        "id": "123e4567-e89b-12d3-a456-426614174003",
        "name": "Etiqueta Producto"
      },
      "printer_used": {
        "id": "123e4567-e89b-12d3-a456-426614174004",
        "name": "ZT230"
      },
      "job_ids": ["job-3"]
    }
  ]
}

Respuesta con errores parciales

{
  "message": "Batch procesado: 1 exitosos, 1 fallidos",
  "summary": {
    "total_labels": 2,
    "successful": 1,
    "failed": 1,
    "total_jobs_created": 2
  },
  "results": [
    {
      "batch_index": 0,
      "jobs_created": 2,
      "label_used": { "id": "...", "name": "..." },
      "printer_used": { "id": "...", "name": "..." },
      "job_ids": ["job-1", "job-2"]
    }
  ],
  "errors": [
    {
      "index": 1,
      "error": "No se encontró una plantilla compatible",
      "labelType": "UNKNOWN_TYPE"
    }
  ]
}

Ventajas del procesamiento en lote

  • Eficiencia: Procesa múltiples etiquetas en una sola solicitud HTTP
  • Tolerancia a fallos: Si una etiqueta falla, las demás continúan procesándose
  • Reporte detallado: Respuesta incluye resumen completo y errores específicos
  • Trazabilidad: Cada trabajo mantiene referencia al índice del batch
  • Reducción de latencia: Ideal para procesar grandes volúmenes de etiquetas
Integración con Infor WMS - Con Cliente Específico
API para recibir solicitudes de impresión especificando un cliente específico

Endpoint

POST /api/external/infor/create-label-client

Headers requeridos

x-api-key: tu-api-key-aqui
Content-Type: application/json

Formato de solicitud

{
  "ClientId": "123e4567-e89b-12d3-a456-426614174000",
  "FilePath": "shipping-label",
  "Variables": [
    {
      "Name": "CUSTOMER_NAME",
      "Value": "Juan Pérez"
    },
    {
      "Name": "ORDER_NUMBER", 
      "Value": "ORD-2024-001"
    },
    {
      "Name": "SHIPPING_ADDRESS",
      "Value": "Calle Principal 123, Ciudad"
    }
  ],
  "PrinterName": "Zebra-Warehouse-01",
  "Copies": 2
}

Respuesta exitosa

{
  "success": true,
  "message": "Trabajo de impresión creado exitosamente",
  "data": {
    "job_id": "456e7890-e29b-41d4-a716-446655440001",
    "label_id": "789e0123-e29b-41d4-a716-446655440002",
    "client_id": "123e4567-e89b-12d3-a456-426614174000",
    "client_name": "Cliente Ejemplo S.A.",
    "printer_id": "abc12345-e29b-41d4-a716-446655440003",
    "printer_name": "Zebra-Warehouse-01",
    "copies": 2,
    "status": "pending",
    "external_reference": "infor_20241204_001",
    "created_at": "2024-12-04T15:30:00Z"
  }
}

Ventajas del endpoint con ClientId

  • Búsqueda específica: Busca plantillas y recursos específicos del cliente primero
  • Impresoras del cliente: Prioriza impresoras asociadas al cliente especificado
  • Mejor trazabilidad: Incluye información del cliente en logs y respuestas
  • Validación de cliente: Verifica que el cliente existe y está activo
  • Auditoría mejorada: Facilita el seguimiento por cliente específico
Configuración Común
Requisitos para ambos endpoints de Infor WMS

Configuración requerida

  • Crear plantillas de etiquetas en el sistema con el campo label_type configurado para coincidir con los tipos de etiquetas de Infor
  • Configurar impresoras en el sistema con nombres que coincidan con los nombres de impresoras en Infor
  • Asegurarse de que las variables en las plantillas ZPL coincidan con las variables enviadas por Infor
  • Para endpoint con ClientId: Asegurar que los clientes estén registrados y activos

Notas de implementación

  • El sistema busca una plantilla de etiqueta basada en el valor Type: en el campo _LabelType_
  • Para el endpoint básico: usa el cliente por defecto asociado a la API Key
  • Para el endpoint con ClientId: busca recursos específicos del cliente especificado
  • Ambos endpoints generan referencias externas únicas para trazabilidad

Códigos de error comunes

401 - No autorizado:

API Key faltante, inválida o inactiva

400 - Cliente no encontrado:

ClientId especificado no existe o está inactivo

404 - Plantilla no encontrada:

No se encontró plantilla para el tipo de etiqueta especificado