Impostazioni di base

Di seguito sono riportati i passi di base per ottenere l'impostazione di un canale Web Oracle.

Di cosa hai bisogno?

  • Un canale Web Oracle. La creazione del canale genera l'ID canale e la chiave segreta necessari per inizializzare l'applicazione chat.
  • URL del server di chat Oracle.
  • Oracle Web SDK (situato negli SDK client nativi Oracle per ambienti nativi OCI) dalla pagina di download di ODA e OMC di Oracle Technology Network. Scarica questo ZIP ed estrarlo sul sistema locale. Questo ZIP include una guida per l'utente che descrive le classi dell'SDK e un'app di esempio che illustra molte delle sue funzioni.

Configurare il canale Web Oracle

È possibile configurare il canale per la connessione al server di sintesi vocale, di testo o di allegati ODA in due modalità: autenticata (per proteggere l'accesso al canale) o non autenticata.
  • L'autenticazione viene applicata utilizzando i token Web JSON (JWT). Il server backend del cliente genera il token JWT, che viene quindi passato all'SDK Web Oracle. Questo token viene utilizzato per ogni richiesta a un server di sintesi vocale, di testo o di allegati ODA.
    Nota

    Per proteggere l'accesso al canale, il token deve essere sempre generato da un server remoto. Non deve mai essere generato all'interno del browser client.
    Quando l'applicazione Web deve connettersi a un server ODA, in primo luogo richiede il token dal server backend e quindi lo aggiunge all'intestazione di autorizzazione. Il server ODA convalida il token, valuta le richieste, quindi apre il socket o rifiuta la connessione.

    Suggerimento

    Questo articolo consente di eseguire l'SDK con un canale autenticato.
  • Modalità non autenticata: utilizzare la modalità non autenticata quando il client non è in grado di generare token JWT firmati, quando non è presente alcun meccanismo di autenticazione o quando il widget client è già protetto e visibile agli utenti autenticati.
Per configurare il canale Web Oracle, eseguire le operazioni riportate di seguito.
  1. Scegliere Sviluppo, quindi Canali dal menu.
  2. Scegliere Utenti.
  3. Fare clic su Aggiungi canale, quindi su Oracle Web come tipo di canale.
  4. Completare la finestra di dialogo:
    • Immettere il nome del canale.
    • Per le connessioni autenticate:
      • Attivare l'opzione Autenticazione client abilitata per determinare se l'SDK si sta connettendo a un canale abilitato all'autenticazione del client.
      • Il canale comunicherà con i siti solo dai domini aggiunti come elenco separato da virgole. Ad esempio, *.corp.example.com, *.hdr.example.com. L'immissione di un singolo asterisco (*) consente l'accesso illimitato al canale da qualsiasi dominio. In genere, durante lo sviluppo si immette un solo asterisco. Per la produzione, aggiungere una lista di inclusione di domini.
      • Nel Max. Campo Scadenza token (minuti), impostare la quantità massima di tempo per il token JWT.
    • Per le connessioni non autenticate:
      • Disattivare l'opzione Abilitazione autenticazione client.
      • Immettere una lista separata da virgole di domini che possono accedere al canale. Se i domini in questa lista di inclusione includono asterischi (*.hdr.example.com) o se la lista di inclusione non è completamente nota, è possibile prendere in considerazione una connessione autenticata.
    • Impostare l'ora di scadenza della sessione.
    • Fare clic su Crea. Oracle Digital Assistant genererà l'ID canale e la chiave segreta necessari per inizializzare l'SDK. Tienili a portata di mano perché ne avrai bisogno durante la configurazione della pagina HTML per ospitare il widget di chat.
  5. Instrada il canale allo skill o all'assistente digitale.
  6. Attivare Canale abilitato.

Esercitazione: Proteggi la tua chat Oracle Web SDK

Puoi dare un'occhiata pratica alla protezione del widget Chat Web attraverso questa esercitazione: Proteggi la tua chat Oracle Web SDK.

Installare l'SDK

  1. Nel file ZIP estratto del kit Oracle Web SDK scaricato, individuare il file web-sdk.js (posizionato nella directory native-client-sdk-js).
  2. Salvare web-sdk.js (posizionato nella directory native-client-sdk-js dello ZIP estratto) nella directory del progetto. Prendere nota della posizione del file, poiché sarà necessario definire la proprietà <WebSDK URL> nel codice del tag <script>.
  3. Creare un file JavaScript con la funzione seguente che inizializza l'SDK. Questo file viene chiamato settings.js nell'esempio fornito con l'SDK.
    //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. Definire le proprietà descritte di seguito.
    • URI: il nome host nell'URL dell'istanza di Oracle Digital Assistant. Solo il primo percorso (/) deve essere passato qui. È possibile passare questo URL con o senza il protocollo (https://).
    • channelId: l'ID canale generato quando si crea il canale Web Oracle. Questa proprietà è necessaria perché collega il widget allo skill sottostante.
    • userId: un ID utente. Quando si specifica questo valore, è possibile tenere traccia della base utenti per questo skill mediante le metriche utente univoche in Insights. Quando non si fornisce un ID utente, ma l'SDK ne genererà uno con ogni nuova sessione. Questa proprietà è opzionale per le connessioni non autenticate.
  5. Nella pagina HTML, fare riferimento alle posizioni sia del file JS (setting.js nell'esempio seguente) della libreria web-sdk.js che dello spazio di nomi Web SDK, che in genere è Bots. Utilizzare questo spazio di nomi per richiamare le API pubbliche. Ad esempio, se si imposta lo spazio di nomi su Bots, le API vengono richiamate come Bots.<API>(). Per ulteriori informazioni sulle varie funzioni ed eventi, fare riferimento al manuale utente (disponibile sia come file Readme che come documento HTML) incluso nel file ZIP di Oracle Web SDK.
       <script src="scripts/settings.js"></script>
       <script src="scripts/web-sdk.js" onload="initSdk('Bots')"></script>    

Importazione della libreria mediante l'API di definizione del modulo asincrono

È possibile importare la libreria utilizzando le implementazioni dell'API AMD (Asychronous Module Definition), ad esempio RequireJS con Oracle JET e 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();
});

Importare la libreria in modo dinamico con JavaScript

Utilizzare la seguente funzione di utility basata su Mozilla Development Network (MDN) per importare la libreria in modo dinamico con JavaScript:
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>');

Configura autenticazione client

Oltre a utilizzare liste di domini consentiti, l'autenticazione client viene applicata dai token JWT firmati.

La generazione e la firma del token devono essere eseguite dal client nel server backend (preferibilmente dopo l'autenticazione utente/client) in grado di mantenere la sicurezza keyId e keySecret.

Quando l'SDK deve stabilire una connessione con il server ODA, in primo luogo richiede un token JWT dal client e quindi lo invia insieme alla richiesta di connessione. Il server ODA convalida la firma del token e ottiene il set di richieste dal payload JWT per verificare il token per stabilire la connessione.

Per abilitare questa modalità, questi due campi sono obbligatori durante l'inizializzazione dell'SDK: clientAuthEnabled: true deve essere passato nel parametro delle impostazioni dell'SDK e una funzione generatore di token deve essere passata come secondo parametro. La funzione deve restituire una promessa, risolta per restituire una stringa di token JWT firmata.
//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);
}

Il token JWT

L'applicazione client è responsabile della generazione del token JWT. Alcuni campi del payload del token sono obbligatori e vengono convalidati dal server ODA. I client devono utilizzare l'algoritmo di firma HS256 per firmare i token. Il corpo del token deve avere le seguenti affermazioni:
  • iat - emesso in tempo
  • exp - tempo di scadenza
  • channelId: ID canale
  • userId - ID utente
I token stessi devono essere firmati dalla chiave segreta del canale abilitato all'autenticazione del client a cui viene effettuata la connessione. Di seguito è riportato un esempio di token JWT firmato:
Codificato:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NzY3NDcyMDUsImV4cCI6MTU3Njc1MTExNywiY2hhbm5lbElkIjoiNDkyMDU5NWMtZWM3OS00NjE3LWFmOWYtNTk1MGQ2MDNmOGJiIiwidXNlcklkIjoiSm9obiIsImp0aSI6ImQzMjFjZDA2LTNhYTYtNGZlZS05NTBlLTYzZGNiNGVjODJhZCJ9.lwomlrI6XYR4nPQk0cIvyU_YMf4gYvfVpUiBjYihbUQ
decodificato:
  • Intestazione:
    {
        "typ": "JWT",
        "alg": "HS256"
    }
  • Payload:
    {
        "iat": 1576747205,
        "exp": 1576748406,
        "channelId": "4920595c-ec79-4617-af9f-5950d603f8bb",
        "userId": "John"
    }
Se un reclamo nel token manca o ha un formato errato per il relativo valore, viene visualizzato un messaggio di errore dall'SDK che descrive la causa. Connessione non tentata. Il messaggio di errore può essere utilizzato per risolvere il problema con il token JWT. Eventuali richieste aggiuntive passate nel payload non influiscono sul meccanismo di autenticazione client.