Configuração Básica

Aqui estão as etapas básicas para configurar um canal Oracle Web.

O que Você Precisa?

  • Um Canal Oracle Web. A criação do canal gera o ID do Canal e a Chave Secreta que você precisa para inicializar o aplicativo de chat.
  • O URL do Oracle Chat Server.
  • O Oracle Web SDK (localizado em SDKs do Cliente Nativo Oracle para Ambientes Nativos OCI) da página de download do ODA e do OMC da Oracle Technology Network. Faça o download deste ZIP e extraia-o no seu sistema local. Este ZIP inclui um guia do usuário que descreve as classes do SDK e um aplicativo de amostra que demonstra muitas de suas funcionalidades.

Configurar o Canal Oracle Web

Você pode configurar o canal para se conectar ao servidor de fala, texto ou anexo do ODA de dois modos: autenticado (para proteger o acesso ao canal) ou não autenticado.
  • A autenticação é aplicada usando JWT (JSON Web Tokens). O servidor de backend do cliente gera o token JWT, que é informado para o Oracle Web SDK. Este token é usado para cada solicitação a um servidor de fala, texto ou anexo do ODA.
    Observação

    Para proteger o acesso ao canal, o token sempre deve ser gerado por um servidor remoto. Ele nunca deve ser gerado no browser do cliente.
    Quando o aplicativo Web precisa se conectar a um servidor ODA, ele primeiro solicita o token do servidor de backend e, em seguida, adiciona-o ao cabeçalho Autorização. O servidor ODA valida o token, avalia as declarações e, em seguida, abre o soquete ou rejeita a conexão.

    Dica:

    Este artigo orienta na execução do SDK com um canal autenticado.
  • Modo não autenticado – Use o modo não autenticado quando o cliente não puder gerar tokens JWT assinados, quando não houver mecanismo de autenticação em vigor ou quando o widget do cliente já estiver protegido e visível para usuários autenticados.
Para configurar o canal Oracle Web:
  1. Escolha Desenvolvimento e Canais no menu.
  2. Escolha Usuários.
  3. Clique em Adicionar Canal e em Oracle Web como o tipo de canal.
  4. Preencha a caixa de diálogo:
    • Informe o nome do canal.
    • Para conexões autenticadas:
      • Ative a opção Autenticação do Cliente Ativada para determinar se o SDK está se conectando a um canal ativado para autenticação do cliente.
      • O canal só se comunicará com os sites dos domínios que você adicionar como uma lista separada por vírgulas. Por exemplo, *.corp.example.com, *.hdr.example.com. Inserir um único asterisco (*) permite o acesso irrestrito ao canal de qualquer domínio. Normalmente, você só inseriria um único asterisco durante o desenvolvimento. Para produção, você adicionaria uma lista de permissões de domínios.
      • No campo Expiração Máx. do de Token (Minutos), defina o tempo máximo para o token JWT.
    • Para conexões não autenticadas:
      • Desative a opção Autenticação do Cliente Ativada.
      • Informe uma lista separada por vírgulas de domínios que podem acessar o canal. Se os domínios desta lista de permissões incluírem asteriscos (*.hdr.example.com) ou se a lista de permissões não for completamente conhecida, você poderá considerar uma conexão autenticada.
    • Defina o tempo de expiração da Sessão.
    • Clique em Criar. O Oracle Digital Assistant gerará o ID do Canal e a Chave Secreta que você precisa para inicializar o SDK. Mantenha-os à mão, pois você precisará dessas informações ao configurar a página HTML para hospedar o widget de chat.
  5. Roteie o canal para a habilidade ou o assistente digital.
  6. Alterne Canal Ativado para Ativado.

Tutorial: Proteger o Chat do Oracle Web SDK

Você pode obter uma visão prática sobre como proteger o widget de chat Web por meio deste tutorial: Proteger o Chat do Oracle Web SDK.

Instalar o SDK

  1. No arquivo ZIP extraído do Oracle Web SDK submetido a download, localize o arquivo web-sdk.js (localizado no diretório native-client-sdk-js).
  2. Salve o arquivo web-sdk.js (localizado no diretório native-client-sdk-js do ZIP extraído) no diretório do projeto. Anote o local do arquivo, pois você precisará dele para definir a propriedade <WebSDK URL> no código da tag <script>.
  3. Crie um arquivo JavaScript com a função a seguir que inicializa o SDK. Chamamos esse arquivo de settings.js na amostra que é fornecida com o SDK.
    // settings.js
    const 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()
     {
     		const Bots = new WebSDK(chatSettings);
     // Initiate library with configuration
     		let isFirstConnection = true;
     		Bots.on(WebSDK.EVENT.WIDGET_OPENED, async () => {
     			if (isFirstConnection) {
     				try {
     					await Bots.connect(); // Connect to server
     					console.log('Connection Successful');
     				} catch (error) {
     					console.log('Connection failed');
     					console.log(error);
     				}
     				isFirstConnection = false;
     			}
     		});
    
     		window[name] = Bots;
     	}, 0);
     }
  4. Defina as seguintes propriedades:
    • URI - O nome do host no URL da instância do Oracle Digital Assistant. Somente o primeiro caminho (/) precisa ser passado aqui. Você pode transmitir esse URL com ou sem o protocolo (https://).
    • channelId - O ID do Canal que é gerado ao criar o canal Oracle Web. Essa propriedade é obrigatória porque conecta o widget à habilidade subjacente.
    • userId - Um ID de usuário. Quando você fornece esse valor, a base de usuários dessa habilidade pode ser rastreada pelas métricas exclusivas do usuário no Insights. Quando você não fornecer um ID de usuário, mas o SDK gerará um com cada nova sessão. Esta propriedade é opcional para conexões não autenticadas.
  5. Em sua página HTML, faça referência aos locais do seu arquivo JS (setting.js no exemplo a seguir) à biblioteca web-sdk.js e ao namespace do Web SDK, que geralmente é Bots. Use este namespace para chamar as APIs públicas. Por exemplo, se você definir o namespace como Bots, chamará as APIs como Bots.<API>(). Para saber mais sobre as diversas funções e eventos, consulte o guia do usuário (disponível como um arquivo readme e um documento HTML) que está incluído no arquivo ZIP do Oracle Web SDK.
       <script src="scripts/settings.js"></script>
       <script src="scripts/web-sdk.js" onload="initSdk('Bots')"></script>    

Carregar o SDK de uma CDN

Você também pode carregar o Web SDK da Rede de Entrega de Conteúdo (CDN) da Oracle. Usar uma CDN pode oferecer benefícios como tempos de carregamento mais rápidos por causa de servidores distribuídos geograficamente e uma carga de hospedagem reduzida porque você não precisará hospedar o arquivo web-sdk.js sozinho.
Observação

Essa abordagem simplifica a implantação descarregando a hospedagem do arquivo Web SDK para uma CDN, enquanto você mantém o controle sobre suas configurações de chat específicas por meio do arquivo settings.js.
A configuração é semelhante ao método Tag de Script HTML, com a principal diferença sendo a origem do arquivo web-sdk.js.
  1. Crie seu arquivo settings.js: Esse arquivo conterá a configuração do SDK e a função initSDK. A finalidade deste arquivo e seu conteúdo são os mesmos descritos na seção Tag do Script HTML. Você mesmo ainda hospeda este arquivo settings.js.
  2. Vincule settings.js e o web-sdk.js hospedado em CDN no seu arquivo HTML: Na seção <head> da sua página HTML, inclua uma tag de script para o seu arquivo settings.js hospedado localmente e outra para o Web SDK, apontando o atributo src para o URL da CDN.
    <head>
       <!-- 1. Your custom settings -->
        <script src="settings.js" defer></script>
       <!-- 2. Web SDK from CDN -->
       <script src="https://static.oracle.com/cdn/oda/<VERSION>/web-sdk.js" onload="initSDK('<WebSDK namespace>')" defer></script>
       <!--
          Option A: Example with a specific version
          <script src="https://static.oracle.com/cdn/oda/25.4.0/web-sdk.js" onload="initSDK('Bots')" defer></script>
                 Option B: Latest Stable Version (Convenient for always getting updates)
          <script src="https://static.oracle.com/cdn/oda/latest/web-sdk.js" onload="initSDK('Bots')" defer></script>
          -->
       <!--
          Important Notes for the CDN script tag (choose one option from above):
          - Replace 'https://static.oracle.com/cdn/oda/<VERSION>/web-sdk.js' with the actual CDN URL provided for the Oracle Web SDK.
          - For Option A: Replace '<VERSION>' in the URL with the specific SDK version number you need (e.g., '25.4.0').
          - For Option B: Using 'latest' instead of a specific version number will always load the most recent stable release.
          - See the 'Oracle CDN URLs' section below for a list of available versions and more details.
          - Replace '<WebSDK namespace>' (e.g., 'Bots' in the examples) with your chosen name for the SDK instance.
          -->
    </head>
URLs da CDN
O Oracle Web SDK pode ser carregado dos URLs oficiais da CDN a seguir.

Importar a Biblioteca Usando a API de Definição de Módulo Assíncrono

Você pode importar a biblioteca usando implementações da API de Definição de Módulo Assíncrono (AMD ), como o RequireJS com o Oracle JET e o SystemJS.
requirejs.config({
     paths: {
         WebSDK: '<path of the web-sdk>' // replace this with actual library path
     } });

 define(['WebSDK'], function(WebSDK)
 {     const settings = {
         URI: '<Server URI>',
         channelId: '<Channel ID>',
         userId: '<User ID>'
     };
     Bots = new WebSDK(settings);
     Bots.connect();
 });

Importar a Biblioteca de Maneira Dinâmica com JavaScript

Use a seguinte função de utilitário baseada em MDN (Mozilla Development Network) para importar a biblioteca de maneira dinâmica com JavaScript:
function fetchSDK(src, onloadFunction, name) {
    const 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('', initSDK, '');

Configurar Autenticação do Cliente

Além de usar listas de domínios permitidos, a autenticação do cliente é imposta por tokens JWT assinados.

A geração e a assinatura do token devem ser feitas pelo cliente no servidor de backend (preferencialmente após a autenticação do usuário/cliente) que é capaz de manter seguros o keyId e o keySecret.

Quando o SDK precisar estabelecer uma conexão com o servidor ODA, ele primeiro solicitará um token JWT do cliente e depois o enviará com a solicitação de conexão. O servidor ODA valida a assinatura do token e obtém o conjunto de reivindicações do payload JWT para confirmar o token para estabelecer a conexão.

Para ativar esse modo, esses dois campos são obrigatórios durante a inicialização do SDK: clientAuthEnabled: true deve ser informado no parâmetro de definições do SDK e uma função de gerador de token deve ser transmitida como segundo parâmetro. A função deve retornar uma Promessa, que é resolvida para retornar uma string de token JWT assinado.
async function generateToken() {
    const token = await fetch('https://yourbackend.com/endpointToGenerateJWTToken');
    return token;

}

Bots.init({
    URI: 'oda-instance.com',
    clientAuthEnabled: true
}, generateToken);

O Token JWT

O aplicativo cliente é responsável pela geração do token JWT. Alguns dos campos de payload do token são obrigatórios e validados pelo servidor ODA. Os clientes devem usar o algoritmo de assinatura HS256 para assinar os tokens. O corpo do token deve ter as seguintes reivindicações:
  • iat - emitido no momento
  • exp - tempo de expiração
  • channelId - ID do canal
  • userId - ID do usuário
Os tokens em si devem ser assinados pela chave secreta do canal ativado por autenticação do cliente com o qual a conexão é estabelecida. Veja aqui um exemplo de token JWT assinado:
Codificado:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NzY3NDcyMDUsImV4cCI6MTU3Njc1MTExNywiY2hhbm5lbElkIjoiNDkyMDU5NWMtZWM3OS00NjE3LWFmOWYtNTk1MGQ2MDNmOGJiIiwidXNlcklkIjoiSm9obiIsImp0aSI6ImQzMjFjZDA2LTNhYTYtNGZlZS05NTBlLTYzZGNiNGVjODJhZCJ9.lwomlrI6XYR4nPQk0cIvyU_YMf4gYvfVpUiBjYihbUQ
decodificado:
  • Cabeçalho:
    {
        "typ": "JWT",
        "alg": "HS256"
    }
  • Payload:
    {
        "iat": 1576747205,
        "exp": 1576748406,
        "channelId": "4920595c-ec79-4617-af9f-5950d603f8bb",
        "userId": "John"
    }
Se estiver faltando qualquer reivindicação no token ou tiver um formato incorreto para seu valor, uma mensagem de erro será lançada pelo SDK descrevendo a causa. Não há tentativa de conexão. A mensagem de erro pode ser usada para corrigir o problema com o token JWT. Nenhuma reivindicação adicional especificada no payload afeta o mecanismo de autenticação do cliente.