(57)【要約】  モバイルアプリケーションのリアルタイムな遠隔制御のためのシステムおよび方法が提供される。ネットワークデバイスと端末デバイスとの間の通信セッションが確立され得る。ネットワークデバイスは、モバイルアプリケーションを実行するように構成され得る。例えば、モバイルアプリケーションは、初期状態で入力要素を含み得る。モバイルアプリケーションは、端末デバイスによって遠隔制御され得る。さらに、コンテンツデータを含むデータストリームは、通信セッション中に受信および送信され得る。例えば、コンテンツデータは、前記モバイルアプリケーションによって提示されるオブジェクトを含み得る。コンテンツデータは、端末デバイスに表示され得る。コンテンツデータに関連付けられた入力イベントが検出され得る。制御データは、検出された入力イベントに基づいて生成され得る。制御データは、ネットワークデバイスで受信され、入力要素の初期状態が修正され得る。
2019525371.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ実装方法であって、
通信サーバにおいて、モバイルデバイスと端末デバイスとの間の通信セッションを容易にすることと、ここにおいて、前記モバイルデバイスは、モバイルアプリケーションを実行するように構成され、前記モバイルアプリケーションは、初期状態で入力要素を含んでおり、前記モバイルアプリケーションは、前記端末デバイスによって遠隔制御され、
前記通信セッション中にデータストリームを受信することと、ここにおいて、前記データストリームは、コンテンツデータを含んでおり、前記コンテンツデータは、前記モバイルアプリケーションによって提示されるオブジェクトを含んでおり、前記オブジェクトは、前記入力要素を表し、
前記通信セッション中に前記データストリームを送信することと、ここにおいて、前記データストリームが前記端末デバイスで受信されたとき、前記コンテンツデータは、前記オブジェクトを前記端末デバイスに表示させ、
前記オブジェクトに関連付けられた入力イベントを検出することと、
前記入力イベントが検出されたとき、制御データを生成することと、
前記制御データを送信することと、ここにおいて、前記制御データが前記モバイルデバイスで受信されたとき、前記制御データは、前記モバイルアプリケーションに含まれる前記入力要素の前記初期状態を修正する、
を備える、コンピュータ実装方法。
【請求項２】
前記制御データが前記モバイルデバイスで受信されたとき、前記入力イベントは、前記モバイルデバイスにおいて複製される、請求項１に記載のコンピュータ実装方法。
【請求項３】
前記通信セッション中に前記データストリームを送信することは、
前記入力要素を表す前記オブジェクトを表示することと、ここにおいて、前記オブジェクトは、コンテンツデータを含んでおり、
前記入力要素に含まれる前記コンテンツデータが操作されるのを防ぐことと
を備える、請求項１に記載のコンピュータ実装方法。
【請求項４】
前記通信セッション中に前記データストリームを送信することは、
前記モバイルアプリケーションに含まれる前記入力要素のためのフィールドマスクを生成することと、ここにおいて、前記フィールドマスクは、前記コンテンツデータが前記端末デバイスに表示されたとき、前記オブジェクトが閲覧可能となるのを防ぎ、
前記データストリームを送信することと、ここにおいて、前記データストリームは、前記コンテンツデータと前記フィールドマスクとを含む、
を備える、請求項１に記載のコンピュータ実装方法。
【請求項５】
前記制御データが前記モバイルデバイスで受信されたとき、前記制御データは、前記モバイルデバイスにおいてシンセティックイベントを生成させ、前記シンセティックイベントは、前記モバイルアプリケーションに含まれる前記入力要素の前記初期状態を修正する、請求項１に記載のコンピュータ実装方法。
【請求項６】
前記シンセティックイベントは、前記モバイルデバイスのオペレーティングシステムによって生成され、前記シンセティックイベントは、前記検出された入力イベントを複製する、請求項５に記載のコンピュータ実装方法。
【請求項７】
前記制御データが前記モバイルデバイスで受信されたとき、前記方法は、
前記制御データが前記入力要素に対応するか否かを決定することと、
前記制御データが前記入力要素に対応するとき、前記入力要素の前記初期状態を修正することと、ここにおいて、前記入力要素の前記初期状態を修正することは、前記初期状態を次の状態に変えることを含む、
をさらに備える、請求項１に記載のコンピュータ実装方法。
【請求項８】
システムであって、
１つまたは複数のデータプロセッサと、
命令を含む非一時的コンピュータ可読記憶媒体であって、前記命令は、前記１つまたは複数のデータプロセッサで実行されると、前記１つまたは複数のデータプロセッサに、
通信サーバにおいて、モバイルデバイスと端末デバイスとの間の通信セッションを容易にすることと、ここにおいて、前記モバイルデバイスは、モバイルアプリケーションを実行するように構成され、前記モバイルアプリケーションは、初期状態で入力要素を含んでおり、前記モバイルアプリケーションは、前記端末デバイスによって遠隔制御され、
前記通信セッション中にデータストリームを受信することと、ここにおいて、前記データストリームは、コンテンツデータを含んでおり、前記コンテンツデータは、前記モバイルアプリケーションによって提示されるオブジェクトを含んでおり、前記オブジェクトは、前記入力要素を表し、
前記通信セッション中に前記データストリームを送信することと、ここにおいて、前記データストリームが前記端末デバイスで受信されたとき、前記コンテンツデータは、前記オブジェクトを前記端末デバイスに表示させ、
前記オブジェクトに関連付けられた入力イベントを検出することと、
前記検出された入力イベントに基づいて制御データを生成することと、
前記制御データを送信することと、ここにおいて、前記制御データが前記モバイルデバイスで受信されたとき、前記制御データは、前記モバイルアプリケーションに含まれる前記入力要素の前記初期状態を修正する、
を含むオペレーションを行わせる、非一時的コンピュータ可読記憶媒体と、
を備える、システム。
【請求項９】
前記制御データが前記モバイルデバイスで受信されたとき、前記入力イベントは、前記モバイルデバイスにおいて複製される、請求項８に記載のシステム。
【請求項１０】
前記通信セッション中に前記データストリームを送信することは、
前記入力要素を表す前記オブジェクトを表示することと、ここにおいて、前記オブジェクトは、コンテンツデータを含んでおり、
前記入力要素に含まれる前記コンテンツデータが操作されるのを防ぐことと
を備える、請求項８に記載のシステム。
【請求項１１】
前記通信セッション中に前記データストリームを送信することは、
前記モバイルアプリケーションに含まれる前記入力要素のためのフィールドマスクを生成することと、ここにおいて、前記フィールドマスクは、前記コンテンツデータが前記端末デバイスに表示されたとき、前記オブジェクトが閲覧可能となるのを防ぎ、
前記データストリームを送信することと、ここにおいて、前記データストリームは、前記コンテンツデータと前記フィールドマスクとを含む、
を備える、請求項８に記載のシステム。
【請求項１２】
前記制御データが前記モバイルデバイスで受信されたとき、前記制御データは、前記モバイルデバイスにおいてシンセティックイベントを生成させ、前記シンセティックイベントは、前記モバイルアプリケーションに含まれる前記入力要素の前記初期状態を修正する、請求項８に記載のシステム。
【請求項１３】
前記シンセティックイベントは、前記モバイルデバイスのオペレーティングシステムによって生成され、前記シンセティックイベントは、前記検出された入力イベントを複製する、請求項１２に記載のシステム。
【請求項１４】
前記制御データが前記モバイルデバイスで受信されたとき、前記オペレーションは、
前記制御データが前記入力要素に対応するか否かを決定することと、
前記制御データが前記入力要素に対応するとき、前記入力要素の前記初期状態を修正することと、ここにおいて、前記入力要素の前記初期状態を修正することは、前記初期状態を次の状態に変えることを含む、
をさらに備える、請求項８に記載のシステム。
【請求項１５】
命令を含む非一時的機械可読記憶媒体中で有形に具体化されるコンピュータプログラム製品であって、前記命令は、データ処理装置に、
通信サーバにおいて、モバイルデバイスと端末デバイスとの間の通信セッションを容易にすることと、ここにおいて、前記モバイルデバイスは、モバイルアプリケーションを実行するように構成され、前記モバイルアプリケーションは、初期状態で入力要素を含んでおり、前記モバイルアプリケーションは、前記端末デバイスによって遠隔制御され、
前記通信セッション中にデータストリームを受信することと、ここにおいて、前記データストリームは、コンテンツデータを含んでおり、前記コンテンツデータは、前記モバイルアプリケーションによって提示されるオブジェクトを含んでおり、前記オブジェクトは、前記入力要素を表し、
前記通信セッション中に前記データストリームを送信することと、ここにおいて、前記データストリームが前記端末デバイスで受信されたとき、前記コンテンツデータは、前記オブジェクトを前記端末デバイスに表示させ、
前記オブジェクトに関連付けられた入力イベントを検出することと、
前記検出された入力イベントに基づいて制御データを生成することと、
前記制御データを送信することと、ここにおいて、前記制御データが前記モバイルデバイスで受信されたとき、前記制御データは、前記モバイルアプリケーションに含まれる前記入力要素の前記初期状態を修正する、
を含むオペレーションを行わせるように構成される、コンピュータプログラム製品。
【請求項１６】
前記制御データが前記モバイルデバイスで受信されたとき、前記入力イベントは、前記モバイルデバイスにおいて複製される、請求項１５に記載のコンピュータプログラム製品。
【請求項１７】
前記通信セッション中に前記データストリームを送信することは、
前記入力要素を表す前記オブジェクトを表示することと、ここにおいて、前記オブジェクトは、コンテンツデータを含んでおり、
前記入力要素に含まれる前記コンテンツデータが操作されるのを防ぐことと
を備える、請求項１５に記載のコンピュータプログラム製品。
【請求項１８】
前記通信セッション中に前記データストリームを送信することは、
前記モバイルアプリケーションに含まれる前記入力要素のためのフィールドマスクを生成することと、ここにおいて、前記フィールドマスクは、前記コンテンツデータが前記端末デバイスに表示されたとき、前記オブジェクトが閲覧可能となるのを防ぎ、
前記データストリームを送信することと、ここにおいて、前記データストリームは、前記コンテンツデータと前記フィールドマスクとを含む、
を備える、請求項１５に記載のコンピュータプログラム製品。
【請求項１９】
前記制御データが前記モバイルデバイスで受信されたとき、前記制御データは、前記モバイルデバイスにおいてシンセティックイベントを生成させ、前記シンセティックイベントは、前記モバイルアプリケーションに含まれる前記入力要素の前記初期状態を修正する、請求項１５に記載のコンピュータプログラム製品。
【請求項２０】
前記シンセティックイベントは、前記モバイルデバイスのオペレーティングシステムによって生成され、前記シンセティックイベントは、前記検出された入力イベントを複製する、請求項１９に記載のコンピュータプログラム製品。
【発明の詳細な説明】
【関連出願の相互参照】
【０００１】
[0001]  本願は、２０１６年８月１４日付で出願された米国仮特許出願第６２／３７４，８９２号の優先権の利益を主張し、その開示は、あらゆる目的のために参照によりその全体が組み込まれている。
【技術分野】
【０００２】
[0002]  本開示は、概して、顧客とエージェントとの間のリアルタイム通信セッションを容易にすることに関する。より具体的には、これら技法は、通信セッション中にモバイルアプリケーションを遠隔制御するために提供される。
【背景技術】
【０００３】
[0003]  通信の手段としてのデジタルメッセージングの使用が広く普及している。さらに、モバイルアプリケーションがメッセージング機能を急速に組み込みつつある。しかしながら、メッセージング機能は、制限されることがある。例えば、顧客がモバイルアプリケーションでの問題に直面するたびに、共有されたビジュアルコンテキストの欠如のために、メッセージング機能だけではその問題に十分対処できない可能性がある。
【発明の概要】
【０００４】
[0004]  いくつかの実施形態では、コンピュータ実装方法が提供される。コンピュータ実装方法は、通信サーバにおいて、ネットワークデバイスと端末デバイスとの間の通信セッションを確立することを含み得る。ネットワークデバイスは、モバイルアプリケーションを実行するように構成され得る。例えば、モバイルアプリケーションは、初期状態で入力要素を含み得る。ある場合には、モバイルアプリケーションは、端末デバイスによって遠隔制御され得る。さらに、方法は、通信セッション中にデータストリームを受信することを含み得る。データストリームは、コンテンツデータを含み得る。例えば、コンテンツデータは、モバイルアプリケーションによって提示されるオブジェクトを含み得る。オブジェクトは、入力要素に対応し得る。方法は、通信セッション中にデータストリームを送信することを含み得る。データストリームは、端末デバイスで受信され得る。コンテンツデータは、端末デバイスに表示され得る。方法はまた、コンテンツデータに関連付けられた入力イベントを検出することを含み得る。制御データは、検出された入力イベントに基づいて生成され得る。次いで、制御データが送信され得る。制御データは、ネットワークデバイスで受信され得る。例えば、制御データは、モバイルアプリケーションに含まれる入力イベントの初期状態を修正し得る。
【０００５】
[0005]  いくつかの実施形態では、別のコンピュータ実装方法が提供される。コンピュータ実装方法は、ネットワークデバイスにおいて、モバイルアプリケーションに関連付けられた入力要素を識別することを含み得る。入力要素は、インタラクションに基づいて入力データを受け取るように構成され得る。方法は、入力要素に対応する入力境界を決定することを含み得る。例えば、入力境界は、入力データを受け取るためのエリアであり得る。さらに、方法は、モバイルアプリケーションを実行することを含み得る。モバイルアプリケーションを実行することは、初期状態で入力要素を表示することを含み得る。モバイルアプリケーションは、端末デバイスによって遠隔制御され得る。方法はまた、端末デバイスでの選択に対応する入力を受け取ることを含み得る。選択は、選択データに関連付けられ得、選択データは、モバイルアプリケーションに関連付けられた場所を識別するために使用され得る。方法は、選択データが入力要素に対応するか否かを決定することを含み得る。選択データが入力要素に対応するか否かを決定することは、選択データを入力境界と比較することを含み得る。さらに、方法は、選択データが入力要素に対応するとき、入力要素に関連付けられたアクションを決定することを含み得る。次いで、アクションが行われ得る。
【０００６】
[0006]  いくつかの実施形態では、別のコンピュータ実装方法が提供される。コンピュータ実装方法は、ネットワークデバイスにおいて、初期状態で入力要素を含むモバイルアプリケーションを含み得る。モバイルアプリケーションは、端末デバイスによって遠隔制御され得る。方法はまた、データストリームを生成することを含み得る。データストリームは、コンテンツデータを含み得、それは、モバイルアプリケーションによって提示されるオブジェクトを含み得る。例えば、オブジェクトは、入力要素に対応し得る。方法は、データストリームを送信することを含み得る。データストリームは、端末デバイスで受信され得る。コンテンツデータは、端末デバイスに表示され得る。さらに、方法は、オブジェクトに関連付けられた制御データを受信することと、制御データが入力要素に対応するか否かを決定することと、制御データが入力要素に対応するとき、入力要素の初期状態を修正することと、を含み得る。入力要素の初期状態を修正することは、初期状態を次の状態に変えることを含み得る。
【０００７】
[0007]  本開示の実施形態はまた、システムを含み得る。システムは、１つまたは複数のプロセッサと、命令を含む非一時的コンピュータ可読媒体であって、命令は、１つまたは複数のデータプロセッサで実行されると、１つまたは複数のデータプロセッサに、上述のおよび本明細書で説明されるコンピュータ実装方法のうちの任意のものを含むオペレーションを行わせる、非一時的コンピュータ可読記憶媒体と、を含み得る。
【０００８】
[0008]  本開示の実施形態はまた、命令を含む非一時的機械可読記憶媒体中で有形に具体化されるコンピュータプログラム製品であって、命令は、データ処理装置に、上述のおよび本明細書で説明されるコンピュータ実装方法のうちの任意のものを含むオペレーションを行わせるように構成される、コンピュータプログラム製品を含み得る。
【図面の簡単な説明】
【０００９】
[0009]  本開示は、添付の図と併せて説明される。
【図１】[0010]  図１は、ネットワークインタラクションシステムの実施形態のブロック図を示す。
【図２】[0011]  図２は、ネットワークインタラクションシステムの別の実施形態のブロック図を示す。
【図３Ａ】[0012]  図３Ａは、接続管理システムを含むネットワークインタラクションシステムの他の実施形態のブロック図を示す。
【図３Ｂ】図３Ｂは、接続管理システムを含むネットワークインタラクションシステムの他の実施形態のブロック図を示す。
【図３Ｃ】図３Ｃは、接続管理システムを含むネットワークインタラクションシステムの他の実施形態のブロック図を示す。
【図４】[0013]  図４は、接続コンポーネントのオペレーションのプロトコルスタックマッピングの表現を示す。
【図５】[0014]  図５は、一実施形態によるマルチデバイス通信交換システムを表す。
【図６】[0015]  図６は、接続管理システムの一実施形態のブロック図を示す。
【図７】[0016]  図７は、モバイルアプリケーションのリアルタイム遠隔制御のためのインタラクション環境の表現を示す。
【図８】[0017]  図８は、ネットワークデバイスにおいて入力イベントを複製するための処理のスイムレーン図を示す。
【図９】[0018]  図９は、ネットワークデバイスにおいて入力イベントを複製するための別の処理のスイムレーン図を示す。
【図１０】[0019]  図１０は、モバイルアプリケーションを遠隔制御するための処理のフローチャートを示す。
【図１１】[0020]  図１１は、ネットワークデバイスにおいて入力イベントを複製するための処理のフローチャートを示す。
【図１２】[0021]  図１２は、モバイルアプリケーションを遠隔制御するための別の処理のフローチャートを示す。
【００１０】
[0022]  添付の図面では、同様のコンポーネントおよび／または特徴は、同じ参照符号を有し得る。さらに、同じタイプの様々なコンポーネントは、参照ラベルの後に、ダッシュと、それらの同様のコンポーネント間を区別する第２のラベルとを続けることによって区別され得る。本明細書中で第１の参照ラベルのみが使用される場合、その説明は、第２の参照ラベルに関係なく同じ第１の参照ラベルを有する同様のコンポーネントのうちのどの１つにも適用可能である。
【発明の詳細な説明】
【００１１】
[0023]  以下の説明は、好ましい実施形態の例のみを提供するものであり、本開示の範囲、適用可能性または構成を限定することを意図するものではない。むしろ、以下の、好ましい実施形態の例の説明は、当業者に、好ましい実施形態の例を実施することを可能にする説明を提供するだろう。添付の特許請求の範囲に記載されているような趣旨および範囲を逸脱することなく、要素の機能および構成の様々な変更を行い得ることを理解されたい。
【００１２】
[0024]  図１は、本明細書で説明される特定の実施形態および特徴を実装およびサポートするネットワークインタラクションシステム１００の一実施形態のブロック図を示す。特定の実施形態は、（ユーザ１１０によってオペレートされ得る）ネットワークデバイス１０５と、（エージェント１２０によってオペレートされ得る）端末デバイス１１５との間の接続チャネルを確立することに関する。特定の実施形態では、ネットワークインタラクションシステム１００は、クライアント１２５と関連付けられたクライアントデバイス１３０を含み得る。
【００１３】
[0025]  特定の実施形態では、ユーザ１１０は、ウェブサイトを閲覧しているか、または遠隔サーバ１４０によって提供されたオンラインサービスにアクセスしている、個人であり得る。クライアント１２５は、本明細書で説明されるような、ウェブサイトまたはオンラインサービスを提供、オペレート、または動作しているエンティティか、あるいは、クライアント１２５に利用可能なタスクを行うためにそのようなエンティティによって用いられたまたは指定された個人であり得る。エージェント１２０は、ウェブサイトまたはオンラインサービスに関するサポートまたは情報（例えば、オンラインストアで入手可能な製品についての情報）をユーザ１１０に提供する任務を負う、サポートエージェントまたは販売員などの個人であり得る。多数のエージェントのうちで、エージェントのサブセットは、特定のクライアント１２５のためのサポートまたは情報を提供するために適切であり得る。エージェント１２０は、クライアント１２５と提携している場合もあり、そうでない場合もある。各エージェントは、１つまたは複数のクライアント１２５と関連付けられ得る。いくつかのの非限定的な例では、ユーザ１１０は、パーソナルコンピューティングデバイスからオンラインストアで買い物をする個人であり、クライアント１２５は、製品をオンラインで販売する企業であり、エージェント１２０は、企業に雇用された販売員であり得る。様々な実施形態において、ユーザ１１０、クライアント１２５、およびエージェント１２０は、他の個人またはエンティティであり得る。
【００１４】
[0026]  図１は、単一のネットワークデバイス１０５、端末デバイス１１５、およびクライアントデバイス１３０のみを示しているが、インタラクションシステム１００は、これらのタイプのデバイスの１つまたは複数の各々の複数または多数（例えば、数十、数百、または数千）を含み得る。同様に、図１は、単一のユーザ１１０、エージェント１２０、およびクライアント１２５のみを示しているが、インタラクションシステム１００は、そのようなエンティティの１つまたは複数の各々の複数または多数を含み得る。よって、所与のネットワークデバイスと通信するためにどの端末デバイスが選択されるべきかの決定が必要であり得る。問題をさらに複雑にしているのは、遠隔サーバ１４０もまた、ネットワークデバイス通信を選択するために、受信および応答するように構成され得ることである。
【００１５】
[0027]  接続管理システム１５０は、通信の戦略的ルーティングを容易にし得る。通信は、（例えば、タイプ入力または口頭入力などの、エンティティからの入力に基づいて定義された）コンテンツを有するメッセージを含み得る。通信はまた、送信側デバイスついてのデータ（例えば、ＩＰアドレス、アカウント識別子、デバイスのタイプおよび／またはオペレーティングシステム）などの追加のデータ、宛先アドレス、クライアントの識別子、ウェブページまたはウェブページ要素の識別子（例えば、通信が生成されたときに訪問されていた、あるいはそうでなければ通信と関連付けられた、ウェブページまたはウェブページ要素）またはオンライン履歴データ、時間（例えば、時刻および／または日付）、並びに／あるいは、宛先アドレスも含み得る。通信は、他の情報も含み得る。ある場合には、接続管理システム１５０は、全体の通信を別のデバイスにルーティングする。ある場合には、接続管理システム１５０は、通信を変更するか、または（例えば、初期通信に基づいて）新しい通信を生成する。新しいまたは修正された通信は、メッセージ（または、それの処理されたバージョンのもの）、追加のデータの少なくとも一部（または全て）（例えば、送信デバイス、ウェブページ、またはオンライン履歴、および／または時間について）、並びに／あるいは接続管理システム１５０によって識別される他のデータ（例えば、特定のアカウント識別子またはデバイスに関連付けられたアカウントデータ）を含み得る。新しい通信または変更された通信は、他の情報も含み得る。
【００１６】
[0028]  戦略的ルーティングを容易にすることの一部は、ネットワークデバイス１０５と１つまたは複数の端末デバイス１１５との間で１つまたは複数の接続チャネルを確立、更新、および使用することを含み得る。例えば、ネットワークデバイス１０５から通信を受信すると、接続管理システム１５０は、まず、通信が（もしあれば）どのクライアントに対応するかを推定し得る。クライアントを識別すると、接続管理システム１５０は、ネットワークデバイス１０５との通信のためのクライアントと関連付けられた端末デバイス１１５を識別し得る。ある場合には、その識別は、複数のエージェント（またはエキスパートまたはデリゲート）のそれぞれのプロファイルを評価することを含み得、複数のエージェントの各エージェント（例えば、エージェント１２０）が、端末デバイス（例えば、端末デバイス１１５）に関連付けられている。評価は、ネットワークデバイスのメッセージのコンテンツに関連し得る。端末デバイス１１５の識別は、例えば、２０１０年３月１７日に出願された米国出願第１２／７２５，７９９号で説明される技法を含み得、全ての目的のために参照によりその全体が本明細書に組み込まれている。
【００１７】
[0029]  ある場合には、接続管理システム１５０は、ネットワークデバイス１０５とクライアント（または遠隔サーバ１４０）に関連付けられた端末デバイスとの間で任意の接続チャネルが確立されたか否かを決定し、そうである場合、そのようなチャネルがその通信を含む一連の通信を交換するのに使用されるべきか否かを決定し得る。
【００１８】
[0030]  ネットワークデバイス１０５と通信するように端末デバイス１１５を選択すると、接続管理システム１５０は、ネットワークデバイス１０５と端末デバイス１１５との間の接続チャネルを確立することができる。ある場合には、接続管理システム１５０は、選択された端末デバイス１１５にメッセージを送信し得る。メッセージは、ネットワークデバイス１０５と通信するために提案された割り当ての受け入れを要求するか、またはそのような割り当てが生成されたことを識別し得る。メッセージは、ネットワークデバイス１０５についての情報（例えば、ＩＰアドレス、デバイスタイプ、および／またはオペレーティングシステム）、関連するユーザ１１０についての情報（例えば、話す言語、クライアントとやりとりが行われた継続時間、スキルレベル、感情、および／またはトピックの好み）、受信した通信、ネットワークデバイス１０５に通信を生成および送信するためのコード（例えば、クリック可能なハイパーリンク）、および／またはネットワークデバイス１０５に通信を生成および送信するための命令を含み得る。
【００１９】
[0031]  一例では、ネットワークデバイス１０５と端末デバイス１１５との間の通信は、接続管理システム１５０を介してルーティングされ得る。そのような構成は、接続管理システム１５０が通信交換をモニタし、デバイスまたは拡張されたレイテンシの非応答性などの問題（例えば規則に基づいて定義される）を検出することを可能にすることができる。さらに、このような構成は、通信の選択的なまたは完全な記憶を容易にし、それは後で、例えば通信交換の品質をアセスメントする（assess）ために、および／または、特定の通信後のターゲットを助長するようにルーティング規則を更新または生成するための学習をサポートするために、使用され得る。
【００２０】
[0032]  いくつかの実施形態では、接続管理システム１５０は、リアルタイムに通信交換を監視し、ライブ通信に基づいて自動アクション（例えば、規則ベースのアクション）を行い得る。例えば、通信が特定の製品に関連すると接続管理システム１５０が決定した場合、接続管理システム１５０は、製品についての追加の情報（例えば、在庫の製品の品質、製品に関連したサポート文書へのリンク、あるいは、製品または同様の製品についての他の情報）を含む追加のメッセージを端末デバイス１１５に自動的に送信し得る。
【００２１】
[0033]  一例では、指定された端末デバイス１１５は、接続管理システム１５０を介する通信を中継することなく、ネットワークデバイス１０５と通信し得る。一方または両方のデバイス１０５、１１５は、通信モニタリングおよび／またはデータ記憶を容易にするために、特定の通信メトリックまたはコンテンツを接続管理システム１５０に報告し得る（報告しない可能性もある）。
【００２２】
[0034]  上述したように、接続管理システム１５０は、選択の通信を遠隔サーバ１４０にルーティングし得る。遠隔サーバ１４０は、あらかじめ定められた方法で情報を提供するように構成され得る。例えば、遠隔サーバ１４０は、通信に応答して送信すべき定義された１つまたは複数の短文、音声録音、および／またはファイルにアクセスし得る。遠隔サーバ１４０は、例えば、受信した通信の分析（例えば、セマンティックまたはマッピング分析）に基づいて、特定の短文、録音、またはファイルを選択し得る。
【００２３】
[0035]  接続管理システム１５０で行われるルーティングおよび／または他の決定または処理は、１つまたは複数のクライアントデバイス１３０によって少なくとも部分的に定義されるかまたは提供される規則および／またはデータに基づいて行われ得る。例えば、クライアントデバイス１３０は、エージェントの優先順位付け、端末デバイスのタイプ、および／またはトピック／スキルマッチングを識別する通信を送信し得る。別の例として、クライアントデバイス１３０は、ルーティング決定に潜在的に影響を及ぼす様々な変数（例えば、言語互換性、予測される応答時間、デバイスタイプおよび能力、および／または端末デバイス負荷分散）に適用するための１つまたは複数の重みを識別し得る。どの端末デバイスおよび／またはエージェントがクライアントと関連付けられるべきかは、動的であり得ることが理解されるだろう。クライアントデバイス１３０および／または端末デバイス１１５からの通信は、所与の端末デバイスおよび／またはエージェントがクライアントに関連付けられるように追加または削除されるべきであることを示す情報を提供し得る。例えば、クライアントデバイス１３０は、ＩＰアドレスと、そのアドレスを有する端末デバイスがクライアントに関連する端末デバイスを識別するリストに追加されるかまたはリストから削除されるかに関する指示と、を有する通信を送信し得る。
【００２４】
[0036]（例えば、デバイス間、デバイスと接続管理システム１５０との間、遠隔サーバ１４０と接続管理システム１５０との間、遠隔サーバ１４０とデバイスとの間の）各通信は、１つまたは複数のネットワーク１７０上で発生し得る。開放型または閉鎖型ネットワークの任意の組み合わせが、１つまたは複数のネットワーク１７０に含まれ得る。適切なネットワークの例は、インターネット、パーソナルエリアネットワーク、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、無線ローカルエリアネットワーク（ＷＬＡＮ）を含む。他のネットワークも同様に好適であり得る。１つまたは複数のネットワーク１７０は、イントラネット、エクストラネット、またはそれらの組み合わせに完全に組み込まれ得るか、またはそれらを含み得る。ある場合には、１つまたは複数のネットワーク１７０内のネットワークは、Ｂｌｕｅｔｏｏｔｈ（登録商標）またはＢｌｕｅｔｏｏｔｈ低電力チャネルなどの短距離通信チャネルを含む。一実施形態では、２つ以上のシステムおよび／またはデバイス間の通信は、セキュアソケット層（ＳＳＬ：secure sockets layer）またはトランスポート層セキュリティ（ＴＬＳ：transport layer security）などのセキュアな通信プロトコルによって達成され得る。加えて、データおよび／またはトランザクションの詳細は、限定はされないが、ＤＥＳ（Data Encryption Standard）、トリプルＤＥＳ、ＲＳＡ（Rivest-Shamir-Adleman）暗号化、Blowfish暗号化、ＡＥＳ（Advanced Encryption Standard）、ＣＡＳＴ−１２８、ＣＡＳＴ−２５６、ＤＦＣ（Decorrelated Fast Cipher）、ＴＥＡ（Tiny Encryption Algorithm）、ＸＴＥＡ（eXtended TEA）、ＸＸＴＥＡ（Corrected Block TEA）、および／またはＲＣ５などの、任意の便利な、周知の、またはこれから開発される方法に基づいて暗号化され得る。
【００２５】
[0037]  ネットワークデバイス１０５、端末デバイス１１５、および／またはクライアントデバイス１３０は、例えば、携帯電子デバイス（例えば、スマートフォン、タブレット、ラップトップコンピュータ、スマートウェアラブルデバイス）、または非携帯電子デバイス（例えば、１つまたは複数のデスクトップコンピュータ、スマート家電、サーバ、および／またはプロセッサ）を含み得る。接続管理システム１５０は、ネットワーク、端末およびクライアントデバイスから別個に収容され得るか、あるいは１つまたは複数のそのようなデバイスの一部であり得る（例えば、デバイス上のアプリケーションのインストールを介して）。遠隔サーバ１４０は、各デバイスおよび接続管理システム１５０とは別個に収容され得、および／または別のデバイスまたはシステムの一部であり得る。図１の各デバイス、サーバおよびシステムは単一のデバイスとして示されているが、複数のデバイスが代わりに使用され得ることが理解されるだろう。例えば、ネットワークデバイスのセットが単一のユーザから様々な通信を送信するために使用され得るか、または遠隔サーバ１４０がサーバースタックを含み得る。
【００２６】
[0038]  通信サーバ１８０は、ネットワークデバイス１０５と端末デバイス１１５との間の通信セッションを確立するように構成される１つまたは複数のサーバを含み得る。さらに、通信サーバ１８０は、本明細書の図７で説明される通信サーバ７１０と同じものであり得る。さらに、通信サーバ１８０は、ネットワークデバイス１０５と端末デバイス１１５とが通信セッション中にリアルタイムにデータ（例えば、メッセージ、メディアストリーム、スクリーンショット、イベントデータなど）を交換するサーバであり得る。ある場合には、通信サーバ１８０、ネットワークデバイス１０５、および端末デバイス１１５のいずれも、少なくとも部分的に、処理８００〜１２００の各々を行い得る。ある場合には、接続管理システム１５０はまた、処理８００〜１２００の各々の各々の少なくとも一部も行い得る。
【００２７】
[0039]  ソフトウェアエージェントまたはアプリケーションは、描かれたデバイス、システムまたはサーバ上にインストールされ、および／または実行可能であり得る。一例では、ソフトウェアエージェントまたはアプリケーションは、様々な描かれた要素が相補的な方法で動き得るように構成されている。例えば、デバイス上のソフトウェアエージェントは、デバイスの使用についてのデータを収集し、別個の接続管理システムに送信するように構成され得、別個の接続管理システム上のソフトウェアアプリケーションは、そのデータを受信し処理するように構成され得る。
【００２８】
[0040]  図２は、ネットワークインタラクションシステム２００の別の実施形態のブロック図を示す。概して、図２は、ネットワークデバイス２０５が１つまたは複数の端末デバイス２１５と通信することを可能にするように構成および配置された様々なコンポーネントを例示する。描かれる例は、３つのローカルエリアネットワーク２３５に含まれる９つの端末デバイス２１５を含む。
【００２９】
[0041]  ある場合には、ネットワークデバイス２０５からの通信は、どの端末デバイスがその通信を受信すべきかを少なくとも部分的に、または完全に示す宛先データ（例えば、宛先ＩＰアドレス）を含む。ネットワークインタラクションシステム２００は、宛先データを処理し、適切なルーティングを容易にし得る１つまたは複数のネットワーク間接続コンポーネント２４０および／または１つまたは複数のネットワーク内接続コンポーネント２５５を含み得る。
【００３０】
[0042]  各ネットワーク間接続コンポーネント２４５は、複数のネットワーク２３５に接続され得、（例えば、各カードが異なるネットワークに接続される）インストールされた複数のネットワークカードを有し得る。例えば、ネットワーク間接続コンポーネント２４５は、広域ネットワーク２７０（例えば、インターネット）および１つまたは複数のローカルエリアネットワーク２３５に接続され得る。描かれる例では、通信がネットワークデバイス２０５から任意の端末デバイスに送信されるために、描かれたシステムでは、通信は複数のネットワーク間接続コンポーネント２４５によって処理されなければならない。
【００３１】
[0043]  ネットワーク間接続コンポーネント２４５が通信（または通信に対応するパケットのセット）を受信したとき、ネットワーク間接続コンポーネント２４５は、宛先に関連付けられたネットワークに通信を渡すルートの少なくとも一部を決定し得る。ルートは、例えば、ルーティングテーブル（例えば、ルータに記憶されている）を使用して決定され得、それは、あらかじめ定義されるか、（例えば、別のルータからのまたは別のルータデバイスからの）着信メッセージに基づいて生成されるか、あるいは学習される１つまたは複数のルートを含み得る。
【００３２】
[0044]  ネットワーク間接続コンポーネント２４５の例は、ルータ２６０およびゲートウェイ２６５を含む。ネットワーク間接続コンポーネント２４５（例えば、ゲートウェイ２６５）は、ネットワークシステム間またはプロトコル間でコンバートするように構成され得る。例えば、ゲートウェイ２６５は、送信制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）デバイスとインターネットワークパケット交換／順次パケット交換（ＩＰＸ／ＳＰＸ）デバイスとの間の通信を容易にし得る。
【００３３】
[0045]  ローカルエリアネットワーク２３５で通信を受信すると、さらなるルーティングが行われる必要があり得る。そのようなネットワーク内ルーティングは、スイッチ２８０またはハブ２８５などのネットワーク内接続コンポーネント２５５を介して行われ得る。各ネットワーク内接続コンポーネント２５５は、（例えば、無線で、またはイーサネット（登録商標）ケーブルなどを介して有線で）複数の端末デバイス２１５に接続され得る。ハブ２８５は、全ての受信された通信を、それが接続されている各デバイスに繰り返すように構成され得る。各端末デバイスは次いで、各端末デバイスが宛先デバイスであるか否か、または通信が無視されるべきか否かを決定するために、各通信を評価し得る。スイッチ２８０は、宛先端末デバイスのみに通信を選択的に方向付けするように構成され得る。
【００３４】
[0046]  ある場合には、ローカルエリアネットワーク２３５は、複数のセグメントに分割され得、その各々は、独立したファイアウォール、セキュリティ規則、およびネットワークプロトコルと関連付けられ得る。ネットワーク内接続コンポーネント２５５は、セグメント内ルーティングを容易にするために、１つ、複数、または全てのセグメントの各々に提供され得る。ブリッジ２８０は、セグメント２７５にわたる通信をルーティングするように構成され得る。
【００３５】
[0047]  ネットワークにわたり、またはネットワーク内で通信を適切にルーティングするために、様々なコンポーネントが通信内の宛先データを分析する。例えば、そのようなデータは、通信がどのネットワークにルーティングされるべきか、通信がネットワーク内のどのデバイスにルーティングされるべきか、または端末デバイスがどの通信を処理すべきか（または無視すべきか）を示し得る。しかし、ある場合には、ネットワークデバイスからの通信にどの端末デバイスが参加すべきか（またはどのネットワークが関与すべきかさえも）が直ちに明らかにならない。
【００３６】
[0048]  例示として、端末デバイスのセットが、類似したタイプの応答通信を提供するように構成され得る。よって、ネットワークデバイスからの通信内のクエリは、どのネットワークデバイスがその通信をルーティングしたかに関わらず、同様の方法で応答されることが予期され得る。この仮定は、高いレベルで当てはまる可能性があるが、端末デバイスに関係する様々な詳細は、特定のルーティングが他と比較して有利となることにつながり得る。例えば、セット内の端末デバイスは、（例えば）どの通信チャネルがサポートされているか、ネットワークデバイスへの地理的近接性および／またはネットワーク近接性、並びに／あるいは、関連したエージェントの特性（例えば知識ベース、経験、使用言語、可用性、全体的な性格または感情など）に関して互いに異なり得る。従って、選択ルーティングは、ネットワークデバイス通信に、より正確に、および／または完全に応答するより速い応答を容易にし得る。複雑なのは、ネットワークデバイスを端末デバイスにマッピングする静的ルーティングが、通信トピック、チャネルタイプ、エージェント利用可能性などの変動を考慮に入れることを失敗し得ることである。
【００３７】
[0049]  図３Ａ〜図３Ｃは、接続管理システムを含むネットワークインタラクションシステム３００ａ〜ｃの他の実施形態のブロック図を示す。描かれるシステム３００ａ〜ｃの各々は、簡略化のために２つのローカルエリアネットワーク２３５のみを示しているが、ローカルエリアネットワークの数を拡大させるために実施形態が拡張され得ることが理解されるだろう。システム３００ａ〜ｃの各々は、接続管理システム３５０を含み、それは、どの端末デバイスがネットワークデバイス２０５と通信するかを識別し得、接続チャネルを確立および管理（例えば、維持または終了）し得、ある交換において通信を再ルーティングするか否か、いつするかなどを決定し得る。よって、接続管理システム３５０は、ルーティング決定に影響を及ぼすように、通信、エージェント可用性、端末デバイスまたはエージェントの能力などを動的に、リアルタイムに評価するように構成され得る。
【００３８】
[0050]  図３Ａでは、接続管理システム３５０は、ネットワークデバイス２０５および遠隔サーバ３４０の各々に関連付けられている（例えば、接続管理システム３５０ａはネットワークデバイス２０５に関連付けられ、接続管理システム３５０ｂは遠隔サーバ３４０に関連付けられる）。例えば、接続管理システム３５０ａおよび／または接続管理システム３５０ｂは、それぞれネットワークデバイス２０５および遠隔サーバ３４０の各々にアプリケーションとしてインストールまたは記憶され得る。アプリケーションの実行は、例えば、ネットワークデバイス２０５との通信交換に参加するよう選択された端末デバイス２１５を識別するために、ネットワークデバイス２０５と遠隔サーバ３４０との間の通信を容易にし得る。識別は、本明細書で開示される１つまたは複数の要因（例えば、可用性、通信トピック／レベルの詳細とエージェントまたは端末デバイスの知識ベースとの一致、予測されるレイテンシ、チャネルタイプの可用性など）に基づいて行われ得る。
【００３９】
[0051]  クライアントデバイス３３０は、ルーティング決定をどのように行うべきか指示するクライアントデータを提供し得る。例えば、そのようなデータは、（例えば、負荷分散または予測応答レイテンシに関係して）特定の特性をどのように重み付けし、またはマッチングし、または制約し、またはバイアスをかけるべきかに関する指示を含み得る。クライアントデータはまた、通信チャネルがいつ確立される（または閉じられる）べきか、または異なるネットワークデバイスに通信がいつ再ルーティングされるべきかに関連した仕様も含み得る。クライアントデータは、通信ルーティングのための規則などのような様々なクライアント固有の規則を定義するために使用され得る。
【００４０】
[0052]  遠隔サーバ３４０上で実行する接続管理システム３５０ｂは、どの通信チャネルがサポートされているか、ネットワークデバイスへの地理的近接性および／またはネットワーク近接性、端末デバイスとの通信のレイテンシおよび／または安定性、端末デバイスのタイプ、端末デバイスの能力、端末デバイス（またはエージェント）が前に所与のネットワークデバイス（またはユーザ）と通信したことがあるか否か、並びに／あるいは、関連付けられたエージェントの特性（例えば知識ベース、経験、使用言語、可用性、全体的な性格または感情など）のような、端末デバイスに関係する（例えば、所与のクライアントに関係する）様々なメトリックをモニタし得る。従って、通信管理システム３５０ｂは、メトリックに基づいてネットワークデバイスの通信に、より正確に、および／または完全に応答するより速い応答を容易にするようにルーティングを選択することを可能にし得る。
【００４１】
[0053]  図３Ａに描かれる例では、ネットワークデバイス２０５と遠隔サーバ３４０との間の通信交換は、宛先アドレスの早期の識別を容易にし得る。次いで、ネットワークデバイス２０５は、宛先アドレスを使用して後続の通信を方向付けし得る。例えば、ネットワークデバイス２０５は、（例えば、１つまたは複数のネットワーク間接続および広域ネットワークを介して）遠隔サーバ３４０に初期通信を送り、遠隔サーバ３４０は、１つまたは複数の対応するクライアントを識別し得る。次いで、遠隔サーバ３４０は、１つまたは複数の対応するクライアントと関連付けられた端末デバイスのセットを識別し、それらの端末デバイスについてのメトリックを収集し得る。メトリックは、通信交換に関与すべき端末デバイスを選択するように（例えば、遠隔サーバ３４０によって）評価され得、端末デバイスに関係する情報（例えば、ＩＰアドレス）はネットワークデバイス２０５に送られ得るいくつかの実施形態では、遠隔サーバ３４０は、様々な端末デバイスについてのメトリックを継続的または定期的に収集および評価し、評価結果をデータストアに記憶する。そのような実施形態では、１つまたは複数の対応するクライアントと関連付けられた端末デバイスのセットを識別すると、遠隔サーバ３４０は、データストアからの記憶された評価結果にアクセスし、記憶された評価結果に基づいて通信交換に関与すべき端末デバイスを選択し得る。
【００４２】
[0054]  図３Ｂでは、接続管理システム３５０は、中継器および／または宛先アドレスとして機能するように構成され得る。従って、例えば、ネットワークデバイス２０５のセットは、各々が接続管理システム３５０を宛先として識別する通信を送信し得る。接続管理システム３５０は、各通信を受信し得、端末デバイスのセットを（例えば、端末デバイスごとのメトリックを生成するように）同時にモニタし得る。モニタリングおよび規則に基づいて、接続管理システム３５０は、各通信を中継し得る端末デバイス２１５を識別する。実施形態に応じて、端末デバイスの通信は、同様に、さらなる中継のために（例えば、接続管理システム３５０の）一貫した宛先に方向付けされ得るか、または端末デバイスは、対応するネットワークデバイスと直接通信を開始し得る。これらの実施形態は、効率的なルーティングおよび十分な通信モニタリングを容易にし得る。
【００４３】
[0055]  図３Ｃに描かれる実施形態は、図３Ｂ中のものと同様である。しかしながら、いくつかの実施形態では、接続管理システム３５０は、ネットワーク内コンポーネント（例えば、端末デバイス、ネットワーク内接続、またはその他）に直接接続される。
【００４４】
[0056]  図３Ａ〜図３Ｃの多くのバリエーションが考えられることが理解されるだろう。例えば、接続管理システム３５０は、接続管理システム３５０（またはその一部）に対応するアプリケーションがコンポーネントにインストールされるように、接続コンポーネント（例えば、ネットワーク間接続コンポーネント２４５またはネットワーク内接続コンポーネント２５５）に関連付けられ得る。アプリケーションは、例えば、独立して、または（例えば、１つまたは複数の他のコンポーネント、ネットワークデバイス、あるいは遠隔サーバ上で実行している）１つまたは複数の類似したアプリケーションあるいは相補的なアプリケーションと通信することによって、動作し得る。
【００４５】
[0057]  図４は、接続コンポーネントのオペレーションのプロトコルスタックマッピング４００の表現を示す。より具体的には、図４は、様々な接続コンポーネントに対応するオープンシステムインタラクション（ＯＳＩ：Open Systems Interaction）モデルにおけるオペレーションの層を識別する。
【００４６】
[0058]  ＯＳＩモデルは、複数の論理層４０２〜４１４を含み得る。各層は、層４０２〜層４１２が各々上位層にサービスし、層４０４〜層４１４が各々下位層によってサービスされるように、順序付けられたスタックで配置されている。ＯＳＩモデルは、物理層４０２を含む。物理層４０２は、パラメータの物理的通信（例えば、電気的、光学的、または電磁的）を定義し得る。物理層４０２はまた、接続を確立および終了するためのプロトコルなどの接続管理プロトコルを定義する。物理層４０２は、フロー制御プロトコルおよび送信モードをさらに定義し得る。
【００４７】
[0059]  リンク層４０４は、ノード間通信を管理し得る。リンク層４０４は、エラー（例えば、物理層４０２における送信エラー）を検出および訂正し得、アクセス許可を管理し得る。リンク層４０４は、媒体アクセス制御（ＭＡＣ）層および論理リンク制御（ＬＬＣ）層を含み得る。
【００４８】
[0060]  ネットワーク層４０６は、（例えば、データグラムとしての）同じネットワーク中のノード間の（例えば可変長の）データの転送を調整し得る。ネットワーク層４０６は、論理ネットワークアドレスを物理マシンアドレスにコンバートし得る。
【００４９】
[0061]  トランスポート層４０８は、送信および受信の質を管理し得る。トランスポート層４０８は、送信制御プロトコル（ＴＣＰ：Transmission Control Protocol）などのデータを転送するためのプロトコルを提供し得る。トランスポート層４０８は、送信のためにデータパケットのセグメントテーション／デセグメントテーションを行い得、層４０２〜層４０６で発生する送信エラーを検出し、これに対処し得る。セッション層４１０は、ローカルアプリケーションとリモートアプリケーションとの間の接続を開始、維持、および終了し得る。セッションは、リモートプロシージャインタラクションの一部として使用され得る。プレゼンテーション層４１２は、アプリケーション層またはネットワーク層によって受け入れられることがわかっているデータタイプに基づいてデータを暗号化、解読、フォーマット化し得る。
【００５０】
[0062]アプリケーション層４１４は、通信を制御または管理するソフトウェアアプリケーションと相互接続し得る。そのようなアプリケーションを介して、アプリケーション層４１４は、（例えば）宛先、ローカルリソースの状態、あるいは可用性および／または通信のコンテンツまたはフォーマットを識別し得る。様々な層４０２〜４１４は、利用可能および適用可能な他の機能を果たし得る。
【００５１】
[0063]  ネットワーク内接続コンポーネント４２２、４２４は、物理層４０２およびリンク層４０４においてオペレートするように図示されている。より具体的には、通信の受信および送信に関するオペレーションを制御できるように、ハブは物理層でオペレートし得る。ハブが通信のアドレス指定またはデータのフィルタリングのための能力がないため、それらは上位レベルでオペレートする機能がほとんど、あるいは全くない。一方、スイッチは、アドレス（例えば、ＭＡＣアドレス）に基づいて通信フレームをフィルタリングすることができるので、リンク層４０４でオペレートすることができる。
【００５２】
[0064]  一方、ネットワーク間接続コンポーネント４２６、４２８は、上位レベル（例えば、層４０６〜層４１４）でオペレートするように図示されている。例えば、ルータは、アドレス（例えば、ＩＰアドレス）に基づいて通信データパケットをフィルタリングすることができる。ルータは、パケットを適切なネットワークに指定するように、アドレスに基づいてパケットを特定のポートに転送し得る。ゲートウェイは、ネットワーク層以上でオペレートし、同様のフィルタリング、方向付け、および（例えば、プロトコルまたはアーキテクチャにわたる）さらなるデータの変換を行い得る。
【００５３】
[0065]  接続管理システム４５０は、様々な実施形態において、様々な層のうちの１つ、複数、全て、または任意のものと相互接続し、および／またはその上でオペレートし得る。例えば、接続管理システム４５０は、どの端末デバイスとハブが通信するかを動的に調整するようにハブと相互接続し得る。別の例として、接続管理システム４５０は、コンポーネントが宛先（例えば、ＭＡＣ、論理、または物理）アドレスとしてどの端末デバイスを選択するかに影響を及ぼすように、ブリッジ、スイッチ、ルータまたはゲートウェイと通信し得る。さらなる例として、接続管理システム４５０は、トランスポート層４０８上のデータパケットのセグメンテーション、セッション層４１０上のセッション持続時間、並びに／あるいは、プレゼンテーション層４１２上の暗号化および／または圧縮をモニタ、制御、または指示し得る。いくつかの実施形態では、接続管理システム４５０は、特定の層でオペレートしている装置（例えば、リンク層４０４でオペレートしているスイッチ）と通信を交換する（例えば、コマンドを送る）ことによって、特定のやり方で（例えば、ネットワークデバイスと端末デバイスとの間の）既存の通信をルーティングまたは修正することによって、および／または既存の通信に基づいて特定の情報（例えば、新しい宛先アドレス）を含む新しい通信を生成することによって、様々な層と相互接続し得る。よって、接続管理システム４５０は、様々なデバイスとのインタラクションによって、および／または様々なプロトコルスタック層でオペレートすることに影響を及ぼすことによって、通信ルーティングおよびチャネル確立（あるいは、維持または終了）に影響を及ぼし得る。
【００５４】
[0066]  図５は、一実施形態によるマルチデバイス通信交換システム５００を表す。システム５００は、様々なタイプの通信チャネル上で様々なタイプの端末デバイスと通信するように構成されたネットワークデバイス５０５を含む。
【００５５】
[0067]  描かれる例では、ネットワークデバイス５０５は、（例えば、基地局５１０を介して）セルラネットワーク上で通信を送信し得る。通信は、稼働中のネットワーク５１５にルーティングされ得る。稼働中のネットワーク５１５は、通信を受信し、どの端末デバイスが通信に応答すべきかを識別する接続管理システム５２０を含み得る。そのような決定は、（例えば、コンテンツ分析またはクライアントを示すユーザ入力に基づいて）その通信が関係するクライアントを識別すること、およびクライアントと関連付けられた１つまたは複数の端末デバイスごとに１つまたは複数のメトリックを決定することに依存し得る。例えば、図５は、端末デバイス５３０ａ〜ｃの各クラスタは、異なるクライアントに対応し得る。端末デバイスは、地理的にコロケートされるか、または分散され得る。メトリックは、記憶されたまたは学習されたデータおよび／またはリアルタイムのモニタリング（例えば、可用性に基づいて）に基づいて決定され得る。
【００５６】
[0068]  接続管理システム５２０は、１つまたは複数のルータ５２５、あるいは他のネットワーク間またはネットワーク内接続コンポーネントを介して様々な端末デバイスと通信し得る。接続管理システム５２０は、１つまたは複数のデータストアにおける、通信、端末デバイスオペレーション、クライアント規則、および／またはユーザと関連付けられたアクション（例えば、オンラインアクティビティ、アカウントデータ、購入履歴など）から、またはこれらに関係してデータを収集、分析、および／または記憶し得る。そのようなデータは、通信ルーティングに影響を及し得る。
【００５７】
[0069]  特に、通信ルーティングおよび／または処理に影響を及ぼすために、様々な他のデバイスがさらに使用され得る。例えば、図示の例では、接続管理システム５２０もまた、ウェブサーバ５４０に接続されている。よって、接続管理システム５４０は、技術的製品詳細、ニュース、現在の提供製品、現在または予測される天気などのような関心対象のデータを検索し得る。
【００５８】
[0070]  ネットワークデバイス５０５はまた、（例えば、ストリーミングウェブサーバ５４５を含む）ウェブサーバに接続され得る。ある場合には、そのようなサーバとの通信には、接続管理システム５２０との通信交換を開始するための初期のオプションが提供される。例えば、ネットワークデバイス５０５は、特定のウェブページを訪問している間に、利用できる通信機会があり、そのようなオプションを提示され得ることを検出し得る。
【００５９】
[0071]  通信システム５００の１つまたは複数の要素はまた、ソーシャルネットワーキングサーバ５５０にも接続され得る。ソーシャルネットワーキングサーバ５５０は、様々なユーザデバイスから受信したデータを集約し得る。よって、例えば、接続管理システム５２０は、所与のトピックに対する一般的な（またはユーザ固有の）感情を推定するか、あるいは所与のユーザまたはユーザのクラスの一般的な行動を推定することが可能であり得る。
【００６０】
[0072]  図６は、接続管理システム６００の一実施形態のブロック図を示す。メッセージ受信側インターフェース６０５は、メッセージを受信し得る。ある場合には、メッセージは、例えば、ネットワークデバイスまたは端末デバイスなどの（例えば、接続管理システム６００とは別個に、または同じハウジング内に収容された）ソースデバイスによって送信された通信の一部として受信され得る。ある場合には、通信は、２つのデバイス（例えば、ネットワークデバイスおよび端末デバイス）間でルーティングされる一連のメッセージまたはメッセージ交換を含み得る、一連の通信または通信交換の一部であり得る。このメッセージまたは通信交換は、デバイス間のインタラクションの一部であり得る、および／またはそれを定義し得る。通信チャネルまたはオペレート可能なチャネルは、デバイス間のルーティングおよび通信交換を容易にするために使用される１つまたは複数のプロトコル（例えば、ルーティングプロトコル、タスク割り当てプロトコルおよび／またはアドレス指定プロトコル）を含み得る。
【００６１】
[0073]  ある場合には、メッセージは、ローカルまたは遠いユーザインターフェースで受信された入力に基づいて生成されるメッセージを含み得る。例えば、メッセージは、ボタンまたはキーの選択または録音された発話信号に基づいて生成されるメッセージを含み得る。一例では、メッセージは、ネットワークデバイスが特定のアプリページまたはウェブページを提示するか、または特定の入力コマンド（例えば、キーシーケンス）を提供したことを検出すると生成されるものといった、自動的に生成されたメッセージを含む。メッセージは、通信交換を開始するものなどの、命令または要求を含み得る。
【００６２】
[0074]  ある場合には、メッセージは、クライアントの識別子を含むか、またはそれと関連付けられ得る。例えば、メッセージは、クライアント（またはクライアントと関連付けられたデバイス）を明示的に識別し得、メッセージは、クライアントと関連付けられたウェブページまたはアプリページを含み、またはそれと関連付け得、メッセージは、クライアントと関連付けられた宛先アドレスを含むか、またはそれと関連付けられ得、メッセージは、（例えば、クライアントによって販売されている、クライアントによって販売されたことのある、またはクライアントがサービス提供するものである）クライアントと関連付けられた品目（例えば、製品）またはサービスの識別を含むか、またはそれと関連付けられ得る。例示として、ネットワークデバイスは、エージェントに通信を送信するオプションを提供し得る、特定のクライアントのアプリページを提示しているものであり得る。メッセージに対応するユーザ入力を受け取ると、そのメッセージおよび特定のクライアントの識別子を含めるように通信が生成され得る。
【００６３】
[0075]  処理エンジン６１０は、受信した通信および／またはメッセージを処理し得る。処理は、例えば、１つまたは複数の特定のデータ要素（例えば、メッセージ、クライアント識別子、ネットワークデバイス識別子、アカウント識別子など）を抽出することを含み得る。処理は、（例えば、特定のデバイスのタイプ、オペレーティングシステム、通信チャネルタイプ、プロトコルおよび／またはネットワークと互換性を有するように）フォーマットまたは通信タイプを変換することを含み得る。
【００６４】
[0076]  メッセージアセスメントエンジン６１５は、（例えば、抽出または受信された）メッセージをアセスメントし得る。アセスメントは、例えば、メッセージための１つまたは複数のカテゴリまたはタグを識別することを含み得る。カテゴリまたはタグタイプの例は、（例えば）トピック、感情、複雑さ、および緊急性を含み得る。メッセージをカテゴリ化することとタグ付けすることとの違いは、カテゴリは（例えば、あらかじめ定義されたカテゴリオプションのセットに従って）制限され得るが、一方タグは制限なしであり得る。トピックは、例えば、製品、サービス、技術的問題、使用に関する質問、苦情、払い戻し請求、または購入依頼を含み得る。カテゴリまたはタグは、例えば、（例えば、キーワード、文の構造、繰り返される単語、句読点および／または項目以外の単語を識別することによる）メッセージの意味解析、ユーザ入力（例えば、選択された１つまたは複数のカテゴリを有する）並びに／あるいは、メッセージ関連の統計（例えば、タイピング速度および／または応答レイテンシ）に基づいて決定され得る。
【００６５】
[0077]  ある場合には、メッセージアセスメントエンジン６１５は、メッセージについてのメトリックを決定し得る。メトリックは、例えば、文字、単語、大文字、全て大文字の単語、あるいは特定の文字または句読点のインスタンス（例えば、感嘆符、疑問符および／またはピリオド）の数を含み得る。メトリックは、感嘆符（または疑問符）で終わる文の割合、全て大文字である単語の割合などの、比率を含み得る。
【００６６】
[0078]   メッセージアセスメントエンジン６１５は、メッセージ、メッセージメトリック、および／またはメッセージ統計をメッセージデータストア６２０に記憶し得る。各メッセージはまた、対応するソースデバイス、宛先デバイス、ネットワークデバイス、端末デバイス、クライアント、１つまたは複数のカテゴリ、１つまたは複数の段階、および／またはメッセージと関連付けられた統計を識別するデータなどの、他のデータ（例えばメタデータ）と関連付けて記憶し得る。接続管理システム６００の様々なコンポーネント（例えば、メッセージアセスメントエンジン６１５および／またはインタラクション管理エンジン６２５）は、クエリ応答メッセージ、メッセージメトリックおよび／またはメッセージ統計を検索するために、メッセージデータストア６２０に問い合わせし得る。
【００６７】
[0079]  インタラクション管理エンジン６２５は、どのデバイスに通信がルーティングされるべきか、どのように受信側および送信側デバイスが通信すべきかを決定し得る。これらの決定の各々は、例えば、特定のネットワークデバイス（または特定のユーザと関連付けられた任意のネットワークデバイス）が、端末デバイスのセット内の端末デバイス（例えば、接続管理システム６００に関連付けられた任意の端末デバイス、または１つまたは複数の特定のクライアントに関連付けられた任意の端末デバイス）と以前に通信したことがあるか否かに依存し得る。
【００６８】
[0080]  ある場合には、ネットワークデバイス（あるいは、同じユーザまたはアカウントに関連付けられた他のネットワークデバイス）が所与の端末デバイスと（例えば、クライアントに関する事柄について）以前に通信したことがあるとき、通信ルーティングは、概して同じ端末デバイスの方にバイアスをかけられ得る。ルーティングに影響を及ぼし得る他の要因は、例えば、以前の通信に関係して推測または識別されたユーザまたはエージェントの感情、現在の通信のトピック（例えば、以前の通信のトピック、並びに／あるいは、１つまたは複数の端末デバイスまたはエージェントと関連付けられた知識ベースに関連するもの、および関連する程度）、端末デバイス（または対応するエージェント）が利用可能か否か、および／または端末デバイスの予測応答レイテンシを含み得る。そのような要因は、絶対的に、または他の端末デバイスに対応する同様のメトリックに関して考慮され得る。再ルーティング規則（例えば、クライアント固有の規則または一般的な規則）は、エージェント一貫性を優先するか否を決定するために、そのような要因がどのように評価され、重み付けされるべきか指示し得る。
【００６９】
[0081]  ネットワークデバイス（あるいは、同じユーザまたはアカウントと関連付けられた他のネットワークデバイス）が所与の端末デバイスと（例えば、クライアントに関する事柄について）以前に通信したことがないとき、端末デバイス選択を、例えば、様々なエージェントの知識ベースが通信の話題に対応する程度、所与の時間および／またはチャネルタイプでの様々なエージェントの可用性、（例えば、クライアントと関連付けられた）端末デバイスのタイプおよび／または能力、ユーザとエージェントとの間の言語一致、並びに／あるいは、性格分析などの要因に基づいて行われ得る。一例では、規則は、これらのような１つまたは複数の要因のサブスコアおよび各スコアに割り当てるべき重みをどのように決定するか識別し得る。重み付きサブスコアを組み合わせる（例えば、合計する）ことによって、エージェントごとのスコアが決定され得る。次いで、端末デバイス選択は、（例えば、高スコアまたは最高スコアを選択するように）端末デバイスのスコアを比較することによって行われ得る。
【００７０】
[0082]  デバイスがどのように通信すべきか決定することに関して、インタラクション管理エンジン６２５は、（例えば）端末デバイスが（例えば）電子メール、オンラインチャット、ＳＭＳメッセージ、音声通話、ビデオチャットなどを介する通信に応答すべきか否かを決定し得る。通信タイプは、例えば、通信タイプの優先順位リスト（例えば、少なくとも一部はクライアントまたはユーザによって定義された）、ネットワークデバイスから以前に受信した通信のタイプ（例えば、一貫性を助長するように）、受信メッセージの複雑さ、ネットワークデバイスの能力、並びに／あるいは、１つまたは複数の端末デバイスの可用性に基づいて選択され得る。明らかに、一部の通信タイプは、（例えば、迅速なメッセージ応答が期待される）リアルタイム通信をもたらすが、一方その他は、（例えば、メッセージ間の（例えば、数分または数時間の）遅延が受容される）非同期通信をもたらし得る。
【００７１】
[0083]  さらに、インタラクション管理エンジン６２５は、２つのデバイス間の継続チャネルが確立されるか、使用されるか、または終了されるべきか否かを決定し得る。継続チャネルは、ネットワークデバイスから指定された端末デバイスへの将来の通信のルーティングを容易にするように構築され得る。このバイアスは、連続メッセージ（例えば、数日、数週間または数ヶ月）にわたってさえ持続することができる。ある場合には、（例えば、エージェントを識別する）継続チャネルの表現は、ネットワークデバイス上で提示されるプレゼンテーションに含まれ得る。このようにして、ユーザは、効率を高めるように通信が一貫してルーティングされることを理解することができる。
【００７２】
[0084]  一例では、スコアは、所定のネットワークデバイスおよび端末デバイスに対応する接続スコアを決定するために、本明細書に記載された１つまたは複数の要因および（例えば、１つまたは複数の要因の各々の重みを含む）規則を使用して生成され得る。スコアは、全体的な一致、あるいは、所与の通信または連続通信に特有の一致に関係し得る。よって、例えば、スコアは、所与の端末デバイスがネットワークデバイス通信に応答するのに適していると予測される度合いを反映し得る。ある場合には、スコア分析は、所与の通信をルーティングする端末デバイスの各々を識別するために、および接続チャネルを確立するか、使用するか、または終了するか否かを識別するために使用され得る。スコア分析がルーティング決定とチャネル決定との両方に対処するために使用されるとき、各決定に関連するスコアは、同じ、同様、または異なる方式で決定され得る。
【００７３】
[0085]  よって、例えば、スコアが長期の一致の強度を予測するためのものか、それとも特定のメッセージクエリに応答するためのものかに応じて、異なる要因が考慮され得ることが理解されるだろう。例えば、前者の例では、全体的なスケジュールおよび時間帯の考慮が重要であるが、一方、後者の例では、即時の可用性がより重要視され得る。単一のネットワークデバイス／端末デバイスの組み合わせに関してスコアが決定され得るか、または各々が所与のネットワークデバイスと異なる端末デバイスとの間の一致を特徴付ける、複数のスコアが決定され得る。
【００７４】
[0086]  例示として、クライアントと関連付けられた３つの端末デバイスのセットが、潜在的な通信ルーティングについて評価され得る。特定の通信についての一致に関係するスコアが各々のために生成され得る。最初の２つの端末デバイスの各々は、通信を送信したネットワークデバイスと以前に通信したことがあり得る。ネットワークデバイスからの入力は、第１のデバイスとの通信とのインタラクションの満足度を指示し得る。よって、第１のデバイス、第２のデバイス、および第３のデバイスの（規則に従って計算された）過去インタラクションサブスコアは、それぞれ、１０、５および０であり得る（否定的満足度入力は、ネガティブなサブスコアをもたらし得る）。第３の端末デバイスのみが即時利用可能であると判定され得る。第２の端末デバイスは、１５分以内に応答のために利用可能であり得るが、第１の端末デバイスは、次の日まで応答のために利用可能とならないと予測され得る。よって、第１のデバイス、第２のデバイス、および第３のデバイスについての高速応答サブスコアは、１、３および１０であり得る。最後に、（端末デバイスと関連付けられた）エージェントが通信内のトピックについて知識を有する度合いが推定され得る。第３の端末デバイスと関連付けられたエージェントは、他の２つのデバイスと関連付けられたものよりも知識を有し、３、４および９のサブスコアをもたらすと決定され得る。この例では、規則は、重み付けまたは正規化パラメータを含まず（しかし、他の例では規則が含む場合もある）、１４、１１および１９のスコアをもたらす。よって、規則は、メッセージが最高スコアを有するデバイス、すなわち第３の端末デバイスにルーティングされるべきであることを示し得る。特定の端末デバイスへのルーティングが失敗した場合、そのメッセージは、次に高いスコアを有するデバイスにルーティングされ得、以下同様に繰り返される。
【００７５】
[0087]  スコアは、１つまたは複数の絶対閾値または相対閾値と比較され得る。例えば、通信がルーティングされ得る端末デバイスを選択するために、端末デバイスのセットについてのスコアは、高スコアを識別するために互いに比較され得る。別の例として、端末デバイスとの継続チャネルを確立するか否かを決定するために、スコア（例えば、高スコア）は、１つまたは複数の絶対閾値と比較され得る。継続チャネルを確立するための全体的な閾値は、所与の一連のメッセージにおける通信を一貫してルーティングするための閾値より高くなり得る（が、必須ではない）。全体的な閾値と、通信を一貫してルーティングするかどうかを決定するための閾値との間のこの差異は、拡張されたチャネルのユーティリティの場合に継続チャネルのコンテキストでは強い一致が重要だからである。いくつかの実施形態では、継続チャネルを使用するための全体的な閾値は、継続チャネルを確立するための、および／または所与の一連のメッセージ内の通信を一貫してルーティングするための閾値よりも低くなり得る（が、必須ではない）。
【００７６】
[0088]  インタラクション管理エンジン６２５は、様々なコンテキストでアカウントエンジン６３０と相互接続することができる。例えば、アカウントエンジン６３０は、デバイスに対応するアカウントを識別するために、アカウントデータストア６３５内のネットワークデバイスまたは端末デバイスの識別子を探索し得る。さらに、アカウントエンジン６３０は、前の通信交換（例えば、時間、関与した他のデバイス、チャネルタイプ、解決段階、トピックおよび／または関連付けられたクライアント識別子）、接続チャネル（例えば、１つまたは複数のクライアントの各々について、チャネルが存在するか否か、各チャネルと関連付けられた端末デバイス、確立時刻、使用頻度、最終使用日付、チャネル制約条件および／またはサポートされる通信のタイプを示す）、ユーザまたはエージェントの好みあるいは制約条件（例えば、端末デバイス選択、応答レイテンシ、端末デバイス一貫性、エージェント専門知識、および／または通信タイプの好みもしくは制約に関連した）、並びに／あるいは、ユーザまたはエージェントの特性（例えば、年齢、使用言語または好みの言語、地理的位置、興味など）についてのデータを維持し得る。
【００７７】
[0089]  さらに、インタラクション管理エンジン６２５は、現在のチャネルデータを反映するためにアカウントデータストア６３５が更新され得るように、アカウントエンジン６３０に様々な接続チャネルのアクションを知らせ得る。例えば、チャネルを確立すると、インタラクション管理エンジン６２５は、アカウントエンジン６３０に確立を通知し、ネットワークデバイス、端末デバイス、アカウント、およびクライアントのうちの１つまたは複数を識別し得る。アカウントエンジン６３５は続いて、（ある場合には）利用されているエージェント一貫性をユーザがわかるように、チャネルの存在をユーザに通知し得る。
【００７８】
[0090]  インタラクション管理エンジン６２５はさらに、クライアントマッピングエンジン６４０と相互接続し得、それは、通信を１つまたは複数のクライアント（および／または関連付けられたブランド）にマッピングし得る。ある場合には、ネットワークデバイス自体から受信される通信が、クライアントに対応する識別子（例えば、クライアント、製品、サービス、ウェブページ、またはアプリページの識別子）を含む。識別子は、（例えば、クライアントマッピングエンジン６４０が検出し得る）メッセージの一部として含まれ得るか、またはメッセージを含む通信における他のデータとして含まれ得る。次いで、クライアントマッピングエンジン６４０は、クライアントおよび／またはクライアントの識別子についての追加データを検索するためにクライアントデータストア６４５内の識別子を探索し得る。
【００７９】
[0091]  ある場合には、メッセージは、いずれのクライアントにも特に対応しない可能性がある。例えば、メッセージは、一般的なクエリを含み得る。クライアントマッピングエンジン６４０は、例えば、メッセージの意味解析を行い、１つまたは複数のキーワードを識別し、そのキーワードと関連付けられた１つまたは複数のクライアントを識別し得る。ある場合には、単一のクライアントが識別される。ある場合には、複数のクライアントが識別される。次いで、各クライアントの識別は、ユーザが（例えば、関連付けられた端末デバイスを介して）通信するクライアントを選択できるように、ネットワークデバイスを介して提示され得る。
【００８０】
[0092]  クライアントデータストア６４５は、クライアントと関連付けられた１つまたは複数の端末デバイス（および／またはエージェント）の識別を含み得る。端末ルーティングエンジン６５０は、ルーティング決定に影響を及ぼすように、１つ、複数または全てのそのような端末デバイス（および／またはエージェント）の各々に関係するデータを検索するか、または収集し得る。例えば、端末ルーティングエンジン６５０は、端末データストア６５５を維持し得、それは、端末デバイスのタイプ、オペレーティングシステム、通信タイプの能力、インストール済みのアプリケーションアクセサリ、地理的位置、および／または識別子（例えば、ＩＰアドレス）などの情報を記憶し得る。情報はまた、経験レベル、役職、スキルレベル、知識ベース（例えば、エージェントが知識を有するトピック、および／または様々なトピックについての知識のベル）、性格メトリック、就業時間、使用言語、および／または人口統計情報などのエージェント情報を含み得る。ある情報が動的に更新され得る。例えば、端末デバイスが利用可能であるかどうかを示す情報は、（例えば）端末デバイスからの通信（例えば、デバイスがスリープ状態であるかどうかを識別し、オフ／オン、アイドル／アクティブ状態にし、または入力が時間範囲内で受信されたどうかを識別する）、通信ルーティング（例えば、端末デバイスが通信交換に関与しているか、またはその一部になるように割り当てられているかを示す）、あるいは通信が終了または開始したことを示すネットワークデバイスまたは端末デバイスからの通信に基づいて動的に更新され得る。
【００８１】
[0093]  様々なコンテキストにおいて、１つまたは複数の通信交換に従事していることは、必ずしも、端末デバイスが別の通信交換に従事するために利用できないことを指示するとは限らないことが理解されるだろう。通信タイプ（例えば、メッセージ、電子メール、チャット、電話）、クライアントによって識別された、またはユーザによって識別された目標応答時間、および／またはシステム負荷（例えば、一般的に、またはユーザに関する）などの様々な要因は、端末デバイスが何件の交換に関与し得るかに影響を及ぼし得る。
【００８２】
[0094]  インタラクション管理エンジン６２５が通信交換または接続チャネルに関与すべき端末デバイスを識別するとき、端末ルーティングエンジン６５０に通知することができ、それは、端末データストア６５５から、宛先（例えばＩＰ）アドレス、デバイスタイプ、プロトコルなどの端末デバイスについての任意の関連データを検索し得る。次いで、処理エンジン６１０は、（ある場合には）特定のフォーマットを有し、特定のプロトコルに準拠するなどのように、メッセージを含む通信を修正するか、または（メッセージを含む）新しい通信を生成すし得る。ある場合には、新しいまたは変更されたメッセージは、ネットワークデバイスに対応するアカウントデータ、メッセージクロニクル、および／またはクライアントデータなどの、追加データを含み得る。
【００８３】
[0095]  次いで、メッセージ送信側インターフェース６６０は、通信を端末デバイスに送信し得る。送信は、例えば、別個のハウジングに収容されたデバイスへの有線または無線送信を含み得る。端末デバイスには、接続管理システム６００と同じ、または異なるネットワーク（例えば、ローカルエリアネットワーク）内の端末デバイスを含み得る。従って、通信を端末デバイスに送信することは、通信をネットワーク内またはネットワーク間接続コンポーネントに送信することを含み得る。
【００８４】
[0096]  接続管理システム６００は、通信サーバ１８０を含み得ることが理解されるだろう。例えば、接続管理システム６００は、ネットワークデバイスと端末デバイスとの間の通信セッション中にモバイルデバイスで動作しているモバイルアプリケーションを制御するための遠隔制御能力を有効にし得る。接続管理システム６００が、本明細書で説明されるような処理８００〜１２００のうちの任意のものを行うために通信サーバ１８０、ネットワークデバイス１０５、および／または端末デバイス１１５を使用し得ることが理解されるだろう。
【００８５】
[0097]  図７は、モバイルアプリケーションのリアルタイム遠隔制御のためのインタラクション環境７００の表現を示す。インタラクション環境７００は、ネットワークデバイス７０５、通信サーバ７１０、および端末デバイス７１５を含み得る。さらに、インタラクション環境７００は、ネットワークデバイス７０５で実行されているモバイルアプリケーションの遠隔制御を容易にし得る。例えば、端末デバイス７１５は、ネットワークデバイス７０５で実行しているモバイルアプリケーションを遠隔制御し得る。いくつかの例では、モバイルアプリケーション（例えば、モバイルネイティブアプリケーション）は、ネットワークデバイス７０５（例えば、スマートフォン）のオペレーティングシステムを使用して実行され得る（モバイルデバイスまたは１つまたは複数の外部サーバに記憶された）実行可能コードを含み得る。いくつかの例では、モバイルアプリケーションは、（モバイルデバイスにおいて生成および記憶される）ネイティブユーザインタフェース（ＵＩ）コンポーネントから成るハイブリッドモバイルアプリケーションを含み得るが、（例えば、ウェブベースのコーディング言語を使用して）インタープリタ型言語で記述される。本願は、モバイルネイティブアプリケーションまたはハイブリッドアプリケーションに限定されるものではなく、よって、モバイルアプリケーションのいずれのタイプも、本明細書で説明される方法に使用され得る。
【００８６】
[0098]  ネットワークデバイス７０５および端末デバイス７１５は、例えば、携帯電子デバイス（例えば、スマートフォン、タブレット、ラップトップコンピュータ、スマートウェアラブルデバイス）、または非携帯電子デバイス（例えば、１つまたは複数のデスクトップコンピュータ、スマート家電、サーバ、および／またはプロセッサ）を各々含み得る。さらに、ネットワークデバイス７０５は、端末デバイス７１５とは異なるデバイスであり得る。図７は、スマートフォンのようなネットワークデバイス７０５と、デスクトップコンピュータのような端末デバイス７１５とを例示しているが、ネットワークデバイス７０５と端末デバイス７１５との各々がいずれもポータブルまたは非ポータブル電子デバイスであり得ることが理解されるだろう。
【００８７】
[0099]  ある場合には、ネットワークデバイス７０５は、ユーザ（例えば、顧客）によってオペレートされ得、端末デバイス７１５は、エージェントによってオペレートし得る。ネットワークデバイス７０５に記憶されるモバイルアプリケーションは、アプリケーションの選択に対応する入力がネットワークデバイスで受け取られたときに実行され得る。例えば、ユーザがモバイルアプリケーションを表すアイコンのロケーションでネットワークデバイス７０５のスクリーンをタップまたはタッチして、モバイルアプリケーションが実行され得る。モバイルアプリケーションを実行することは、ネットワークデバイス７０５でアプリケーションをブートまたは動作することを含み得る。さらに、モバイルアプリケーションは、ネットワークデバイス７０５に記憶されたプログラムコードを含み得る。プログラムコードは、プログラムコードに組み込まれ得るコードの一部分（例えば、ソフトウェア開発キット（ＳＤＫ：software development kit））を含み得る。モバイルアプリケーションに組み込まれたＳＤＫは、ネットワークデバイス（例えば、ネットワークデバイス７０５）で実行されるモバイルアプリケーションを、端末デバイス（例えば、端末デバイス７１５）が遠隔制御することを可能にするタスクを行うための命令またはオペレーションのセットを含み得る。例えば、プログラムコードは、実行されると、モバイルアプリケーションをブートし得、図７〜１２で説明される処理が行われ得る。ある場合には、モバイルアプリケーションの実行が開始されると、ネットワークデバイス７０５と端末デバイス７１５との間の通信セッションが確立され得る。例えば、入力は、モバイルアプリケーションによって提示されたボタンの選択（例えば、タッチまたはタップ）に対応してネットワークデバイス７０５で受け取られ得る。ボタンをタップまたはタッチすることは、端末デバイス（例えば、端末デバイス７１５）との通信セッションを確立させ得る。通信セッションは、ネットワークデバイス７０５で実行するモバイルアプリケーションのリアルタイムスクリーン共有を容易にし得る。例えば、リアルタイムスクリーン共有は、ネットワークデバイス７０５と端末デバイス７１５との間の２方向の双方向性を含み得る。ある場合には、通信セッションはまた、音声またはビデオチャネルも含み得る。例えば、ユーザおよびエージェントは、音声またはビデオチャンネルを通じて互いと通信することができる。通信セッションを確立するための例示的な処理が、下記でさらに詳細に説明されている。
【００８８】
[00100]  加えて、端末デバイス７１５は、エージェントによって動作され得る。ある場合には、エージェントは、端末デバイス７１５で動作しているブラウザを使用してウェブサイトにアクセスし得る。例えば、ウェブサイトは、端末デバイス７１５のブラウザで動作しているコンソールを含み得る。エージェントは、ブラウザを使用してコンソールにログインすることができる。１つまたは複数のログイン信用情報（例えば、ユーザネーム、パスワードなど）は、コンソールへのアクセス、またはコンソールに含まれるウェブアプリケーションを獲得するのをエージェントが許可する前に、エージェントのアイデンティティを認証するために使用され得る。コンソールの例は、１つまたは複数のＡＰＩ（アプリケーションプログラミングインターフェース）を含むプラットフォーム、１つまたは複数の機能を含むダッシュボード、通信セッションを確立するまたは通信セッションに参加することが可能なウェブブラウザ（プラグインをダウンロードする必要ことなく）を動作するウェブホスト型アプリケーション、および他の適切なインターフェース、を含み得る。さらに、コンソールは、実行され得る１つまたは複数のウェブアプリケーションまたは機能を含み得る。ウェブアプリケーションまたは機能は、通信サーバ７１０、ローカルサーバ、遠隔サーバ、または他の適切なコンピューティングデバイスにおいて、ブラウザで実行され得る。例えば、１つまたは複数のウェブアプリケーションは、モバイルアプリケーションによって提示されるスクリーンのリアルタイムスクリーン共有のための通信セッションを確立することができる。この例では、端末デバイス７１５は、ネットワークデバイス７０５で動作するモバイルアプリケーションによって提示されるスクリーンを表示し得る。さらに、端末デバイス７１５をオペレートするエージェントは、（例えば、コンソールに含まれるウェブアプリケーションを使用して）確立された通信チャネルを通じてネットワークデバイス７０５で動作するモバイルアプリケーションの様々な態様（例えば、入力要素）を制御し得る。
【００８９】
[00101]  有利なことに、モバイルアプリケーションがネットワークデバイス７０５で実行しているとき、ネットワークデバイス７０５をオペレートするユーザは、通信セッションに参加するかまたは通信セッションを確立し、端末デバイス７１５をオペレートするエージェントとネットワークデバイス７０５のスクリーンを共有するために、任意のプラグインまたは追加のソフトウェアをダウンロードする必要はない。モバイルアプリケーションのプログラムコードは、ネットワークデバイス７０５と端末デバイス７１５との間のリアルタイムのスクリーン共有通信セッションを、確立、管理、および終了し得るオペレーションのセット（例えば、ＳＤＫ）を含む。非限定的な例として、ネットワークデバイス７０５で実行するモバイルアプリケーションは、ネットワークデバイス７０５のスクリーンに表示されるアイコンの選択に対応する入力（例えば、タップ、ダブルタップ、タッチ、選択、クリック）を受け取り得る。一旦選択されると、そのアイコンは、モバイルアプリケーションをブートし得る。次いで、モバイルアプリケーションは、ネットワークデバイス７０５のスクリーン上に１つまたは複数のページを提示し得る。ある場合には、１つまたは複数のページは、選択されると、端末デバイス（例えば、端末デバイス７１５）をオペレートするエージェントとの通信セッションを開始することができるボタンを含み得る。この例では、通信セッションは、リアルタイムにネットワークデバイス７０５に提示されたスクリーンを、エージェントが閲覧および制御することを可能にし得る。さらに、通信セッションは、ネットワークデバイスのリアルタイムスクリーン共有を実施するために、ユーザまたはエージェントが任意の追加のプラグインまたはコードをダウンロードする必要なく、確立され得る。例えば、ネットワークデバイス７０５で実行するモバイルアプリケーションのプログラムコードは、ユーザが通信セッションに参加することを可能にするコード（例えば、ＳＤＫ）の一部分を含み得る。同様に、エージェントは、リアルタイムスクリーン共有を実施するために、いずれの追加のプラグインまたはコードもダウンロードする必要なく、リアルタイムスクリーン共有のための通信セッションに参加するようユーザをインバイトし（invite）得る。例えば、端末デバイス７１５のブラウザで実行する（またはブラウザによってアクセスされる）ウェブアプリケーションは、通信セッションを確立、管理、または終了し得る機能またはオペレーションのセットを含み得る。
【００９０】
[00102]  加えて、有利な点として、ユーザとエージェントとの両方が、通信セッション中に、他方に制御を手動で渡すことなく、同時にアクション（例えば、入力イベント）を行い得る。例えば、ユーザは、ネットワークデバイス７０５で実行しているモバイルアプリケーション内で手動のアクション（例えば、テキストフィードにテキストをタイプすること）を行い得る。ユーザのアクションはモニタリングされ、端末デバイス７１５上でキャプチャ、送信、表示されるモバイルアプリケーション（例えば、タイプされた文字、ズームイン、ズームアウト、スクロールなど）の表示スクリーンに変わる。例えば、ネットワークデバイス７０５で実行するモバイルアプリケーションの表示スクリーンのイメージは、端末デバイス７１５上で、リアルタイムに再生され得る。さらに、エージェントは、イメージ上でアクション（例えば、クリック）を行い得、そのエージェントのアクションは、ネットワークデバイス７０５でリアルタイムに実行しているモバイルアプリケーションにおいて、キャプチャ、送信、および複製され得る。
【００９１】
[00103]  ネットワークデバイス７０５で実行するモバイルアプリケーションは、エンティティまたはクライアント（例えば、会社）によって開発されることができる。モバイルアプリケーションのプログラムコードは、ネットワークデバイス７０５で実行するモバイルアプリケーションのリアルタイムスクリーン共有および共同ブラウジングのための通信セッションを実施またはサポートするコードの一部（例えば、ライブラリ、オペレーション、命令、処理など）を含み得る。例えば、モバイルアプリケーションはＳＤＫを含み得、ＳＤＫは、通信セッション中のリアルタイム遠隔制御能力をサポートするためにモバイルアプリケーションに組み込まれたモバイルコードライブラリを含み得る。ＳＤＫは、スクリーン共有、遠隔アプリケーション制御、音声送信、およびビデオ送信などの能力を、モバイルアプリケーションに追加し得る。例えば、ＳＤＫは、アンドロイド（登録商標）またはｉＯＳ（登録商標）オペレーティングシステムで動作することができる。ＳＤＫが他のオペレーティングシステムもまた同様に動作できることが理解されるだろう。
【００９２】
[00104]  別の例として、遠隔アプリケーション制御は、エージェントの物理的位置において、特定のモバイルアプリケーションまたはネットワークデバイスにアクセスすることなくネットワークデバイス７０５で実行するモバイルアプリケーションを遠隔制御するためのエージェントの能力であり得る。遠隔制御の例は、入力イベント（例えば、タッチ、クリック、スクロールなど）およびテキスト入力（例えば、タイピング）を複製することによって、ネットワークデバイス７０５での触覚ユーザ入力アクションを制御することを含み得る。さらに、端末デバイス７１５をオペレートするエージェントは、エントリまたはクライアントに関連付けられても関連付けられなくてもよい。端末デバイス７１５のブラウザによってアクセスされるコンソール、ウェブサイト、またはウェブアプリケーションは、エンティティまたはクライアントに関連付けられても関連付けられなくてもよい。例えば、モバイルアプリケーションは、エンティティによって管理またはオペレートされ得、コンソール、ウェブサイト、またはウェブアプリケーションは、別のエンティティによって管理またはオペレートされ得る。
【００９３】
[00105]  通信サーバ７１０は、ネットワークデバイス７０５と端末デバイス７１５との間の通信セッションを確立するように構成される１つまたは複数のサーバを含み得る。さらに、通信サーバ７１０は、通信サーバ１８０と同じものであり得る。例えば、通信サーバ７１０は、ネットワークデバイス７０５と端末デバイス７１５とが通信セッション中にデータ（例えば、メッセージ、メディアストリーム、スクリーンショット、イベントデータなど）を交換するサーバであり得る。
【００９４】
[00106]  ある場合には、ネットワークデバイス７０５と端末デバイス７１５との間の通信セッションを確立するために、端末デバイス７１５は、ネットワークデバイス７０５にインビテーションメッセージを送信し得る。例えば、端末デバイス７１５は、通信サーバ７１０上で特定の通信セッションを生成し得る。特定の通信セッションを生成することは、通信セッションの能力および設定を定義することを含み得る。さらに、通信サーバ７１０は、端末デバイス７１５によって生成された特定の通信セッションに対してインバイトを出すことができる。端末デバイス７１５は次いで、ネットワークデバイス７０５へのインビテーションメッセージにおいてインバイトを送信し得る。例えば、インビテーションメッセージは、特定の通信セッションに参加するための要求を表すデータを含み得る。ある場合には、インビテーションメッセージは、メッセージングサービス（例えば、テキストメッセージ、非同期メッセージングサーバ、チャットメッセージなど）を使用して、ネットワークデバイス７０５に送信され得る。通信サーバ７１０がネットワークデバイス７０５から受け入れメッセージを受信した場合、次いでネットワークデバイス７０５は、通信サーバ７１０上で生成される特定のセッションに参加し得る。例えば、通信セッションは、ネットワークデバイス７０５と端末デバイス７１５との間のハンドシェイクから始まり得る。ある場合には、その通信セッションは、ネットワークデバイス７０５上で動作する（例えば、実行する）アプリケーションを、端末デバイス７１５が遠隔制御することを可能にするリアルタイム通信セッションであり得る。有利なことに、ネットワークデバイス７０５をオペレートするユーザがネットワークデバイス７０５で実行するモバイルアプリケーションで問題を経験した場合、通信サーバ７１０を使用して通信セッションが確立され得、それは、端末デバイス７１５がネットワークデバイス７０５のユーザと共同でモバイルアプリケーションをナビゲートすることを可能にする。
【００９５】
[00107]  ある場合には、端末デバイス７１５は、アプリケーションサーバ（例えば、ネットワークデバイス７０５で実行するアプリケーションに組み込まれたＳＤＫと通信するサーバ）からのサービス識別子を要求し得る。ある場合には、サービス識別子は、任意のデータの英数字文字列であり得、任意の通信の手段を使用してネットワークデバイス７０５に送信され得る。例えば、サービス識別子は、テキストメッセージ、電子メールを使用して、携帯電話、チャットメッセージ、ボイスオーバーＩＰコール、または他の適切な通信の手段を介して、ネットワークデバイス７０５に送られ得る。さらに、ネットワークデバイス７０５は、アプリケーションサーバからサービス識別子を取得し得る。ネットワークデバイス７０５は、サービス識別子を使用して通信サーバ７１０からの通信セッションを要求し得る。要求の受け入れの後、端末デバイス７１５とネットワークデバイス７０５との間の通信セッションが確立され得る。ある場合には、ネットワークデバイス７０５で実行するモバイルアプリケーションは、ネットワークデバイス７０５で実行するアプリケーション内のボタンの選択に対応する入力（例えば、クリック、タップ、タッチ）を受け取り得る。ボタンが選択された後、ネットワークデバイスは、利用可能な端末デバイスに、およびネットワークデバイスと端末デバイスとの間のリアルタイム通信セッションに自動的に接続され得る。
【００９６】
[00108]  図７の例示的実施例を参照すると、実行されると、モバイルアプリケーションは、ネットワークデバイス７０５に表示される１つまたは複数のページを含み得る。モバイルアプリケーションがネットワークデバイス７０５上の任意の数のページを表示し得ることが理解されるだろう。例えば、モバイルアプリケーションは、入力要素７２５、７３０、および７３５を含み得る、ディスプレイ７２０を表示し得る。ディスプレイ７２０は、任意の数の入力要素を含む、または入力要素を全く含まないページであり得る。さらに、ディスプレイ７２０は、バックグラウンドイメージ、フォアグラウンドイメージ、または任意の他のイメージのいずれの組み合わせも含み得る。ある場合には、ディスプレイ７２０は、ネットワークデバイス７０５をオペレートするユーザによって提供されるインタラクションまたは入力にディスプレイ７２０が応答し得る点で、インタラクティブであり得る。例えば、ディスプレイ７２０は、ネットワークデバイス７０５をオペレートするユーザによって、スクロールされるか（例えば、上、下、横）、ズームインされるか、ズームアウトされるか、または任意の他の適切なインタラクションであり得る。
【００９７】
[00109]  入力要素は、入力データを受け取るように構成されるユーザインターフェース要素であり得る。入力要素の例は、ボタン、ラジオボタン、スイッチ、ドロップダウンメニュー、セグメント化されたコントロール、テキストフィールド、テキストエリア、スクロール要素（例えば、スクロール機能を開始する矢印）、および他の適切な入力要素を含み得る。入力要素は、初期状態（例えば、未選択のボタン、空のテキストフィールド、未選択のまたは選択済みのラジオボタンなど）であり得る。入力要素はまた、ネットワークデバイス７０５をオペレートするユーザとのインタラクションに基づいて入力データを受け取り得る。例えば、テキストフィールドは、ネットワークデバイス７０５に表示されるキーボード上でユーザによって行われるキーストローク（またはキータップ）に基づいて文字（character letters）（例えば、入力データ）を受け取り得る。加えて、入力要素は、定義されたアクションおよび／または定義された入力境界に関連付けられ得る。入力要素に関連付けられる定義されたアクションおよび入力境界は、モバイルアプリケーションにコード化され、ネットワークデバイス７０５のオペレーティングシステムによってアクセス可能であり得る。定義されたアクションの例は、ラジオボタンをトグルすること、テキストフィールドを選択すること、テキストフィールドに文字を入力すること、テキストフィールド中の文字を削除すること、ボタンを選択すること、表示されたスクリーンをスクロールすること、および他の適切なアクションを含み得る。特定の入力要素は、モバイルアプリケーションにおいてコーディングされる、特定の定義されたアクションに関連付けられ得る。さらに、入力境界は、入力データ（例えば、キーストローク、ボタンまたはラジオボタンの選択など）を受け取るためのエリアであり得る。さらに、入力境界は、任意の形（例えば、長方形、円形、楕円形、正方形など）であり得る。例えば、テキストフィールドのための入力境界は、テキストがタイプされ得るボックスのエリアを含み得る。
【００９８】
[00110]  ある場合には、モバイルアプリケーションは、コンテンツキャプチャエンジン７６５を含み得る。例えば、コンテンツキャプチャエンジン７６５は、モバイルアプリケーションに関連したコンテンツデータを継続的にキャプチャするように構成され得る。コンテンツデータの例は、ネットワークデバイス７０５のスクリーンに表示されたスクリーンショット、イメージ、ビデオデータ、コンテンツ、メディアなど、ネットワークデバイス７０５のカメラでキャプチャされたビデオデータ、ネットワークデバイス７０５のマイクロフォンでキャプチャされたオーディオデータ、入力イベント（例えば、タップ、スワイプ、クリックなど）を表すデータ、メタデータ（例えば、スクリーンショット、イメージ、ビデオ、入力イベントを表すデータなどに関連付けられたメタデータ）、および他の適切なコンテンツを含み得る。非限定的な例として、通信セッション中、モバイルアプリケーションは、ネットワークデバイス７０５で実行しているモバイルアプリケーションによって提示されたスクリーンのスクリーンショットを、周期的に（例えば、毎分、毎秒、数秒、数分など）キャプチャし得る。次いで、モバイルアプリケーションは、コンテンツデータを含むデータストリームを生成し得る。非限定的な例として、ＷｅｂＲＴＣ（ウェブリアルタイム通信）プロトコルは、コンテンツデータを符号化（例えば、ダウンサンプリング）するために、および通信サーバ７１０を経由して端末デバイス７１５への送信のためのデータストリームを生成するために、使用され得る。他のプロトコルが、コンテンツデータを符号化するために、および端末デバイス７１５にコンテンツデータを含むデータストリームを送信するために使用され得ることが理解されるだろう。符号化されたデータストリームは、通信セッション中に、ネットワークデバイス７０５から通信サーバ７１０に送信され得る。次いで、通信サーバ７１０は、通信セッションに関連付けられた遠隔制御能力およびリアルタイムスクリーン共有を容易にするために、通信セッション中に端末デバイス７１５に符号化されたデータストリームを送信し得る。ネットワークデバイスから送信されたデータストリームは、通信セッションの識別子、ネットワークデバイス、端末デバイス、または通信セッションに関連付けられた他の識別子パラメータを含み得る。
【００９９】
[00111]  有利なことに、データストリームは、コンテンツデータ（例えば、モバイルアプリケーションの連続的なスクリーンショット）を含み、イベントリスナは、エージェントのインターフェースにおいておよび／またはモバイルアプリケーションにおいて行われる入力イベントを別個で検出し得る。イベントリスナの使用は、処理リソースおよびネットワークの通信チャネルに対して最小限の負荷を課すという方法で、ユーザのモバイルデバイスで動作するモバイルアプリケーションをエージェントが遠隔制御することを可能にする。端末デバイスとネットワークデバイスとの間のリアルタイム通信の速度および信頼性は、イベントリスナを使用して強化され得る。例えば、イベント複製器が、検出されたイベントをエージェントのデバイスでオペレートするイベントリスナによって複製するため、ユーザのモバイルデバイスのオペレーションが改善され得る。入力イベントの特定のセットが処理（例えば、クリックまたはタップ）され、他のイベント（例えば、エージェントのカーソルの動き）がフィルタアウトされるため、エージェントデバイスからユーザのデバイスに送信されたデータ（例えば、検出されたクリックの座標）は、ユーザのデバイスで経験した処理負荷を低減するために最小化され得る。さらに、入力イベント（例えば、クリックであるが、カーソルの動きではない）がエージェントのデバイスからユーザのモバイルデバイスに送信され、この最小量のデータは、通信セッション中にユーザのモバイルデバイスにおいて経験された遅延を低減する。
【０１００】
[00112]  端末デバイス７１５が符号化されたデータストリームを受信したとき、端末デバイス７１５は、データストリームからコンテンツデータを抽出し、コンテンツデータを表示（または出力）し得る。ある場合には、端末デバイス７１５は、コンテンツ７４０を表示し得る。例えば、コンテンツ７４０は、ネットワークデバイス７０５で実行するモバイルアプリケーションによって提示されたスクリーンのリアルタイムな（例えば、現在の）ビデオを含み得る。コンテンツ７４０は、ネットワークデバイス７０５においてコンテンツキャプチャエンジン７６５によってキャプチャされたコンテンツデータに基づき得る。データストリームは、継続ベースで（例えば、継続的に）受信される。このように、ディスプレイ７２０が（例えば、スクロールダウンすることによって）修正されたとき、ディスプレイ７２０の修正は、リアルタイムに端末デバイス７１５上のコンテンツ７４０に表される。別の例として、データストリームに含まれるコンテンツデータは、ネットワークデバイス７０５のマイクロフォンにおいてキャプチャされるオーディオデータを含み得る。この例では、コンテンツ７４０は、端末デバイス７１５で出力され得る。さらに、この例では、出力コンテンツ７４０が、図７で示されるように、コンテンツ７４０を表示する代わりに、端末デバイス７１５のスピーカを使用してオーディオデータをサウンドへとコンバートし得る。
【０１０１】
[00113]  イベントリスナ７５５は、機能を行うオペレーションのセットまたは実行可能コードを含み得る。ある場合には、イベントリスナ７５５は、端末デバイス上で動作しているウェブブラウザで実行され得、他の例では、イベントリスナ７５５は、通信サーバ７１０で実行され得る。さらに、イベントリスナ７５５は、エージェントによって端末デバイス７１５で行われる入力イベントを検出し得る。入力イベントの例は、マウスクリック（シングルクリックまたはダブルクリック）、タップ、ダブルタップ、タッチ、スワイプ、スクロール、マルチタッチ、端末デバイスに課されかつ端末デバイスの動きセンサまたはジャイロスコープで検出された特定の動きまたはジェスチャ、および他の適切な入力イベントを含み得る。非限定的な例として、エージェントがコンテンツ７４０のロケーションを選択（例えば、クリック）した場合、その選択（例えば、クリック）は、イベントリスナ７５５によって検出され得る。
【０１０２】
[00114]  図７の例示的実施例を参照すると、ポインタ７４５は、端末デバイス７１５のマウスデバイス（図示せず）によって検出された動きに従って動き得る。例えば、端末デバイス７１５のスクリーンの周辺でポインタ７４５を動かすように、エージェントがマウスデバイスをオペレートし得る。常に、エージェントは、クリック７５０を手動で行い得、それは、端末デバイス７１５で動作するウェブブラウザでの入力イベントとして、イベントリスナ７５５によって検出され得る。イベントリスナ７５５が端末デバイス７１５のウェブブラウザでの入力イベントを検出したとき、イベントリスナ７５５は、検出された入力イベントに対応する選択データを生成し得る。例えば、イベントリスナ７５５がクリック７５０を検出したとき、イベントリスナ７５５は、クリック７５０が発生したロケーションの座標（例えば、ｘ座標およびｙ座標）を決定し得る。この座標は、イベントリスナ７５５によって生成された選択データに含まれ得る。選択データの他の例は、クリック７５０の処理（例えば、クリックの時間、クリックの持続時間、クリックがシングルクリックであるかまたはダブルクリックであるかなど）、クリックが左クリックであるかまたは右クリックであるかに関連付けられたメタデータ、あるいは、他の適切なデータを含み得る。イベントリスナ７５５が入力イベントを検出した後、イベントリスナ７５５は、選択データを生成し得、それは、端末デバイス７１５で行われた選択に関連付けられ、次いで、通信サーバ７１０に選択データを送信する。通信サーバ７１０は、選択データを受信し、ネットワークデバイス７０５に選択データを送信し得る。
【０１０３】
[00115]  ある場合には、選択データがネットワークデバイス７０５で受信されたとき、ネットワークデバイス７０５は、（端末デバイス７１５で検出された）入力イベントを複製し得る。例えば、モバイルアプリケーションは、イベント複製器７６０を含み得る。イベント複製器７６０は、入力イベントを複製する機能を実行するオペレーションのセットまたは実行可能コードを含み得る。さらに、イベント複製器７６０は、モバイルアプリケーションに組み込まれたＳＤＫによって実行され得る。ある場合には、イベント複製器７６０は、ネットワークデバイス７０５で受信した選択データを検索し、あたかも入力イベントがネットワークデバイス７０５で発生したかのように、入力イベントを複製する機能を実行し得る。例えば、選択データがクリック７５０のロケーションの座標のセットを含む場合、イベント複製器７６０は、あたかもネットワークデバイス７０５をオペレートするユーザが手動でクリック７５０を行ったかのように、ネットワークデバイス７０５上でクリック７５０を複製し得る。この例では、イベント複製器７６０は、選択データに含まれる座標のセットに基づいて、クリック７５０と同じスクリーンロケーションにおいてネットワークデバイス７０５上のクリック７５０を複製し得る。座標のセットは、端末デバイスとは異なるスクリーン寸法を有し得る、ネットワークデバイスのスクリーン寸法に変換され得る。
【０１０４】
[00116]  イベント複製器７６０は、ネットワークデバイス７０５のオペレーティングシステムに応じて異なる処理を使用して、検出された入力イベントを複製し得る。アプリケーションプログラミングレベルにおけるシンセティックイベント（例えば、複製されたイベント）をディスパッチすること（dispatching）をサポートするオペレーティングシステムに関して、入力イベントは、遠隔で生成された入力イベント（例えば、端末デバイス７１５において生成されたクリック７５０）を複製するために、ネットワークデバイス７０５においてプログラムで生成されたシンセティックイベントを使用して複製され得る。図８は、シンセティックイベントをディスパッチすることをサポートするオペレーティングシステムにおいて遠隔で生成されるイベントを複製するための処理をさらに説明する。例えば、アンドロイドオペレーティングシステムは、遠隔デバイスで生成されたシンセティックイベントをディスパッチすることをサポートする。ある場合には、シンセティックイベントは、これらのオペレーティングシステム（例えば、アンドロイド）に関して信頼されており、あたかもネットワークデバイス７０５をオペレートするユーザが入力イベントを行った（例えば、タップまたはクリックした）かのように、シンセティックイベントは、同じ定義されたアクションをトリガする。
【０１０５】
[00117]  シンセティックイベントをディスパッチするためのサポートのないオペレーティングシステムに関して、遠隔で生成された入力イベントは、オペレーティングシステムによって信頼されない可能性がある。シンセティックイベント（例えば、遠隔で生成されたマウスクリック）をディスパッチするためのサポートがないと、端末デバイス７１５で生成された入力イベントは、ネットワークデバイス７０５で複製されない可能性がある。例えば、ｉＯＳプラットフォームおよびオペレーティングシステムは、シンセティックイベントをディスパッチすることをサポートしない。しかしながら、本開示の実施形態によると、図９は、通信セッション中に遠隔制御能力を獲得するために、ネットワークデバイス７０５において遠隔で生成されたイベントを模倣または複製するための処理を説明している。
【０１０６】
[00118]  ある場合には、ネットワークデバイス７０５で実行するモバイルアプリケーションをナビゲートするユーザは、端末デバイス７１５をオペレートするエージェントとの通信セッションの確立を開始し得る。通信セッション中、端末デバイス７１５は、ネットワークデバイス７０５で実行するモバイルアプリケーションを遠隔制御し得る。しかしながら、エージェントがネットワークデバイス７０５で動作するモバイルアプリケーションのリアルタイムなビデオまたはイメージを閲覧することができるので、プライバシーが大きな懸案事項である。本開示の実施形態によると、モバイルアプリケーションは、入力フィールドに含まれるセンシティブな情報をエージェントが閲覧することができないように、センシティブな情報を含む入力要素をマスクし得る。
【０１０７】
[00119]  ある場合には、１つまたは複数の入力要素は、モバイルアプリケーションのプログラムコードにおいてセンシティブなデータフィールドとしてマーキングされ得る。例えば、モバイルアプリケーションのプログラムコードは、特定の入力フィールドに関連付けられたフラグコードまたはメタデータを含み得る。入力フィールドに関するフラグコードまたはメタデータの存在は、センシティブなデータ（例えば、ユーザの年収、社会保障番号など）を受信するように入力フィールドが構成されることを指示し得る。別の例として、モバイルアプリケーションに含まれる入力要素は、ＳＤＫによって提供される入力要素（例えば、テキストフィールド）のドロップインクラス（drop-in classes）を使用することによってマーキングされ得る。さらに、モバイルアプリケーションが実行しているとき、モバイルアプリケーションは、ネットワークデバイス７０５をオペレートするユーザによって閲覧されているモバイルアプリケーションのページをモニタすることができる。モバイルアプリケーションの各ページは、１つまたは複数の入力要素の階層に関連付けられ得る。例えば、モバイルアプリケーションが２つの異なるページを含む場合、第１のページは、第１のページに含まれる第１の入力要素の階層に関連付けられ得、第２のページは、第２のページに含まれる第２の入力要素の階層に関連付けられ得る。この例では、第２のページがあらかじめフラグ付けされたセンシティブな入力要素を含んだ場合、および第２のページがネットワークデバイス７０５上で現在閲覧されている場合、ＳＤＫは、センシティブな入力要素が閲覧されていることを識別し得る。ある場合には、モバイルアプリケーションに含まれるＳＤＫは、閲覧されているセンシティブな入力要素の発生を決定するために、閲覧されているページをモニタし得る。
【０１０８】
[00120]  上記の例に続けて、第２のページが閲覧されたとき、コンテンツキャプチャエンジン（例えば、コンテンツキャプチャエンジン７６５）は、第２のページのコンテンツをキャプチャする。例えば、コンテンツキャプチャエンジンは、第２のページのスクリーンショットをキャプチャし得る。さらに、ＳＤＫは、センシティブな入力要素のスクリーンショットがキャプチャされたことを識別し得、適宜、ＳＤＫは、スクリーンショットがダウンサンプリングされ通信サーバに送信される前に、センシティブな入力要素をマスクするためのプライバシプロトコルを実行し得る。例えば、プライバシプロトコルは、キャプチャされたスクリーンショットにおけるセンシティブな入力要素を探索し、センシティブな入力要素のロケーションおよび境界（例えば、その入力要素の場所の座標）を決定し得る。さらに、プライバシプロトコルは、どのエリアをマスクするかを決定するための、決定されたロケーションおよび境界を使用する。例えば、プライバシプロトコルは、センシティブな入力要素の境界内の各ピクセルを、代わりの色またはパターン（例えば、センシティブな入力要素が位置する場所に黒色の長方形を生じさせる黒色のピクセル）に置き換えるペインティングアルゴリズムを含み得る。次いで、マスクされたエリアを有するスクリーンショットは、スクリーンショットがコンテンツ７４０として端末デバイス７１５上で再生されたとき、その再生されたスクリーンショットがマスクされたエリアを含むように、（例えば、ＷｅｂＲＴＣプロトコルを使用して）符号化され得る。よって、エージェントは、センシティブな入力要素に含まれる当初のデータを閲覧できないが、センシティブな入力要素は、モバイルアプリケーションのページをユーザが閲覧している間は、ブロックされない。いくつかの例では、プライバシプロトコルは、ユーザとエージェントとの間の通信をセキュアにするための命令のセットであり得る。例えば、プライバシプロトコルは、モバイルアプリケーションに提示される入力要素に含まれるセンシティブなデータをマスクするように構成され得る。別の例では、プライバシプロトコルは、入力要素を表示するように構成され得るが、表示された入力要素に含まれる任意のコンテンツデータをエージェントが操作することを防ぐ。
【０１０９】
[00121]  プライバシプロトコルがモバイルアプリケーションへの通信セッション中のリアルタイムスクリーン共有をさらに制限できることが理解されるだろう。例えば、通信セッションは、モバイルアプリケーションが実行されている間のネットワークデバイスのスクリーンのリアルタイムスクリーン共有のみを容易にし得る。モバイルアプリケーションが終了した（例えば、アプリケーションが閉じられた）とき、通信セッションが終わり、エージェントは、ネットワークデバイスのリアルタイムスクリーンコンテンツをもはや見ることができない。さらに、モバイルアプリケーションが未だ実行中であるがバックグラウンド処理としてのものである場合、エージェントは、黒色のピクセルだけをコンテンツ７４０として見ることとなる。エージェントは、モバイルアプリケーションがバックグラウンドでもはや動作していないとき、ネットワークデバイスのリアルタイムスクリーンコンテンツを再度見ることができる。加えて、プライバシプロトコルは、実行されると、モバイルアプリケーションに含まれるページの全てのページのサブセットのみに、リアルタイムスクリーン共有を制限し得る。プライバシプロトコルが、モバイルアプリケーションにおいて特定の入力要素での入力（「読み」と「書き」両方）を防ぎ得ることもまた理解されるだろう。例えば、特定の入力要素がフラグ付けされる（例えば、読みと書きの機能をブロックすることを示すフラグコードに関連付けられる）場合、エージェントは、特定の入力要素を制御することを防止されるだろう。例えば、エージェントは、入力要素を選択することおよびテキスト文字を入力することを防止されるだろう。
【０１１０】
[00122]  ある場合には、オーソライズされていないデバイス（例えば、ハッカーデバイス）が、通信セッションの遠隔制御能力へのアクセスを獲得しようとし得る。通信サーバは、通信セッション、ネットワークデバイス、端末デバイスなどの識別子を記憶し得る。未知のデバイス（例えば、対応する識別子のないデバイス）が通信セッションに参加することを通信サーバが決定した場合、通信サーバは、通信セッションを終了し、通信セッションからその未知のデバイスを追い出し得る。ある場合には、オーソライズされていないデバイスが通信セッションの遠隔制御能力へのアクセスを獲得した（例えば、ネットワークデバイスで実行しているモバイルアプリケーションをハッカーが遠隔制御している）ことを、ネットワークデバイスをオペレートするユーザが決定した場合、通信セッションは、容易に終了されることができる。例えば、ユーザは、通信セッションを終了するために、単に「ホーム」ボタン（例えば、またはネットワークデバイス上でメインメニューをポピュレートする（populates）任意のボタン）を選択することができる。他の例では、ユーザは、ネットワークデバイスを再起動する、あるいは通信セッションを終了するまたは終わらせるために、モバイルアプリケーションを終了する（従って、通信セッションに関連付けられた遠隔制御能力を終了する）。
【０１１１】
[00123]  ビデオおよび音声チャネルがネットワークデバイス７０５と端末デバイス７１５との間の通信セッションに組み込まれ得ることが理解されるだろう。例えば、ビデオチャネル能力がリアルタイムスクリーン共有のための通信チャネルに組み込まれる場合、ネットワークデバイスと端末デバイスの各々にオーバーレイ要素が表示され得る。例えば、オーバーレイ要素は、ビデオフィードを含み得る。この例では、ネットワークデバイスは、モバイルアプリケーション上に表示されたオーバーレイ要素を含み得、端末デバイスは、ウェブブラウザまたはウェブアプリケーション上に表示されたオーバーレイ要素を含み得る。ネットワークデバイスのコンテンツキャプチャエンジンは、エージェントのスクリーンショットをキャプチャすることを避けるために、モバイルアプリケーションのスクリーンに表示されたオーバーレイ要素をキャプチャしない可能性がある。さらに、送信されたデータストリームの帯域幅は、オーバーレイ要素がコンテンツキャプチャエンジンによってキャプチャされることを防ぐことによって低減され得る。ネットワークデバイスで実行しているモバイルアプリケーションに組み込まれたＳＤＫがイベントリスナも含み得、端末デバイスがイベント複製器を含み得ることもまた、理解されるだろう。例えば、ユーザが、入力要素に対応していないモバイルアプリケーション内のスクリーンのエリアをタップした場合、ユーザのタップは、ＳＤＫのイベントリスナにおいて検出され得、端末デバイスにおいて（例えば、短い持続時間に関して表示された円によって）視覚的に複製され得る。これは、ユーザがモバイルアプリケーションでタップしている場所を、エージェントが視覚的に決定することを可能にする。
【０１１２】
[00124]  いくつかの例では、エージェントは、モバイルアプリケーションが現在動作していない（例えば、スタンバイモードにある）期間を、ユーザのモバイルデバイスに通知し得る。ユーザが最初のオーディオコールを受けたとき、エージェントは、いくつかのタイプの追加のインビテーションのうちの１つまたは複数を行い得る。例えば、エージェントは、オーディオコールでユーザと会話し続けることができ、エージェントは、オーディオビデオ通信セッションのためのインビテーションを送信することができ（ユーザが受け入れた場合、そのユーザがエージェントと会話できかつ視覚的に見ることができ、逆もまた同様であるケース）、および／またはエージェントは、モバイルデバイスで動作するモバイルアプリケーションを遠隔制御することができる制御可能な通信セッションおよびオーディオコールのためのインビテーションを送信することができる。モバイルアプリケーションがエージェントコールの時点で現在動作していないとき、モバイルアプリケーションは、プッシュ通知メッセージが選択されたときにモバイルデバイスでモバイルアプリケーションが動作を開始し得るように、モバイルデバイス上にプッシュ通知を表示するよう構成され得る。いくつかの例では、プッシュ通知メッセージを選択することは、制御可能な通信セッションを自動的に開始させ得る。いくつかの例では、ユーザがモバイルデバイスのスクリーンに表示されるプッシュ通知メッセージを選択したとき、例えば、ユーザからの追加の情報（例えば、名前、電話番号、パーミッション、および他の適切な情報）が要求され得る。いくつかの例では、プッシュ通知が提示されない可能性があるが、制御可能な通信セッションが、ユーザのモバイルデバイスで自動的に開始し得る。
【０１１３】
[00125]  いくつかの例では、通信は、エージェントがユーザと通信している間、様々なレベルへと発展し得る。例えば、ユーザは、チャットセッションでエージェントと通信している可能性がある（例えば、ユーザのデスクトップまたはユーザのモバイルデバイスを、そのユーザが使用している可能性がある）。ユーザがさらなるヘルプを要求した場合、エージェントは、エージェントのインターフェースからユーザの携帯電話に直接コールすることができる。ユーザのモバイルデバイスがエージェントのオーディオコールを受信したとき、オーディオコールは、プッシュ通知をモバイルデバイス上に提示させ得る。例えば、プッシュ通知は、プッシュ通知を選択することがオーディオコール、オーディオ／ビデオコール、および／またはモバイルアプリケーションのユーザの使用をエージェントが遠隔制御することができる通信可能な通信セッションを開始し得ることを示し得る。オーディオ／ビデオコールが開始した場合、エージェントおよびユーザは、視覚的に通信することができる。例えば、エージェントのインターフェースは、モバイルデバイス上にユーザのカメラのビデオフィードを表示し得る。別の例では、ユーザは、モバイルデバイスの背面カメラをエージェントと共有するための許可を提供し得る。通信セッションは、通信の別のタイプを向上させることができる。上記の例に続けて、エージェントは、オーディオ／ビデオコール中に、制御可能な通信セッションに参加するためのインビテーションをモバイルデバイスに送り得る。ユーザのモバイルデバイスにおいて、通知がユーザに提示され得、それは、制御可能な通信セッションに参加するためのインビテーションをユーザが受け入れることを可能にする。受け入れの後、例えば、コンテンツキャプチャエンジンは、（モバイルアプリケーションを実行する）ユーザのモバイルデバイスのスクリーンショットをキャプチャし始め、イベント複製器は、エージェントのデバイスで検出される任意のイベントを複製し始める。モバイルアプリケーションのスクリーンのコンテンツは、ユーザのモバイルデバイスから受信されたビデオフィードに加えて、またはそれの代わりに、エージェントのインターフェースに表示され得る。この例では、オーディオセル、オーディオ／ビジュアルコール、および制御可能な通信セッションにいくつかのレベルが含まれている。
【０１１４】
[00126]  端末デバイスをオペレートしているエージェントが人間の代わりにボットスクリプト（bot script）によって制御され得ることが理解されるだろう。例えば、ユーザは、コンピュータプログラム（例えば、ボットエージェント）によって制御されるエージェントと通信し得、モバイルアプリケーション中の特定のステップをどのように行うかをユーザに視覚的に説明するための以前に記憶された命令のセット（例えば、あらかじめ定義されたテキスト要素、ビデオ、説明など）を再生するように構成される。いくつかの例では、ヒューマンエージェントは、制御可能な通信セッションをボットエージェントにハンドオーバし得、それは、通信セッション中の応答および／またはビデオのあらかじめ記憶されたセットを実行し得る。いくつかの例では、ヒューマンエージェントは、制御可能な通信セッションの制御を常に再取得し（retake）得、あるいは、ボットエージェントは、ヒューマンエージェントに（例えば、ユーザのモバイルデバイスのモバイルアプリケーションがエージェントによって遠隔制御される）制御可能な通信セッションの制御を自動的に返すように構成され得る。これらの例では、ボットエージェントは、ヒューマンエージェントとの組み合わせで動き得る。
【０１１５】
[00127]  モバイルアプリケーションがユーザのモバイルデバイスで動作しているとき（制御可能な通信セッション中）に表示される入力要素は、入力フィードのピクセル境界内（例えば、テキストボックス内）でクリックすることによって（エージェントによって遠隔で、またはユーザによって直接）選択され得ることもまた理解されるだろう。しかしながら、入力要素を選択することは、（例えば、テキストボックス内の）入力要素のピクセル境界内のクリックまたはタップに限定されない。入力要素は、例えば、各入力要素に関連付けられたユニーク識別子を実装することによって、他の方法で選択され得る。例えば、プログラムで、エージェントは、入力要素に関連付けられた識別子を使用して入力要素を識別し得、次いで、エージェントが入力要素を埋めることを意図するコンテンツを送信する。この例では、ユーザと通信するエージェントがボットエージェントである場合、そのボットエージェントは、入力要素を選択する（例えば、クリックする）ためにユーザのスクリーンのスクリーンショットを分析する必要はないが、ボットエージェントは、入力要素の識別子（例えば、「user_name」）を使用して入力要素を識別し得る。さらに、この例では、ボットエージェントは、スクリーン上の入力要素のロケーションを検出する必要はないが、代わりに、ボットエージェントは、入力要素の識別子にアクセスするように構成されており、入力要素の識別子を使用して１つの入力要素を選択し得る。ユーザのモバイルデバイスがボットエージェントによって選択された入力要素を表すデータを受信するとき、モバイルアプリケーションは、ボットエージェントから受信された識別子を参照することによって、入力要素を選択し得る。モバイルアプリケーションは、選択された入力要素のピクセル境界に既にアクセスしているため、ボットエージェントは、入力イベント（例えば、クリック）のための座標を送信する必要はないが、代わりに、ボットエージェントは、選択された入力要素の識別子および入力要素を埋めるコンテンツを送信し得る。
【０１１６】
[00128]  上記の説明がセンシティブな情報を含む入力要素をマスクするためのフィードマスクを表示することを含む一方、別のセキュリティ手段は、入力要素のコンテンツをマスクせずに入力要素を表示することを含み得るが、入力要素に含まれるコンテンツデータの操作を防ぐ。例えば、ユーザは、入力要素にテキストを入力することができるが、エージェントはそれができない一方、エージェントのビューから入力要素はマスクされない。
【０１１７】
[00129]  図８は、シンセティックイベントをディスパッチするためのサポートを有するオペレーティングシステムにおいて入力イベントを複製するための処理８００のスイムレーン図を示す。処理８００は、ネットワークデバイス（例えば、ネットワークデバイス７０５）、通信サーバ（例えば、通信サーバ７１０）、および端末デバイス（例えば、端末デバイス７１５）間のインタラクションを含み得る。さらに、処理８００は、（端末デバイスにおいて遠隔で生成された）入力イベントを受信し、ネットワークデバイスにおいて入力イベントを複製するように行われ得る。処理８００におけるネットワークデバイスのオペレーティングシステムは、シンセティックイベントの複製（例えば、別のデバイスにおいて生成された入力イベント）をサポートし得る。例えば、処理８００に関与するネットワークデバイスは、アンドロイドオペレーティングシステムを実行することができる。
【０１１８】
[00130]  処理８００は、通信サーバが、ユーザに関連付けられたネットワークデバイスとエージェントに関連付けられた端末デバイスとの間の通信セッションを確立するブロック８０２で始まる。ある場合には、通信セッションは、ネットワークデバイスにおいてモバイルアプリケーションによって提示されたボタンの選択に応答して確立され得る。例えば、モバイルアプリケーションでの（例えば、ユーザによる）ボタンの選択は、通信セッションを確立させ得る。（本明細書で説明される）他の方法が通信セッションを開始するために使用され得ることが理解されるだろう。
【０１１９】
[00131]  ある場合には、通信セッションは、通信サーバにおいて生成および記憶されたセッション識別子を使用して確立され得る。例えば、ユーザは、ネットワークデバイスを使用してセッション識別子を検索し得る。端末デバイスによって要求されると、ユーザはセッション識別子を提供し得、受け入れられると、通信セッションの確立を開始し得る。セッション識別子は、ユーザによって手動で、またはネットワークデバイスによって自動的に提供された文字の英数字文字列であり得る。ある場合には、エージェントおよびユーザは、例えば、メッセージサーバを使用してメッセージを交換し得る。メッセージは、（例えば、メッセージ間の数分、数時間、数日の遅延が受け入れ可能な）非同期通信を使用して交換され得る。例えば、非同期通信は、インスタントメッセージングまたはチャットとは異なる電子メッセージ交換（例えば、アプリ、ウェブベースのメッセージ／受信箱システム、または電子メールを介する）を含み得る。非同期交換は、宛先デバイス（例えば、ネットワークデバイス、端末デバイス、またはメッセージの受信側）が、メッセージが提示されるよう要求するか、あるいはキューまたは受信ボックスに対応するウェブページまたはアプリページを訪問するまで、送信されたメッセージがメッセージキューまたは受信ボックスに記憶されるような方法で、メッセージを通信することを含み得る。この例では、ネットワークデバイスと端末デバイスとの間の非同期通信におけるメッセージのうちの１つは、通信セッションに参加するためのインビテーションを含み得る。ユーザは、メッセージに含まれるインビテーションを受け入れるかまたは拒否することができる。インビテーションを受け入れると、通信セッションがネットワークデバイスと端末デバイスとの間で確立され得る。
【０１２０】
[00132]  ある場合には、エージェントとユーザとの間のメッセージングセッションは、非同期メッセージ交換と見なされ得、ここで、参加者間のイレギュラーな間隔においてインタラクションが発生する。メッセージング対話（Messaging conversations）は、モバイルアプリケーションでの問題を経験しているユーザへの追加の情報またはコンテキストを提供するのを手助けし得る。しかしながら、ある場合には、メッセージング対話では、問題の解決法は制限される。これらの例では、ユーザとエージェントとの間のメッセージング対話は、同時の遠隔制御能力を用いたリアルタイムスクリーン共有ための通信セッションへと向上され（elevated）得る。例えば、通信は、インビテーションメッセージがエージェントによってユーザに送信されるときに開始され得る。エージェントは、エージェントが通信セッション中に実施するように提示される能力のセットを選択し得る。例えば、能力は、遠隔アプリケーション制御、リアルタイムスクリーン共有、ビデオおよび音声送信、並びに他の適切な能力を含み得る。ユーザは、能力のセットを受け入れるかまたは拒否することができる。ある場合には、それら能力は必須であり得、ユーザによって受け入れられない場合、通信セッションが確立されない可能性がある。他の例では、それら能力は、ユーザによって拒否された場合リアルタイム通信セッションがまだ確立されないように、任意であり得る。さらに、それら能力は、通信セッション中に常に調整または修正され得る。能力が、双方向の音声またはビデオ送信、単一方向の音声またはビデオ送信、ネットワークデバイスのカメラフィードに課せられた拡張現実、のうちの任意の組み合わせを含み得ることが理解されるだろう。
【０１２１】
[00133]  ある場合には、通信セッションが予期せず終了した場合、モバイルアプリケーションは、終了した通信セッションを再確立するか、またはネットワークデバイスを同じ端末デバイスと再接続するための機能を含み得る。例えば、通信セッションが終了したとき、ユーザは、ネットワークデバイスで実行しているモバイルアプリケーションをリブートし得る。リブートされると、モバイルアプリケーションは、通信セッションを再確立するためのオプションを提示し得る。オプションの受け入れがネットワークデバイスで受信されたとき、通信セッションが再確立され得る。通信セッションを再確立することは、ネットワークデバイスで実行しているモバイルアプリケーションがリブートされたことを同じ端末デバイスに通知することを含み得る。さらに、同じ端末デバイス（例えば、同じエージェント）は、通信セッションに再度参加し得、モバイルアプリケーションの遠隔制御を継続し得る。有利なことに、通信が終了したとき、端末デバイスは、ネットワークデバイスにおいて表示またはキャプチャされたリアルタイムコンテンツをもはや見ることができない。
【０１２２】
[00134]  本開示の実施形態によると、再確立された通信セッションに参加しているコンピューティングデバイスが、以前に通信セッションの終了の前の通信に関与した同じ端末デバイスであることを保証するためのセキュリティ特徴を含み得る。例えば、通信サーバは、通信セッションの識別子と、ネットワークデバイスおよび端末デバイスのデバイス識別子とを記憶し得る。通信セッションの識別子は、全ての他の通信セッションから１つの通信セッションを一意的に識別することができる。再確立された通信セッションに参加する端末デバイスが、予期せず終了する前の通信セッションに当初から含まれていた端末デバイスとは異なる場合、通信サーバは、再確立された通信セッションに参加した端末デバイスが当初の端末デバイスとは異なるデバイス識別子を有することを識別し得る。通信セッションは、再確立された通信セッションに参加した端末デバイスが当初の端末デバイスとは異なることをネットワークデバイスに通知し得る。通知は、ネットワークデバイスをオペレートするユーザが、通信を終了するか、あるいは当初の端末デバイスが再確立された通信セッションに参加するまで、および新規に参加する端末デバイスをブロックするまで待機することを可能にし得る。ある場合には、モバイルアプリケーションは、通信セッションが確立されたとき、端末デバイスのデバイス識別子（例えば、ＭＡＣアドレス）を決定し得る。通信セッション中は常に、端末デバイスのデバイス識別子が当初のデバイス識別子とは異なる場合、ネットワークデバイスは、通信セッションに再度参加するために、通信セッションを終了するか、または当初の端末デバイスを待つためのオプションを通知および提供され得る。
【０１２３】
[00135]  ブロック８０４において、通信セッション中に、ネットワークデバイスは、モバイルアプリケーションによって提示されるコンテンツをキャプチャし得、ネットワークデバイスは、キャプチャされたコンテンツをデータストリームにおいてコンテンツデータとして送信し得る。ネットワークデバイスは、通信サーバにコンテンツデータを送信し得、次いで、端末デバイスにコンテンツデータを転送し得る。コンテンツデータの例は、モバイルアプリケーションによって提示された複数のイメージまたはイメージの一部分、ネットワークデバイスにおいて提示されたモバイルアプリケーションの現在の状態の周期的にキャプチャされたスクリーンショット、モバイルアプリケーションの現在提示されているページのビデオデータまたはビデオフレーム、オーディオデータ、またはモバイルアプリケーションによって提示されている現在のページに関連付けられたメタデータ、および他の適切なコンテンツデータを含み得る。コンテンツデータは、モバイルアプリケーションが実行されている間、継続的にキャプチャされ得る。一旦アプリケーションが閉じられる（例えば、終了する）かまたはバックグラウンド処理になると、コンテンツデータの周期的なキャプチャ（例えば、スクリーンショット）は中断され得る。モバイルアプリケーションが再開されると、モバイルアプリケーションは、モバイルアプリケーションのスクリーンのスクリーンショットを周期的にキャプチャし続け得る。
【０１２４】
[00136]  ブロック８０６において、端末デバイスは、通信サーバからコンテンツデータを受信し得る。例えば、コンテンツデータは、端末デバイスに送信されるデータストリームに含まれ得る。この例では、データストリームは、モバイルアプリケーションの継続的にキャプチャされたスクリーンショットを符号化することによって生成され得る。単に非限定的な例として、キャプチャされたスクリーンショットの符号化は、ＷｅｂＲＴＣプロトコルを使用して達成され得る。他のリアルタイム通信プロトコルは、コンテンツデータを符号化するために使用され得る。一旦データストリームが端末デバイスで受信されると、データストリームは、端末デバイスに永続的にまたは一時的に記憶され得る。さらに、データストリームからコンテンツデータが抽出され得、次いで、コンテンツデータが処理され得る。
【０１２５】
[00137]  ブロック８０８において、コンテンツデータは、端末デバイスに表示され得る。例えば、コンテンツデータは、モバイルアプリケーションのインターフェースのビデオフレームであり、端末デバイスは、端末デバイスのスクリーン上にリアルタイムビデオフレームを表示し得る。この例では、端末デバイスは、最も最近受信したビデオフレームを表示し得る。新規のビデオフレームが端末デバイスで受信されると、その新規のビデオフレームは、端末デバイスに表示され得る。一連のビデオフレームが表示されたとき、その一連のビデオフレームは、１つのビデオを模倣する。例えば、図７で図示されるように、コンテンツ７４０は、モバイルアプリケーションのスクリーンショットであり得る。さらに、コンテンツ７４０は、最も最近キャプチャされたスクリーンショットを用いて継続的に更新され得、それにより、リアルタイムにネットワークデバイス上にそれが提示されるとき、端末デバイスにモバイルアプリケーションを表示させることを可能にする。
【０１２６】
[00138]  ブロック８１０において、端末デバイスのウェブブラウザで動作しているイベントリスナは、端末デバイスで行われた入力イベントをリッスン（例えば、検出）し得る。例えば、イベントリスナは、エージェントが端末デバイス上に表示されたコンテンツデータの任意のエリアを選択した（例えば、タップされた、ダブルタップされた、クリックされた、ダブルクリックされた、スワイプされたなど）か否かを検出し得る。この例では、ネットワークデバイスに提示されるインターフェースのリアルタイムビデオフレームを端末デバイスが表示した場合、イベントリスナは、表示されたビデオフレームの任意のエリアをエージェントが選択した（例えば、クリックした）か否か（例えば、エージェントがコンテンツ７４０の任意のエリアをクリックしたか否か）を検出し得る。
【０１２７】
[00139]  ブロック８１２において、端末デバイスは、検出された入力イベントに基づいて選択データを生成し得、次いで、選択データを送信する。端末デバイスは、通信セッション中に選択データを通信サーバに送信し得、通信サーバは、ネットワークデバイスに選択データを転送し得る。選択データは、端末デバイスでの選択に関連付けられ得る。例えば、選択データは、入力イベントの座標のセットを含み得る。この例では、入力イベントが端末デバイスで検出されたコンテンツ７４０上のマウスポインタのクリックである場合、そのクリックの座標が決定され得る。さらに、クリックの座標が選択データに含まれ得る。選択データは、入力イベントの座標に限定されるものではなく、端末デバイスにおいて検出された選択に関連付けられたメタデータなどの他のデータを含み得る。
【０１２８】
[00140]  ブロック８１４において、ネットワークデバイスは通信セッション中に（通信サーバを経由して）選択データを受信し得る。ある場合には、選択データは、端末デバイスでの選択の座標および入力イベントのタイプを含み得る。入力イベントのタイプの例は、クリック、スワイプ、タップ、ダブルタップ、および入力イベントの他の適切なタイプを含み得る。ブロック８１６において、モバイルアプリケーションを実行するネットワークデバイスは、選択データによって含まれる入力イベントタイプが既知である（例えば、あらかじめ定義されている）か否かを決定し得る。例えば、モバイルアプリケーションは、特定のタイプの入力イベントを複製するように構成され得る。入力イベントがあらかじめ定義されたタイプでない場合、検出された入力イベントは破棄され得、処理８００は、処理８００が終了するブロック８２２（ブロック８１６の「ＮＯ」）へと進む。入力イベントタイプがあらかじめ定義されたものである選択データに含まれるか否かを決定することは、入力イベントの識別子と、入力イベントタイプのあらかじめ定義されたリストとを比較することを含み得る。例えば、入力イベントタイプは、識別子に関連付けられ得、あらかじめ定義された入力イベントタイプのリストは、ネットワークデバイスのオペレーティングシステムにアクセス可能であり得る。この例では、ネットワークデバイスは、あらかじめ定義された入力イベントタイプのリストを検索し、受信された入力イベントタイプとリストとを比較し得る。ある場合には、入力イベントタイプのあらかじめ定義されたリストは、モバイルアプリケーションのプログラムコードに含まれ得る。さらに、一例として、入力イベントタイプのあらかじめ定義されたリストは、モバイルアプリケーションの１つまたは複数のページに含まれる全ての入力要素の様々なタイプのリストを含み得る。例えば、モバイルアプリケーションは、ラジオボタン入力要素、テキストフィールド入力要素、およびドロップダウンメニュー入力要素を含む、１つのページを含み得る。この例では、既知の入力要素タイプのあらかじめ定義されたリストは、ラジオボタン入力要素タイプ、テキストフィールド入力要素タイプ、およびドロップダウンメニュー入力要素タイプ、のリストを含み得る。入力要素タイプが既知である（例えば、ブロック８１６の「ＹＥＳ」）場合、処理８００は、ブロック８１８へと進む。
【０１２９】
[00141]  ブロック８１８において、モバイルアプリケーションは、選択データに基づいてシンセティックイベントを生成し得る。ある場合には、シンセティックイベントは、遠隔デバイス（例えば、端末デバイス）において生成され、ローカルデバイス（例えば、ネットワークデバイス）において複製される入力イベントを含み得る。例えば、エージェントがコンテンツ７４０のエリア内にある場合、クリックが入力イベントとして検出され得る。入力イベントが端末デバイスにおいて生成され、それはネットワークデバイスまで遠いので、入力イベントは、ネットワークデバイスにおいてシンセティックイベントとして複製され得る。さらに、シンセティックイベントは、ネットワークイベントをオペレートするユーザのインタラクションに基づいていないネットワークデバイスで行われる入力イベントを含み得る。代わりに、ネットワークデバイスで行われるその入力イベントは、端末デバイスで検出される遠隔で生成された入力イベントに基づいている。ある場合には、入力イベントは、シリアライズされたデータ構造を含み得、トランスポートプロトコルのようなウェブソケットを使用して、端末デバイスからネットワークデバイスに送信され得る。
【０１３０】
[00142]  シンセティックイベントを生成することは、受信された入力イベントのモバイルイベント構造とマッチすることを含み、提供されたイベントデータ（例えば、タッチロケーション）でイベント構造を満たし得る。例えば、選択データに含まれる入力イベントがラジオボタンの選択に対応する場合、入力イベントは、ラジオボタンに対応するイベント構造を含み得る。さらに、選択データはまた、入力イベントに対応するイベントデータを含み得る。例えば、イベントデータは、端末デバイスでの選択のロケーションを含み得る。この例では、イベントデータは、端末デバイスでのタッチまたはクリックロケーションの座標を含み得る。ネットワークデバイスが入力イベントを受信したとき、モバイルアプリケーションに組み込まれたＳＤＫは、受信された入力要素のイベント構造（例えば、ラジオボタンに対応するイベント構造）に一致するイベント構造を生成し得る。さらに、モバイルアプリケーションに組み込まれたＳＤＫは、生成されたイベント構造を、受信された入力要素に関連付けられたイベントデータ（例えば、タッチロケーション）で埋めることができる。受信された入力要素に一致するイベント構造を生成することによって、および生成されたイベント構造を、受信された入力要素のイベントデータで埋めることによって、シンセティックイベントは、端末デバイスで検出された入力イベントに基づいてネットワークデバイスで検出され得る。ブロック８２０において、イベントデータを含む生成されたイベント構造（例えば、タッチロケーション）は、ネットワークデバイスのオペレーティングシステムに送信され得る。処理８００におけるネットワークデバイスのオペレーティングシステムが、シンセティックのディスパッチ―プログラムで作成されたイベント―をサポートするので、遠隔で生成された入力イベント（例えば、アンドロイド）は、まるでそれが実際のユーザ入力（例えば、ユーザによるスクリーン上のタップ）であるかのように、入力イベントに関連付けられた全ての後続のステップ（デフォルトアクション）を自動的に行うオペレーティングシステムをもたらす方法で複製され得る。例えば、入力イベントが端末デバイス７１５におけるコンテンツ７４０上のロケーションの選択である場合、その選択は、端末デバイスにおいて生成された入力イベントと一致する、ネットワークデバイスでのシンセティックイベントを生成することによって、ネットワークデバイス７０５において遠隔で生成され得る。
【０１３１】
[00143]  図９は、シンセティックイベントをディスパッチするためのサポートのないオペレーティングシステムにおける入力イベントを複製するための処理９００のスイムレーン図を示す。処理９００は、ネットワークデバイス（例えば、ネットワークデバイス７０５）、通信サーバ（例えば、通信サーバ７１０）、および端末デバイス（例えば、端末デバイス７１５）間のインタラクションを含み得る。さらに、処理９００は、（端末デバイスにおいて遠隔で生成される）入力イベントを受信するために行われ得、（例えば、イベント複製器７６０を使用して）ネットワークデバイスにおいて入力イベントを複製し得る。しかしながら、処理９００におけるネットワークデバイスのオペレーティングシステムは、シンセティックイベント（例えば、別のデバイスにおいて生成された入力イベント）のディスパッチをサポートしない可能性がある。ある場合には、シンセティックイベントをディスパッチするためのサポートのないオペレーティングシステムは、入力イベントのモバイルジェネレーション（mobile generation）にプログラム的アクセスを提供することを制限され、従って、遠隔デバイスで生成されたイベントの複製を直接はサポートしない。例えば、シンセティックイベントをディスパッチするためのサポートのない、従って、シンセティックイベントを複製するための直接のサポートのないオペレーティングシステムは、ｉＯＳオペレーティングシステムである。処理９００は、通信セッション中に遠隔制御能力を可能にするために、遠隔で生成された入力イベントを模倣するために行われる。さらに、処理９００のブロック９０２〜９１４は、処理８００のブロック８０２〜８１４に類似しているため、ブロック９０２〜９１４の説明は、ここでは省略する。
【０１３２】
[00144]  ブロック９１６において、ネットワークデバイス上で動作するモバイルアプリケーションは、モバイルアプリケーションによって提示される現在のページのターゲット入力要素を発見するためのサーチアルゴリズムを実行し得る。ターゲット入力要素は、遠隔で生成された入力イベントに対応する入力要素であり得る。例えば、サーチアルゴリズムは、１つまたは複数の規則を満たす（モバイルアプリケーションの現在のページに表示される全ての入力要素のうちの）第１の入力要素を発見するために使用される。１つまたは複数の規則の例は、入力要素がモバイルアプリケーションに組み込まれたＳＤＫに知られているか否か（例えば、本開示において上述されたようなあらかじめ定義された入力要素）を決定するためのオペレーション、入力イベントの座標がモバイルアプリケーションの現在のページに表示された入力要素の境界内にあるか否かを決定するためのオペレーション、発見された入力要素（例えば、ターゲット入力要素）が入力を受け取ることを可能にしかつその準備ができているか否かを決定するためのオペレーション、および他の適切な規則を含み得る。モバイルアプリケーションの現在のページに表示された入力要素が任意の規則または１つまたは複数の規則の任意の組み合わせを満たす場合、その入力要素は、ターゲット入力要素であり得る。
【０１３３】
[00145]  ある場合には、サーチアルゴリズムは、ネットワークデバイスでモバイルアプリケーションによって提示された現在のページにおいてターゲット入力要素を位置付けるための１つまたは複数のオペレーションを含み得る。例えば、１つまたは複数のオペレーションは、遠隔で生成された入力イベントおよび入力イベントの関連するイベントデータ（例えば、タッチまたはクリックロケーション）を受信することを含み得る。この例では、ネットワークデバイスで受信された選択データ（例えば、ブロック９１４）は、遠隔で生成された入力イベントおよび関連したイベントデータを含み得る。さらに、１つまたは複数のオペレーションは、端末デバイスにおいてエージェントによって行われたクリックロケーションの座標（例えば、Ｐ＝イベントｘ，イベントｙ）を決定することを含み得る。次いで、ルート要素が設定され得る。例えば、ルート要素は、現在の時間においてネットワークデバイス上で閲覧されているモバイルアプリケーションの特定のページを含み得る。ルート要素を設定することは、現在の時間にネットワークデバイスで閲覧されている特定のページを識別することに対応し得る。ルート要素は、１つまたは複数の子要素（child element）を有し得る。例えば、子要素は、モバイルアプリケーションによって提示された特定のページ上の入力要素であり得る。さらなる例として、ルート要素がモバイルアプリケーションの特定のページに対応し得るので、子要素は、その特定のページに含まれる入力要素に対応し得る。
【０１３４】
[00146]  さらに、１つまたは複数のオペレーションは、クリックロケーションの座標（例えば、Ｐ＝イベントｘ，イベントｙ）を、ルート要素に関連付けられた各子要素のための入力境界と比較することを含み得る。例えば、モバイルアプリケーションに組み込まれたＳＤＫは、クリックロケーションの座標が子要素の入力境界と交差するか否かを、ルート要素の各子要素ごとに繰り返して決定し得る。この例では、ＳＤＫはルート要素を識別し得、次いで、各子要素ごとに入力境界を表すデータを検索する。次いで、ＳＤＫは、クリックロケーションの座標を、検索された入力境界の各々と比較し得る。ある場合には、入力要素が長方形内にあるとき、入力境界を表すデータは、長方形の左上のピクセル位置と、長方形の右下のピクセル位置とを含み得る。
【０１３５】
[00147]  ブロック９１８において、モバイルアプリケーションは、ターゲット入力要素が発見されたか否かを決定し得る。ターゲット入力要素を発見することは、クリックロケーションの座標が入力要素の入力境界と交差する（例えば、クリックロケーションが入力境界のエリア内にある）と決定することに対応し得る。ターゲット入力要素が発見されたとき（例えば、ブロック９１８から出る「ＹＥＳ」）、処理９００は、ターゲット入力要素に関連付けられた定義されたアクションが決定されるブロック９２０へと進む。各入力要素は、関連したアクションおよび入力境界を有し得る。入力要素に関連付けられたアクションの例は、ボタンを選択すること、状態スイッチをトグルすること（チェックされた対チェックされていない）、セグメント化された制御、テキストフィールドまたはテキストエリアにおいて文字を追加または削除すること、スクロール要素をトリガすること、および他の適切なアクションを含み得る。ターゲット入力要素が識別されたとき、モバイルアプリケーションに含まれるＳＤＫは、ターゲット入力要素のタイプに対応するイベントの定義されたアクションを検索し得る。ブロック９２２において、定義されたアクションは、モバイルアプリケーションによって行われ得る。例えば、定義されたアクションを行うことは、端末デバイスにおいて生成された入力イベントがモバイルアプリケーションの入力要素を制御するためにネットワークデバイスにおいてシームレスに複製され得るように、モバイル入力イベント（例えば、端末デバイスの代わりに、ネットワークデバイスにおいてローカルで実行された入力イベント）の処理を模倣し得る。ターゲット入力が発見されなかったとき（例えば、ブロック９１８から出る「ＮＯ」）、処理９００は、処理９００が終了するブロック９２４へと進む。
【０１３６】
[00148]  ある場合には、テキストフィールドまたはテキストエリアなどの特定の入力要素は、複雑な入力オペレーション（例えば、コピー、ペースト、複数文字消去、改行など）をサポートする。処理９００もまたこれらの複雑なオペレーションをサポートし得ることが理解されるだろう。これらの例では、処理９００は、入力要素が必要に応じて端末デバイス上で動的に複製されるように、入力要素の動的なまたはオンデマンドの複製を容易にし得る。例えば、（例えば、ブロック９２０において）ターゲット入力要素がテキストフィールドであると決定された場合、ネットワークデバイスは、ターゲット入力要素がテキストフィールドであることを端末デバイスに通知し得る。さらに、ネットワークデバイスはまた、端末デバイスへの通知メッセージとともにまたはそれと別個に、テキストフィールドの現在のコンテンツも送信し得る。端末デバイスがテキストフィールドの通知メッセージおよび現在のコンテンツを受信したとき、端末デバイスは、リアルタイムのスクリーンショットイメージの上部に表示する（例えば、オーバーレイ要素がコンテンツ７４０の上部に表示され得る）ように、オーバーレイ要素を生成し得る。ある場合には、オーバーレイ要素は、それがテキストフィールドに対応するコンテンツ７４０のイメージ部分の上部に位置するように、生成され得る。コンテンツ７４０は、イメージまたはビデオデータを含んでおり、かつフラットな非構造的データであるため、エージェントは、テキストフィールドに通常はテキストをタイプすることができない可能性がある。しかしながら、端末デバイスで生成される（例えば、ウェブアプリケーションまたはウェブブラウザによって生成される）オーバーレイ要素は、テキストフィールドに対応し得るコンテンツ７４０のイメージ部分上で表示され得、エージェントからテキストデータを受信するように構成され得る。例えば、オーバーレイ要素は、エージェントが文字（character letters）をタイプすることができるテキストボックスを含み得る。
【０１３７】
[00149]  ある場合には、エージェントによってタイプされる各文字は、通信サーバを使用してもとのネットワークデバイスに送信される。他の例では、全体のテキスト文字列は、エージェントが入力テキストを完了したとき、ネットワークに送られる。ネットワークデバイスが端末デバイスからの入力された文字または文字列を受信したとき、モバイルアプリケーションは、エージェントによって修正されたテキストフィールドが更新されたテキストにポピュレートするように、テキストフィールドの入力値を更新する。ある場合には、端末デバイスにおけるエージェントによるオーバーレイ要素に入力されたテキストは、テキストフィールドに含まれた当初のテキストに付加され得る。これらの例では、テキストフィールドの定義されたアクションは、テキストフィールドの入力値に含まれるテキストのポピュレートであり得る。例えば、テキストフィールドに関連付けられた入力値は、モバイルアプリケーションのプログラムコードにコード化された、ポピュレートされるべき当初のテキストであり得る。エージェントがオーバーレイ要素にタイピングしているとき、エージェントは、文字を追加し、テキストフィールドに当初に含まれるテキストの文字を削除し、テキストフィールド内のカーソルの場所を移動させ、テキストをハイライトし、テキストのフォーマットの態様を変更し（太字、イタリック、アンダーラインなど）、およびテキストへの他の適切な変更を行い得る。
【０１３８】
[00150]  図１０は、モバイルアプリケーションを遠隔制御するための処理１０００のフローチャートを示す。ある場合には、処理１０００は、通信サーバ（例えば、通信サーバ１８０、７１０）によって行われ得る。処理１０００はまた、少なくとも部分的に、ネットワークデバイス（例えば、ネットワークデバイス１０５、７０５）または端末デバイス（例えば、端末デバイス１１５、７１５）によって行われ得る。例として、処理１０００は、端末デバイスが、（端末デバイスから離れている）ネットワークで実行しているモバイルアプリケーションを遠隔制御することを可能にするように行われ得る。さらに、処理１０００はまた、ネットワークデバイス上のモバイルアプリケーションによって提示されたコンテンツが端末デバイスとリアルタイムに共有され得るように、ネットワークデバイスと端末デバイスとの間の通信セッションを確立し得る。
【０１３９】
[00151]  ネットワークデバイスは、通信セッションを開始し得るモバイルアプリケーションを実行するように構成され得る。モバイルアプリケーションは、端末デバイスによって遠隔制御され得る。さらに、モバイルアプリケーションは、初期状態で入力要素を含むまたは提示し得る。ある場合には、入力要素の初期状態は、モバイルアプリケーションが実行されるときの入力要素の状態であり得る。入力要素の初期状態の例は、空のテキストフィールドであり得、文字の初期セットを有するテキストフィールド（例えば、「テキストをここに入力して下さい」）、未選択のラジオボタンなどであり得る。
【０１４０】
[00152]  処理１０００は、通信サーバがネットワークデバイスと端末デバイスとの間の通信セッションを確立する、ブロック１００５で始まる。通信セッションは、本明細書で説明される任意の方法を使用して確立され得る。例えば、上述されるように、ネットワークデバイスは、（例えば、モバイルアプリケーションに関連付けられた）アプリケーションサーバからのサービス識別子を要求し得る。よって、ネットワークデバイスは、通信セッションに参加するために、インビテーションのためのサービス識別子を通信サーバと交換し得る。
【０１４１】
[00153]  ある場合には、リアルタイムコンテンツ共有のための通信セッションは、既存の通信セッションの一部分として確立され得る。例えば、非同期メッセージ交換のための通信セッションは、ネットワークデバイスと端末デバイスとの間で確立され得る。非同期交換は、例えば、インスタントメッセージやチャットとは異なる（例えば、アプリ、ウェブベースのメッセージ／受信ボックスシステム、電子メールを介して）電子メッセージ交換を含み得る。非同期交換は、宛先デバイスが、メッセージが提示されるよう要求するか、あるいはキューまたは受信ボックスに対応するウェブページまたはアプリページを訪問するまで、送信されたメッセージがメッセージキューまたは受信ボックスに記憶されるような方法で、メッセージを通信することを含み得る。
【０１４２】
[00154]  ネットワークデバイスと端末デバイスとの間の非同期メッセージ交換の一部分として、端末デバイスは、ネットワークデバイスへの出力メッセージ中のインビテーションを含み得る。インビテーションは、ネットワークデバイスにおいて受け入れられたとき、既存の通信セッションの向上をもたらすデータを含み得る。既存の通信セッションを向上させることは、既存の通信セッションの一部として追加の通信セッションを確立することを含み得る。例えば、追加の通信セッションは、モバイルアプリケーションまたはネットワークデバイス上に表示された追加のウィンドウとして提示され得る。別の例では、既存の非同期通信セッションは、追加の通信セッションにコンバートされ得る。この例では、追加の通信セッションは、非同期通信セッションと同じウィンドウに提示され得る。さらに、（モバイルアプリケーションが実行されている間）ネットワークデバイスのスクリーン上に提示されるコンテンツは、追加の通信セッションのウィンドウに表示され得る。
【０１４３】
[00155]  ある場合には、追加の通信セッションはまた、ネットワークデバイスに関連付けられた別のデバイスを使用して確立され得る。例えば、非同期メッセージ交換は、ユーザによってオペレートされる端末デバイスとデスクトップコンピュータとの間で確立され得る。この例では、端末デバイスは、モバイルアプリケーションによって提示されたコンテンツのリアルタイムスクリーン共有のための追加の通信セッションに参加するためのインビテーションを含む非同期メッセージを送信し得る。ある場合には、ユーザは、ユーザに関連付けられたスマートフォンまたはタブレットデバイスを使用して、インビテーションを受け入れ得る。他の例では、ユーザは、デスクトップコンピュータを使用してインビテーションを受け入れ、ユーザのスマートフォンを使用して通信セッション受け入れ得る。追加の通信セッションは、ユーザに関連付けられたスマートフォンまたはタブレットデバイスと端末デバイスとの間で確立され得る。例えば、スマートフォン上で実行しているまたはスマートフォンでキャプチャされた（例えば、オーディオまたはビデオ信号）モバイルアプリケーションによって提示されたコンテンツは、端末デバイス上にリアルタイムに表示され得る。（例えば、デスクトップからスマートフォンへの）通信セッション中にデバイスを切り替えることがエージェントとユーザとの間のチャットメッセージの状態を維持し得ることが理解されるだろう。例えば、ユーザがデスクトップからユーザのモバイルデバイスに切り替える場合、ユーザは、エージェントとの会話の同じ場所から続ける（pick up）ことができるだろう。エージェントがモバイルデバイスの診断を決定および評価する目的で、モバイルデバイスおよび／またはモバイルデバイスを動作するモバイルアプリケーションを遠隔制御し得ることもまた理解されるだろう。
【０１４４】
[00156]  ブロック１０１０において、通信サーバは、通信セッション中にデータストリームを受信し得る。データストリームは、ネットワークデバイスから受信され得る。ある場合には、データストリームは、リアルタイム通信プロトコルを使用して生成され得る。非限定的な例として、ＷｅｂＲＴＣプロトコルは、ネットワークデバイスにおいてキャプチャされたコンテンツのビデオフレームを符号化するために使用され得る。例えば、ＷｅｂＲＴＣプロトコルは、ネットワークデバイスで実行しているモバイルアプリケーションによって提示されたスクリーンのキャプチャされたビデオフレームのシーケンスをダウンサンプリングするために使用され得る。ダウンサンプリングされたビデオフレームは、ネットワークデバイスにおいてデータストリームを生成するように処理され得る。
【０１４５】
[00157]  ある場合には、データストリームは、ネットワークデバイスにおいてキャプチャされたコンテンツデータを含み得る。コンテンツデータは、ネットワークデバイスにおいてコンテンツキャプチャエンジンによってキャプチャされた任意のデータを含み得る。ある場合には、コンテンツデータは、モバイルアプリケーションが実行されている間、ネットワークデバイスにおいてキャプチャされた任意のデータを含み得る。コンテンツデータの例は、モバイルアプリケーションによって提示されたページのイメージまたはスクリーンショット、モバイルアプリケーションによって提示されたビデオのビデオフレーム、ネットワークデバイスのカメラによってキャプチャされたビデオフィードのビデオデータ（例えば、ビデオフレーム）、ネットワークデバイスのマイクロフォンによってキャプチャされたオーディオ信号のオーディオデータ、および他の適切なメディアストリームまたはコンテンツデータを含み得る。
【０１４６】
[00158]  例えば、コンテンツデータは、モバイルアプリケーションによって提示されるオブジェクトを含み得る。ある場合には、オブジェクトは、ネットワークデバイスにおいてキャプチャされたイメージまたはスクリーンショットの一部分であり得る。例えば、コンテンツデータに含まれるオブジェクトは、モバイルアプリケーションに含まれる入力要素に対応し得る。この例では、初期状態で入力要素が空のテキストフィールドであるとき、オブジェクトは、空のテキストフィールドを表すスクリーンショットの部分であり得る。さらに、この例では、オブジェクトは、テキストフィールドの空のテキストボックスを含むスクリーンショットの部分を含み得る。例えば、このケースでは、オブジェクトは、入力要素ではなく、入力要素を表すスクリーンショットのイメージ部分である。端末デバイスで受信されたデータストリームがネットワークデバイスで実行しているモバイルアプリケーションによって提示されるコンテンツの視覚的フィードバックデータ（例えば、ネットワークデバイスでキャプチャされたビデオのビデオフレーム）であり得ることが理解されるだろう。端末デバイスで受信された視覚的フィードバックデータは、モバイルアプリケーションの構造（例えば、ページ上の入力要素のいくつかのタイプ）を含まないが、構造のイメージのみを含む。このケースでは、モバイルアプリケーションの構造は、モバイルアプリケーションのページ上に提示される入力要素の階層を含む。さらに、端末デバイスで受信されたデータストリームは、ネットワークデバイスで動作しているオペレーティングシステムを識別する任意の情報を含みんでも含まなくともよい。有利なことに、本開示に記載される実施形態は、ネットワークデバイス上で動作するオペレーティングシステムに関わらず、ネットワークデバイスで実行しているモバイルアプリケーションを端末デバイスが制御することを可能にする。
【０１４７】
[00159]  ブロック１０１５において、通信サーバは、通信セッション中に（ブロック１０１０で受信された）データストリームを送信し得る。ある場合には、データストリームは、端末デバイスに送信され得る。データストリームが端末デバイスで受信されたとき、データストリームに含まれるコンテンツデータは、端末デバイスにおいて表示または出力され得る。例えば、コンテンツデータは、モバイルアプリケーションによって提示されたコンテンツの（成功裏にキャプチャされた）ビデオフレームを含み得る。この例では、コンテンツデータが端末デバイスで受信されたとき、ビデオフレームは、端末デバイスのスクリーンに表示され得る。従って、ネットワークデバイスで実行しているモバイルアプリケーションによって提示されたリアルタイムビデオは、エージェントによる閲覧のために端末デバイスのスクリーンに表示され得る。ある場合には、コンテンツデータは、ネットワークデバイスにおいてキャプチャされたコンテンツを含み得る。例えば、コンテンツデータは、ネットワークデバイスのマイクロフォンにおいてキャプチャされたオーディオを含み得る。この例では、コンテンツデータは、データストリームに含まれており、データストリームが端末デバイスで受信されたとき、端末デバイスは、コンテンツデータを出力し得る（例えば、オーディオ信号を出力する）。
【０１４８】
[00160]  ブロック１０２０において、入力イベントが検出され得る。ある場合には、入力イベントは、端末デバイスでオペレートしているウェブブラウザによって検出され得る。例えば、ウェブブラウザは、端末デバイスで入力イベントが生成された（例えば、エージェントがマウスボタンをクリックした）ことを検出し得る。別の例では、ウェブブラウザは、表示されたコンテンツ（例えば、コンテンツ７４０）での選択（例えば、クリックイベント、タップイベント、スワイプイベントなど）に対応する入力を受け取り得る。他の例では、通信サーバは、端末デバイスにおいて生成された入力イベントを表すデータ（例えば、クリックイベントが発生したことを表すデータ）を受信し得る。さらに、通信サーバは次いで、受信したデータが端末デバイスで行われる入力イベントに対応することを検出し得る。入力イベントは、コンテンツデータとの関連付けを検出され得る。例えば、入力イベントは、表示されたコンテンツにおけるクリックイベント（例えば、コンテンツ７４０内で検出されたクリックイベント）に入力が対応するような、クリックイベントであり得る。ある場合には、入力イベントは、（例えば、ユーザがモバイルアプリケーションによって提示されたページ上の入力要素ではないロケーションをタップする場合に）モバイルアプリケーションのイベントリスナによって検出され得る。
【０１４９】
[00161]  ブロック１０２５において、通信サーバは、検出された入力に基づいて制御データを生成し得る。例えば、検出された入力イベントの座標（例えば、端末デバイスで検出されたクリックイベントまたはタップイベントの座標）は、制御データに含まれ得る。他の情報は、例えば、検出された入力に関連付けられたメタデータ、検出された入力イベントの時間、入力イベントのタイプ（例えば、クリック、タップ、スワイプ）、制御データを受信すべきネットワークデバイスの識別子、入力イベントが検出される端末デバイスの識別子、および他の適切な情報などの制御データに含まれ得る。
【０１５０】
[00162]  ブロック１０３０において、通信サーバは、ネットワークデバイスに制御データを送信し得る。例えば、通信サーバは、制御データを受信するための宛先のアイデンティティを決定し得る。ある場合には、通信セッションは、対応する識別子を有し得る。通信セッションの識別子はまた、通信セッションに関与したネットワークデバイスと端末デバイスとを識別し得る。通信サーバは、受信されたまたは検出された入力イベントに関連付けられたメタデータから識別子を抽出し得る。通信サーバは、抽出された識別子を使用して、制御データを生成し、制御データの宛先を決定し得る。制御データがネットワークデバイスで受信されたとき、制御データは、モバイルアプリケーションに含まれる入力イベントの初期状態を修正し得る。例えば、制御データがネットワークデバイスで受信されたとき、モバイルアプリケーションは、制御データを処理し得る。この例では、ネットワークデバイスに組み込まれたＳＤＫは、検出された入力イベントを複製するためのイベント複製器（例えば、イベント複製器７６０）をトリガし得る。制御データを使用して検出された入力イベントを複製することは、上述された処理８００および９００のいずれも含み得る。さらに、モバイルアプリケーションによって提示された入力要素の初期状態を修正することはまた、上述された処理８００および９００のいずれも含み得る。制御データが端末デバイスで生成され得ることが理解されるだろう。
【０１５１】
[00163]  図１１は、ネットワークデバイスで入力イベントを複製するための処理のフローチャートを示す。処理１１００は、ネットワークデバイスによって行われ得る。さらに、処理１１００は、シンセティックイベントのディスパッチをサポートしないオペレーティングシステム（例えば、ｉＯＳ）のために、（例えば、イベント複製器７６０を使用して）ネットワークデバイスにおいて遠隔で生成された入力イベントを複製するために行われ得る。処理１１００は、ネットワークデバイス上に記憶されるモバイルアプリケーションに含まれる入力要素をネットワークデバイスが識別し得るブロック１１０５で始まる。例えば、モバイルアプリケーションのプログラムコードは、入力要素を識別するコードの一部分を含み得る。プログラムコードは、複数の入力要素を識別するコードを含む。入力要素は、インタラクションに基づいて入力データを受け取るように構成され得る。例えば、入力要素は、ネットワークデバイス上に提示されるキーボードの文字の選択に対応する入力に基づいて、テキスト文字を受け取るように構成されたテキストフィールドであり得る。
【０１５２】
[00164]  ブロック１１１０において、入力要素に対応する入力境界が決定され得る。入力境界は、特定の入力要素に関連付けられた入力データを受け取るためにモバイルアプリケーションのページ上に提示されるエリアであり得る。例えば、モバイルアプリケーションに含まれる入力要素がテキストフィールドである場合、テキストフィールドの入力境界は、テキスト文字が入力され得るテキストボックスであり得る。この例では、入力境界は、テキストフィールドボックスの左上のピクセルのロケーションと、テキストフィールドボックスの右下のピクセルのロケーションとによって表され得る。複数の入力要素は、モバイルアプリケーションによって提示され得る。
【０１５３】
[00165]  ブロック１１１５において、モバイルアプリケーションは、ネットワークデバイスで実行され得る。ネットワークデバイスを実行することは、ネットワークデバイス上のアプリケーションをブートすることを含み得る。さらに、モバイルアプリケーションを実行することは、初期状態で入力要素を表示することを含み得る。例えば、ネットワークデバイスは、ネットワークデバイスに表示されるアイコンの選択に対応する入力を受け取り得る。アイコンを選択することは、ネットワークデバイス上でモバイルアプリケーションをブートすることを開始し得る。モバイルアプリケーションがブートされると、モバイルアプリケーションは、ネットワークデバイスのスクリーン上の複数のページのうちの１ページを表示し得る。さらに、モバイルアプリケーションのページは、入力要素（例えば、入力テキストのためのテキストフィールド）を含み得る。ある場合には、初期状態で入力要素を表示することは、その初期入力値または任意の前の入力値を用いた入力要素を表示することを含み得る。例えば、入力要素の初期状態は、未選択のラジオボタンおよび未選択のボタン、空のテキストフィールド、（例えば、モバイルアプリケーションのプログラムコードにコード化されたような初期入力値からのまたはそれをあらかじめポピュレートされた）テキストを有するテキストフィールド、並びに他の適切な初期状態に対応し得る。さらに、モバイルアプリケーションは、端末デバイスによって遠隔制御され得る。
【０１５４】
[00166]  ブロック１１２０において、ネットワークデバイスは、端末デバイスでの選択に対応する入力を受け取り得る。例えば、表示されたコンテンツエリア（例えば、コンテンツ７４０）上の入力イベント（例えば、クリックイベント）に対応する入力を端末デバイスが受け取るとき、入力イベントが検出され得る。さらに、端末デバイスは、ウェブソケットを使用して、通信サーバに入力イベントを送信し得る。通信サーバは、検出された入力イベントをネットワークデバイスに送信または中継し得る。検出入力イベントは、入力としてネットワークデバイスで受け取られ得る。さらに、受け取られた入力は、端末デバイスにおいて検出された選択（例えば、クリックイベント）に対応し得る。
【０１５５】
[00167]  ある場合には、端末デバイスでの選択（例えば、クリックイベント）は、選択データに関連付けられ得る。選択データは、端末デバイスで検出された選択（例えば、クリックイベント）に関連付けられた任意のデータまたはメタデータを含み得る。選択データの例は、端末デバイスにおいて検出された選択のピクセル座標（例えば、エージェントによって行われるクリックのロケーションにおけるコンテンツ７４０上の座標）、エージェントのウェブブラウザ上で動作するイベントリスナによって検出されかつ選択に関連付けられたデータまたはメタデータ、クリックイベントの処理に関連付けられたデータまたはメタデータ（例えば、クリック７５０、クリックの時間、クリックの持続時間、クリックまたはタップがシングルクリック／タップであったか、あるいはダブルクリック／タップであったか、あるいはクリックドラッグオペレーションであったかなど）、クリックが左クリックであったか、または右クリックであったか、あるいは、他の適切なデータを含み得る。端末デバイスにおいて検出された入力イベントは任意の入力イベントであり得、クリックに限定されるものではないことが理解されるだろう。例えば、端末デバイスにおける入力イベントはまた、スワイプ、タップ、クリック−ドラッグオペレーション、マルチタッチ、端末デバイスに関連付けられウェアラブルコンピューティングデバイスのジェスチャなどでもあり得る。ある場合には、選択データは、モバイルアプリケーションに関連付けられた場所を識別するために使用され得る。例えば、端末デバイスにおいて検出された入力イベントの座標（例えば、コンテンツ７４０上のエージェントによって行われるクリックの座標）を選択データが含む場合、ネットワークデバイスで受信された選択データがネットワークデバイスのスクリーン上の入力イベントのロケーション（例えば、モバイルアプリケーションに関連付けられた入力イベントの場所）を識別するために使用され得る。
【０１５６】
[00168]  例えば、端末デバイスにおいて検出された入力イベントが端末デバイスのスクリーン上のロケーション（ｘ，ｙ）におけるクリックである場合、選択データは、ロケーション座標を含み得る。ネットワークデバイスが選択データを受信したとき、ネットワークデバイスは、ネットワークデバイス上の対応するロケーションにおいて、遠隔で生成されたクリックを複製し得る。例えば、ネットワークデバイスは、ロケーション（ｘ，ｙ）に対応するロケーションにおけるクリックを複製し得る。端末デバイスのロケーション（ｘ，ｙ）が各デバイスのスクリーンの寸法に基づいてネットワークデバイス上の対応するロケーション（ｘ’，ｙ’）に変換または転送され得ることが理解されるだろう。例えば、ネットワークデバイスが端末デバイスとは異なるスクリーンサイズまたは方位を有する場合、選択データに含まれるロケーション（ｘ，ｙ）は、ネットワークデバイス上の対応するロケーション（ｘ’，ｙ’）に変換され得る。ある場合には、ネットワークデバイスは、選択データが受信されたとき、ロケーション（ｘ，ｙ）の変換を行い得る。他の例では、通信サーバまたは端末デバイスは、座標の変換を行い得る。
【０１５７】
[00169]  ブロック１１２５において、ネットワークデバイスに組み込まれたＳＤＫは、選択データが入力要素に対応するか否かを決定し得る。選択データが入力要素に対応するか否かを決定することは、その選択の座標が子要素の入力境界内にあるか否かを決定するために、モバイルアプリケーションのルート要素（例えば、現在のページ）を識別すること、および各子要素（例えば、現在のページ上に提示される入力要素）を繰り返しチェックすることを含み得る。例えば、ネットワークデバイスで入力イベントが受信された時に、ルート要素は、モバイルアプリケーションの現在のページまたは特定のページとなり得る。ルート要素は、子要素の関連した階層を有し得る。例えば、ルート要素の子要素は、ルート要素に対応するページ上に含まれる入力要素であり得る。さらに、選択データが入力要素に対応するか否かを決定することは、選択データを入力境界と比較することを含み得る。例えば、各子要素に関して、モバイルアプリケーションに組み込まれたＳＤＫは、選択データの座標が子要素の入力境界と交差するか否かを決定し得る。ＳＤＫは、子要素の入力境界を受信し、座標がその入力境界内にあるか否かを決定するために、ロケーションを比較し得る。
【０１５８】
[00170]  ブロック１１３０において、モバイルアプリケーションに組み込まれたＳＤＫは、選択データが入力要素に対応するとき、入力要素に関連付けられたアクションを決定し得る。例えば、モバイルアプリケーションに組み込まれたＳＤＫが、特定の子要素の入力境界と入力イベントの座標が交差すると決定したとき、子要素に対応する入力要素は、ターゲット入力要素となる。ターゲット入力要素は、端末デバイスで検出された入力イベントに対応する入力要素であり得る。例えば、コンテンツ７４０を閲覧するエージェントがテキストフィールドのイメージに対応するコンテンツ７４０のロケーション上でクリックする場合、ターゲット入力要素は、テキストフィールドに対応する入力要素であり得る。ＳＤＫは、ターゲット入力要素に関連付けられた定義されたアクションを検索し得る。例えば、各入力要素は、モバイルアプリケーションのプログラムコードにおいて定義される関連付けされたアクションを有し得る。定義されたアクションは、入力要素のタイプに基づき得る。例えば、ラジオボタンに関するアクションは、ラジオボタンの選択を未選択と選択済みとの間でトグルすることであり得、テキスト要素に関するアクションは、テキストボックスに含まれるべきテキストを定義する入力値に含まれたテキストをポピュレートすることであり得、ドロップダウンメニューに関するアクションは、ドロップダウンリストに含まれる項目を表示するためのものであり得、ボタンに関するアクションは、そのボタンの選択であり得、スクロールアローを表示するボタンに関するアクションは、スクリーンをスクロールするためのものなどであり得る。特定の入力要素のためのアクションは、モバイルアプリケーションのプログラムコードに符号化され得る。モバイルアプリケーションに組み込まれたＳＤＫは、ターゲット入力要素に関連付けられたアクションを検索し得る。ブロック１１３５において、ターゲット入力要素についての検索されたアクションが行われ得る。
【０１５９】
[00171]  図１２は、モバイルアプリケーションを遠隔制御するための別の処理のフローチャートを示す。処理１２００は、ネットワークデバイスによって行われ得る。さらに、処理１２００は、端末デバイスによって遠隔制御されるべきネットワークデバイス上で実行しているモバイルアプリケーションを有効にするために行われ得る。さらに、処理１２００はまた、ネットワークデバイス上のモバイルアプリケーションによって提示されたコンテンツが端末デバイスとリアルタイムに共有され得るように、および端末デバイスがモバイルアプリケーションを遠隔制御し得るように、ネットワークデバイスと端末デバイスとの間の通信セッションを確立し得る。
【０１６０】
[00172]  処理１２００は、ネットワークデバイスがモバイルアプリケーションを実行する、ブロック１２０５で始まる。ある場合には、モバイルアプリケーションは、初期状態で入力要素を含み得る。モバイルアプリケーションは、端末デバイスがリアルタイムにモバイルアプリケーションを制御することを可能にする、組み込まれたＳＤＫを含み得る。モバイルアプリケーションは、ネットワークデバイスに表示されたアイコンの選択に対応する入力をネットワークデバイスが受け取ったときに、実行され得る。例えば、入力要素の初期状態は、モバイルアプリケーションがブートされたときの入力要素の状態（例えば、選択、未選択、空のテキストフィールドなど）であり得る。初期状態はまた、入力要素の最も最近の状態または入力要素の任意の以前の状態であり得る。端末デバイスがモバイルアプリケーションによって提示されたリアルタイムコンテンツを受信することを可能にする通信セッションは、モバイルアプリケーションが実行された後（例えば、モバイルアプリケーションが通信セッションを開始するボタンの選択に対応する入力を受け取ったとき）に確立され得る。
【０１６１】
[00173]  ブロック１２１０において、モバイルアプリケーションに組み込まれたＳＤＫは、モバイルアプリケーションによって提示されるコンテンツ（例えば、コンテンツデータ）を含むデータストリームを生成し得る。例えば、コンテンツデータは、ネットワークデバイス上でモバイルアプリケーションによって提示された、イメージ、ビデオフレーム、あるいは１ページまたは複数のページのスクリーンショットであり得る。別の例として、コンテンツデータがイメージまたはスクリーンショットを含むとき、そのイメージまたはスクリーンショットは、モバイルアプリケーションによって提示されたオブジェクトを含み得る。オブジェクトは、入力要素に対応するイメージまたはスクリーンショットの一部分であり得る。例えば、入力要素がラジオボタンである場合、オブジェクトは、ラジオボタンを含むスクリーンショットのピクセルに対応し得る。さらに、データストリームを生成することは、リアルタイムにコンテンツデータを含むデータストリームを生成するために、コンテンツにＷｅｂＲＴＣプロトコルを適用することを含み得る。他のリアルタイム通信プロトコルが使用され得ることが理解されるだろう。さらに、任意の変換がキャプチャされたコンテンツデータへのものである（例えば、ビデオフレームのサイズの変換）ことが理解されるだろう。
【０１６２】
[00174]  ブロック１２１５において、ネットワークデバイスは、通信セッション中に通信サーバにデータストリームを送信し得る。通信サーバは、受信されたデータストリームを端末デバイスに送信または転送し得る。ある場合には、ネットワークデバイスは、どのデバイスが通信セッションの一部分として通信しているかを通信サーバが決定することができるように、データストリームに通信セッションの識別子を含み得る。例えば、識別子はまた、どのネットワークデバイスおよびどの端末デバイスが通信セッションに参加したかを識別し得る。通信サーバがデータストリームを受信したとき、通信サーバは、識別子を抽出し、どの端末デバイスがデータストリームを送信するかを決定し得る。さらに、通信サーバが検出された入力イベントを端末デバイスから受信したとき、通信サーバは、どのネットワークデバイスが入力イベントを受信すべきかを決定するために入力イベントに関連付けられるまたは含まれる識別子を抽出し得る。さらに、データストリームが端末デバイスで受信されたとき、データストリームに含まれるコンテンツデータは、端末デバイスに表示され得る。例えば、端末デバイスは、モバイルアプリケーションによって提示されたコンテンツのリアルタイムビデオが端末デバイスをオペレートしているエージェントによって閲覧されることができるように、端末デバイス上にビデオフレームを表示し得る。
【０１６３】
[00175]  ブロック１２２０において、ネットワークデバイスは制御データを受信し得る。例えば、制御データは、オブジェクトに関連付けられ得る。通信サーバは、通信サーバが端末デバイスからの検出された入力イベントに関連するイベントデータを受信したとき、制御データを生成し得る。ある場合には、制御データは、通信セッションの識別子、またはネットワークデバイスおよび端末デバイスの識別子（例えば、デバイス識別子）を含み得る。制御データは、端末デバイスでの選択に関連付けられたデータ選択を含み得る。例えば、端末デバイスでの選択は、例えば端末デバイスで行われる検出されたクリック、タップ、またはスワイプであり得る。さらに、端末デバイスでの選択は、選択が入力要素に対応するオブジェクトロケーション（例えば、入力要素に対応するスクリーンショット、イメージ、またはビデオの一部分）であり得るので、オブジェクトに関連付けられ得る。
【０１６４】
[00176]  ブロック１２２５において、モバイルアプリケーションに組み込まれたＳＤＫは、制御データが入力要素に対応するか否かを決定し得る。例えば、ＳＤＫは、制御データから抽出された選択データに含まれる座標から入力イベントのロケーションを識別し得る。さらに、ＳＤＫは、ルート要素（例えば、モバイルアプリケーションによって提示された現在のページ）を識別し得、各子要素（例えば、現在のページ上に提示された入力要素）ごとに、選択の座標が子要素の入力境界に内にあるか否かを決定し得る。座標が入力境界内にある場合、その子要素は、ターゲット入力要素であり得る。座標が任意の子要素の入力境界に含まれる場合、処理が終了し得る。
【０１６５】
[00177]  ブロック１２３０において、ＳＤＫがターゲット入力要素を識別したとき、ＳＤＫは、入力要素の初期状態を修正し得る。ある場合には、入力要素の初期状態を修正することは、初期状態を次の状態に変えることを含み得る。例えば、テキストフィールドの初期状態を修正することは、テキストフィールドの入力値として端末デバイスから受信された１つまたは複数の文字を追加すること、および追加された文字をテキストボックスにポピュレートすることを含み得る。この例では、テキストボックスの入力値は、モバイルアプリケーションのプログラムコード中のテキストフィールドのためにコード化されたテキストボックスのコンテンツであり得る。入力値は、モバイルアプリケーションによって提示されたテキストフィールドのコンテンツを端末デバイスが遠隔制御することを可能にする、端末デバイスから受信された文字に基づいて更新され得る。別の例では、未選択のラジオボタンの初期状態を修正することは、ラジオボタンを選択済み状態にトグルすることを含み得る。さらに、ある場合には、入力要素の初期状態を修正することは、上述された処理８００または９００を行うことを含み得る。例えば、入力要素の初期状態を修正することは、入力要素のロケーションで入力イベントを複製することを含み得る。
【０１６６】
[00178]  上の説明では実施形態の十分な理解を提供するために具体的詳細が示されている。しかしながら、それら実施形態がこれらの具体的詳細なしでも実施することができることを理解されたい。例えば、回路は、不要な詳細で実施形態を不明瞭にしないようにブロック図として示され得る。他の例では、実施形態を不明瞭にしないように、周知の回路、処理、アルゴリズム、構造、および技法が不要な詳細なしで示され得る。
【０１６７】
[00179]  上述の技法、ブロック、ステップおよび手段の実装が、様々な方法で行われ得る。例えば、これらの技法、ブロック、ステップおよび手段は、ハードウェア、ソフトウェア、またはそれらの組み合わせで実施され得る。ハードウェアの実装に関して、処理ユニットは、１つまたは複数の特定用途向け集積回路（ＡＳＩＣ）、デジタル信号プロセッサ（ＤＳＰ）、デジタル信号処理装置（ＤＳＰＤ）、プログラマブルロジックデバイス（ＰＬＤ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、プロセッサ、コントローラ、マイクロコントローラ、マイクロプロセッサ、上述された機能を行うように設計された他の電子ユニット、および／またはそれらの組み合わせの内部で実施され得る。
【０１６８】
[00180]  また、実施形態の一部は、フローチャート、フロー図、データフロー図、構造図、またはブロック図として描く処理として説明され得ることに留意されたい。フローチャートは、オペレーションを順次的な処理として説明し得るが、オペレーションの多くは、並列に、または同時に行われ得る。加えて、オペレーションの順序は並べ換えることができる。処理は、そのオペレーションが完了したときに終了するが、図面には含まれていないさらに別のステップを有する可能性もある。処理は、方法、関数、プロシージャ、サブルーチン、サブプログラムなどに対応し得る。処理が関数に対応するとき、その終了は、この関数が呼び出し関数または主関数に戻ることに対応する。
【０１６９】
[00181]  さらに、実施形態は、ハードウェア、ソフトウェア、スクリプト言語、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、および／またはそれらの任意の組み合わせによって実施され得る。ソフトウェア、ファームウェア、ミドルウェア、スクリプト言語、および／またはマイクロコードにおいて実施されると、必要なタスクを行うプログラムコードまたはコードセグメントは、記憶媒体などの機械可読媒体に記憶され得る。コードセグメントまたは機械実行可能命令は、プロシージャ、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、スクリプト、クラス、あるいは、命令、データ構造、および／またはプログラム文の任意の組み合わせを表し得る。コードセグメントは、情報、データ、引数、パラメータ、および／またはメモリコンテンツを渡し、および／または受信することによって、別のコードセグメントまたはハードウェア回路に結合され得る。情報、引数、パラメータ、データなどは、メモリ共有、メッセージ受け渡し、チケット受け渡し、ネットワーク送信などを含む任意の適切な手段によって受け渡し、転送、または送信され得る。
【０１７０】
[00182]  ファームウェアおよび／またはソフトウェア実装について、方法が、本明細書で説明される機能を行うモジュール（例えば、プロシージャ、機能など）を用いて実施され得る。命令を有形に具体化する任意の機械可読媒体は、本明細書で説明される方法を実施する際に、使用され得る。例えば、ソフトウェアコードは、メモリに記憶され得る。メモリは、プロセッサ内で、またはプロセッサの外部に実装され得る。本明細書で使用されるとき、「メモリ」という用語は、任意のタイプの長期、短期、揮発性、または他の記憶媒体を指し、いかなる特定のタイプのメモリにも特定の数のメモリにも、メモリが記憶される媒体のタイプにも限定されない。
【０１７１】
[00183]  さらに、本明細書で開示されるとき、「記憶媒体」、「記憶」、または「メモリ」という用語は、読み取り専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ＲＡＭ、コアメモリ、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリデバイス、および／または情報を記憶するための他の機械可読媒体を含む、データを記憶するための１つまたは複数のメモリを表し得る。「機械可読媒体」という用語は、携帯式または固定式の記憶デバイス、光記憶デバイス、無線チャネル、並びに／あるいは、命令および／またはデータを収容または搬送する、記憶することが可能な様々な他の記憶媒体を含むが、これらに限定されない。
【０１７２】
[00184]  本開示の原理は、特定の装置および方法に関連して上述されているが、この記述は、本開示の範囲の限定としてではなく例示としてなされているにすぎないことが明確に理解されるべきである。
【図１】
2019525371.tif 000003
【図２】
2019525371.tif 000004
【図３Ａ】
2019525371.tif 000005
【図３Ｂ】
2019525371.tif 000006
【図３Ｃ】
2019525371.tif 000007
【図４】
2019525371.tif 000008
【図５】
2019525371.tif 000009
【図６】
2019525371.tif 000010
【図７】
2019525371.tif 000011
【図８】
2019525371.tif 000012
【図９】
2019525371.tif 000013
【図１０】
2019525371.tif 000014
【図１１】
2019525371.tif 000015
【図１２】
2019525371.tif 000016
【国際調査報告】
2019525371.tif 000017
2019525371.tif 000018
2019525371.tif 000019