Basisinstallation

Im Folgenden werden die grundlegenden Schritte zum Einrichten eines Oracle-Webkanals beschrieben.

Voraussetzungen

  • Ein Oracle-Webkanal. Wenn Sie den Kanal erstellen, werden die Kanal-ID und der Secret Key generiert, die Sie zur Initialisierung der Chat-App benötigen.
  • Die URL des Oracle-Chatservers.
  • Das Oracle-Web-SDK (unter Oracle Native Client SDKs for OCI Native Environments) von der ODA- und OMC-Downloadseite von Oracle Technology Network. Laden Sie diese ZIP-Datei herunter, und extrahieren Sie sie in Ihr lokales System. Diese ZIP-Datei enthält ein Benutzerhandbuch, in dem die SDK-Klassen und eine Beispiel-App beschrieben werden, die viele der Features demonstriert.

Oracle-Webkanal konfigurieren

Sie können den Kanal für die Verbindung zum ODA-Server für Sprachdaten, Text oder Anhänge in zwei Modi konfigurieren: authentifiziert (um den Zugriff auf den Kanal zu schützen) oder nicht authentifiziert.
  • Authentifizierung wird mit JSON Web Token (JWT) durchgesetzt. Der Backend-Server des Kunden generiert das JWT-Token, das dann an das Oracle-Web-SDK übergeben wird. Dieses Token wird für jede Anforderung an einen ODA-Sprach-, Text- oder Anhangsserver verwendet.
    Hinweis

    Um den Zugriff auf den Kanal zu schützen, muss das Token immer von einem Remoteserver generiert werden. Es darf nie im Clientbrowser generiert werden.
    Wenn die Webanwendung eine Verbindung zu einem ODA-Server herstellen muss, fordert sie zuerst das Token vom Backend-Server an und fügt es dann dem Autorisierungsheader hinzu. Der ODA-Server validiert das Token, wertet die Claims aus und öffnet dann entweder das Socket oder lehnt die Verbindung ab.

    Tipp:

    In diesem Artikel werden die Schritte zur Ausführung des SDK mit einem authentifizierten Kanal beschrieben.
  • Nicht authentifizierter Modus: Verwenden Sie den nicht authentifizierten Modus, wenn der Client keine signierten JWT-Token generieren kann, wenn kein Authentifizierungsverfahren vorhanden ist oder wenn das Clientwidget bereits gesichert und für authentifizierte Benutzer sichtbar ist.
So konfigurieren Sie den Oracle-Webkanal:
  1. Wählen Sie im Menü die Option Entwicklung und anschließend Kanäle aus.
  2. Wählen Sie Benutzer aus.
  3. Klicken Sie auf Kanal hinzufügen und dann auf Oracle Web als Kanaltyp.
  4. Nehmen Sie die gewünschten Änderungen im Dialogfeld vor:
    • Geben Sie den Kanalnamen ein.
    • Bei authentifizierten Verbindungen:
      • Aktivieren Sie den Schalter Clientauthentifizierung aktiviert, um zu bestimmen, ob das SDK eine Verbindung zu einem für die Clientauthentifizierung aktivierten Kanal herstellt.
      • Der Kanal kommuniziert nur mit den Sites aus den Domains, die Sie als durch Komma getrennte Liste hinzufügen. Beispiel: *.corp.example.com, *.hdr.example.com. Wenn Sie ein einzelnes Sternchen (*) eingeben, wird uneingeschränkter Zugriff auf den Kanal von jeder beliebigen Domain aus ermöglicht. In der Regel geben Sie während der Entwicklung nur ein einzelnes Sternchen ein. Für die Produktion fügen Sie eine Ausnahmeliste für Domains hinzu.
      • Legen Sie im Feld "Max. Tokenablauf (Minuten)" die maximale Zeit für das JWT-Token fest.
    • Bei nicht authentifizierten Verbindungen:
      • Deaktivieren Sie den Schalter Clientauthentifizierung aktiviert.
      • Geben Sie eine durch Komma getrennte Liste der Domains ein, die auf den Kanal zugreifen können. Wenn die Domains in dieser Ausnahmeliste Sternchen (*.hdr.example.com) enthalten oder die Ausnahmeliste nicht vollständig bekannt ist, müssen Sie eventuell eine authentifizierte Verbindung verwenden.
    • Legen Sie die Sessionablaufzeit fest.
    • Klicken Sie auf Erstellen. Oracle Digital Assistant generiert die Kanal-ID und den Secret Key, die Sie zur Initialisierung des SDK benötigen. Bewahren Sie diese Daten griffbereit auf, da Sie sie beim Konfigurieren der HTML-Seite zum Hosten des Chatwidgets benötigen.
  5. Leiten Sie den Kanal an Ihren Skill oder digitalen Assistenten weiter.
  6. Aktivieren Sie das Steuerelement Kanal aktiviert.

Tutorial: Oracle-Web-SDK-Chat sichern

In diesem Tutorial erhalten Sie eine praktische Einführung, wie Sie das Webchatwidget sichern: Oracle-Web-SDK-Chat sichern.

SDK installieren

  1. Suchen Sie in der extrahierten ZIP-Datei des heruntergeladenen Oracle-Web-SDK die Datei web-sdk.js (im Verzeichnis native-client-sdk-js).
  2. Speichern Sie web-sdk.js (im Verzeichnis native-client-sdk-js der extrahierten ZIP-Datei) in Ihrem Projektverzeichnis. Notieren Sie sich den Dateispeicherort, da Sie ihn zum Definieren der Eigenschaft <WebSDK URL> im Code des <script>-Tags benötigen.
  3. Erstellen Sie eine JavaScript-Datei mit der folgenden Funktion, die das SDK initialisiert. Diese Datei wird im Beispiel, das mit dem SDK geliefert wird, als settings.js bezeichnet.
    //settings.js
    var chatSettings = {
        URI: '<Server URI>',
        channelId: '<Channel ID>',
        userId: '<User ID>'
    };
    
    function initSDK(name) {
        // If WebSDK is not available, reattempt later
        if (!document || !WebSDK) {
            setTimeout(function() {
                initSDK(name);
            }, 2000);
            return;
        }
    
        // Default name is Bots
        if (!name) {
            name = 'Bots';
        }
    
        setTimeout(function() {
            var Bots = new WebSDK(chatSettings);    // Initiate library with configuration
    
            var isFirstConnection = true;
            Bots.on(WebSDK.EVENT.WIDGET_OPENED, function() {
                if (isFirstConnection) {
                    Bots.connect()                          // Connect to server
                        .then(function() {
                            console.log('Connection Successful');
                        })
                        .catch(function(reason) {
                            console.log('Connection failed');
                            console.log(reason);
                        });
                       isFirstConnection = false;
                }
            });
    
            window[name] = Bots;
        }, 0);
    }
  4. Definieren Sie die folgenden Eigenschaften:
    • URI: Der Hostname in der Oracle Digital Assistant-Instanz-URL. Hier muss nur der erste Pfad (/) übergeben werden. Sie können diese URL entweder mit oder ohne das Protokoll (https://) übergeben.
    • channelId: Die Kanal-ID, die beim Erstellen des Oracle-Webkanals generiert wird. Diese Eigenschaft ist erforderlich, da sie das Widget mit dem zugrunde liegenden Skill verbindet.
    • userId: Eine Benutzer-ID. Wenn Sie diesen Wert angeben, kann die Benutzerbasis für diesen Skill von den eindeutigen Benutzermetriken in Insights verfolgt werden. Wenn Sie keine Benutzer-ID angeben, das SDK jedoch eine mit jeder neuen Session generiert. Diese Eigenschaft ist bei nicht authentifizierten Verbindungen optional.
  5. Verweisen Sie auf Ihrer HTML-Seite auf die Speicherorte der JS-Datei (setting.js im folgenden Beispiel) der web-sdk.js-Bibliothek und des Web-SDK-Namespace, der in der Regel Bots lautet. Verwenden Sie diesen Namespace, um die öffentlichen APIs aufzurufen. Beispiel: Wenn Sie den Namensraum auf Bots setzen, rufen Sie die APIs als Bots.<API>() auf. Weitere Informationen zu den verschiedenen Funktionen und Ereignissen finden Sie im Benutzerhandbuch (sowohl als Readme-Datei als auch als HTML-Dokument verfügbar), das in der ZIP-Datei des Oracle-Web-SDK enthalten ist.
       <script src="scripts/settings.js"></script>
       <script src="scripts/web-sdk.js" onload="initSdk('Bots')"></script>    

Library mit der AMD-API importieren

Sie können die Library mit Implementierungen der Asynchronous Module Definition-(AMD-)API importieren, wie z.B. RequireJS mit Oracle JET und SystemJS.
requirejs(['<path of the web-sdk>'], function(WebSDK) {
var settings = {
    URI: '<Server URI>',
    channelId: '<Channel ID>',
    userId: '<User ID>'
};
Bots = new WebSDK(settings);

Bots.connect();
});

Library dynamisch mit JavaScript importieren

Verwenden Sie die folgende Mozilla Development Network-(MDN-)basierte Utilityfunktion, um die Library dynamisch mit JavaScript zu importieren:
function fetchSDK(src, onloadFunction, name) {
var script = document.createElement('script');
script.type = 'application/javascript';
script.async = true;    // load the script asynchronously
script.defer = true;    // fallback support for browsers that does not support async
script.onload = function() {
    onloadFunction(name);
};
document.head.appendChild(script);
script.src = src;
}

fetchSDK('<path of the web-sdk>', initSDK, '<WebSDK namespace>');

Clientauthentifizierung konfigurieren

Neben der Verwendung von Listen zulässiger Domains wird die Clientauthentifizierung durch signierte JWT-Token erzwungen.

Die Tokengenerierung und -signatur muss vom Client auf dem Backend-Server (vorzugsweise nach der Benutzer-/Clientauthentifizierung) ausgeführt werden, der keyId und keySecret sichern kann.

Wenn das SDK eine Verbindung mit dem ODA-Server herstellen muss, fordert es zunächst ein JWT-Token vom Client an und sendet dieses dann zusammen mit der Verbindungsanforderung. Der ODA-Server validiert die Tokensignatur und ruft das Claimset aus der JWT-Payload ab, um das Token zum Herstellen der Verbindung zu prüfen.

Um diesen Modus zu aktivieren, sind diese beiden Felder bei der SDK-Initialisierung erforderlich: clientAuthEnabled: true muss im SDK-Einstellungsparameter übergeben werden, und eine Tokengeneratorfunktion muss als zweiter Parameter übergeben werden. Die Funktion muss einen Promise zurückgeben, der aufgelöst wird, um eine signierte JWT-Tokenzeichenfolge zurückzugeben.
//settings.js
var chatSettings = {
    URI: '<Server URI>',
    clientAuthEnabled: true
};

function generateToken() {
    return new Promise(function(resolve) {
        fetch('https://yourbackend.com/endpointToGenerateJWTToken')
            .then(function(token) {
               resolve(token);
            })
            .catch(function(error) {
                console.log('Token generation error:', error);
            });
    });
}

function initSDK(name) {
    // If WebSDK is not available, reattempt later
    if (!document || !WebSDK) {
        setTimeout(function() {
            initSDK(name);
        }, 2000);
        return;
    }

    // Default name is Bots
    if (!name) {
        name = 'Bots';
    }

    setTimeout(function() {
        var Bots = new WebSDK(chatSettings, generateToken);    // Initiate library with configuration

        var isFirstConnection = true;
        Bots.on(WebSDK.EVENT.WIDGET_OPENED, function() {
            if (isFirstConnection) {
                Bots.connect()                          // Connect to server
                    .then(function() {
                        console.log('Connection Successful');
                    })
                    .catch(function(reason) {
                        console.log('Connection failed');
                        console.log(reason);
                    });
                   isFirstConnection = false;
            }
        });

        window[name] = Bots;
    }, 0);
}

Das JWT Token

Die Client-App ist für die JWT-Tokengenerierung verantwortlich. Einige der Token-Payload-Felder sind obligatorisch und werden vom ODA-Server validiert. Clients müssen den HS256-Signaturalgorithmus verwenden, um die Token zu signieren. Der Tokenbody muss folgende Claims aufweisen:
  • iat: Ausstellungszeit
  • exp: Ablaufzeit
  • channelId: Kanal-ID
  • userId: Benutzer-ID
Die Token selbst müssen vom Secret Key des für die Clientauthentifizierung aktivierten Kanals signiert werden, zu dem die Verbindung hergestellt wird. Beispiel für ein signiertes JWT-Token:
Codiert:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NzY3NDcyMDUsImV4cCI6MTU3Njc1MTExNywiY2hhbm5lbElkIjoiNDkyMDU5NWMtZWM3OS00NjE3LWFmOWYtNTk1MGQ2MDNmOGJiIiwidXNlcklkIjoiSm9obiIsImp0aSI6ImQzMjFjZDA2LTNhYTYtNGZlZS05NTBlLTYzZGNiNGVjODJhZCJ9.lwomlrI6XYR4nPQk0cIvyU_YMf4gYvfVpUiBjYihbUQ
Decodiert:
  • Header:
    {
        "typ": "JWT",
        "alg": "HS256"
    }
  • Payload:
    {
        "iat": 1576747205,
        "exp": 1576748406,
        "channelId": "4920595c-ec79-4617-af9f-5950d603f8bb",
        "userId": "John"
    }
Wenn ein Claim im Token fehlt oder ein falsches Format für seinen Wert aufweist, wird vom SDK eine Fehlermeldung ausgegeben, die die Ursache beschreibt. Es wird nicht versucht, die Verbindung herzustellen. Anhand der Fehlermeldung können Sie das Problem mit dem JWT-Token beheben. Alle zusätzlichen in der Payload übergebenen Claims wirken sich nicht auf den Clientauthentifizierungsmechanismus aus.