基本設定
Oracle Webチャネル設定の基本ステップを次に示します。
必要なもの
- Oracle Webチャネル。チャネルを作成すると、チャット・アプリケーションの初期化に必要なチャネルIDと秘密キーが生成されます。
- Oracle Chat ServerのURL。
- Oracle Technology NetworkのODAおよびOMCのダウンロード・ページから取得できるOracle Web SDK (Oracle Native Client SDKs for OCI Native Environmentsにあります)。このZIPをダウンロードしてローカル・システムに抽出します。このZIPには、SDKのクラスを説明するユーザー・ガイドと、その多くの機能をデモで示すサンプル・アプリケーションが含まれます。
Oracle Webチャネルの構成
認証(チャネルへのアクセスを保護する)または未認証の2つのモードで、ODA音声、テキストまたはアタッチメント・サーバーに接続するようにチャネルを構成できます。
-
認証は、JSON Web Token (JWT)を使用して強制されます。顧客のバックエンド・サーバーによってJWTトークンが生成され、その後Oracle Web SDKに渡されます。このトークンは、ODA音声、テキストまたはアタッチメント・サーバーへの各リクエストに使用されます。ノートWebアプリケーションではODAサーバーに接続する必要がある場合、まずバックエンド・サーバーからのトークンをリクエストし、次にそれを認可ヘッダーに追加します。ODAサーバーによってトークンが検証され、要求が評価された後、ソケットがオープンされるか、接続が拒否されます。
チャネルへのアクセスを保護するには、トークンは常にリモート・サーバーで生成される必要があります。クライアント・ブラウザ内で生成されないようにしてください。ヒント:
この記事では、認証済チャネルを使用してSDKを実行するステップを示します。 - 未認証モード – 未認証モードを使用するのは、クライアントが署名付きJWTトークンを生成できない場合、認証メカニズムが存在しない場合、またはクライアント・ウィジェットがすでに保護されていて認証済ユーザーから参照可能な場合です。
Oracle Webチャネルを構成するには:
- メニューから「開発」→「チャネル」を選択します。
- 「ユーザー」を選択します。
- 「チャネルの追加」をクリックし、チャネル・タイプとして「Oracle Web」をクリックします。
- ダイアログを完成させます:
- チャネル名を入力してください
- 認証済接続の場合:
- 「クライアント認証の有効化」トグルをオンに切り替えて、SDKがクライアント認証対応チャネルに接続しているかどうかを確認します。
- チャネルは、カンマ区切りリストとして追加するドメインのサイトとのみ通信します。たとえば、
*.corp.example.com
,*.hdr.example.com
です。アスタリスク(*)を1つ入力すると、任意のドメインからチャネルに無制限にアクセスできます。通常、開発時にアスタリスクを1つだけ入力します。本番では、ドメインの許可リストを追加します。 - 「最大トークン有効期限(分)」で、JWTトークンの最大時間を設定します。
- 未認証接続の場合:
- 「クライアント認証の有効化」トグルをオフに切り替えます。
- チャネルにアクセスできるドメインのカンマ区切りリストを入力します。この許可リスト内のドメインにアスタリスクが含まれている場合(
*.hdr.example.com
)、または許可リストが完全にはわからない場合は、認証された接続を検討できます。
- セッションの有効期間を設定します。
- 「作成」をクリックします。Oracle Digital Assistantによって、SDKの初期化に必要なチャネルIDと秘密キーが生成されます。これらは、チャット・ウィジェットをホストするようにHTMLページを構成する際に必要になるため、手近な場所に保持しておきます。
- チャネルをスキルまたはデジタル・アシスタントにルーティングします。
- 「チャネル有効」を「オン」に切り替えます。
チュートリアル: Oracle Web SDKチャットの保護
このチュートリアル: Oracle Web SDKチャットの保護を通じて、Webチャット・ウィジェットの保護を実際に体験することができます。
SDKのインストール
- ダウンロードしたOracle Web SDKの抽出済ZIPファイルで、(
native-client-sdk-js
ディレクトリにある)web-sdk.js
ファイルを探します。 - (抽出済ZIPの
native-client-sdk-js
ディレクトリにある)web-sdk.js
をプロジェクト・ディレクトリに保存します。<script>
タグのコードに<WebSDK URL>
プロパティを定義する際に必要になるため、ファイルの場所をメモしておきます。 - SDKを初期化する次の関数を使用して、JavaScriptファイルを作成します。このファイルは、SDKに付属するサンプルで
settings.js
と呼びます。// 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); }
- 次のプロパティを定義します:
URI
- Oracle Digital AssistantインスタンスURLのホスト名。ここで渡す必要があるのは、最初のパス(/
)のみです。このURLは、プロトコル(https://
)の有無にかかわらず渡すことができます。channelId
- Oracle Webチャネルの作成時に生成されるチャネルID。基礎となるスキルにウィジェットを接続するため、このプロパティは必須です。userId
- ユーザーID。この値を指定すると、このスキルのユーザー・ベースをインサイトの一意のユーザー・メトリックで追跡できます。ユーザーIDを指定せず、SDKによって新しいセッションごとにIDが生成されます。このプロパティは、未認証接続ではオプションです。
- HTMLページで、JSファイル(次の例では
setting.js
)のweb-sdk.js
ライブラリとWeb SDKネームスペース(通常はBots
)の両方の場所を参照します。このネームスペースを使用してパブリックAPIを起動します。たとえば、ネームスペースをBots
に設定した場合、Bots.<API>()
としてAPIを起動します。様々な機能およびイベントの詳細は、Oracle Web SDKのZIPファイルに含まれているユーザー・ガイド(readmeとHTMLドキュメントの両方で利用可能)を参照してください。<script src="scripts/settings.js"></script> <script src="scripts/web-sdk.js" onload="initSdk('Bots')"></script>
CDNからのSDKのロード
Oracleのコンテンツ配信ネットワーク(CDN)からWeb SDKをロードすることもできます。CDNを使用すると、地理的に分散したサーバーによるロード時間の短縮や、
web-sdk.js
ファイルを自分でホストする必要がないため、ホスティングの負荷の軽減などの利点が得られます。
ノート
このアプローチでは、
この設定はHTMLスクリプト・タグ・メソッドに似ていますが、主な違いはこのアプローチでは、
settings.js
ファイルを使用して特定のチャット構成を制御しながら、Web SDKファイルのホスティングをCDNにオフロードすることで、デプロイメントを簡素化します。
web-sdk.js
ファイルのソースです。
settings.js
ファイルを作成します。このファイルには、SDK構成とinitSDK
関数が含まれます。このファイルの目的とその内容は、「HTMLスクリプト・タグ」の項で説明されているものと同じです。このsettings.js
ファイルは、引き続き自分でホストします。- HTMLファイルのsettings.jsおよびCDNでホストされている
web-sdk.js
をリンクします。HTMLページの<head>
セクションで、ローカルでホストされているsettings.js
ファイル用のスクリプト・タグを1つ、Web SDK用のスクリプト・タグを1つ含め、src
属性をCDN URLを指します。<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>
CDN URL
Oracle Web SDKは、次の公式CDN URLからロードできます。
latest
タグの使用:https://static.oracle.com/cdn/oda/latest/web-sdk.js
このURLは常に、Web SDKの最新の安定したリリースを指します。開発に便利です。また、アプリケーションが最新の機能および修正をリリース時に自動的に受け取ります。ノート
本番環境では注意してください。便利ですが、自動更新によって変更が導入される場合があります。したがって、本番環境では、更新プロセスの安定性と制御性を確保するために、かわりに特定のバージョンを使用することを検討してください。- 特定のバージョンの使用:
https://static.oracle.com/cdn/oda/<VERSION>/web-sdk.js
ノート
本番環境には特定のURLを使用します。この方法では、本番環境に推奨される固定バージョンのWeb SDKを使用できます。これにより、更新を適用するタイミングを制御でき、徹底的なテストが可能になります。
特定のバージョンを設定するには、<VERSION>
を必要なバージョン番号(25.4.0など)に置き換えます。現在使用可能な安定バージョンは次のとおりです。- バージョン25.04: https://static.oracle.com/cdn/oda/25.4.0/web-sdk.js
- バージョン25.02: https://static.oracle.com/cdn/oda/25.2.0/web-sdk.js
- バージョン24.12: https://static.oracle.com/cdn/oda/24.12.0/web-sdk.js
- バージョン24.10: https://static.oracle.com/cdn/oda/24.10.0/web-sdk.js
- バージョン24.08: https://static.oracle.com/cdn/oda/24.8.0/web-sdk.js
- バージョン24.06: https://static.oracle.com/cdn/oda/24.6.0/web-sdk.js
- バージョン24.04: https://static.oracle.com/cdn/oda/24.4.0/web-sdk.js
- バージョン24.02: https://static.oracle.com/cdn/oda/24.2.0/web-sdk.js
ヒント:
使用可能なCDNバージョンおよび詳細なリリース情報の最新のリストについては、常に最新のSDKリリース・ノートまたはOracle Digital Assistantの公式ドキュメントを参照してください。
非同期モジュール定義APIを使用したライブラリのインポート
RequireJS (Oracle JETを含む)やSystemJSなどの非同期モジュール定義(AMD) APIの実装を使用して、ライブラリをインポートできます。
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();
});
JavaScriptを使用したライブラリの動的インポート
次のMozilla Development Network (MDN)ベースのユーティリティ関数を使用して、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, '');
クライアント認証の構成
クライアント認証は、許可されたドメインのリストの使用に加えて、署名付きJWTトークンによって実施されます。
トークンの生成および署名は、バックエンド・サーバーでクライアントによって行われる必要があります(ユーザー/クライアント認証の後が望ましい)。こうすることで、keyId
とkeySecret
の安全性が維持されます。
SDKがODAサーバーとの接続を確立する必要があるとき、JWTトークンを最初にクライアントにリクエストし、その後、JWTトークンを接続リクエストとともに送信します。ODAサーバーはトークン署名を検証し、JWTペイロードから要求セットを取得して、接続を確立するためのトークンを確認します。
このモードを有効にするには、SDKの初期化時に次の2つのフィールドが必要です。SDK設定パラメータに
clientAuthEnabled: true
を渡し、トークン・ジェネレータ関数を2つ目のパラメータとして渡す必要があります。この関数は、署名済JWTトークン文字列を返すように解決されるPromiseを返す必要があります。async function generateToken() {
const token = await fetch('https://yourbackend.com/endpointToGenerateJWTToken');
return token;
}
Bots.init({
URI: 'oda-instance.com',
clientAuthEnabled: true
}, generateToken);
JWTトークン
クライアント・アプリケーションがJWTトークンを生成します。一部のトークン・ペイロード・フィールドは必須であり、ODAサーバーによって検証されます。クライアントは、HS256署名アルゴリズムを使用してトークンに署名する必要があります。トークンの本文には、次の要求が必要です:
iat
- 発行時刻exp
- 有効期限channelId
- チャネルID。userId
- ユーザーID
エンコード済:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NzY3NDcyMDUsImV4cCI6MTU3Njc1MTExNywiY2hhbm5lbElkIjoiNDkyMDU5NWMtZWM3OS00NjE3LWFmOWYtNTk1MGQ2MDNmOGJiIiwidXNlcklkIjoiSm9obiIsImp0aSI6ImQzMjFjZDA2LTNhYTYtNGZlZS05NTBlLTYzZGNiNGVjODJhZCJ9.lwomlrI6XYR4nPQk0cIvyU_YMf4gYvfVpUiBjYihbUQ
デコード済:
- ヘッダー:
{ "typ": "JWT", "alg": "HS256" }
- ペイロード:
{ "iat": 1576747205, "exp": 1576748406, "channelId": "4920595c-ec79-4617-af9f-5950d603f8bb", "userId": "John" }