機能
Oracle Android SDKで構成できる機能は次のとおりです。
絶対タイムスタンプおよび相対タイムスタンプ
機能フラグ: timestampType: TimestampMode.RELATIVE
チャット・メッセージについて絶対タイムスタンプまたは相対タイムスタンプを有効にできます。絶対タイムスタンプには、各メッセージの正確な時間が表示されます。相対タイムスタンプは最新のメッセージにのみ表示され、前のメッセージからの秒数、日数、時間数、月数または年数で表されます。絶対タイムスタンプによって得られる正確さはアーカイブ・タスクに最適です。しかしながら、チャット・セッションの限定的なコンテキスト内では、ユーザーがタイムスタンプを比較してメッセージ間の時間経過を求める必要があるため、正確さのためにユーザー・エクスペリエンスが損なわれます。相対タイムスタンプを使用すると、ユーザーは、すぐに理解できる「たった今」や「少し前」のような言葉を使用して会話を簡単に進めることができます。相対タイムスタンプを使用すると、開発タスクが簡略化されるだけでなく、別の方法でユーザー・エクスペリエンスが向上します。相対タイムスタンプでは、メッセージからの経過時間が秒、日、時、月または年を単位としてマークされるため、タイムゾーンに合せて変換する必要がありません。
相対タイムスタンプの構成
- タイムスタンプの有効化 –
enableTimestamp: true
- 相対タイムスタンプの有効化 –
timestampType: 'relative'
timestampType: 'relative'
)を構成すると、一日の最初のメッセージの前にヘッダーとして絶対タイムスタンプが表示されます。このヘッダーは、会話がクリアされておらず、履歴で古いメッセージをまだ確認できる場合に表示されます。
- 最初の10秒間
- 10秒-60秒
- 1分-60分の毎分
- 1時間-24時間の毎時
- 1日-30日の毎日
- 1月-12月の毎月
- 1年目の後の毎年
処理ボタン・レイアウト
機能フラグ: actionsLayout
actionsLayout
は、ローカル、グローバル、カードおよびフォーム・アクションのレイアウト方向を設定します。これをLayoutOrientation.HORIZONTAL
に設定すると、これらのボタンは横方向にレイアウトされ、コンテンツがオーバーフローすると折り返されます。
BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(<Server_URI>, false, getApplicationContext())
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.actionsLayout(actionsLayout)
.build();
添付フィルタリング
(必須) <ここに簡単な説明を入力します。>
機能フラグ: shareMenuItems
shareMenuItems
を構成する前に、enableAttachment
をtrue
に設定する必要があります。
ArrayList<Object> customItems = new ArrayList<>();
ShareMenuCustomItem shareMenuCustomItem1 = new ShareMenuCustomItem("pdf bin", "Label1", 1024, R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem2 = new ShareMenuCustomItem("doc", "Label2", R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem3 = new ShareMenuCustomItem("csv");
ArrayList<Object> customItems = new ArrayList<>(Arrays.asList(shareMenuCustomItem1,shareMenuCustomItem2,shareMenuCustomItem3,ShareMenuItem.CAMERA));
BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(sharedPreferences.getString(getString(R.string.pref_name_chat_server_host), Settings.CHAT_SERVER_URL), false, getApplicationContext())
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.shareMenuItems(customItems)
.enableAttachment(true)
.build();
shareMenuCustomItem3 = ShareMenuCustomItem('csv')
のように、ShareMenuCustomItem
オブジェクトのラベルに値がないか、null
の場合、share_
に接尾辞が付けられたtype
文字列がラベルになります。shareMenuCustomItem3
では、ラベルはshare_csv
です。
ShareMenuCustomItem
オブジェクトのtype
を*
と設定すると、ユーザーがすべてのファイル・タイプをアップロードできるようになります。
public static void shareMenuItems(ArrayList<Object> shareMenuItems)
Bots.shareMenuItems(customItems);
APIをコールして、共有メニュー・アイテム・ポップアップを動的に更新できます(customItems
はObjects
のArrayList
です)。各オブジェクトの型は、ShareMenuItem
列挙値またはShareMenuCustomItem
のオブジェクトです。ArrayList<Object> customItems = new ArrayList<>();
ShareMenuCustomItem shareMenuCustomItem1 = new ShareMenuCustomItem("pdf bin", "Label1", 1024, R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem2 = new ShareMenuCustomItem("doc", "Label2", R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem3 = new ShareMenuCustomItem("csv");
customItems.add(shareMenuCustomItem1);
customItems.add(ShareMenuItem.CAMERA);
customItems.add(ShareMenuItem.FILE);
customItems.add(shareMenuCustomItem2);
customItems.add(shareMenuCustomItem3);
Bots.shareMenuItems(customItems);
フィールドの自動送信
フィールドのautoSubmit
プロパティがtrue
に設定されている場合、クライアントは、これまでに入力された有効なフィールド値を含むsubmittedField
マップを含むFormSubmissionMessagePayload
を送信します。まだ設定されていないフィールド(必須かどうかに関係なく)、またはクライアント側の検証に違反するフィールドは、submittedField
マップに含まれません。自動送信フィールド自体に無効な値が含まれている場合、送信メッセージは送信されず、その特定のフィールドに対するクライアント・エラー・メッセージが表示されます。自動発行が成功すると、フォーム送信メッセージのpartialSubmitField
は、autoSubmit
フィールドのid
に設定されます。
接続および切断方法
public void disconnect()
およびpublic void connect()
メソッドを使用して接続および切断できます。WebSocketは、ダイレクト・メソッドのコール後に閉じられます。Bots.disconnect();
スキルが切断状態の場合、次のメソッドをコールすると、WebSocket接続が再確立されます:Bots.connect();
botsconfiguration
オブジェクトでpublic void connect(Botsconfiguration botsconfiguration)
がコールされると、既存のWebSocket接続がクローズされ、新しいbotsconfiguration
オブジェクトを使用して新しい接続が確立されます。BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(<SERVER_URI>, false, getApplicationContext()) // Configuration to initialize the SDK
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.build();
Bots.connect(botsConfiguration);
デフォルトのクライアント・レスポンス
機能フラグ: enableDefaultClientResponse: true
(デフォルト: false
)
enableDefaultClientResponse: true
を使用して、スキル・レスポンスが遅延したとき、またはスキル・レスポンスがまったくない場合、入力インジケータを伴うデフォルトのクライアント側レスポンスを指定します。ユーザーが最初のメッセージ/問合せを送信したが、スキルがodaas_default_greeting_timeout
フラグで設定された秒数で応答しない場合、スキルはodaas_default_greeting_message
翻訳文字列を使用して構成されたグリーティング・メッセージを表示できます。次に、クライアントはスキルのレスポンスを再度チェックします。スキルのレスポンスを受信した場合、クライアントはスキルのレスポンスを表示しますが、受信されていない場合は、odaas_default_wait_message_interval
フラグで設定された間隔で待機メッセージ(odaas_default_wait_message
変換文字列で構成)を表示します。スキル・レスポンスの待機がtypingIndicatorTimeout
フラグで設定されたしきい値を超えると、クライアントはユーザーへのsorryレスポンスを表示し、入力インジケータを停止します。odaas_default_sorry_message
変換文字列を使用して、sorryレスポンスを構成できます。
委任
機能構成: messageModifierDelegate
interface MessageModifierDelegate
を実装し、そのインスタンスをmessageModifierDelegate
プロパティに渡す必要があります。private MessageDelegate implements MessageModifierDelegate {
@Override
public Message beforeSend(Message message) {
// Handle before send delegate here
}
@Override
public Message beforeDisplay(Message message) {
if (message != null && message.getPayload() != null && message.getPayload().getType() == MessagePayload.MessageType.CARD) {
((CardMessagePayload)message.getPayload()).setLayout(CardLayout.VERTICAL);
}
return message;
}
@Override
public Message beforeNotification(Message message) {
// Handle before notification delegate here
}
}
@Override
public void beforeEndConversation(CompletionHandler completionHandler) {
// Handle before end conversation end delegate here
// Trigger completionHandler.onSuccess() callback after successful execution of the task.
// Trigger completionHandler.onFailure() callback when the task is unsucessful.
}
}
public Message beforeDisplay(Message message)
public Message beforeDisplay(Message message)
デリゲートでは、スキルのメッセージが会話で表示される前に変更できるようになります。デリゲートから返された変更済メッセージが会話に表示されます。メソッドからnull
が返された場合、メッセージは表示されません。
会話履歴の表示
ボット構成でdisplayPreviousMessages
をtrue
またはfalse
に設定することで、SDKの再初期化後に、ユーザーのローカル会話履歴表示の有効または無効を切り替えることができます。false
に設定すると、SDKの再初期化後には、以前のメッセージがユーザーに表示されません。
チャット・セッションの終了
FeatureFlag: enableEndConversation: true
enableEndConversation: true
は、ユーザーが現在のチャット・セッションを明示的に終了できるようにするクローズ・ボタンをヘッダー・ビューに追加します。ユーザーがこのクローズ・ボタンをクリックすると確認プロンプト・ダイアログが開き、クローズ・アクションを確認すると、SDKはチャット・セッションの終了を示すイベント・メッセージをスキルに送信します。次に、SDKはインスタンスからスキルを切断し、チャット・ウィジェットを縮小して、現在のユーザーの会話履歴を消去します。SDKは、beforeEndConversation(CompletionHandler completionHandler)
で委任をトリガーします。この委任を使用して、セッション・リクエストのクローズをサーバーに送信する前にタスクを実行できます。登録できるOnChatEnd()
イベントも発生します。
その後、チャット・ウィジェットを開くと、新しいチャット・セッションが開始されます。
CompletionHandler
CompletionHandler
は、SDKに実装されるイベント・リスナーで、ホスト・アプリケーションのbeforeEndConversation(CompletionHandler completionHandler)
デリゲートで実行されるタスクの完了をリスニングします。ODAおよびOMCのダウンロード・ページから入手できるSDKに付属のJavadocを参照してください。
ヘッドレスSDK
SDKは、そのUIがなくても使用できます。このモードで使用するには、プロジェクトへのOracle Android Client SDKの追加の説明に従って、プロジェクトにcom.oracle.bots.client.sdk.android.core-24.12.aar
パッケージのみをインポートします。
SDKは、サーバーへの接続を維持し、メッセージの送信、メッセージの受信、およびネットワーク・ステータスやその他のサービスに関する更新の取得を行うAPIを提供します。APIを使用してSDKと対話し、UIを更新できます。
Bots
クラスで使用可能なsend*()
APIのいずれかを使用してメッセージを送信できます。たとえば、public static void sendMessage(String text)
は、テキスト・メッセージをスキルまたはデジタル・アシスタントに送信します。
public静的void sendMessage(String text)
text
パラメータは、テキスト・メッセージです。Bots.sendMessage("I want to order a Pizza");
EventListener
EventListener
インタフェースを実装する必要があり、このインタフェースが次の機能を実装します:
void onStatusChange(ConnectionStatus connectionStatus)
– このメソッドは、WebSocket接続のステータスが変更されたときにコールされます。connectionStatus
パラメータは、接続の現在のステータスです。ConnectionStatus
列挙の詳細は、SDK (ODAおよびOMCのダウンロード・ページから入手可能)に含まれるJavadocを参照してください。void onMessageReceived(Message message)
– このメソッドは、新しいメッセージがスキルから受信されたときにコールされます。message
パラメータは、スキルから受信されたメッセージです。Message
クラスの詳細は、SDK (ODAおよびOMCのダウンロード・ページから入手可能)に含まれるJavadocを参照してください。void onMessageSent(Message message)
- このメソッドは、メッセージがスキルに送信されたときにコールされます。messageパラメータは、スキルに送信されるメッセージです。Message
クラスの詳細は、SDK (ODAおよびOMCのダウンロード・ページから入手可能)に含まれるJavadocを参照してください。void onAttachmentComplete()
– このメソッドは、アタッチメントのアップロードが完了したときにコールされます。
public class BotsEventListener implements EventListener {
@Override
public void onStatusChange(ConnectionStatus connectionStatus) {
// Handle the connection status change
}
@Override
public void onMessageReceived(Message message) {
// Handle the messages received from skill/DA
}
@Override
public void onMessageSent(Message message) {
// Handle the message sent to skill or Digital Assistant
}
@Override
public void onAttachmentComplete() {
// Handle the post attachment upload actions
// Close the attachment upload progress popup if any etc.
}
}
EventListener
タイプのインスタンスは、setEventListener(EventListener eventListener)
に渡される必要があります。
ウィジェット内Webビュー
機能フラグ: linkHandler
ユーザーがチャット・ウィジェット内からWebページにアクセスできるように、チャット・メッセージのリンク動作を構成できます。チャット・ウィジェットがWebビュー内でリンクを開くため、ユーザーは、ページをタブまたは別のブラウザ・ウィンドウで表示するために会話から切り替える必要がなく、チャットにとどまることができます。
ウィジェット内Webビューの構成
機能フラグ: webViewConfig
linkHandler
関数にWebviewLinkHandlerType.WEBVIEW
を設定します。webViewConfig
クラス・オブジェクトを使用して、Webビュー自体のサイズと表示を設定できます:BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(<SERVER_URI>, false, getApplicationContext()) // Configuration to initialize the SDK
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.linkHandler(WebviewLinkHandlerType.WEBVIEW)
.webViewConfig(new WebViewConfig()
.webViewSize(WebviewSizeWindow.FULL)
.webViewTitleColor(<COLOR_VALUE>)
.webviewHeaderColor(<COLOR_VALUE>)
.clearButtonLabel(<BUTTON_TEXT>)
.clearButtonLabelColor(<COLOR_VALUE>)
.clearButtonIcon(<IMAGE_ID>))
.build();
このコード・スニペットに示すように、Webビューに次の属性を設定できます:属性 | 設定 |
---|---|
webViewSize |
ウィジェット内Webビュー・ウィンドウの画面サイズをWebviewSizeWindow 列挙を使用して設定します。これには、PARTIAL (WebviewSizeWindow.PARTIAL )とFULL (WebviewSizeWindow.FULL )という2つの値があります。
|
clearButtonLabel |
Webビューの右上隅にあるクリア/クローズ・ボタンに使用するテキストを設定します。デフォルト・テキストはDONE です。
|
clearButtonIcon |
クリア・ボタンのアイコンを設定します。このアイコンは、ボタン内に左揃えで表示されます。 |
clearButtonLabelColor |
クリア・ボタン・ラベルのテキストの色を設定します。 |
clearButtonColor |
クリア・ボタンの背景色を設定します。 |
webviewHeaderColor |
Webビュー・ヘッダーの背景色を設定します。 |
webviewTitleColor |
ヘッダーのタイトルの色を設定します。タイトルは、開いているWebリンクのURLです。 |
複数言語チャット
機能フラグ: multiLangChat
Android SDKのネイティブ言語サポートにより、チャット・ウィジェットがユーザーの言語を検出できると同時に、ヘッダーのドロップダウン・メニューでユーザーが会話言語を選択できるようになります。ユーザーは、会話間でのみ言語を切り替えることができますが、新しい言語を選択すると会話がリセットされるため、会話中にはできません。
言語メニューの有効化
lang
)とオプションの表示ラベル(label
)で構成されるsupportedLanguage
ArrayListを含むオブジェクトでmultiLangChat
プロパティを定義することで、ユーザーがドロップダウン・メニューから優先言語を選択できるようにするメニューを有効にできます。この配列の外部で、primary
プロパティを使用してオプションでデフォルト言語を設定できます(次のスニペットではprimary("en")
)。ArrayList<SupportedLanguage> supportedLanguages = new ArrayList<>();
supportedLanguages.add(new SupportedLanguage("en"));
supportedLanguages.add(new SupportedLanguage("fr", "French"));
supportedLanguages.add(new SupportedLanguage("de", "German"));
MultiLangChat multiLangChat = new MultiLangChat().supportedLanguage(supportedLanguages).primary("en");
BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(<SERVER_URI>, false, getApplicationContext()) // Configuration to initialize the SDK
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.multiLangChat(multiLangChat)
.build();
渡されたサポート対象言語が、チャット・ウィジェットによって、ヘッダーにあるドロップダウン・メニューに表示されます。使用可能な言語に加えて、メニューには「言語の検出」オプションも含まれています。ユーザーがこのメニューから言語を選択すると、現在の会話がリセットされ、選択した言語で新しい会話が開始されます。ユーザーが選択した言語は、同じブラウザではセッションにまたがって継続されるため、チャット・ウィジェットを含むページからユーザーがスキルに再アクセスすると、以前の言語が自動的に選択されます。
- ドロップダウン・メニューを表示するには、少なくとも2つの言語を定義する必要があります。
primary
キーを省略すると、ウィジェットがユーザー・プロファイルの言語を自動的に検出し、メニューの「言語の検出」オプションを選択します。
言語メニュー使用不可
バージョン21.12以降では、supportedLanguage
ArrayListを使用せずに初期構成でprimary
を渡すことによって、言語選択ドロップダウン・メニューを構成せずにチャット言語を構成および更新することもできます。primary
変数に渡される値は、会話のチャット言語として設定されます。
言語の検出
primary
プロパティを省略すると、ウィジェットによってユーザー・プロファイルの言語が自動的に検出され、メニューの「言語の検出」オプションがアクティブ化されます。
setPrimaryChatLanguage(lang)
APIをコールすると、選択した言語を動的に更新できます。渡されたlang
がサポートされている言語のいずれかと一致すると、その言語が選択されます。一致するものが見つかりません。「言語の検出」がアクティブ化されます。Bots.setPrimaryChatLanguage('und')
APIをコールして、「言語の検出」オプションをアクティブ化することもできます('und'
は未確定を示します)。
ドロップダウン・メニューが構成されていない場合でも、setPrimaryChatLanguage(lang)
APIを使用してチャット言語を動的に更新できます。
複数言語チャット・クイック・リファレンス
手順は次のとおりです... | ...操作 |
---|---|
言語選択ドロップダウンをエンド・ユーザーに表示します。 | supportedLanguage ArrayListを含むオブジェクトでmultiLangChat プロパティを定義します。
|
言語選択ドロップダウン・メニューをエンド・ユーザーに表示せずに、チャット言語を設定します。 | primary のみを定義します。
|
デフォルト言語を設定します。 | supportedLanguage 配列リストを指定してprimary を渡します。primary 値は、配列に含まれるサポートされている言語のいずれかである必要があります。
|
言語検出機能の有効化 | primary をund として渡します。
|
チャット言語を動的に更新します。 | setPrimaryChatLanguage(lang) APIをコールします。
|
「共有」メニュー
- ビジュアル・メディア・ファイル(イメージおよびビデオ)
- オーディオ・ファイル
- ドキュメント、PDF、スプレッドシートなどの一般ファイル
- ロケーション
オブジェクトのArrayListをshareMenuItems shareMenuItems(Arraylist<Object>)
に渡すことで、メニューで選択できるアイテムのタイプを制限すなわちフィルタしたり、メニューのアイコンやラベルをカスタマイズしたり、アップロード・ファイル・サイズ(次のスニペットでは1024など)を制限したりできます。このようなオブジェクトとしては、shareMenuCustomItem
オブジェクト、または共有メニュー・アイテムにマップされたShareMenuItem
列挙値を使用できます。共有メニュー・アイテムには、カメラ・メニュー・アイテム(デバイスでサポートされている場合)用のShareMenuItem.CAMERA
、イメージまたはビデオ・アイテムを共有するためのShareMenuItem.VISUAL
、オーディオ・アイテムを共有するためのShareMenuItem.AUDIO
、ファイル・アイテムを共有するためのShareMenuItem.FILE
があります。空の値またはnull値を渡すと、ShareMenuItem
列挙値として渡すことができるすべてのメニュー・アイテムが表示されます。
shareMenuCustomItem3 = ShareMenuCustomItem('csv')
のように、ShareMenuCustomItem
オブジェクトのラベルに値がないかnullの場合、タイプの文字列が接尾辞としてshare_
に付加されたものがラベルになります。shareMenuCustomItem3
では、ラベルはshare_csv
です。ShareMenuCustomItem
オブジェクトのタイプを*
と設定すると、ユーザーがすべてのファイル・タイプをアップロードできるようになります。
この構成は、
enableAttachment
がtrue
に設定されている場合にのみ適用されます。
ArrayList<Object> customItems = new ArrayList<>();
ShareMenuCustomItem shareMenuCustomItem1 = new ShareMenuCustomItem("pdf bin", "Label1", 1024, R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem2 = new ShareMenuCustomItem("doc", "Label2", R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem3 = new ShareMenuCustomItem("csv");
ArrayList<Object> customItems = new ArrayList<>(Arrays.asList(shareMenuCustomItem1,shareMenuCustomItem2,shareMenuCustomItem3,ShareMenuItem.CAMERA));
BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(sharedPreferences.getString(getString(R.string.pref_name_chat_server_host), Settings.CHAT_SERVER_URL), false, getApplicationContext())
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.shareMenuItems(customItems)
.enableAttachment(true)
.build();
public静的void shareMenuItems()
Bots.shareMenuItems();
APIをコールして、共有メニュー・アイテム・リストを取得できます。Bots.shareMenuItems()
public static void shareMenuItems(ArrayList<Object> shareMenuItems)
Bots.shareMenuItems(customItems);
APIをコールして、共有メニュー・アイテムのポップアップを動的に更新できます(customItems
はオブジェクトのArrayListです)。各オブジェクトとして使用できるのは、ShareMenuItem
列挙値型またはShareMenuCustomItem
オブジェクトのいずれかです。ArrayList<Object> customItems = new ArrayList<>();
ShareMenuCustomItem shareMenuCustomItem1 = new ShareMenuCustomItem("pdf bin", "Label1", 1024, R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem2 = new ShareMenuCustomItem("doc", "Label2", R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem3 = new ShareMenuCustomItem("csv");
customItems.add(shareMenuCustomItem1);
customItems.add(ShareMenuItem.CAMERA);
customItems.add(ShareMenuItem.FILE);
customItems.add(shareMenuCustomItem2);
customItems.add(shareMenuCustomItem3);
Bots.shareMenuItems(customItems);
音声認識
機能フラグ: enableSpeechRecognition
enableSpeechRecognition
機能フラグをtrue
に設定すると、ユーザー入力フィールドが空の場合に送信ボタンとともにマイクロフォン・ボタンが表示されます。
このプロパティをtrue
に設定すると、enableSpeechRecognitionAutoSend
プロパティによって有効になる機能もサポートされます。このプロパティをtrue
に設定すると、ユーザーの音声レスポンスがチャット・サーバーに自動的に送信され、レスポンスが送信メッセージとしてチャット・ウィンドウに表示されます。enableSpeechRecognitionAutoSend
をfalse
に設定すると、ユーザーは、発言したメッセージを手動で送信する前に編集(または削除)できるようになります。
public static void startRecording(IBotsSpeechListener listener)
ユーザーの音声メッセージの記録を開始します。listener
パラメータは、サーバーから返されたレスポンスを受信するためのIBotsSpeechListener
のインスタンスです。
public static boolean isRecording()
音声記録が開始されているかどうかを確認します。記録が開始されている場合はtrue
を返します。そうでない場合はfalse
を返します。
void onError(String error)
このメソッドは、サーバーへの接続を確立している間にエラーが発生した場合、または入力がないか入力が多すぎる場合にコールされます。error
パラメータは、エラー・メッセージです。
void onSuccess(String utterance)
このメソッドは、最終的な結果がサーバーから受信されたときにコールされます。utterance
パラメータは、サーバーから受信された最終的な発話です。
このメソッドは、リリース20.8.1では非推奨です。
void onSuccess(BotsSpeechResult botsSpeechResult)
このメソッドは、最終的な結果がサーバーから受信されたときにコールされます。パラメータのbotsSpeechResult
は、サーバーから受信される最終レスポンスです。
void onPartialResult(String utterance)
このメソッドは、部分的な結果がサーバーから受信されたときにコールされます。utterance
パラメータは、サーバーから受信された部分的な発話です。
void onClose(int code, String message)
このメソッドは、サーバーへの接続がクローズされるときにコールされます。
code
– ステータス・コードmessage
– 接続をクローズする理由
onActiveSpeechUpdate(byte[] speechData)
public class BotsSpeechListener implements IBotsSpeechListener {
@Override
public void onError(String error) {
// Handle errors
}
@Override
public void onSuccess(String utterance) {
// This method was deprecated in release 20.8.1.
// Handle final result
}
@Override
public void onSuccess(BotsSpeechResult botsSpeechResult) {
// Handle final result
}
@Override
public void onPartialResult(String utterance) {
// Handle partial result
}
@Override
public void onClose(int code, String message) {
// Handle the close event of connection to server
}
@Override
public void onOpen() {
// Handle the open event of connection to server
}
@Override
public void onActiveSpeechUpdate(byte[] speechData) {
// Handle the speech update event
}
}
Bots.startRecording(new BotsSpeechListener()); // Start voice recording
if (Bots.isRecording()) {
Bots.stopRecording(); // Stop voice recording
}
音声合成
- 機能フラグ:
enableSpeechSynthesis
- 機能構成:
speechSynthesisVoicePreferences
- ユーザーは、チャット・ビューのヘッダーにあるボタンを使用して、スキルのオーディオ・レスポンスをミュートまたはミュート解除できます。この機能を有効にするには、
enableSpeechSynthesis
機能フラグをtrue
に設定します。 speechSynthesisVoicePreferences
プロパティを使用して、スキルのメッセージを読み上げる優先言語を設定できます。言語および音声を設定するこのパラメータは、SpeechSynthesisSetting
インスタンスのリストです(ODAおよびOMCのダウンロード・ページからダウンロードしたSDKのJavadocを参照)。このプロパティにより、デバイスが優先言語または優先音声をサポートしていない場合にフォールバックが有効になります。デバイスで優先音声がサポートされない場合は、かわりに優先言語のデフォルト音声が使用されます。優先音声も優先言語もサポートされない場合は、デフォルトの音声と言語が使用されます。
public static void initSpeechSynthesisService()
onCreate()
メソッドでコールして、音声合成サービスを初期化する必要があります。音声合成サービスの初期化は、enableSpeechSynthesis
機能フラグがtrue
に設定されている場合にのみ、SDKライブラリの初期化時に実行されます。public class ConversationActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bots.initSpeechSynthesisService();
}
}
public静的void startBotAudioResponse(String text)
text
パラメータは、読み上げられるスキルのメッセージのテキストです。Bots.startBotAudioResponse("What kind of crust do you want?");
このメソッドは、リリース21.08で非推奨になりました。
音声サービス注入
機能フラグ: ttsService
speechSynthesisService
機能フラグを使用すると、任意のテキスト読み上げ(TTS)サービス(独自のサービス、またはサードパーティ・ベンダーが提供するサービス)をSDKに注入できます。TTSサービスを注入するには、最初にenableSpeechSynthesis
機能フラグをtrue
に設定してから、SpeechSynthesisService
インタフェースのインスタンスをspeechSynthesisService
フラグに渡す必要があります。
SpeechSynthesisServiceインタフェース
SpeechSynthesisService
インタフェースの実装であるクラスのインスタンスを作成します。次のメソッドを実装します。
initTextToSpeechService(@NonNull Application application, @NonNull BotsConfiguration botsConfiguration)
: 新しいTTSサービスを初期化します。パラメータ 説明 application
アプリケーション。これはnullにできません。 botsConfiguration
ライブラリの機能の制御に使用される BotsConfiguration
オブジェクト。これはnullにできません。speak(String phrase)
: 発話キューに発話されるフレーズを追加します。phrase
パラメータは、話すテキストです。isSpeaking()
: オーディオ・レスポンスが話されているかどうかを確認します。進行中のオーディオ・レスポンスがない場合、false
を返します。ノート
このメソッドは、リリース21.08で非推奨になりました。stopTextToSpeech()
: 進行中の音声合成を停止します。ノート
このメソッドは、リリース21.08で非推奨になりました。shutdownTextToSpeech()
: TextToSpeechエンジンによって使用されるリソースを解放します。getSpeechSynthesisVoicePreferences()
: 音声合成に使用される使用可能な音声の最適な一致の選択に使用される音声プリファレンス配列を返します。setSpeechSynthesisVoicePreferences(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences)
: 音声合成に最適な音声一致を選択するために使用する音声プリファレンス配列を設定します。speechSynthesisVoicePreferences
パラメータは、音声合成の音声プリファレンス配列です。onSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences)
: 音声合成音声を最適な音声一致に設定します。ノートこのメソッドは、音声プリファレンス
このメソッドは、リリース21.08で非推奨になりました。ArrayList
を設定した後、setSpeechSynthesisVoicePreferences
メソッド内でコールすることをお薦めします。speechSynthesisVoicePreferences
パラメータは、音声合成の音声プリファレンス配列です。onSpeechRecognitionLocaleChange(Locale speechLocale
: このメソッドは、音声認識言語が変更されたときに起動されます。このメソッドをオーバーライドすることで、音声合成言語を音声認識言語と同じ言語に設定できます。speechLocale
パラメータは、音声認識に設定されたロケールです。
private class TextToSpeechServiceInjection implements SpeechSynthesisService {
@Override
public void initTextToSpeechService(@NonNull Application application, @NonNull BotsConfiguration botsConfiguration) {
// Initialisation of Text to Speech Service.
}
@Override
public void speak(String phrase) {
// Adds a phrase to the utterance queue to be spoken
}
@Override
public boolean isSpeaking() {
// Checks whether the bot audio response is being spoken or not.
return false;
}
@Override
public void stopTextToSpeech() {
// Stops any ongoing speech synthesis
}
@Override
public void shutdownTextToSpeech() {
// Releases the resources used by the TextToSpeech engine.
}
@Override
public ArrayList<SpeechSynthesisSetting> getSpeechSynthesisVoicePreferences() {
// The voice preferences array which is used to choose the best match available voice for speech synthesis.
return null;
}
@Override
public void setSpeechSynthesisVoicePreferences(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences) {
// Sets the voice preferences array which can be used to choose the best match available voice for speech synthesis.
}
@Override
public SpeechSynthesisSetting onSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences) {
// Sets the speech synthesis voice to the best voice match available.
return null;
}
@Override
public void onSpeechRecognitionLocaleChange(Locale speechLocale) {
// If the speech recognition language is changed, the speech synthesis language can also be changed to the same language.
}
}
SpeechSynthesisService#setSpeechSynthesisVoicePreferencesonSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting>)
およびSpeechSynthesisService#onSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting>)
は、このリリースでは非推奨であり、SpeechSynthesisService#setTTSVoice(ArrayList<SpeechSynthesisSetting>)
およびSpeechSynthesisService#getTTSVoice()
に置き換えられました。以前は、 SpeechSynthesisService#setSpeechSynthesisVoicePreferencesonSpeechSynthesisVoicePreferencesChange
は音声合成音声プリファレンス配列を設定し、SpeechSynthesisService#onSpeechSynthesisVoicePreferencesChange
は音声合成に使用できる最適な音声を設定し、選択した音声を返しました。これで、音声合成音声プリファレンス配列と音声合成に最適な音声の両方を設定する新しいメソッドSpeechSynthesisService#setTTSVoice(ArrayList<SpeechSynthesisSetting> TTSVoices)
と、音声合成用に選択した音声を返すSpeechSynthesisService#getTTSVoice()
によって、同じ機能が実現されました。
ユーザーエージェント会話のインジケータの入力
機能フラグ: enableSendTypingStatus
有効にすると、SDKは、ユーザーが現在入力しているテキストとともにRESPONDING
入力イベントをに送信します。これは、エージェント・コンソールの入力インジケータを示しています。ユーザーが入力を完了すると、SDKはLISTENING
イベントをOracle B2C ServiceまたはOracle Fusion Serviceに送信します。これにより、エージェント・コンソールの入力インジケータが非表示になります。
同様に、エージェントが入力中の場合、SDKはサービスからRESPONDING
イベントを受信します。このイベントを受信すると、SDKはユーザーに入力インジケータを表示します。エージェントがアイドル状態になると、SDKはサービスからLISTENING
イベントを受信します。このイベントを受信すると、SDKによって、ユーザーに表示される入力インジケータが非表示になります。
sendUserTypingStatus
APIは、ヘッドレス・モードでも同じ動作を有効にします。public void sendUserTypingStatus(TypingStatus status, String text)
- エージェント・コンソールに入力インジケータを表示するには:
Bots.sendUserTypingStatus("RESPONDING", "<Message_Being_Typed>");
- エージェント・コンソールで入力インジケータを非表示にするには:
Bots.sendUserTypingStatus("LISTENING", "");
- ユーザー側の入力インジケータを制御するには、
onReceiveMessage(Message message)
イベントを使用します。例:public void onReceiveMessage(Message message) { if (message != null) { MessagePayload messagePayload = message.getPayload(); if (messagePayload instanceof StatusMessagePayload) { StatusMessagePayload statusMessagePayload = (StatusMessagePayload) messagePayload; String status = statusMessagePayload.getStatus(); if (status.equalsIgnoreCase(String.valueOf(TypingStatus.RESPONDING))) { // show typing indicator } else if (status.equalsIgnoreCase(String.valueOf(TypingStatus.LISTENING)) // hide typing indicator } } }
typingStatusInterval
– デフォルトでは、SDKはRESPONDING
入力イベントを3秒ごとにサービスに送信します。このフラグを使用して、このイベントを抑制します。設定できる最小値は3秒です。enableAgentSneakPreview
- Oracle B2C Serviceでは、入力中のユーザー・テキストの表示がサポートされています。このフラグがtrue
(デフォルトはfalse
)に設定されている場合、SDKは実際のテキストを送信します。ユーザー・プライバシを保護するために、フラグがfalse
に設定されている場合、SDKは実際のテキストのかわりに...
をOracle B2C Serviceに送信します。
エージェント詳細の公開
これらのAPIを使用して、エージェント名、テキストの色、アバター、エージェント名のイニシャル、テキストの色およびアバターの背景を変更します。
public void setAgentDetails(AgentDetails)
Bots.setAgentDetails(AgentDetails);
音声ビジュアライザ
音声サポートが有効になっている場合(enableSpeechRecognition(true)
)、チャット・ウィジェットのフッターに音声ビジュアライザ(音声入力の頻度レベルを示す動的ビジュアライザ・グラフ)が表示されます。ビジュアライザは、ユーザーが話しているのが小さすぎるか大きすぎるかを示して、ユーザーの音声の変調に反応します。このビジュアライザは、ユーザーが話しているときに記録されたバイト・ストリームを使用して作成され、ヘッドレス・モードで使用するためにIBotsSpeechListener#onActiveSpeechUpdate(byte[])
メソッドでも公開されます。
キーボード・アイコンが表示されると、音声モードが示されます。
enableSpeechRecognitionAutoSend(true)
の場合、ユーザーがメッセージの口述を終了すると、認識されたテキストがスキルに自動的に送信されます。その後、モードはテキスト入力に戻ります。enableSpeechRecognitionAutoSend(false)
の場合も、モードはテキスト入力に戻りますが、この場合、ユーザーはスキルにメッセージを送信する前に認識されたテキストを変更できます。