- Erste Schritte
- Benachrichtigungen
- Flex-Lizenzierung
- Fehlersuche und ‑behebung
- Connector Builder
- Über Connector Builder
- Erstellen Ihres ersten Connectors
- Erstellen Ihres Connectors aus einer API-Definition
- Konfigurieren der Authentifizierung
- Verwenden von Variablen im Connector-Generator
- Aktivitätsdesigner
- Erstellen eines Triggers
- Globale Skripte
- Erste Schritte
- Beispiel A: Erstellen Sie einen Connector aus einer leeren Canvas mit Authentifizierung mit persönlichem Zugriffstoken
- Beispiel B: Erstellen Sie einen Connector aus einer leeren Canvas mit API-Schlüsselauthentifizierung
- Beispiel C: Erstellen eines Connectors aus einer API-Spezifikation mit OAuth 2.0 Client-Anmeldeinformationenauthentifizierung
- Act! 365
- Active Directory – Vorschau
- ActiveCampaign
- Adobe Acrobat Sign
- Adobe PDF Services
- Amazon Bedrock
- Amazon Connect
- Amazon Polly
- Amazon SES
- Amazon Transcribe
- Amazon Web Services
- Anthropic Claude
- Asana
- AWeber
- Azure AI Document Intelligence
- Azure Maps
- BambooHR
- Box
- Brevo
- Calendly
- Campaign Monitor
- Cisco Webex Teams
- Citrix Hypervisor
- Citrix ShareFile
- Clearbit
- Confluence Cloud
- Constant Contact
- Coupa
- Customer.io
- Datadog
- DeepSeek
- Deputy
- DocuSign
- Drop
- Dropbox
- Dropbox Business (Legacy)
- Egnyte
- Eventbrite
- Exchange Server – Vorschau
- Wechselkurse
- Expensify
- Facebook
- Freshbooks
- Freshdesk
- Freshsales
- Freshservice
- GetResponse
- GitHub
- Gmail
- Google Cloud Platform
- Google Docs
- Google Drive
- Google Formulare
- Google Maps
- Google Tabellen
- Google Sprache-zu-Text
- Google Tasks
- Google Text-to-Speech
- Google Vertex
- Google Vision
- Google Workspace
- GoToWebinar
- Greenhouse
- Hootsuite
- HTTP-Webhook
- Hubspot CRM
- HubSpot Marketing
- HyperV – Vorschau
- Icertis
- iContact
- Insightly CRM
- Intercom
- Jina.ai
- Jira
- Keap
- Klaviyo
- LinkedIn
- E-Mail (Mail)
- Mailchimp
- MailerLite
- Mailgun
- Mailjet
- Marketo
- Microsoft 365
- Microsoft Azure
- Microsoft Azure Active Directory
- Microsoft Azure OpenAI
- Microsoft Dynamics 365 CRM
- Microsoft OneDrive und SharePoint
- Microsoft Outlook 365
- Microsoft Sentiment
- Microsoft Teams
- Microsoft Translator
- Microsoft Vision
- Miro
- NetIQ eDirectory
- Okta
- OpenAI
- OpenAI V1-konformes LLM
- Oracle Eloqua
- Oracle NetSuite
- PagerDuty
- Paypal
- PDFMonkey
- Perplexity
- Pinecone
- Pipedrive
- QuickBooksOnline
- Quip
- Salesforce
- Salesforce Marketing Cloud
- SAP BAPI
- SAP Cloud for Customer
- SAP Concur
- SAP OData
- SendGrid
- ServiceNow
- Shopify
- Slack
- SmartRecruiters
- Smartsheet
- Snowflake
- Stripe
- Sugar Enterprise
- Sugar Professional
- Sugar Sell
- Sugar Serve
- System Center – Vorschau
- TangoCard
- Todoist
- Trello
- Twilio
- UiPath GenAI-Aktivitäten
- http
- UiPath Orchestrator
- VMware ESXi vSphere
- wassonx.ai zu senden
- WhatsApp Business
- WooCommerce
- Durchführbar
- Workday
- Workday REST
- X (früher Twitter)
- Xero
- YouTube
- Zendesk
- Zoho Campaigns
- Zoho-Desktop
- Zoho Mail
- Zoom
- ZoomInfo
Integration Service-Benutzerhandbuch
Auf der Registerkarte Globale Skripte im Connector Builder können Sie JavaScript schreiben, das vor oder nach jeder API-Anforderung Ihres Connectors ausgeführt wird. Verwenden Sie Skripts vor der Anforderung, um ausgehende Anforderungen zu ändern, und Skripts nach der Anforderung, um eingehende Antworten zu verarbeiten.
Verwendung von globalen Skripts
Globale Skripts sind nützlich, wenn Sie konsistente Logik auf alle Anforderungen in einem Connector anwenden müssen, z. B.:
- Einfügen oder Überschreiben von Anforderungsheadern, Parametern oder Text vor dem Senden
- Dynamisches Erstellen der Anbieter-URL basierend auf Konfigurationswerten
- Transformieren eines Anbieterantworttexts, bevor er an den Workflow zurückgegeben wird
- Stoppen einer Anforderung basierend auf benutzerdefinierten Bedingungen, ohne die Anbieter-API aufzurufen
Schreiben von Skripten
So öffnen Sie die Registerkarte Globale Skripte:
- Öffnen Sie im Integration Service den Connector-Generator und wählen Sie Ihren benutzerdefinierten Connector aus.
- Wählen Sie in der oberen Navigation Globale Skripte aus.
- Erweitern Sie Voranforderungsskript oder Nachanforderungsskript und geben Sie Ihr JavaScript ein.
Skripte werden in einer Sandbox-JavaScript-Umgebung ausgeführt. Es gelten die folgenden Einschränkungen:
require()ist nur für einen vorab genehmigten Satz von Bibliotheken verfügbar ( siehe Verwenden von Snippets). Beliebige Pakete können nicht importiert werden.- Netzwerk-APIs (
fetch,XMLHttpRequest,WebSocket) sind nicht verfügbar. evalist nicht verfügbar.- Standardmäßige JavaScript-integrierte Elemente (
JSON,Date,Array,Object,URL,Buffer,encodeURIComponent) sind verfügbar.
Die done() -Funktion
Jedes Skript muss done() aufrufen, um die Fertigstellung zu signalisieren. done() beendet die Ausführung sofort – Code, der nach done() geschrieben wurde, ist nicht erreichbar.
// 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"
});
Verwenden von Snippets
Wählen Sie Snippets im Skriptbereich aus, um Codevorlagen in den aktiven Skript-Editor einzufügen. Die folgenden Vorlagen sind verfügbar:
- Bibliothek importieren – Fügt einen
require()-Aufruf für eine der vorab genehmigten Bibliotheken ein, die in der Skript-Sandbox verfügbar sind:buffer,crypto,http,https,querystring,url,util,zlib,axios,lodash,jmespath,moment,request,request-promise. - Voraussetzungsskripts:
- Anbieter aktualisieren – Fügt eine Vorlage zum Ändern der Eigenschaften von ausgehenden Anbieteranfragen ein.
- Konfigurationsobjekt verwenden – Fügt eine Vorlage zum Lesen von Connector-Konfigurationswerten ein.
- Eine Anbieteranforderung anhalten – Fügt ein
done({ continue: false })-Muster ein, um die Anforderung kurzzuschließen, ohne die Anbieter-API aufzurufen.
Voranforderungsskripts
Ein Voranforderungsskript wird ausgeführt, bevor jeder API-Aufruf an den Anbieter gesendet wird. Variablen mit Schreib- oder Lese- und Schreibzugriff können über done() festgelegt werden.
| Variable | Zugriff | Beschreibung |
|---|---|---|
request_method | Lesen | HTTP-Methode des API-Aufrufs (GET, POST usw.). |
request_vendor_method | Lesen und Schreiben | HTTP-Methode, die an den Anbieter übergeben wird. |
request_headers | Lesen | Anforderungsheader, die als Teil des API-Aufrufs übergeben wurden. |
request_vendor_headers | Lesen und Schreiben | Header, die an den Anbieter gesendet werden. |
request_path | Lesen | Anforderungspfad des API-Aufrufs. |
request_vendor_path | Lesen und Schreiben | Anforderungspfad, der an den Anbieter gesendet wird. Wenn der Pfad mit http beginnt, wird er als vollständige Anforderungs-URL verwendet. |
request_path_variables | Lesen | Aus der URL-Vorlage extrahierte Pfadvariablen. |
request_parameters | Lesen | Abfrageparameter, die als Teil des API-Aufrufs übergeben werden. |
request_vendor_parameters | Lesen und Schreiben | Abfrageparameter, die an den Anbieter gesendet werden. |
request_body | Lesen | Anforderungstext, der als Teil des API-Aufrufs als Zeichenfolge übergeben wurde. |
request_body_raw | Lesen | Der Anforderungstext wurde als Teil des API-Aufrufs als unverarbeitete Zeichenfolge übergeben. |
request_vendor_body | Lesen und Schreiben | Anforderungstext, der an den Anbieter gesendet wird. Akzeptiert Zeichenfolge, Liste oder Zuordnung beim Schreiben. |
request_body_map | Lesen | Anforderungstext, der als Teil des API-Aufrufs als Zuordnung übergeben wurde. |
request_vendor_body_map | Lesen | Anforderungstext, der als Zuordnung an den Anbieter gesendet wird. |
request_vendor_url | Lesen | Vollständige Endpunkt-URL, die für den Anbieteraufruf verwendet wird. |
request_expression | Lesen | CEQL-Parameter where in eine Liste von {attribute, value, operator} -Zuordnungen konvertiert. |
request_previous_response | Lesen | Antworttext der vorherigen verketteten Ressource. null wenn es nicht Teil einer Kette ist. |
request_previous_response_headers | Lesen | Antwortheader von der vorherigen verketteten Ressource. null wenn es nicht Teil einer Kette ist. |
request_root_key | Lesen und Schreiben | dot-notation-Pfad zum Erstellen eines Unterobjekts in der JSON-Nutzlast der Anforderung (z. B data.record). |
object_name | Lesen | kanonischer Objektname für die Anforderung. |
vendor_object_name | Lesen | Name des Anbieterobjekts. Entspricht object_name , es sei denn, er wird auf der Ressource überschrieben. |
configuration | Lesen | Eigenschaften der Connector-Konfiguration. |
response_status_code | Schreiben | HTTP-Statuscode, der zurückgegeben werden soll, wenn continue false ist. |
response_error_message | Schreiben | Fehlermeldung, die zurückgegeben werden soll, bevor die Anforderung an den Anbieter gesendet wird. |
response_body | Schreiben | Antworttext, der zurückgegeben werden soll, wenn continue false ist. |
response_body_raw | Schreiben | Antworttext als Zeichenfolge, die zurückgegeben werden soll, wenn continue false ist. |
response_root_key | Lesen und Schreiben | .Pfad zur Beschränkung der Antwort auf ein Unterobjekt (z. B data.records). |
multipart_hook_context_items | Lesen und Schreiben | Mehrteilige Formularelemente für Dateiuploadanforderungen. |
continue | Schreiben | Auf false festlegen, um den Anbieteraufruf zu überspringen. Die Standardeinstellung ist true. |
Beispiel: Fügen Sie einen dynamischen Header aus der Konfiguration ein
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 });
Beispiel: Überschreiben Sie den URL-Pfad des Anbieters
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'
});
Beispiel: Ändern Sie den Anforderungstext
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)
});
Skripte nach der Anforderung
Ein Post-Anforderungsskript wird ausgeführt, nachdem eine Antwort vom Anbieter empfangen wurde. Alle Voranforderungsvariablen bleiben als Lesen verfügbar. Die antwortspezifischen Variablen unten werden hinzugefügt, und configuration wird zu Lesen und Schreiben. Variablen mit Schreib- oder Lese- und Schreibzugriff können über done() festgelegt werden.
| Variable | Zugriff | Beschreibung |
|---|---|---|
response_iserror | Lesen | true wenn die Anbieterantwort einen Fehler anzeigt (Statuscodes außerhalb von 200–207). |
response_status_code | Lesen und Schreiben | HTTP-Statuscode des Anbieters. |
response_body | Lesen und Schreiben | Antworttext des Anbieters. |
response_body_raw | Lesen und Schreiben | Unformatierter Antworttext des Anbieters als Zeichenfolge. |
response_body_raw_map | Lesen | Unformatierter Antworttext des Anbieters als Zuordnung. |
response_body_map | Lesen | Antworttext des Anbieters als Zuordnung. |
response_headers | Lesen und Schreiben | Antwortheader des Anbieters. |
response_error_message | Schreiben | Fehlermeldung, die zurückgegeben werden soll. Konvertiert die Antwort in einen Fehler. |
response_root_key | Lesen und Schreiben | .Pfad zur Beschränkung der Antwort auf ein Unterobjekt (z. B data.records). |
configuration | Lesen und Schreiben | Eigenschaften der Connector-Konfiguration. Änderungen bleiben auf der Connector-Instanz bestehen. |
multipart_hook_context_items | Lesen und Schreiben | Mehrteilige Formularelemente für Dateiuploadanforderungen. |
metadata_merge | Schreiben | Auf true festlegen, um Anbietermetadaten mit Modellmetadaten zu kombinieren. |
Beginnen Sie jedes Nach-Anforderungs-Skript mit einem Fehlerschutz. Wenn die Antwort ein Fehler ist, rufen Sie done() ohne Argumente auf, um sie unverändert zu übergeben.
Beispiel: Transformieren Sie den Antworttext
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 });
Utility-Funktionen
Die folgenden Dienstprogrammfunktionen sind in beiden Skripttypen verfügbar:
| Function | Beschreibung |
|---|---|
console.log() | Gibt eine Debugging-Meldung aus. |
Bringen Sie Ihren eigenen LLM-Connector-Anwendungsfall ein
Wenn Sie einen Connector für einen LLM-Anbieter erstellen – z. B. ein selbst gehostetes Modell oder einen Inferenzendpunkt eines Drittanbieters – können Sie mit Global Scripts Anforderungen und Antworten so anpassen, dass sie dem erwarteten Vertrag entsprechen, ohne jede Ressource einzeln zu ändern.
Bei gängigen LLM-Anbietern (AWS Bedrock, Azure OpenAI, Google Vertex AI, OpenAI V1 kompatibel) können Sie mit einer Connector-Vorlage beginnen, die das Authentifizierungssetup und die Skripte für Sie vorab ausfüllt. Weitere Informationen finden Sie unter Verwenden von Connector-Vorlagen.
Die folgenden Skripte zeigen eine vollständige Einrichtung vor und nach der Anforderung für dieses Szenario.
Voranforderung: Legen Sie Authentifizierungsheader fest
Fügen Sie den API-Schlüssel des Anbieters aus der Connector-Konfiguration ein und erzwingen Sie die erwartete Content-Type:
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
});
Voranforderung: Fügen Sie eine Systemnachricht ein
Legen Sie die Standard-Modellparameter fest und stellen Sie sicher, dass in jeder Konversation, die an das Modell gesendet wird, eine Systemmeldung vorhanden ist:
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)
});
Nachanforderung: Verarbeiten Sie das Auswahl-Array
Iterieren Sie das choices -Array in der Anbieterantwort und fügen Sie benutzerdefinierte Metadaten hinzu, bevor Sie zum Workflow zurückkehren:
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 });
Best Practices
- Immer
done()aufrufen – ein Skript, dasdone()nicht aufruft, hängt die Anforderung auf. - Kopieren Sie Variablen vor dem Mutieren – die Laufzeit verwendet den strikten Modus. Zuerst eine lokale Variable zuweisen:
var headers = request_vendor_headers;, dann ändern Sieheaders. - Schreiben Sie keinen Code nach
done()– er ist nicht erreichbar. - Prüfen Sie auf
nulloderundefined–request_bodyundrequest_vendor_bodysindundefinedfür GET- und DELETE-Anforderungen. - Verwenden Sie
continue: falsezum Kurzschließen – geben Sie eine Antwort direkt zurück, ohne den Anbieter aufzurufen.