UiPath Documentation
integration-service
2.2510
true

Guía de usuario de Integration Service

Última actualización 24 de abr. de 2026

Scripts globales

La pestaña Scripts globales en el Creador de conectores te permite escribir JavaScript que se ejecuta antes o después de cada solicitud de API realizada por tu conector. Utiliza scripts previos a la solicitud para modificar las solicitudes salientes y scripts posteriores a la solicitud para procesar las respuestas entrantes.

Cuándo utilizar Global Scripts

Los scripts globales son útiles cuando necesitas aplicar una lógica coherente en todas las solicitudes de un conector, como por ejemplo:

  • Inyectar o anular encabezados, parámetros o cuerpo de la solicitud antes de enviar
  • Construir dinámicamente la URL del proveedor en función de los valores de configuración
  • Transformar el cuerpo de una respuesta del proveedor antes de que se devuelva al flujo de trabajo
  • Detener una solicitud basada en condiciones personalizadas sin llamar a la API del proveedor

Escribir scripts

Para abrir la pestaña Scripts globales:

  1. En Integration Service, abre el Creador de conectores y selecciona tu conector personalizado.
  2. Selecciona Scripts globales en la navegación superior.
  3. Expande Script de solicitud previa o Script de solicitud posterior e introduce tu JavaScript.

Los scripts se ejecutan en un entorno JavaScript aislado. Se aplican las siguientes restricciones:

  • require() está disponible solo para un conjunto de bibliotecas preaprobadas (consulta Uso de fragmentos). Los paquetes arbitrarios no se pueden importar.
  • Las API de red (fetch, XMLHttpRequest, WebSocket) no están disponibles.
  • eval no está disponible.
  • Están disponibles los integrados de JavaScript estándar (JSON, Date, Array, Object, URL, Buffer, encodeURIComponent).

La función done()

Cada script debe llamar a done() para indicar la finalización. done() finaliza la ejecución inmediatamente: cualquier código escrito después de done() es inalcanzable.

// Pass through unchanged
done();

// Override one or more output values
done({
  request_vendor_headers: updatedHeaders
});

// Return multiple overrides
done({
  request_vendor_body: newBody,
  request_vendor_headers: newHeaders
});

// Stop the request — do not call the vendor API
done({ continue: false });

// Stop the request and return an error
done({
  continue: false,
  response_status_code: 400,
  response_error_message: "Invalid action"
});
// Pass through unchanged
done();

// Override one or more output values
done({
  request_vendor_headers: updatedHeaders
});

// Return multiple overrides
done({
  request_vendor_body: newBody,
  request_vendor_headers: newHeaders
});

// Stop the request — do not call the vendor API
done({ continue: false });

// Stop the request and return an error
done({
  continue: false,
  response_status_code: 400,
  response_error_message: "Invalid action"
});

Uso de fragmentos

Selecciona Fragmentos en el panel de scripts para insertar plantillas de código en el editor de scripts activo. Están disponibles las siguientes plantillas:

  • Importar una biblioteca : inserta una llamada require() para una de las bibliotecas preaprobadas disponibles en el entorno limitado de scripts: buffer, crypto, http, https, querystring, url, util, zlib, axios, lodash, jmespath, moment, request, request-promise.
  • Scripts de requisitos previos:
    • Actualizar un proveedor : inserta una plantilla para modificar las propiedades de la solicitud del proveedor saliente.
    • Usar un objeto de configuración : inserta una plantilla para leer los valores de configuración del conector.
    • Detener una solicitud de proveedor : inserta un patrón done({ continue: false }) para acortar la solicitud sin llamar a la API del proveedor.

Scripts de solicitud previa

Se ejecuta un script de solicitud previa antes de enviar cada llamada a la API al proveedor. Las variables con acceso de escritura o lectura y escritura se pueden establecer a través de done().

VariableAccesoDescripción
request_methodLeerMétodo HTTP de la llamada a la API (GET, POST, etc.).
request_vendor_methodLeer y escribirMétodo HTTP que se pasará al proveedor.
request_headersLeerSolicitar encabezados pasados como parte de la llamada a la API.
request_vendor_headersLeer y escribirEncabezados que se enviarán al proveedor.
request_pathLeerSolicitar la ruta de la llamada a la API.
request_vendor_pathLeer y escribirSolicitar la ruta que se enviará al proveedor. Si la ruta comienza con http, se utiliza como la URL de solicitud completa.
request_path_variablesLeerVariables de ruta extraídas de la plantilla de URL.
request_parametersLeerParámetros de consulta pasados como parte de la llamada a la API.
request_vendor_parametersLeer y escribirParámetros de consulta que se enviarán al proveedor.
request_bodyLeerCuerpo de la solicitud pasado como parte de la llamada a la API, como una cadena.
request_body_rawLeerCuerpo de la solicitud pasado como parte de la llamada a la API, como una cadena no procesada.
request_vendor_bodyLeer y escribirCuerpo de la solicitud que se enviará al proveedor. Acepta cadena, lista o mapa al escribir.
request_body_mapLeerCuerpo de la solicitud pasado como parte de la llamada a la API, como un mapa.
request_vendor_body_mapLeerCuerpo de la solicitud que se enviará al proveedor, como un mapa.
request_vendor_urlLeerURL del punto final completamente formada que se utilizará para la llamada del proveedor.
request_expressionLeerEl parámetro CEQL where se convirtió en una lista de mapas {attribute, value, operator} .
request_previous_responseLeerCuerpo de respuesta del recurso encadenado anterior. null si no forma parte de una cadena.
request_previous_response_headersLeerEncabezados de respuesta del recurso encadenado anterior. null si no forma parte de una cadena.
request_root_keyLeer y escribirRuta de notación de puntos para crear un subobjeto en la carga útil JSON de la solicitud (p. ej. data.record).
object_nameLeerNombre de objeto canónico para la solicitud.
vendor_object_nameLeerNombre del objeto del proveedor. Igual que object_name a menos que se anule en el recurso.
configurationLeerPropiedades de configuración del conector.
response_status_codeEscribirCódigo de estado HTTP que se devolverá cuando continue sea false.
response_error_messageEscribirMensaje de error que se devolverá antes de enviar la solicitud al proveedor.
response_bodyEscribirCuerpo de respuesta que se devolverá cuando continue sea false.
response_body_rawEscribirCuerpo de la respuesta como una cadena que se devolverá cuando continue sea false.
response_root_keyLeer y escribirRuta de notación de puntos para limitar la respuesta a un subobjeto (p. ej. data.records).
multipart_hook_context_itemsLeer y escribirElementos de formulario de varias partes para solicitudes de carga de archivos.
continueEscribirEstablece en false para omitir la llamada del proveedor. El valor predeterminado es true.

Ejemplo: inyectar un encabezado dinámico desde la configuración

var headers = request_vendor_headers || {};
var config = configuration || {};

headers['Authorization'] = 'Bearer ' + config['oauth_token'];

done({ request_vendor_headers: headers });
var headers = request_vendor_headers || {};
var config = configuration || {};

headers['Authorization'] = 'Bearer ' + config['oauth_token'];

done({ request_vendor_headers: headers });

Ejemplo: anular la ruta de la URL del proveedor

var baseUrl = configuration['base_url'];
if (!baseUrl) {
  done({ continue: false, response_error_message: "Missing configuration: 'base_url'" });
  return;
}

var apiVersion = configuration['api_version'] || 'v1';
var modelId = request_path_variables.modelId;
var vendorUrl = baseUrl.startsWith('http') ? baseUrl : 'https://' + baseUrl;

done({
  request_vendor_path: vendorUrl + '/' + apiVersion + '/models/' + modelId + '/completions'
});
var baseUrl = configuration['base_url'];
if (!baseUrl) {
  done({ continue: false, response_error_message: "Missing configuration: 'base_url'" });
  return;
}

var apiVersion = configuration['api_version'] || 'v1';
var modelId = request_path_variables.modelId;
var vendorUrl = baseUrl.startsWith('http') ? baseUrl : 'https://' + baseUrl;

done({
  request_vendor_path: vendorUrl + '/' + apiVersion + '/models/' + modelId + '/completions'
});

Ejemplo: modificar el cuerpo de la solicitud

var body = typeof request_body_map === 'string'
  ? JSON.parse(request_body_map)
  : request_body_map;

body.max_tokens = body.max_tokens || 1024;
body.temperature = 0.7;

done({
  request_vendor_headers: { 'Content-Type': 'application/json' },
  request_vendor_body: JSON.stringify(body)
});
var body = typeof request_body_map === 'string'
  ? JSON.parse(request_body_map)
  : request_body_map;

body.max_tokens = body.max_tokens || 1024;
body.temperature = 0.7;

done({
  request_vendor_headers: { 'Content-Type': 'application/json' },
  request_vendor_body: JSON.stringify(body)
});

Scripts posteriores a la solicitud

Un script posterior a la solicitud se ejecuta después de recibir una respuesta del proveedor. Todas las variables de solicitud previa permanecen disponibles como Lectura. Se añaden las siguientes variables específicas de respuesta, y configuration se convierte en Lectura y escritura. Las variables con acceso de escritura o lectura y escritura se pueden establecer a través de done().

VariableAccesoDescripción
response_iserrorLeertrue si la respuesta del proveedor indica un error (códigos de estado fuera de 200–207).
response_status_codeLeer y escribirCódigo de estado HTTP del proveedor.
response_bodyLeer y escribirCuerpo de respuesta del proveedor.
response_body_rawLeer y escribirCuerpo de respuesta sin formato del proveedor, como una cadena.
response_body_raw_mapLeerCuerpo de respuesta sin procesar del proveedor, como un mapa.
response_body_mapLeerCuerpo de respuesta del proveedor, como un mapa.
response_headersLeer y escribirEncabezados de respuesta del proveedor.
response_error_messageEscribirMensaje de error a devolver. Convierte la respuesta en un error.
response_root_keyLeer y escribirRuta de notación de puntos para limitar la respuesta a un subobjeto (p. ej. data.records).
configurationLeer y escribirPropiedades de configuración del conector. Los cambios persisten en la instancia del conector.
multipart_hook_context_itemsLeer y escribirElementos de formulario de varias partes para solicitudes de carga de archivos.
metadata_mergeEscribirEstablece en true para combinar los metadatos del proveedor con los metadatos del modelo.
Consejo:

Inicia cada script posterior a la solicitud con una protección contra errores. Si la respuesta es un error, llama a done() sin argumentos para pasarlo sin cambios.

Ejemplo: transformar el cuerpo de la respuesta

if (response_iserror) {
  done();
  return;
}

var body = typeof response_body === 'string'
  ? JSON.parse(response_body)
  : response_body;

body.processed = true;
body.timestamp = new Date().toISOString();

done({ response_body: body });
if (response_iserror) {
  done();
  return;
}

var body = typeof response_body === 'string'
  ? JSON.parse(response_body)
  : response_body;

body.processed = true;
body.timestamp = new Date().toISOString();

done({ response_body: body });

Funciones de utilidad

Las siguientes funciones de utilidad están disponibles en ambos tipos de script:

FunciónDescripción
console.log()Emite un mensaje de depuración.

Traiga su propio caso de uso del conector LLM

Si estás creando un conector para un proveedor de LLM, como un modelo autohospedado o un punto final de inferencia de terceros, los scripts globales te permiten adaptar las solicitudes y respuestas para que coincidan con el contrato esperado sin modificar cada recurso individualmente.

Consejo:

Para los proveedores de LLM comunes (AWS Bedrock, Azure OpenAI, Google Vertex AI, compatible con OpenAI V1), puedes comenzar desde una plantilla de conector que rellena previamente la configuración de autenticación y los scripts por ti. Para obtener más información, consulta Usar plantillas de conector.

Los siguientes scripts muestran una configuración completa previa y posterior a la solicitud para este escenario.

Solicitud previa: establecer encabezados de autenticación

Inserta la clave API del proveedor desde la configuración del conector y aplica el Content-Type esperado:

var headers = {
  'Content-Type': 'application/json',
  'x-api-key': configuration['api_key']
};

done({
  request_vendor_headers: headers,
  request_vendor_body: request_body_map
});
var headers = {
  'Content-Type': 'application/json',
  'x-api-key': configuration['api_key']
};

done({
  request_vendor_headers: headers,
  request_vendor_body: request_body_map
});

Solicitud previa: insertar un mensaje del sistema

Establece los parámetros del modelo predeterminados y asegúrate de que haya un mensaje del sistema en cada conversación enviada al modelo:

var body = typeof request_body_map === 'string'
  ? JSON.parse(request_body_map)
  : request_body_map;

body.max_tokens = body.max_tokens || 1024;
body.temperature = 0.7;

var hasSystemMessage = body.messages.some(function(msg) {
  return msg.role === 'system';
});

if (!hasSystemMessage) {
  body.messages.unshift({
    role: 'system',
    content: 'You are a helpful assistant.'
  });
}

done({
  request_vendor_headers: { 'Content-Type': 'application/json' },
  request_vendor_body: JSON.stringify(body)
});
var body = typeof request_body_map === 'string'
  ? JSON.parse(request_body_map)
  : request_body_map;

body.max_tokens = body.max_tokens || 1024;
body.temperature = 0.7;

var hasSystemMessage = body.messages.some(function(msg) {
  return msg.role === 'system';
});

if (!hasSystemMessage) {
  body.messages.unshift({
    role: 'system',
    content: 'You are a helpful assistant.'
  });
}

done({
  request_vendor_headers: { 'Content-Type': 'application/json' },
  request_vendor_body: JSON.stringify(body)
});

Posterior a la solicitud: procesar la matriz de opciones

Itera la matriz choices en la respuesta del proveedor y añade metadatos personalizados antes de volver al flujo de trabajo:

if (response_iserror) {
  done();
  return;
}

var body = typeof response_body === 'string'
  ? JSON.parse(response_body)
  : response_body;

if (body.choices && body.choices.length > 0) {
  body.choices.forEach(function(choice) {
    choice.processed_by = 'connector-post-script';
  });
}

body.custom_metadata = {
  processed: true,
  timestamp: new Date().toISOString()
};

done({ response_body: body });
if (response_iserror) {
  done();
  return;
}

var body = typeof response_body === 'string'
  ? JSON.parse(response_body)
  : response_body;

if (body.choices && body.choices.length > 0) {
  body.choices.forEach(function(choice) {
    choice.processed_by = 'connector-post-script';
  });
}

body.custom_metadata = {
  processed: true,
  timestamp: new Date().toISOString()
};

done({ response_body: body });

Mejores prácticas

  • Llamar siempre done() : un script que no llama a done() bloquea la solicitud.
  • Copiar variables antes de mutar : el tiempo de ejecución utiliza el modo estricto. Asignar primero a una variable local: var headers = request_vendor_headers; y luego modificar headers.
  • No escriba código después de done() : es inaccesible.
  • Comprueba null o undefined : request_body y request_vendor_body son undefined para solicitudes GET y DELETE.
  • Usa continue: false para acortar : devolver una respuesta directamente sin llamar al proveedor.

¿Te ha resultado útil esta página?

Conectar

¿Necesita ayuda? Soporte

¿Quiere aprender? UiPath Academy

¿Tiene alguna pregunta? Foro de UiPath

Manténgase actualizado