Enneo ermöglicht es, eigenen Code in Form von “User Defined Functions” zu hinterlegen und in verschiedenen Bereichen anzuwenden. Diese Funktionen können insbesondere in der Business-Logik von regelbasierten KI-Agenten, in Webhooks oder Event-Implementierungen genutzt werden. Also überall dort, wo eigener Code oder SDKs verwendet werden.

Verwaltung von User Defined Functions

Die Verwaltung der user defined Funktionen erfolgt im Bereich Integration der Umsysteme in den Einstellungen. Hier können beliebig viele benutzerdefinierte Funktionen hinterlegt werden.

Funktionen werden als Codefragmente gespeichert, die spezifische Anwendungslogik implementieren und in verschiedenen Integrationsszenarien abrufbar sind.

Einsatzmöglichkeiten

User Defined Functions bieten vielfältige Einsatzmöglichkeiten. Zum Beispiel:

  • Schnittstellenaufrufe der Umsysteme: Zum Beispiel für ERP, Task-Management, oder Archiv-Systeme.
  • Anbindung von Output-Management-Systemen: Beispielsweise für den Versand von Benachrichtigungen.
  • Auslagerung komplexer Abläufe: In Form von wiederverwendbaren Bausteinen.

Mit diesen Funktionalitäten erweitert Enneo die Anpassungsfähigkeit und ermöglicht die Integration spezifischer Unternehmenslogik in die AI-basierte Kundenbetreuung.

Aufruf von Benutzerdefinierten Funktionen

Enneo kann benutzerdefinierte Funktionen speichern und verwenden.Folgende Aufrufe sind möglich, am Beispiel einer User-Defined-Function namens ‘my-udf’: Innerhalb von Enneo mittels Python SDK:

sdk.ApiEnneo.executeUdf('my-udf', {"parameter1": "value1", "parameter2": "value2"}, 'serviceWorker')

Innerhalb von Enneo mittels PHP SDK:

\EnneoSDK\ApiEnneo::executeUdf('my-udf', ['parameter1' => 'value1', 'parameter2' => 'value2'],'serviceWorker');

Per externem Web-Request:

    POST https://your-subdomain.enneo.ai/api/mind/executor/execute/my-udf
    Payload: '{"parameter1": "value1", "parameter2": "value2"}'

Speicherobjekt für Benutzerdefinierte Funktionen

Es kann ein beliebiges JSON-Objekt als Enneo-internes Speicherobjekt für benutzerdefinierte Funktionen verwendet werden. Dies ermöglicht das Speichern und Abrufen von Daten mittels des Enneo-SDK.

\EnneoSDK\Setting::set('udfStorage', ['my' => 'data']);
$storedData = \EnneoSDK\Setting::get('udfStorage');

Beispiel: Aufruf der API eines Drittsystems

Zuerst werden notwendige Daten im Speicherobjekt für benutzerdefinierte Funktionen festgelegt:

{
  "thirdParty": {
    "oauth": {
      "clientId": "123456789",
      "grantType": "client_credentials",
      "clientSecret": "abcdefg.....hijklmnop",
      "tokenEndpoint": "https://token-url/oauth2/token",
      "baseUrl": "https://third-party-url/api"
    }
  }
}

Im zweiten Schritt, kann eine benutzerdefinierte Funktion fetch-thirdparty-token für das Laden der Credentials implementiert werden. Diese Vorgehensweise ist besonders dann sinnvoll, wenn das Laden der Credentials in mehreren anderen Prozessen wiederverwendet werden kann.

<?php

// Enneo SDK laden
require(getenv()['SDK']);

// Speicherobjekt für benutzerdefinierte Funktionen laden
$udfStorage = \EnneoSDK\Setting::get('udfStorage');


// Token laden
$clientId = $udfStorage->thirdParty->oauth->clientId;
$clientSecret = $udfStorage->thirdParty->oauth->clientSecret;

$result = \EnneoSDK\Api::call(
    method: 'POST',
    url: $udfStorage->thirdParty->oauth->tokenEndpoint,
    headers: [
        'Authorization: Basic ' . base64_encode($clientId . ':' . $clientSecret),
        'Content-Type: application/x-www-form-urlencoded',
        'Accept: application/json'
    ],
    params: http_build_query(['grant_type' => $udfStorage->thirdParty->oauth->grantType ?? 'client_credentials',
        'scope' => $udfStorage->thirdParty->oauth->scope ?? null])
);

// Die Ausgabe erfolgt im JSON Format und kann nach dem Aufruf im entsprechenden Code verwendet werden
echo json_encode(['accessToken' => $result->access_token,
    'accessTokenExpiresAt' => date("Y-m-d H:i:s T", time() + $result->expires_in),
    "baseUrl" => $udfStorage->thirdParty->baseUrl,
    "headers" => $udfStorage->thirdParty->headers ?? [],
    "apiName" => $udfStorage->thirdParty->apiName ?? "Kunden-API",
]);

Anschließend kann die Implementierung der Funktion third-party-api-call für den eigentlichen API-Aufruf erfolgen:

<?php
<?php

// SDK laden
require(getenv()['SDK']);

// Token mithilfe der zuvor definierten "fetch-thirdparty-token" Funktion laden
$credentials = \EnneoSDK\ApiEnneo::executeUdf('fetch-thirdparty-token', []);

// Eingabeparameter laden
$in = \EnneoSDK\Input::load();

// Header für den Request der Third-Party-API vorbereiten
$headers = [
    'Authorization: Bearer '. $credentials->accessToken,
    'Accept: application/json'
];
foreach (($cred->headers ?? []) as $key => $val) {
    $headers[] = "$key: $val";
}

// API Aufruf und Ausgabe
$res = \EnneoSDK\Api::call(
    method: $in->method,
    url: $credentials->baseUrl.'/'.$in->api,
    headers: $headers,
    params: $in->params
);

// Output result
echo json_encode($res);

Diese Struktur ermöglicht die flexible Nutzung und Integration von benutzerdefiniertem Code innerhalb von Enneo, um spezifische Geschäftslogik abzubilden oder externe Systeme nahtlos anzubinden.

Aufruf benutzerdefinierter Funktionen

Der Aufruf benutzerdefinierter Funktionen im Code erfolgt mithilfe von executeUdf:

<?php

// Enneo SDK laden
require(getenv()['SDK']);

// Payload für den API Aufruf des Third-Party-Systems vorbereiten
$payload = [
    'ticket-id' => 123,
    'key' => 'value'
];

// Aufruf der benutzerdefinierten Funktion "third-party-api-call"
// diese Funktion erhält als Eingabeparameter ein Objekt:
// [
//      'method' => 'POST',
//      'api' => 'item',
//      'params' => [
//          'ticket-id' => 123,
//           'key' => 'value'
//      ]
// ]
EnneoSDK\ApiEnneo::executeUdf(
    'third-party-api-call',
    ['method' => 'POST', 'api' => 'item', 'params' => $payload]
);