CXoneモバイルSDKイベントダイアグラム
このページでは、チャットインタラクション中に発生する一般的なイベントの図と説明を提供します。
アプリケーションがアクティブになる
このシーケンス図は、モバイルアプリがアクティブになり、チャットを準備し、訪問者と顧客情報を処理し、バックエンドサービスと通信するときのフローをキャプチャします。エラーが発生した場合は適切に処理され、ログ記録されます。
初期状態:
-
SDKの初期ステータスはinitialに設定されています。
-
モバイルアプリは前景に入ります。
チャットの準備:
-
ユーザーはprepare(brandId:channelId:)を呼び出してチャットの準備を開始します。
-
チャットの状態が初期状態またはオフラインでない場合、IllegalChatStateErrorが返されます。
-
そうでない場合、SDKはチャット状態をpreparingに設定し、onChatUpdated()でUIに通知します。
チャンネル構成:
-
SDKはバックエンドにgetChannelConfiguration())でチャネル設定をリクエストします。
-
サーバーエラーが発生した場合、ServerErrorが返され、チャットの状態はinitializeにリセットされます。
-
そうでない場合は、チャネル設定が受信され、SDKは宛先IDを作成します。
-
訪問者IDまたは顧客IDがnullの場合、ローカルで作成され保存されます。
訪問者および顧客への対応:
-
SDKはバックエンドでcreateOrUpdateVisitor(visitorId:customerId:deviceToken:)を呼び出します。
-
サーバーエラーが発生した場合、チャットの状態は initializeにリセットされます。
-
そうでない場合、訪問者や顧客への対応は成功します。
チャット準備完了状態:
-
チャットの状態はpreparedに設定されています。
-
UIはonChatUpdated()で通知されます。
-
ページビューの分析は、モバイルアプリとバックエンドの間で追跡されます。
アプリケーションが背景に入る
このシーケンス図は、モバイルアプリが背景に入り、ページビュートラッキングを処理し、バックエンドサービスと通信する際にフローをキャプチャします。エラーが発生した場合は、適切に処理されます。アプリケーションが背景に入ると、それはデバイス上で表示されたりインタラクトする重要なものではなくなることを意味します。あなたがアプリのメッセージングを使っていて、ホームボタンを押すか、別のアプリに切り替えることを想定します。アプリのメッセージングは今では背景にあります。それはまだ動いているが、アクティブには使っておられませんこの現象は、アプリを最小化したとき、違うアプリに切り替えたとき、または電話をロックしたときに発生します。アプリはまだそこにはあるが、もう前景ではありません。
背景に入るアプリケーション:
-
UIは、アプリケーションが背景に入っていることを示すボックスを表示します。
-
UIは、pageViewEndedを使用してページビューが終了したことをSDKに通知します。
-
背景はpageViewEndedイベントを受信します。
-
サーバー エラーがあれば、それは処理される。
-
それ以外ではイベントは成功します。
-
切断と状態の対応:
-
UIはdisconnect()を使って切断を開始する。
-
現在の状態に応じて:
-
準備中の場合、SDKは状態をinitialに設定します。
-
すでに準備できている場合、SDKはソケットを切断し、状態をpreparedビューページに設定します。
-
ページの表示
このシーケンス図は、SDKやバックエンド・サービスとのインタラクションを含め、ユーザーがモバイルアプリでページを表示する際のフローを表しています。ユーザーがページを閲覧したときに分析のイベントを表示し、訪問の詳細を追跡し、バックエンドのサービスと通信します。エラーが発生した場合は、適切に処理されます。
アプリケーションアクティベーション参照先:
-
この図は、アプリケーションがアクティブになったイベントを参照します。
ページ閲覧イベント:
-
ユーザーはページを閲覧し、UIはSDKにviewPage(title:url:)を通知します。
-
チャットモードにチェックが入っています:
-
準備されていない場合は、illegalChatStateErrorが返されます。
-
そうでない場合は、訪問の詳細が有効期限切れかどうかチェックされます。
-
期限が切れている場合は、新しい訪問詳細が作成される(UUIDと有効期限)。
-
有効な場合、SDKは現在の有効期限を調整します。
-
-
最後に閲覧したページが送信されていない場合、SDKはページビューを終了します。
-
現在の最後に閲覧したページのタイトル、URI、タイムスタンプは保存されます。
-
サーバーエラーのような失敗があれば、それは処理されます。
-
バックエンドインタラクション:
-
SDKはバックエンドサービスと通信します:
-
visitorVisit(date:)が呼び出されて訪問を記録します。
-
pageView(title:uri:timestamp)が呼び出されてページビューを記録します。
-
サーバー エラーがあれば、それは処理される。
-
オープンチャット
このシーケンス図は、ユーザーがチャットを開き、OAuthを処理し、バックエンドサービスとの接続を確立する際のフローをキャプチャしています。エラーが発生した場合は、適切に処理されます。
アプリケーションアクティベーション参照先:
-
この図は、アプリケーションがアクティブになったイベントを参照します。
チャットオープニング:
-
アプリユーザーはチャットを開き、UIはconnect()との接続を開始します。
-
チャットの状態がチェックされます:
-
接続する場合、SDKはWebSocket接続を確立します。
-
初期または準備中の場合、IllegalChatStateErrorが返されます。
-
準備されていれば、チャットモードがチェックされます:
-
ライブチャットおよびライブチャットのステータスがオフラインの場合、チャットの状態はofflineに設定されます。
-
そうでない場合は、WebSocket接続が確立されます。
-
OAuth対応は有効か無効かによって異なります。
-
-
OAuth対応:
-
OAuthが有効の場合:
-
SDKはreconnectCustomerEventData(accessToken:)に再接続します。
-
サーバー エラーがあれば、それは処理される。
-
そうでなければ、CustomerReconnectedEventが受信されます。
-
-
OAuthが無効の場合:
-
SDKはauthorizeCustomerEventData(authorizationCode:codeVerifier:)で認証されます。
-
サーバー エラーがあれば、それは処理される。
-
そうでない場合、CustomerAuthorizedEventが受信され、アクセストークンと顧客アイデンティティーが保存されます。
-
チャット接続状態:
-
チャットの状態はconnectedに設定されています。
-
UIはonChatUpdated()で通知されます。
-
チャットがシングル シングルスレッドのアプリでは、それぞれの連絡先ごとに1つのチャットスレッドしか持つことができません。お客様の組織とのすべてのインタラクションは、その1つのチャットスレッドで行われます。かマルチスレッド マルチスレッドのアプリでは、連絡先は新しいトピックについて議論するために希望する数だけスレッドを作成することができます。これらのスレッドは同時にアクティブにすることができます。かに応じて、関連するチャットビューが表示されます。
シングルスレッド
このシーケンス図は、ユーザーがシングルスレッド シングルスレッドのアプリでは、それぞれの連絡先ごとに1つのチャットスレッドしか持つことができません。お客様の組織とのすべてのインタラクションは、その1つのチャットスレッドで行われます。チャットとインタラクトし、スレッドリカバリーを処理し、バックエンドサービスと通信するときのフローをキャプチャしたものです。エラーが発生した場合は、適切に処理されます。
アプリケーションアクティベーション参照先:
-
この図は、オープンチャッ・イベントを参照しています。
スレッドリカバリー:
-
SDKはローカルストレージからスレッドIDをロードします。
-
外部プラットフォームからのスレッドIDがローカルに保存される場合、SDKはRecoverMessagingThreadEvent(threadId:)を使用してメッセージングスレッドを復元します。
-
UUIDが利用可能でない場合、SDKはRecoverMessagingThreadEvent(nil)での回復を試行します。
スレッド存在チェック:
-
スレッドが存在する場合、ThreadRecoveredEventが受信されます。
-
チャットとスレッドの状態はreadyに設定されています。
-
UIはonThreadUpdated()で通知されます。
-
-
スレッドが存在しない場合は、ThreadRecoverFailedEventが受信されます。
-
チャットの状態が準備中に設定されます。
-
UIはonChatUpdated()で通知されます。
-
注記は、スレッドリカバリーが不要であることを示します。
-
チャットインタラクション:
-
UIは、ユーザーがエージェントとエンゲージするためのチャットウィンドウを表示します。
マルチスレッド
このシーケンス図は、ユーザーがマルチスレッド マルチスレッドのアプリでは、連絡先は新しいトピックについて議論するために希望する数だけスレッドを作成することができます。これらのスレッドは同時にアクティブにすることができます。チャットとインタラクトし、スレッド検索を処理し、バックエンドサービスと通信するときのフローをキャプチャしたものです。エラーが発生した場合は、適切に処理されます。
アプリケーションアクティベーション参照先:
-
この図は、オープンチャッ・イベントを参照しています。
スレッドリスト検索:
-
SDKは、FetchThreadListEventを使用してバックエンドからスレッドのリストをフェッチします。
-
サーバー エラーがあれば、それは処理される。
-
そうでない場合は、スレッドリストがフェッチされます。
スレッド処理:
-
スレッドが存在する場合:
-
SDKは各スレッドの状態をreceivedに設定し、最後のメッセージをロードします。
-
スレッドのメタデータがロードされ、状態がloadedに設定されます。
-
チャットの状態はreadyに設定され、UIは通知されます。
-
-
スレッドが存在しない場合:
-
チャットの状態はreadyに設定され、UIは通知されます。
-
スレッドを作成またはオープン:
-
新しいスレッドを作成する場合:
-
ユーザーがスレッド作成を開始します。
-
-
既存のスレッドを開く場合:
-
ユーザーはスレッドを選択します。
-
UIはopenThread(thread:)を使ってスレッドを開きます。
-
スレッドはバックエンドから回復されます。
-
サーバーエラーがあれば、それは処理されます。
-
そうでなければ、スレッドは回復し、状態はreadyに設定されます。
-
チャットインタラクション:
-
ユーザーはエージェントとのチャットにエンゲージします。
ライブチャット
このシーケンス図は、ライブチャットインタラクションのバックエンドの流れを示しています。ライブチャットはリアルタイムのデジタルチャットオプションであり、一方でチャットメッセージングはプライベートメッセージやダイレクトメッセージに似た非同期のメッセージングオプションです。
スレッド作成
このシーケンス図は、ユーザーが新しいチャットスレッドを作成し、スレッド作成を処理し、SDKと通信するときのフローをキャプチャします。エラーが発生した場合は、適切に処理されます。
ユーザー詳細とプレチャット:
-
顧客名が提供されない場合、UIはユーザー詳細フォームビューを表示します。
-
プレチャット情報が利用可能な場合、UIはプレチャットフォームビューを表示します。
スレッド作成:
-
ユーザーは会話を始めます。
-
UIは、createThread(customFields:)を使ってスレッドの作成を開始します。
-
チャットモードがマルチスレッドでなく、スレッドがすでに存在する場合:
-
unsupportedChannelConfigErrorが返されます。
-
エラーアラートが表示されます。
-
-
そうでない場合:
-
SDKはUUIDでローカルにスレッドを作成します。
-
UUIDはローカルに保存されます。
-
スレッドの状態はpendingに設定されます。
-
UIはonThreadUpdated()で通知されます。
-
エージェントとチャットする
このシーケンス図は、エンドユーザーがチャットを通じてエージェントとインタラクトし、ウェルカムメッセージを処理し、バックエンドサービスと通信するときのフローをキャプチャします。エラーが発生した場合は、適切に処理されます。
チャット初期化:
-
ユーザーは sendMessage(message:)を使ってメッセージを送信します。
-
ウェルカムメッセージが利用可能の場合:
-
SDKは、SendOutboundMessageEvent(welcomeMessage:)を使用してアウトバウンドウェルカムメッセージを送信します。
-
サーバー エラーがあれば、それは処理される。
-
そうでない場合、MessageCreatedEventが受信され、UIが更新されます。
-
-
SDKは、sendMessageEventを使ってユーザーのメッセージを送信します。
-
サーバー エラーがあれば、それは処理される。
-
そうでない場合、MessageCreatedEventが受信され、UIが更新されます。
-
コンタクトを終了
このシーケンス図は、ユーザーがチャットを終了し、会話クローズを処理し、バックエンドサービスと通信するときのフローをキャプチャします。エラーが発生した場合は、適切に処理されます。
チャット終了:
-
ユーザーは会話の終了を押します。
-
UIは、endConversation()を使用してSDKに会話の終了を通知します。
-
バックエンドはEndConversationEventを受信します。
-
サーバー エラーがあれば、それは処理される。
-
そうでない場合、ケースのステータスは変更され、スレッドの状態はclosedに設定されます。
-
UIはonThreadUpdated()で通知されます。
-
エンドコンタクトエクスペリエンスビュー:
-
UIはエンドコンタクトビューを表示します。
大規模イベントを処理
AWS API Gatewayの制限の一つは、1つのメッセージで最大128KBまでしか送信できないことです。より大きなイベントをサーバーからクライアントに送信するには:
-
サーバー上で、公開されているS3バケットに大きなイベントをアップロードします。
-
クライアントは、WebSocket経由でこのファイルへのURLだけを受信し、RESTを通じて実際のイベント本体をダウンロードすることができます。