- Primeros pasos
- Notificaciones
- Licencia
- Solución de problemas
- Creador de conectores
- Acerca del generador de conectores
- Crear tu primer conector
- Crear tu conector a partir de una definición de API
- Configurar la autenticación
- Utilizar variables en el Creador de conectores
- Diseñador de actividades
- Crear un desencadenador
- Scripts globales
- Lista de comprobación del Creador de conectores
- Primeros pasos
- Ejemplo A: crear un conector a partir de un lienzo en blanco con autenticación de token de acceso personal
- Ejemplo B: crear un conector a partir de un lienzo en blanco con autenticación de clave API
- Ejemplo C: crear un conector a partir de una especificación de API con autenticación de credenciales de cliente OAuth 2.0
- Act! 365
- ActiveCampaign
- Active Directory: vista previa
- Adobe Acrobat Sign
- Servicios de Adobe PDF
- Amazon Bedrock
- Amazon Connect
- Amazon Polly
- Amazon SES
- Amazon Transcribe
- Amazon Web Services
- Anthropic Claude
- Asana
- AWeber
- Azure AI Document Intelligence
- Azure Defender for Cloud
- Azure Maps
- BambooHR
- Box
- Brevo
- Calendly
- Campaign Monitor
- Cisco Webex Teams
- Citrix Hypervisor
- Citrix ShareFile
- Clearbit
- Confluence Cloud
- Constant Contact
- Coupa
- CrewAI: vista previa
- Customer.io
- Database Hub
- Agente de Databricks
- Datadog
- BúsquedaProfunda
- Deputy
- Discord - Vista previa
- DocuSign
- Goteo
- Dropbox
- Dropbox Business
- Egnyte
- Eventbrite
- Tipos de cambio
- Exchange Server: vista previa
- Expensify
- Facebook
- Freshbooks
- Freshdesk
- Freshsales
- Freshservice
- GetResponse
- GitHub
- Gmail
- Plataforma Google Cloud
- Google Docs
- Google Drive
- Formularios de Google: vista previa
- Google Maps
- Google Sheets
- Google Speech-to-Text
- Texto a voz de Google
- Google Tasks: vista previa
- Google Vertex
- Google Vision
- Google Workspace
- GoToWebinar
- Greenhouse
- Hootsuite
- Http
- Webhook HTTP
- Hubspot CRM
- Hubspot Marketing
- HyperV: vista previa
- Icertis
- iContact
- Insightly CRM
- Intercom
- Jina.ai
- Jira
- Keap
- Klaviyo
- LinkedIn
- Correo
- Mailchimp
- Mailgun
- Mailjet
- MailerLite
- Marketo
- MCP
- Microsoft 365
- Microsoft Azure
- Microsoft Azure Active Directory
- Microsoft Azure AI Foundry
- Microsoft Azure OpenAI
- Microsoft Azure Sentinel
- Microsoft Dynamics 365 CRM
- Microsoft OneDrive y SharePoint
- Microsoft Outlook 365
- Microsoft Power Automate: vista previa
- Opinión de Microsoft
- Microsoft Sentinel Threat Intelligence
- Microsoft Teams
- Microsoft Translator
- Microsoft Vision
- Miro
- NetIQ eDirectory
- NVIDIA NIM
- OKTA
- OpenAI
- LLM compatible con OpenAI V1
- Oracle Eloqua
- Oracle NetSuite
- PagerDuty
- PayPal
- PDFMonkey
- Perplexity
- Pinecone
- Pipedrive
- QuickBooksOnline
- Quip
- Salesforce
- Salesforce AgentForce y flujos: vista previa
- Salesforce Marketing Cloud
- SAP BAPI
- SAP Cloud for Customer
- SAP Concur
- SAP OData
- SendGrid
- ServiceNow
- Shopify
- Slack
- SmartRecruiters
- Smartsheet
- Snowflake
- Snowflake Cortex
- Stripe
- Sugar Enterprise
- Sugar Professional
- Sugar Sell
- Sugar Serve
- System Center: vista previa
- TangoCard
- Todoist
- Trello
- Twilio
- UiPath Apps - Preview
- Data Fabric de UiPath
- UiPath Test Manager
- Actividades de UiPath GenAI
- UiPath Orchestrator
- X (anteriormente Twitter)
- Xero
- watsonx.ai
- WhatsApp Business
- WooCommerce
- Viable
- Workday
- REST de Workday
- VMware ESXi vSphere
- YouTube
- Zendesk
- Zoho Campaigns
- Zoho Desk
- Zoho Mail
- Zoom
- ZoomInfo
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:
- En Integration Service, abre el Creador de conectores y selecciona tu conector personalizado.
- Selecciona Scripts globales en la navegación superior.
- 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.
Buffer is not available. Use btoa and atob for base64 encoding instead.
The following are not available in the sandbox:
| Categoría | No disponible |
|---|---|
| Evaluation and imports | eval, any require() call, a top-level import or export statement, a dynamic import(...) expression |
| Red | fetch, XMLHttpRequest, WebSocket |
| Timers and workers | setTimeout, setInterval, setImmediate, Worker, importScripts, postMessage |
| Runtime and globals | Deno, 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_pathto 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
continuetofalseso 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_bodyinto 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().
| Variable | Acceso | Descripción |
|---|---|---|
request_method | Leer | Método HTTP de la llamada a la API (GET, POST, etc.). |
request_vendor_method | Leer y escribir | Método HTTP que se pasará al proveedor. |
request_headers | Leer | Solicitar encabezados pasados como parte de la llamada a la API. |
request_vendor_headers | Leer y escribir | Encabezados que se enviarán al proveedor. |
request_path | Leer | Solicitar la ruta de la llamada a la API. |
request_vendor_path | Leer y escribir | Solicitar la ruta que se enviará al proveedor. Si la ruta comienza con http, se utiliza como la URL de solicitud completa. |
request_path_variables | Leer | Variables de ruta extraídas de la plantilla de URL. |
request_parameters | Leer | Parámetros de consulta pasados como parte de la llamada a la API. |
request_vendor_parameters | Leer y escribir | Parámetros de consulta que se enviarán al proveedor. |
request_body | Leer | Cuerpo de la solicitud pasado como parte de la llamada a la API, como una cadena. |
request_body_raw | Leer | Cuerpo de la solicitud pasado como parte de la llamada a la API, como una cadena no procesada. |
request_vendor_body | Leer y escribir | Cuerpo de la solicitud que se enviará al proveedor. Acepta cadena, lista o mapa al escribir. |
request_body_map | Leer | Cuerpo de la solicitud pasado como parte de la llamada a la API, como un mapa. |
request_vendor_body_map | Leer | Cuerpo de la solicitud que se enviará al proveedor, como un mapa. |
request_vendor_url | Leer | URL del punto final completamente formada que se utilizará para la llamada del proveedor. |
request_expression | Leer | El parámetro CEQL where se convirtió en una lista de mapas {attribute, value, operator} . |
request_previous_response | Leer | Cuerpo de respuesta del recurso encadenado anterior. null si no forma parte de una cadena. |
request_previous_response_headers | Leer | Encabezados de respuesta del recurso encadenado anterior. null si no forma parte de una cadena. |
request_root_key | Leer y escribir | Ruta de notación de puntos para crear un subobjeto en la carga útil JSON de la solicitud (p. ej. data.record). |
object_name | Leer | Nombre de objeto canónico para la solicitud. |
vendor_object_name | Leer | Nombre del objeto del proveedor. Igual que object_name a menos que se anule en el recurso. |
configuration | Leer | Propiedades de configuración del conector. |
response_status_code | Escribir | Código de estado HTTP que se devolverá cuando continue sea false. |
response_error_message | Escribir | Mensaje de error que se devolverá antes de enviar la solicitud al proveedor. |
response_body | Escribir | Cuerpo de respuesta que se devolverá cuando continue sea false. |
response_body_raw | Escribir | Cuerpo de la respuesta como una cadena que se devolverá cuando continue sea false. |
response_root_key | Leer y escribir | Ruta de notación de puntos para limitar la respuesta a un subobjeto (p. ej. data.records). |
multipart_hook_context_items | Leer y escribir | Elementos de formulario de varias partes para solicitudes de carga de archivos. |
continue | Escribir | Establece 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().
| Variable | Acceso | Descripción |
|---|---|---|
response_iserror | Leer | true si la respuesta del proveedor indica un error (códigos de estado fuera de 200–207). |
response_status_code | Leer y escribir | Código de estado HTTP del proveedor. |
response_body | Leer y escribir | Cuerpo de respuesta del proveedor. |
response_body_raw | Leer y escribir | Cuerpo de respuesta sin formato del proveedor, como una cadena. |
response_body_raw_map | Leer | Cuerpo de respuesta sin procesar del proveedor, como un mapa. |
response_body_map | Leer | Cuerpo de respuesta del proveedor, como un mapa. |
response_headers | Leer y escribir | Encabezados de respuesta del proveedor. |
response_error_message | Escribir | Mensaje de error a devolver. Convierte la respuesta en un error. |
response_root_key | Leer y escribir | Ruta de notación de puntos para limitar la respuesta a un subobjeto (p. ej. data.records). |
configuration | Leer y escribir | Propiedades de configuración del conector. Los cambios persisten en la instancia del conector. |
multipart_hook_context_items | Leer y escribir | Elementos de formulario de varias partes para solicitudes de carga de archivos. |
metadata_merge | Escribir | Establece en true para combinar los metadatos del proveedor con los metadatos del modelo. |
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ón | Descripció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.
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 adone()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 modificarheaders. - No escriba código después de
done(): es inaccesible. - Comprueba
nulloundefined:request_bodyyrequest_vendor_bodysonundefinedpara solicitudes GET y DELETE. - Usa
continue: falsepara acortar : devolver una respuesta directamente sin llamar al proveedor.
- Cuándo utilizar Global Scripts
- Scripts for a single resource
- Escribir scripts
- La función
done() - Uso de fragmentos
- Scripts de solicitud previa
- Ejemplo: inyectar un encabezado dinámico desde la configuración
- Ejemplo: anular la ruta de la URL del proveedor
- Ejemplo: modificar el cuerpo de la solicitud
- Scripts posteriores a la solicitud
- Ejemplo: transformar el cuerpo de la respuesta
- Funciones de utilidad
- Traiga su propio caso de uso del conector LLM
- Solicitud previa: establecer encabezados de autenticación
- Solicitud previa: insertar un mensaje del sistema
- Posterior a la solicitud: procesar la matriz de opciones
- Mejores prácticas