Configuración Básica
Estos son los pasos básicos para obtener una configuración de canal web de Oracle.
¿Qué se necesita?
- Canal web de Oracle. Al crear el canal se genera el ID de canal y la clave secreta necesarios para inicializar la aplicación de chat.
- URL del servidor de chat de Oracle.
- El SDK web de Oracle (ubicado en los SDK de cliente nativo de Oracle para entornos nativos de OCI) de la página de descarga de ODA y OMC de Oracle Technology Network. Descargue este ZIP y extráigalo en su sistema local. Este ZIP incluye una guía de usuario que describe las clases de SDK y una aplicación de ejemplo que demuestra muchas de sus funciones.
Configuración del canal web de Oracle
-
La autenticación se aplica mediante tokens web de JSON (JWT). El servidor backend del cliente genera el token JWT, que luego se transfiere al SDK de Oracle Web. Este token se utiliza para cada solicitud a un servidor de voz, texto o anexos de ODA.NotaCuando la aplicación web necesita conectarse a un servidor ODA, primero solicita el token del servidor backend y, a continuación, lo agrega a la cabecera de autorización. El servidor ODA valida el token, evalúa las reclamaciones y, a continuación, abre el socket o rechaza la conexión.
Para proteger el acceso al canal, el token siempre lo debe generar siempre un servidor remoto. Nunca debe generarse en el explorador del cliente.Consejo:
Este artículo le guiará a través de la ejecución del SDK con un canal autenticado. - Modo no autenticado: utilice el modo no autenticado cuando el cliente no pueda generar tokens de JWT firmados, cuando no se aplique ningún mecanismo de autenticación o cuando el widget de cliente ya esté protegido y visible para los usuarios autenticados.
- Seleccione Desarrollo y, a continuación, Canales en el menú.
- Seleccione Usuarios.
- Haga clic en Agregar canal y, a continuación, en Oracle Web como tipo de canal.
- Complete el cuadro de diálogo:
- Introduzca el nombre del canal.
- Para conexiones autenticadas:
- Active el conmutador Autenticación de cliente activada para determinar si el SDK se conecta a un canal con la autenticación de cliente activada.
- El canal solo se comunicará con los sitios de los dominios que agregue como una lista separada por comas. Por ejemplo,
*.corp.example.com
,*.hdr.example.com
. La introducción de un solo asterisco (*) permite el acceso sin restricciones al canal desde cualquier dominio. Normalmente, solo se introduce un asterisco durante el desarrollo. Para la producción, se agregaría una lista de permitidos de los dominios. - En el campo Caducidad máxima de token (minutos), defina la cantidad máxima de tiempo para el token de JWT.
- Para conexiones no autenticadas:
- Desactive el conmutador Activación de la autenticación del cliente.
- Introduzca una lista separada por comas de los dominios que pueden acceder al canal. Si los dominios de esta lista de permitidos incluyen asteriscos (
*.hdr.ejemplo.com
) o si la lista de permitidos no se conoce por completo, puede considerar una conexión autenticada.
- Defina la hora de caducidad de la sesión.
- Haga clic en Crear. Oracle Digital Assistant generará el ID de canal y la clave secreta necesarios para inicializar el SDK. Manténgalos a mano porque los necesitará al configurar la página HTML para alojar el widget de chat.
- Enruta el canal a su aptitud o asistente digital.
- Active Canal activado.
Tutorial: Protección del chat del SDK de Oracle Web
Para acceder a una experiencia práctica centrada en la protección del widget de chat web, consulte este tutorial: Protección del chat del SDK de Oracle Web.
Instalación del SDK
- En el archivo ZIP extraído del SDK web de Oracle descargado, localice el archivo
web-sdk.js
(ubicado en el directorionative-client-sdk-js
). - Guarde
web-sdk.js
(situado en el directorionative-client-sdk-js
del ZIP extraído) en el directorio del proyecto. Observe la ubicación del archivo, ya que tendrá que definir la propiedad<WebSDK URL>
en el código de la etiqueta<script>
. - Cree un archivo JavaScript con la siguiente función que inicializa el SDK. Este archivo se denomina
settings.js
en el ejemplo que se incluye con el 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); }
- Defina las siguientes propiedades:
URI
: nombre de host en la URL de instancia de Oracle Digital Assistant. Aquí solo se debe transferir la primera ruta (/
). Puede transferir esta URL con o sin el protocolo (https://
).channelId
: ID de canal que se genera al crear el canal web de Oracle. Esta propiedad es necesaria porque conecta el widget a la aptitud subyacente.userId
: ID de usuario. Al proporcionar este valor, las métricas de usuario únicas de Insights pueden realizar un seguimiento de la base de usuarios de esta aptitud. Si no proporciona un ID de usuario, pero el SDK generará uno con cada nueva sesión. Esta propiedad es opcional para conexiones no autenticadas.
- En la página HTML, haga referencia a las ubicaciones del archivo JS (
setting.js
en el siguiente ejemplo) de la bibliotecaweb-sdk.js
y del espacio de nombres del SDK web, que normalmente esBots
. Utilice este espacio de nombres para llamar a las API públicas. Por ejemplo, si define el espacio de nombres enBots
, llame a las API comoBots.<API>()
. Para obtener más información sobre las distintas funciones y eventos, consulte la guía del usuario (disponible como archivo Léame y documento HTML) que se incluye en el archivo ZIP del SDK de Oracle Web.<script src="scripts/settings.js"></script> <script src="scripts/web-sdk.js" onload="initSdk('Bots')"></script>
Importación de la biblioteca mediante la API de definición de módulo asíncrono
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();
});
Importación de la biblioteca de forma dinámica 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>');
Configuración de la autenticación de clientes
Además de utilizar listas de dominios permitidos, los tokens de JWT firmados aplican la autenticación de cliente.
El cliente debe generar y firmar el token en el servidor backend (preferiblemente después de la autenticación del usuario/cliente), que es capaz de mantener la seguridad de keyId
y keySecret
.
Cuando el SDK necesita establecer una conexión con el servidor de ODA, primero solicita un token de JWT del cliente y, a continuación, lo envía junto con la solicitud de conexión. El servidor de ODA valida la firma del token y obtiene el juego de reclamaciones de la carga útil de JWT para verificar el token para establecer la conexión.
clientAuthEnabled: true
se debe transferir en el parámetro de configuración del SDK y una función de generador de tokens se debe transferir como segundo parámetro. La función debe devolver un valor Promise, que se resuelve para devolver una cadena de token JWT firmada.//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);
}
Token de JWT
iat
: emitido a tiempoexp
: tiempo de caducidadchannelId
: ID de canaluserId
: ID de usuario
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NzY3NDcyMDUsImV4cCI6MTU3Njc1MTExNywiY2hhbm5lbElkIjoiNDkyMDU5NWMtZWM3OS00NjE3LWFmOWYtNTk1MGQ2MDNmOGJiIiwidXNlcklkIjoiSm9obiIsImp0aSI6ImQzMjFjZDA2LTNhYTYtNGZlZS05NTBlLTYzZGNiNGVjODJhZCJ9.lwomlrI6XYR4nPQk0cIvyU_YMf4gYvfVpUiBjYihbUQ
- Cabecera:
{ "typ": "JWT", "alg": "HS256" }
- Carga útil:
{ "iat": 1576747205, "exp": 1576748406, "channelId": "4920595c-ec79-4617-af9f-5950d603f8bb", "userId": "John" }