UiPath Documentation
integration-service
latest
false
Guía de usuario de Integration Service
Importante :
Este contenido se ha traducido mediante traducción automática. Los paquetes de conectores disponibles en Integration Service están traducidos con traducción automática. La localización de contenidos recién publicados puede tardar entre una y dos semanas en estar disponible.

Scripts globales

Configure Global Scripts in Connector Builder to run JavaScript before or after every API request for consistent request and response processing.

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

Scripts for a single resource

Each resource also has its own Scripts tab, alongside Parameters, Request fields, Response fields, and Activity designer. It provides the same Pre-request script and Post-request script editors, the same snippets, and the same variables and done() contract as the connector-level Global Scripts tab.

The difference is scope:

  • A script on the Global Scripts tab runs for every request the connector makes.
  • A script on a resource's Scripts tab runs only for that resource.

Use a resource script when the logic applies to one endpoint, and a global script when it applies to the whole connector.

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.

Scripts run in a sandboxed JavaScript environment, with no network access and no way to import packages.

Standard JavaScript built-ins are available: JSON, Date, Array, Object, URL, encodeURIComponent, URLSearchParams, TextEncoder, TextDecoder, btoa, atob, crypto, Blob, FormData, Headers, Intl, and BigInt.

Importante:

Buffer is not available. Use btoa and atob for base64 encoding instead.

The following are not available in the sandbox:

CategoríaNo disponible
Evaluation and importseval, any require() call, a top-level import or export statement, a dynamic import(...) expression
Redfetch, XMLHttpRequest, WebSocket
Timers and workerssetTimeout, setInterval, setImmediate, Worker, importScripts, postMessage
Runtime and globalsDeno, process, globalThis, self, window, WebAssembly, Buffer

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

Select Snippets in the script panel to insert code templates into the active script editor.

The Pre-request script panel offers the following templates, grouped under Prerequest scripts:

  • Update provider URL — Sets request_vendor_path to a full URL, replacing the provider URL for that request.
  • Use a configuration — Reads a value from configuration (the connector's base URL, in the sample) and sends it to the provider as a request header.
  • Skip a provider request — Sets continue to false so the request is never sent to the provider.

The Post-request script panel offers the following templates, grouped under Postrequest scripts:

  • Update the response body — Copies response_body into a local variable, adds a field to it, and returns the modified body.
  • SR metadata generation from vendor metadata — Builds standard resource field metadata from a vendor metadata response, deriving each custom field's type, format, display name, description, supported methods, and enum values.

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