(57)【要約】  インスタントメッセージングシステムへのアクセスの取得を求める要求を記述したデータは、要求側デバイスから受信される。アクセスの取得を求める要求は、識別子を含む。要求内の識別子に基づきデータリポジトリからプラグインが識別される。プラグインは、要求側デバイス上にインストールされているインスタントメッセージングアプリケーションを拡張するように適合される。いくつかの態様において、インスタントメッセージングセッション時に受信されるプラグインは、インスタントメッセージングセッションが終了するまでの間、インスタントメッセージングアプリケーションを拡張する。
2017517063.tif 000002
【特許請求の範囲】
【請求項１】
インスタントメッセージングシステムへのアクセスの取得を求める要求を記述したデータを要求側デバイスから送信するステップであって、アクセスの取得を求める前記要求は識別子を含む、ステップと、
前記要求内の前記識別子に基づきデータリポジトリからプラグインを識別するステップであって、前記プラグインは前記要求側デバイス上にインストールされているインスタントメッセージングアプリケーションを拡張するように適合される、ステップと、
を含むコンピュータ化された方法。
【請求項２】
前記識別子は、エンドユーザを記述したデータを含む請求項1に記載のコンピュータ化された方法。
【請求項３】
前記要求側デバイスで前記プラグインを記述したデータを受信するステップをさらに含む請求項1に記載のコンピュータ化された方法。
【請求項４】
前記プラグインを使用して前記インスタントメッセージングアプリケーションを拡張するステップをさらに含む請求項1に記載のコンピュータ化された方法。
【請求項５】
インスタントメッセージングセッション時に受信される前記プラグインは、前記インスタントメッセージングセッションが終了するまでの間、前記インスタントメッセージングアプリケーションを拡張する請求項1に記載のコンピュータ化された方法。
【請求項６】
インスタントメッセージングアプリケーションにおいて実装されているメッセージ伝送チャネルに関連して1つまたは複数のデバイスによって開始されるメッセージを記述したデータへのアクセスを求める要求側デバイスからの要求を記述したデータを受信するステップであって、前記要求は識別子を含む、ステップと、
前記要求内の前記識別子に基づきデータリポジトリからプラグインを識別するステップであって、前記プラグインは前記要求側デバイス上にインストールされている前記インスタントメッセージングアプリケーションを拡張するように適合される、ステップと、
を含むコンピュータ化された方法。
【請求項７】
前記要求は、相手パーティデバイスによって開始されたメッセージを記述したデータの受信を求める要求であり、前記相手パーティデバイスによって開始される前記メッセージを記述した前記データは、相手パーティ識別子に関連付けられている請求項6に記載のコンピュータ化された方法。
【請求項８】
前記識別子は、相手パーティを記述したデータを含む請求項6に記載のコンピュータ化された方法。
【請求項９】
前記識別子は、前記メッセージ伝送チャネルに関連付けられているアドレスを記述したデータを含む請求項6に記載のコンピュータ化された方法。
【請求項１０】
前記識別子は、前記要求側デバイスのユーザを記述したデータを含む請求項6に記載のコンピュータ化された方法。
【請求項１１】
前記識別子は、前記インスタントメッセージングアプリケーションを実行する前記要求側デバイスを記述したデータを含む請求項6に記載のコンピュータ化された方法。
【請求項１２】
前記要求側デバイスにおける前記プラグインを記述したデータを受信するステップをさらに含む請求項6に記載のコンピュータ化された方法。
【請求項１３】
前記プラグインを使用して前記インスタントメッセージングアプリケーションを拡張するステップをさらに含む請求項6に記載のコンピュータ化された方法。
【請求項１４】
前記プラグインは、前記メッセージ伝送チャネルと関連して前記1つまたは複数のデバイスによって開始されたメッセージを記述したデータへのアクセスが終了するまでの間、前記インスタントメッセージングアプリケーションを拡張する請求項6に記載のコンピュータ化された方法。
【請求項１５】
少なくとも1つのプログラムを記憶するように各々動作可能である1つまたは複数のメモリユニットと、
前記1つまたは複数のメモリユニットに通信可能に結合されている少なくとも1つのプロセッサであって、前記少なくとも1つのプログラムは、前記少なくとも1つのプロセッサによって実行されたときに、前記少なくとも1つのプロセッサに方法を実行させ、前記方法は、
インスタントメッセージングアプリケーションにおいて実装されているメッセージ伝送チャネルに関連して1つまたは複数のデバイスによって開始されるメッセージを記述したデータへのアクセスを求める要求側デバイスからの要求を記述したデータを受信するステップであって、前記要求は識別子を含む、ステップと、
前記要求内の前記識別子に基づきデータリポジトリからプラグインを識別するステップであって、前記プラグインは前記要求側デバイス上にインストールされている前記インスタントメッセージングアプリケーションを拡張するように適合される、ステップと、
を含む、少なくとも1つのプロセッサと、
を備えるシステム。
【請求項１６】
コンピュータ実行可能命令が記憶されている非一時的コンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令はプロセッサによって実行されたときに方法を実行し、前記方法は、
インスタントメッセージングシステムへのアクセスの取得を求める要求を記述したデータを要求側デバイスから受信するステップであって、アクセスの取得を求める前記要求は識別子を含む、ステップと、
前記要求内の前記識別子に基づきデータリポジトリからプラグインを識別するステップであって、前記プラグインは前記要求側デバイス上にインストールされているインスタントメッセージングアプリケーションを拡張するように適合される、ステップと、
を含む、非一時的コンピュータ可読記憶媒体。
【請求項１７】
少なくとも1つのプログラムを記憶するように各々動作可能である1つまたは複数のメモリユニットと、
前記1つまたは複数のメモリユニットに通信可能に結合されている少なくとも1つのプロセッサであって、前記少なくとも1つのプログラムは、前記少なくとも1つのプロセッサによって実行されたときに、前記少なくとも1つのプロセッサに方法を実行させ、前記方法は、
インスタントメッセージングアプリケーションにおいて実装されているメッセージ伝送チャネルに関連して1つまたは複数のデバイスによって開始されるメッセージを記述したデータへのアクセスを求める要求側デバイスからの要求を記述したデータを受信するステップであって、前記要求は識別子を含む、ステップと、
前記要求内の前記識別子に基づきデータリポジトリからプラグインを識別するステップであって、前記プラグインは前記要求側デバイス上にインストールされている前記インスタントメッセージングアプリケーションを拡張するように適合される、ステップと、
を含む、少なくとも1つのプロセッサと、
を備えるシステム。
【請求項１８】
コンピュータ実行可能命令が記憶されている非一時的コンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令はプロセッサによって実行されたときに方法を実行し、前記方法は、
インスタントメッセージングアプリケーションにおいて実装されているメッセージ伝送チャネルに関連して1つまたは複数のデバイスによって開始されるメッセージを記述したデータへのアクセスを求める要求側デバイスからの要求を記述したデータを受信するステップであって、前記要求は識別子を含む、ステップと、
前記要求内の前記識別子に基づきデータリポジトリからプラグインを識別するステップであって、前記プラグインは前記要求側デバイス上にインストールされている前記インスタントメッセージングアプリケーションを拡張するように適合される、ステップと、
を含む、非一時的コンピュータ可読記憶媒体。
【請求項１９】
要求側デバイスから、インスタントメッセージングシステムへのアクセスの取得を求める要求を記述したデータを送信するステップであって、アクセスの取得を求める前記要求は識別子を含む、ステップと、
前記要求側デバイスにおいて、前記要求内の前記識別子に基づきデータリポジトリから識別されたプラグインを受信するステップと、
前記プラグインに基づき前記要求側デバイス上にインストールされているインスタントメッセージングアプリケーションを拡張するステップと、
を含むコンピュータ化された方法。
【請求項２０】
前記識別子は、エンドユーザを記述したデータを含む請求項19に記載のコンピュータ化された方法。
【請求項２１】
インスタントメッセージングセッション時に受信される前記プラグインは、前記インスタントメッセージングセッションが終了するまでの間、前記インスタントメッセージングアプリケーションを拡張する請求項19に記載のコンピュータ化された方法。
【請求項２２】
要求側デバイスから、インスタントメッセージングアプリケーションにおいて実装されているメッセージ伝送チャネルに関連して1つまたは複数のデバイスによって開始されるメッセージを記述したデータへのアクセスを求める要求を記述したデータを送信するステップであって、前記要求は識別子を含む、ステップと、
前記要求側デバイスにおいて、前記要求内の前記識別子に基づきデータリポジトリから識別されたプラグインを受信するステップと、
前記要求側デバイスにおいて、前記要求側デバイス上にインストールされている前記インスタントメッセージングアプリケーションを拡張するステップと、
を含むコンピュータ化された方法。
【請求項２３】
前記要求は、相手パーティデバイスによって開始されたメッセージを記述したデータの受信を求める要求であり、前記相手パーティデバイスによって開始される前記メッセージを記述した前記データは、相手パーティ識別子に関連付けられている請求項22に記載のコンピュータ化された方法。
【請求項２４】
前記識別子は、相手パーティを記述したデータを含む請求項22に記載のコンピュータ化された方法。
【請求項２５】
前記識別子は、前記メッセージ伝送チャネルに関連付けられているアドレスを記述したデータを含む請求項22に記載のコンピュータ化された方法。
【請求項２６】
前記識別子は、前記要求側デバイスのユーザを記述したデータを含む請求項22に記載のコンピュータ化された方法。
【請求項２７】
前記識別子は、前記インスタントメッセージングアプリケーションを実行する前記要求側デバイスを記述したデータを含む請求項22に記載のコンピュータ化された方法。
【請求項２８】
前記プラグインは、前記メッセージ伝送チャネルと関連して前記1つまたは複数のデバイスによって開始されたメッセージを記述したデータへのアクセスが終了するまでの間、前記インスタントメッセージングアプリケーションを拡張する請求項22に記載のコンピュータ化された方法。
【請求項２９】
少なくとも1つのプログラムを記憶するように各々動作可能である1つまたは複数のメモリユニットと、
前記1つまたは複数のメモリユニットに通信可能に結合されている少なくとも1つのプロセッサであって、前記少なくとも1つのプログラムは、前記少なくとも1つのプロセッサによって実行されたときに、前記少なくとも1つのプロセッサに方法を実行させ、前記方法は、
要求側デバイスから、インスタントメッセージングシステムへのアクセスの取得を求める要求を記述したデータを送信するステップであって、アクセスの取得を求める前記要求は識別子を含む、ステップと、
前記要求側デバイスにおいて、前記要求内の前記識別子に基づきデータリポジトリから識別されたプラグインを受信するステップと、
前記プラグインに基づき前記要求側デバイス上にインストールされているインスタントメッセージングアプリケーションを拡張するステップと、
を含む、少なくとも1つのプロセッサと、
を備えるシステム。
【請求項３０】
コンピュータ実行可能命令が記憶されている非一時的コンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令はプロセッサによって実行されたときに方法を実行し、前記方法は、
要求側デバイスから、インスタントメッセージングシステムへのアクセスの取得を求める要求を記述したデータを送信するステップであって、アクセスの取得を求める前記要求は識別子を含む、ステップと、
前記要求側デバイスにおいて、前記要求内の前記識別子に基づきデータリポジトリから識別されたプラグインを受信するステップと、
前記プラグインに基づき前記要求側デバイス上にインストールされているインスタントメッセージングアプリケーションを拡張するステップと、
を含む、非一時的コンピュータ可読記憶媒体。
【請求項３１】
少なくとも1つのプログラムを記憶するように各々動作可能である1つまたは複数のメモリユニットと、
前記1つまたは複数のメモリユニットに通信可能に結合されている少なくとも1つのプロセッサであって、前記少なくとも1つのプログラムは、前記少なくとも1つのプロセッサによって実行されたときに、前記少なくとも1つのプロセッサに方法を実行させ、前記方法は、
要求側デバイスから、インスタントメッセージングアプリケーションにおいて実装されているメッセージ伝送チャネルに関連して1つまたは複数のデバイスによって開始されるメッセージを記述したデータへのアクセスを求める要求を記述したデータを送信するステップであって、前記要求は識別子を含む、ステップと、
前記要求側デバイスにおいて、前記要求内の前記識別子に基づきデータリポジトリから識別されたプラグインを受信するステップと、
前記要求側デバイスにおいて、前記要求側デバイス上にインストールされている前記インスタントメッセージングアプリケーションを拡張するステップと、
を含む、少なくとも1つのプロセッサと、
を備えるシステム。
【請求項３２】
コンピュータ実行可能命令が記憶されている非一時的コンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令はプロセッサによって実行されたときに方法を実行し、前記方法は、
要求側デバイスから、インスタントメッセージングアプリケーションにおいて実装されているメッセージ伝送チャネルに関連して1つまたは複数のデバイスによって開始されるメッセージを記述したデータへのアクセスを求める要求を記述したデータを送信するステップであって、前記要求は識別子を含む、ステップと、
前記要求側デバイスにおいて、前記要求内の前記識別子に基づきデータリポジトリから識別されたプラグインを受信するステップと、
前記要求側デバイスにおいて、前記要求側デバイス上にインストールされている前記インスタントメッセージングアプリケーションを拡張するステップと、
を含む、非一時的コンピュータ可読記憶媒体。
【請求項３３】
要求側デバイスから、データリポジトリからインスタントメッセージングアプリケーションに関連付けられているプラグインを取り出すことを求める要求を記述したデータを受信するステップと、
前記要求側デバイスに、前記プラグインを記述したデータを送信するステップと、
を含み、
前記プラグインは、前記インスタントメッセージングアプリケーションのユーザ、会話へのパーティ、会話、会話タイプ、会話メンバー、およびインスタントメッセージングバックエンドシステムのうちの少なくとも1つのもののコンテキストに従って前記インスタントメッセージングアプリケーションを拡張するように構成されるコンピュータ化された方法。
【請求項３４】
前記プラグインは、前記インスタントメッセージングアプリケーションに関連してメッセージを処理するために採用されているインスタントメッセージングバックエンドシステムの識別情報に基づき前記インスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによって前記インスタントメッセージングアプリケーションを拡張するように構成される請求項33に記載の方法。
【請求項３５】
前記要求は、前記インスタントメッセージバックエンドシステムの識別子を含む請求項33に記載の方法。
【請求項３６】
前記プラグインは、前記インスタントメッセージングアプリケーションのユーザの識別情報に基づき送信または受信される少なくともいくつかのメッセージを拡張することによって前記インスタントメッセージングアプリケーションを拡張するように構成される請求項33に記載の方法。
【請求項３７】
前記要求は、前記インスタントメッセージングアプリケーションの前記ユーザの識別子を含む請求項33に記載の方法。
【請求項３８】
前記プラグインは、会話タイプに基づき前記インスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによって前記インスタントメッセージングアプリケーションを拡張するように構成される請求項33に記載の方法。
【請求項３９】
前記要求は、会話タイプ識別子を含む請求項33に記載の方法。
【請求項４０】
会話タイプは、一対一会話、非永続的マルチパーティ会話、または永続的マルチパーティ会話のうちの1つである請求項33に記載の方法。
【請求項４１】
前記プラグインは、永続的マルチパーティ会話の識別情報に基づき前記インスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによって前記インスタントメッセージングアプリケーションを拡張するように構成される請求項33に記載の方法。
【請求項４２】
前記要求は、永続的マルチパーティ会話識別子を含む請求項33に記載の方法。
【請求項４３】
前記プラグインは、永続的マルチパーティ会話のパーティに対して、前記識別された永続的マルチパーティ会話内の前記パーティのメンバーシップロールに基づき、前記インスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによって前記インスタントメッセージングアプリケーションを拡張するように構成される請求項33に記載の方法。
【請求項４４】
前記要求は、永続的マルチパーティ会話メンバーシップ識別子を含む請求項33に記載の方法。
【請求項４５】
前記プラグインは、会話内の相手パーティから前記インスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによって前記インスタントメッセージングアプリケーションを拡張するように構成される請求項33に記載の方法。
【請求項４６】
前記要求は、前記会話内の前記相手パーティに関連付けられている相手パーティ識別子を含む請求項33に記載の方法。
【請求項４７】
前記要求は、前記会話内の前記インスタントメッセージングアプリケーションの前記ユーザの識別子を含む請求項33に記載の方法。
【請求項４８】
少なくとも1つのプログラムを記憶するように各々動作可能である1つまたは複数のメモリユニットと、
前記1つまたは複数のメモリユニットに通信可能に結合されている少なくとも1つのプロセッサであって、前記少なくとも1つのプログラムは、前記少なくとも1つのプロセッサによって実行されたときに、前記少なくとも1つのプロセッサに方法を実行させ、前記方法は、
要求側デバイスから、データリポジトリからインスタントメッセージングアプリケーションに関連付けられているプラグインを取り出すことを求める要求を記述したデータを受信するステップと、
前記要求側デバイスに、前記プラグインを記述したデータを送信するステップと、
を含む、少なくとも1つのプロセッサと、
を備え、
前記プラグインは、前記インスタントメッセージングアプリケーションのユーザ、会話へのパーティ、会話、会話タイプ、会話メンバー、およびインスタントメッセージングバックエンドシステムのうちの少なくとも1つのもののコンテキストに従って前記インスタントメッセージングアプリケーションを拡張するように構成されるシステム。
【請求項４９】
コンピュータ実行可能命令が記憶されている非一時的コンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令はプロセッサによって実行されたときに方法を実行し、前記方法は、
要求側デバイスから、データリポジトリからインスタントメッセージングアプリケーションに関連付けられているプラグインを取り出すことを求める要求を記述したデータを受信するステップと、
前記要求側デバイスに、前記プラグインを記述したデータを送信するステップと、
を含み、
前記プラグインは、前記インスタントメッセージングアプリケーションのユーザ、会話へのパーティ、会話、会話タイプ、会話メンバー、およびインスタントメッセージングバックエンドシステムのうちの少なくとも1つのもののコンテキストに従って前記インスタントメッセージングアプリケーションを拡張するように構成される、非一時的コンピュータ可読記憶媒体。
【請求項５０】
要求側デバイスから、データリポジトリから前記要求側デバイス上で実行されているインスタントメッセージングアプリケーションに関連付けられているプラグインを取り出すことを求める要求を記述したデータを送信するステップと、
前記要求側デバイスで、前記プラグインを記述したデータを受信するステップと、
を含み、
前記プラグインは、前記インスタントメッセージングアプリケーションのユーザ、会話へのパーティ、会話、会話タイプ、会話メンバー、およびインスタントメッセージングバックエンドシステムのうちの少なくとも1つのもののコンテキストに従って前記インスタントメッセージングアプリケーションを拡張するように構成されるコンピュータ化された方法。
【請求項５１】
前記プラグインは、前記インスタントメッセージングアプリケーションに関連してメッセージを処理するために採用されているインスタントメッセージングバックエンドシステムの識別情報に基づき前記インスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによって前記インスタントメッセージングアプリケーションを拡張するように構成される請求項50に記載の方法。
【請求項５２】
前記要求は、前記インスタントメッセージバックエンドシステムの識別子を含む請求項50に記載の方法。
【請求項５３】
前記プラグインは、前記インスタントメッセージングアプリケーションのユーザの識別情報に基づき送信または受信される少なくともいくつかのメッセージを拡張することによって前記インスタントメッセージングアプリケーションを拡張するように構成される請求項50に記載の方法。
【請求項５４】
前記要求は、前記インスタントメッセージングアプリケーションの前記ユーザの識別子を含む請求項50に記載の方法。
【請求項５５】
前記プラグインは、会話タイプに基づき前記インスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによって前記インスタントメッセージングアプリケーションを拡張するように構成される請求項50に記載の方法。
【請求項５６】
前記要求は、会話タイプ識別子を含む請求項50に記載の方法。
【請求項５７】
会話タイプは、一対一会話、非永続的マルチパーティ会話、または永続的マルチパーティ会話のうちの1つである請求項50に記載の方法。
【請求項５８】
前記プラグインは、永続的マルチパーティ会話の識別情報に基づき前記インスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによって前記インスタントメッセージングアプリケーションを拡張するように構成される請求項50に記載の方法。
【請求項５９】
前記要求は、永続的マルチパーティ会話識別子を含む請求項50に記載の方法。
【請求項６０】
前記プラグインは、永続的マルチパーティ会話のパーティに対して、前記識別された永続的マルチパーティ会話内の前記パーティのメンバーシップロールに基づき、前記インスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによって前記インスタントメッセージングアプリケーションを拡張するように構成される請求項50に記載の方法。
【請求項６１】
前記要求は、永続的マルチパーティ会話メンバーシップ識別子を含む請求項50に記載の方法。
【請求項６２】
前記プラグインは、会話内の相手パーティから前記インスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによって前記インスタントメッセージングアプリケーションを拡張するように構成される請求項50に記載の方法。
【請求項６３】
前記要求は、前記会話内の前記相手パーティに関連付けられている相手パーティ識別子を含む請求項50に記載の方法。
【請求項６４】
前記要求は、前記会話内の前記インスタントメッセージングアプリケーションの前記ユーザの識別子を含む請求項50に記載の方法。
【請求項６５】
少なくとも1つのプログラムを記憶するように各々動作可能である1つまたは複数のメモリユニットと、
前記1つまたは複数のメモリユニットに通信可能に結合されている少なくとも1つのプロセッサであって、前記少なくとも1つのプログラムは、前記少なくとも1つのプロセッサによって実行されたときに、前記少なくとも1つのプロセッサに方法を実行させ、前記方法は、
要求側デバイスから、データリポジトリから前記要求側デバイス上で実行されているインスタントメッセージングアプリケーションに関連付けられているプラグインを取り出すことを求める要求を記述したデータを送信するステップと、
前記要求側デバイスにおいて、前記プラグインを記述したデータを受信するステップと、
を含む、少なくとも1つのプロセッサと、
を備え、
前記プラグインは、前記インスタントメッセージングアプリケーションのユーザ、会話へのパーティ、会話、会話タイプ、会話メンバー、およびインスタントメッセージングバックエンドシステムのうちの少なくとも1つのもののコンテキストに従って前記インスタントメッセージングアプリケーションを拡張するように構成されるシステム。
【請求項６６】
コンピュータ実行可能命令が記憶されている非一時的コンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令はプロセッサによって実行されたときに方法を実行し、前記方法は、
要求側デバイスから、データリポジトリから前記要求側デバイス上で実行されているインスタントメッセージングアプリケーションに関連付けられているプラグインを取り出すことを求める要求を記述したデータを送信するステップと、
前記要求側デバイスにおいて、前記プラグインを記述したデータを受信するステップと、
を含み、
前記プラグインは、前記インスタントメッセージングアプリケーションのユーザ、会話へのパーティ、会話、会話タイプ、会話メンバー、およびインスタントメッセージングバックエンドシステムのうちの少なくとも1つのもののコンテキストに従って前記インスタントメッセージングアプリケーションを拡張するように構成される、非一時的コンピュータ可読記憶媒体。
【請求項６７】
要求側デバイスから、インスタントメッセージングアプリケーションを使用して会話に関連付けられているプラグインをデータリポジトリから取り出すことを求める要求を記述したデータを受信するステップと、
前記要求側デバイスに、前記プラグインを記述したデータを送信するステップと、
を含み、
前記プラグインは、前記会話内の相手パーティの識別情報に基づき前記インスタントメッセージングアプリケーションを拡張するように構成されるコンピュータ化された方法。
【請求項６８】
前記プラグインは、前記会話内で前記インスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによって前記インスタントメッセージングアプリケーションを拡張するように構成される請求項67に記載の方法。
【請求項６９】
前記プラグインをダウンロードすることを求める前記要求は、前記相手パーティに関連付けられている相手パーティ識別子を含む請求項67に記載の方法。
【請求項７０】
前記プラグインをダウンロードすることを求める前記要求は、前記インスタントメッセージングアプリケーションのユーザに関連付けられている識別子を含む請求項67に記載の方法。
【請求項７１】
少なくとも1つのプログラムを記憶するように各々動作可能である1つまたは複数のメモリユニットと、
前記1つまたは複数のメモリユニットに通信可能に結合されている少なくとも1つのプロセッサであって、前記少なくとも1つのプログラムは、前記少なくとも1つのプロセッサによって実行されたときに、前記少なくとも1つのプロセッサに方法を実行させ、前記方法は、
要求側デバイスから、インスタントメッセージングアプリケーションを使用して会話に関連付けられているプラグインをデータリポジトリから取り出すことを求める要求を記述したデータを受信するステップと、
前記要求側デバイスに、前記プラグインを記述したデータを送信するステップと、
を含む、少なくとも1つのプロセッサと、
を備え、
前記プラグインは、前記会話内の相手パーティの識別情報に基づき前記インスタントメッセージングアプリケーションを拡張するように構成されるシステム。
【請求項７２】
コンピュータ実行可能命令が記憶されている非一時的コンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令はプロセッサによって実行されたときに方法を実行し、前記方法は、
要求側デバイスから、インスタントメッセージングアプリケーションを使用して会話に関連付けられているプラグインをデータリポジトリから取り出すことを求める要求を記述したデータを受信するステップと、
前記要求側デバイスに、前記プラグインを記述したデータを送信するステップと、
を含み、
前記プラグインは、前記会話内の相手パーティの識別情報に基づき前記インスタントメッセージングアプリケーションを拡張するように構成される、非一時的コンピュータ可読記憶媒体。
【請求項７３】
要求側デバイスから、データリポジトリからのインスタントメッセージングアプリケーションを使用して会話に関連付けられているプラグインを前記データリポジトリから取り出すことを求める要求を記述したデータを送信するステップと、
前記要求側デバイスにおいて、前記プラグインを記述したデータを受信するステップと、
を含み、
前記プラグインは、前記会話内の相手パーティの識別情報に基づき前記インスタントメッセージングアプリケーションを拡張するように構成されるコンピュータ化された方法。
【請求項７４】
前記プラグインは、前記会話内で前記インスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによって前記インスタントメッセージングアプリケーションを拡張するように構成される請求項73に記載の方法。
【請求項７５】
前記プラグインをダウンロードすることを求める前記要求は、前記相手パーティに関連付けられている相手パーティ識別子を含む請求項73に記載の方法。
【請求項７６】
前記プラグインをダウンロードすることを求める前記要求は、前記インスタントメッセージングアプリケーションのユーザに関連付けられている識別子を含む請求項73に記載の方法。
【請求項７７】
少なくとも1つのプログラムを記憶するように各々動作可能である1つまたは複数のメモリユニットと、
前記1つまたは複数のメモリユニットに通信可能に結合されている少なくとも1つのプロセッサであって、前記少なくとも1つのプログラムは、前記少なくとも1つのプロセッサによって実行されたときに、前記少なくとも1つのプロセッサに方法を実行させ、前記方法は、
要求側デバイスから、データリポジトリからのインスタントメッセージングアプリケーションを使用して会話に関連付けられているプラグインを前記データリポジトリから取り出すことを求める要求を記述したデータを送信するステップと、
前記要求側デバイスにおいて、前記プラグインを記述したデータを受信するステップと、
を含む、少なくとも1つのプロセッサと、
を備え、
前記プラグインは、前記会話内の相手パーティの識別情報に基づき前記インスタントメッセージングアプリケーションを拡張するように構成されるシステム。
【請求項７８】
コンピュータ実行可能命令が記憶されている非一時的コンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令はプロセッサによって実行されたときに方法を実行し、前記方法は、
要求側デバイスから、データリポジトリからのインスタントメッセージングアプリケーションを使用して会話に関連付けられているプラグインを前記データリポジトリから取り出すことを求める要求を記述したデータを送信するステップと、
前記要求側デバイスにおいて、前記プラグインを記述したデータを受信するステップと、
を含み、
前記プラグインは、前記会話内の相手パーティの識別情報に基づき前記インスタントメッセージングアプリケーションを拡張するように構成される、非一時的コンピュータ可読記憶媒体。
【請求項７９】
デバイスから、データリポジトリ内のインスタントメッセージを記述したデータを取り出すことを求める要求を記述したデータを受信するステップと、
レコードを記述したデータを前記データリポジトリから取り出すステップであって、前記レコードは前記インスタントメッセージと編集インジケータとを記述した前記データを含む、ステップと、
インスタントメッセージを記述した前記データを編集するかどうかを、前記編集インジケータに基づき決定するステップと、
前記インスタントメッセージを記述したデータを、前記インスタントメッセージが編集されたインスタントメッセージであることを前記編集インジケータが指示する場合に編集された状態で前記デバイスに送信し、前記インスタントメッセージが未編集メッセージであることを前記編集インジケータが指示する場合に未編集状態で前記インスタントメッセージを記述したデータを前記デバイスに送信するステップと、
を含むコンピュータ化された方法。
【請求項８０】
前記編集インジケータが、前記メッセージが編集されたメッセージであることを指示する場合に、前記インスタントメッセージの少なくとも一部は、前記インスタントメッセージを記述したデータを前記デバイスに送信する前に編集される請求項79に記載の方法。
【請求項８１】
前記編集インジケータが、前記メッセージが未編集メッセージであることを指示する場合に、前記インスタントメッセージのどの部分も、前記インスタントメッセージを記述したデータを前記デバイスに送信する前に編集されない請求項79に記載の方法。
【請求項８２】
前記データリポジトリは、複数のレコードを記述したデータを含み、前記複数のレコードの各々はインスタントメッセージおよび編集インジケータを含む請求項79に記載の方法。
【請求項８３】
前記編集インジケータの各々は、前記インスタントメッセージのうちのただ1つに対応する請求項79に記載の方法。
【請求項８４】
前記編集インジケータは、前記インスタントメッセージの少なくとも一部を編集するために使用される文字オフセットおよび文字長を含む請求項79に記載の方法。
【請求項８５】
少なくとも1つのプログラムを記憶するように各々動作可能である1つまたは複数のメモリユニットと、
前記1つまたは複数のメモリユニットに通信可能に結合されている少なくとも1つのプロセッサであって、前記少なくとも1つのプログラムは、前記少なくとも1つのプロセッサによって実行されたときに、前記少なくとも1つのプロセッサに方法を実行させ、前記方法は、
デバイスから、データリポジトリ内のインスタントメッセージを記述したデータを取り出すことを求める要求を記述したデータを受信するステップと、
レコードを記述したデータを前記データリポジトリから取り出すステップであって、前記レコードは前記インスタントメッセージと編集インジケータとを記述した前記データを含む、ステップと、
インスタントメッセージを記述した前記データを編集するかどうかを、前記編集インジケータに基づき決定するステップと、
前記インスタントメッセージを記述したデータを、前記インスタントメッセージが編集されたインスタントメッセージであることを前記編集インジケータが指示する場合に編集された状態で前記デバイスに送信し、前記インスタントメッセージが未編集メッセージであることを前記編集インジケータが指示する場合に未編集状態で前記インスタントメッセージを記述したデータを前記デバイスに送信するステップと、
を含む、少なくとも1つのプロセッサと、
を備えるシステム。
【請求項８６】
コンピュータ実行可能命令が記憶されている非一時的コンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令はプロセッサによって実行されたときに方法を実行し、前記方法は、
デバイスから、データリポジトリ内のインスタントメッセージを記述したデータを取り出すことを求める要求を記述したデータを受信するステップと、
レコードを記述したデータを前記データリポジトリから取り出すステップであって、前記レコードは前記インスタントメッセージと編集インジケータとを記述した前記データを含む、ステップと、
インスタントメッセージを記述した前記データを編集するかどうかを、前記編集インジケータに基づき決定するステップと、
前記インスタントメッセージを記述したデータを、前記インスタントメッセージが編集されたインスタントメッセージであることを前記編集インジケータが指示する場合に編集された状態で前記デバイスに送信し、前記インスタントメッセージが未編集メッセージであることを前記編集インジケータが指示する場合に未編集状態で前記インスタントメッセージを記述したデータを前記デバイスに送信するステップと、
を含む、非一時的コンピュータ可読記憶媒体。
【請求項８７】
インスタントメッセージを記述したデータを受信するステップであって、前記インスタントメッセージはメタ識別子を含む、ステップと、
前記インスタントメッセージを処理し、送信するためにインスタントメッセージバックエンドシステムを識別するステップであって、前記インスタントメッセージバックエンドシステムはインスタントメッセージバックエンドシステム識別子に関連付けられ、識別する前記ステップは、前記インスタントメッセージに付属する前記メタ識別子が前記インスタントメッセージバックエンドシステムに関連付けられている前記インスタントメッセージバックエンドシステム識別子に対応しているかどうかを決定するステップを含む、ステップと、
前記インスタントメッセージを準拠インスタントメッセージに変換するステップであって、前記準拠インスタントメッセージは前記インスタントメッセージバックエンドシステムに準拠している、ステップと、
前記準拠インスタントメッセージを記述したデータを前記インスタントメッセージバックエンドシステムに送信するステップと、
を含むコンピュータ化された方法。
【請求項８８】
前記メタ識別子は、会話メタ識別子を含む請求項87に記載の方法。
【請求項８９】
前記インスタントメッセージバックエンドシステム識別子は、前記インスタントメッセージバックエンドシステムによってホストされた会話を識別するインスタントメッセージバックエンドシステム会話識別子を含む請求項87に記載の方法。
【請求項９０】
前記メタ識別子は、ユーザメタ識別子を含む請求項87に記載の方法。
【請求項９１】
前記インスタントメッセージバックエンドシステム識別子は、前記インスタントメッセージバックエンドシステムを使用してメッセージを交換することを許可されているユーザを識別するインスタントメッセージバックエンドシステムユーザ識別子を含む請求項87に記載の方法。
【請求項９２】
前記メタ識別子は、第1のユーザを識別する第1のユーザメタ識別子および第2のユーザを識別する第2のユーザメタ識別子に対応し、前記インスタントメッセージバックエンドシステム識別子は、前記第1のユーザを識別する第1のインスタントメッセージバックエンドシステムユーザ識別子および前記第2のユーザを識別する第2のインスタントメッセージバックエンドシステムユーザ識別子に対応する請求項87に記載の方法。
【請求項９３】
前記メタ識別子は、ユーザメタ識別子および会話メタ識別子に対応し、前記インスタントメッセージバックエンドシステム識別子は、前記インスタントメッセージバックエンドシステムを使用してメッセージを交換することができるユーザを識別するインスタントメッセージバックエンドシステムユーザ識別子および前記インスタントメッセージバックエンドシステムによってホストされる会話を識別するインスタントメッセージバックエンドシステム会話識別子に対応する請求項87に記載の方法。
【請求項９４】
少なくとも1つのプログラムを記憶するように各々動作可能である1つまたは複数のメモリユニットと、
前記1つまたは複数のメモリユニットに通信可能に結合されている少なくとも1つのプロセッサであって、前記少なくとも1つのプログラムは、前記少なくとも1つのプロセッサによって実行されたときに、前記少なくとも1つのプロセッサに方法を実行させ、前記方法は、
インスタントメッセージを記述したデータを受信するステップであって、前記インスタントメッセージはメタ識別子を含む、ステップと、
前記インスタントメッセージを処理し、送信するためにインスタントメッセージバックエンドシステムを識別するステップであって、前記インスタントメッセージバックエンドシステムはインスタントメッセージバックエンドシステム識別子に関連付けられ、識別する前記ステップは、前記インスタントメッセージに付属する前記メタ識別子が前記インスタントメッセージバックエンドシステムに関連付けられている前記インスタントメッセージバックエンドシステム識別子に対応しているかどうかを決定するステップを含む、ステップと、
前記インスタントメッセージを準拠インスタントメッセージに変換するステップであって、前記準拠インスタントメッセージは前記インスタントメッセージバックエンドシステムに準拠している、ステップと、
前記準拠インスタントメッセージを記述したデータを前記インスタントメッセージバックエンドシステムに送信するステップと、
を含む、少なくとも1つのプロセッサと、
を備えるシステム。
【請求項９５】
コンピュータ実行可能命令が記憶されている非一時的コンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令はプロセッサによって実行されたときに方法を実行し、前記方法は、
インスタントメッセージを記述したデータを受信するステップであって、前記インスタントメッセージはメタ識別子を含む、ステップと、
前記インスタントメッセージを処理し、送信するためにインスタントメッセージバックエンドシステムを識別するステップであって、前記インスタントメッセージバックエンドシステムはインスタントメッセージバックエンドシステム識別子に関連付けられ、識別する前記ステップは、前記インスタントメッセージに付属する前記メタ識別子が前記インスタントメッセージバックエンドシステムに関連付けられている前記インスタントメッセージバックエンドシステム識別子に対応しているかどうかを決定するステップを含む、ステップと、
前記インスタントメッセージを準拠インスタントメッセージに変換するステップであって、前記準拠インスタントメッセージは前記インスタントメッセージバックエンドシステムに準拠している、ステップと、
前記準拠インスタントメッセージを記述したデータを前記インスタントメッセージバックエンドシステムに送信するステップと、
を含む、非一時的コンピュータ可読記憶媒体。
【請求項９６】
第1のインスタントメッセージバックエンドシステムからインスタントメッセージング会話を第2のインスタントメッセージバックエンドシステムに転送することを求める要求を記述したデータを受信するステップと、
前記インスタントメッセージ会話を前記第1のインスタントメッセージバックエンドシステムから前記第2のインスタントメッセージバックエンドシステムに転送するステップと、
前記インスタントメッセージング会話に関連付けられているメッセージを前記第2のインスタントメッセージバックエンドシステムに送信するステップと、
を含むコンピュータ化された方法。
【請求項９７】
前記転送するステップの前に、前記インスタントメッセージ会話の各パーティのメタ識別子は、前記第2のインスタントメッセージバックエンドシステムに対するインスタントメッセージバックエンドユーザ識別子に関連付けられていると決定するステップをさらに含む請求項96に記載の方法。
【請求項９８】
前記転送するステップの前に、前記インスタントメッセージ会話は、前記第2のインスタントメッセージバックエンドシステム上でホストされることが可能であると決定するステップをさらに含む請求項96に記載の方法。
【請求項９９】
前記第1のインスタントメッセージバックエンドシステム上の前記インスタントメッセージ会話は、データリポジトリ内に対応する第1の会話インスタンスを有し、
前記データリポジトリ内に第2の会話インスタンスを作成するステップであって、前記第2の会話インスタンスは前記第2のインスタントメッセージバックエンドシステム上の前記インスタントメッセージ会話に対応する、ステップ
をさらに含む請求項96に記載の方法。
【請求項１００】
少なくとも1つのプログラムを記憶するように各々動作可能である1つまたは複数のメモリユニットと、
前記1つまたは複数のメモリユニットに通信可能に結合されている少なくとも1つのプロセッサであって、前記少なくとも1つのプログラムは、前記少なくとも1つのプロセッサによって実行されたときに、前記少なくとも1つのプロセッサに方法を実行させ、前記方法は、
第1のインスタントメッセージバックエンドシステムからインスタントメッセージング会話を第2のインスタントメッセージバックエンドシステムに転送することを求める要求を記述したデータを受信するステップと、
前記インスタントメッセージ会話を前記第1のインスタントメッセージバックエンドシステムから前記第2のインスタントメッセージバックエンドシステムに転送するステップと、
前記インスタントメッセージング会話に関連付けられているメッセージを前記第2のインスタントメッセージバックエンドシステムに送信するステップと、
を含む、少なくとも1つのプロセッサと、
を備えるシステム。
【請求項１０１】
コンピュータ実行可能命令が記憶されている非一時的コンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令はプロセッサによって実行されたときに方法を実行し、前記方法は、
第1のインスタントメッセージバックエンドシステムからインスタントメッセージング会話を第2のインスタントメッセージバックエンドシステムに転送することを求める要求を記述したデータを受信するステップと、
前記インスタントメッセージ会話を前記第1のインスタントメッセージバックエンドシステムから前記第2のインスタントメッセージバックエンドシステムに転送するステップと、
前記インスタントメッセージング会話に関連付けられているメッセージを前記第2のインスタントメッセージバックエンドシステムに送信するステップと、
を含む、非一時的コンピュータ可読記憶媒体。
【請求項１０２】
インスタントメッセージバックエンドシステムへの送信のためにクライアントデバイスのユーザインターフェースからメッセージを受信し、アプリケーションプロトコルを使用して前記メッセージをカプセル化し、前記カプセル化されたメッセージをメッセージングコアソフトウェアモジュールに送信するように構成されているコンテナソフトウェアモジュールと、
前記インスタントメッセージバックエンドシステムに対応するメッセージングプロトコルを使用して前記カプセル化されているメッセージをインスタントメッセージバックエンドシステム準拠メッセージにフォーマットし、前記インスタントメッセージバックエンドシステム準拠メッセージを前記インスタントメッセージバックエンドシステムに送信するように構成されている前記メッセージングコアソフトウェアモジュールと、
を備えるシステム。
【請求項１０３】
前記アプリケーションプロトコルは、ハイパーテキスト転送プロトコルを含む請求項102に記載のシステム。
【請求項１０４】
前記アプリケーションプロトコルは、CometDプロトコルを含む請求項102に記載のシステム。
【請求項１０５】
前記メッセージングコアソフトウェアモジュールは、前記インスタントメッセージバックエンドシステム準拠メッセージを送信する前に新しいメッセージ伝送チャネルを作成するように構成される請求項102に記載のシステム。
【請求項１０６】
前記メッセージングコアソフトウェアモジュールは、前記インスタントメッセージバックエンドシステム準拠メッセージを送信する前に既存のメッセージ伝送チャネルに接続するように構成される請求項102に記載のシステム。
【請求項１０７】
前記メッセージングコアソフトウェアモジュールおよび前記コンテナソフトウェアモジュールは、同じデバイス上で実行可能である請求項102に記載のシステム。
【請求項１０８】
前記メッセージングコアソフトウェアモジュールは、サーバ上で実行可能であり、前記コンテナソフトウェアモジュールは、前記サーバとは別のデバイス上で実行可能である請求項102に記載のシステム。
【請求項１０９】
コンテナソフトウェアモジュールを使用することで、インスタントメッセージバックエンドシステムへの送信のためにクライアントデバイスのユーザインターフェースからメッセージを受信するステップと、
前記コンテナソフトウェアモジュールを使用することで、アプリケーションプロトコルを使用して前記メッセージをカプセル化するステップと、
前記コンテナソフトウェアモジュールを使用することで、前記カプセル化されたメッセージをメッセージングコアソフトウェアモジュールに送信するステップと、
前記メッセージングコアソフトウェアモジュールを使用することで、前記カプセル化されたメッセージを前記インスタントメッセージバックエンドシステムに対応するメッセージングプロトコルを使用してインスタントメッセージバックエンドシステム準拠メッセージにフォーマットするステップと、
前記メッセージングコアソフトウェアモジュールを使用することで、前記インスタントメッセージバックエンドシステム準拠メッセージを前記インスタントメッセージバックエンドシステムに送信するステップと、
を含むコンピュータ化された方法。
【請求項１１０】
前記アプリケーションプロトコルは、ハイパーテキスト転送プロトコルを含む請求項109に記載の方法。
【請求項１１１】
前記アプリケーションプロトコルは、CometDプロトコルを含む請求項109に記載の方法。
【請求項１１２】
前記メッセージングコアソフトウェアモジュールを使用することで、前記メッセージングコアソフトウェアモジュールを使用して、前記インスタントメッセージバックエンドシステム準拠メッセージを送信する前に新しいメッセージ伝送チャネルを作成するステップをさらに含む請求項109に記載の方法。
【請求項１１３】
前記メッセージングコアソフトウェアモジュールを使用することで、前記メッセージングコアソフトウェアモジュールを使用して、前記インスタントメッセージバックエンドシステム準拠メッセージを送信する前に既存のメッセージ伝送チャネルに接続するステップをさらに含む請求項109に記載の方法。
【請求項１１４】
前記メッセージングコアソフトウェアモジュールおよび前記コンテナソフトウェアモジュールは、同じクライアントデバイス上で実行可能である請求項109に記載の方法。
【請求項１１５】
前記メッセージングコアソフトウェアモジュールは、サーバ上で実行可能であり、前記コンテナソフトウェアモジュールは、前記クライアントデバイス上で実行可能である請求項109に記載の方法。
【請求項１１６】
コンピュータ実行可能命令が記憶されている非一時的コンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令はプロセッサによって実行されたときに方法を実行し、前記方法は、
コンテナソフトウェアモジュールを使用することで、インスタントメッセージバックエンドシステムへの送信のためにクライアントデバイスのユーザインターフェースからメッセージを受信するステップと、
前記コンテナソフトウェアモジュールを使用することで、アプリケーションプロトコルを使用して前記メッセージをカプセル化するステップと、
前記コンテナソフトウェアモジュールを使用することで、前記カプセル化されたメッセージをメッセージングコアソフトウェアモジュールに送信するステップと、
前記メッセージングコアソフトウェアモジュールを使用することで、前記カプセル化されたメッセージを前記インスタントメッセージバックエンドシステムに対応するメッセージングプロトコルを使用してインスタントメッセージバックエンドシステム準拠メッセージにフォーマットするステップと、
前記メッセージングコアソフトウェアモジュールを使用することで、前記インスタントメッセージバックエンドシステム準拠メッセージを前記インスタントメッセージバックエンドシステムに送信するステップと、
を含む、非一時的コンピュータ可読記憶媒体。
【請求項１１７】
前記アプリケーションプロトコルは、ハイパーテキスト転送プロトコルを含む請求項116に記載の非一時的コンピュータ可読記憶媒体。
【請求項１１８】
前記アプリケーションプロトコルは、CometDプロトコルを含む請求項116に記載の非一時的コンピュータ可読記憶媒体。
【請求項１１９】
プロセッサによって実行されたときに方法を実行する命令をさらに含み、前記方法は、
前記メッセージングコアソフトウェアモジュールを使用することで、前記メッセージングコアソフトウェアモジュールを使用して、前記インスタントメッセージバックエンドシステム準拠メッセージを送信する前に新しいメッセージ伝送チャネルを作成するステップをさらに含む請求項116に記載の非一時的コンピュータ可読記憶媒体。
【請求項１２０】
プロセッサによって実行されたときに方法を実行する命令をさらに含み、前記方法は、
前記メッセージングコアソフトウェアモジュールを使用することで、前記メッセージングコアソフトウェアモジュールを使用して、前記インスタントメッセージバックエンドシステム準拠メッセージを送信する前に既存のメッセージ伝送チャネルに接続するステップをさらに含む請求項116に記載の非一時的コンピュータ可読記憶媒体。
【請求項１２１】
前記メッセージングコアソフトウェアモジュールおよび前記コンテナソフトウェアモジュールは、同じクライアントデバイス上で実行可能である請求項116に記載の非一時的コンピュータ可読記憶媒体。
【請求項１２２】
前記メッセージングコアソフトウェアモジュールは、サーバ上で実行可能であり、前記コンテナソフトウェアモジュールは、前記クライアントデバイス上で実行可能である請求項116に記載の非一時的コンピュータ可読記憶媒体。
【請求項１２３】
一対一会話に関連して送信される第1のメッセージ、マルチパーティ非永続的会話に関連して送信される第2のメッセージ、およびマルチパーティ永続的会話に関連して送信される第3のメッセージを受信するステップと、
前記第1のメッセージを前記一対一会話に関連付けられている相手パーティに、前記第2のメッセージを前記マルチパーティ非永続的会話に関連付けられている2人またはそれ以上のパーティに、前記第3のメッセージを、前記一対一会話、前記マルチパーティ非永続的会話、および前記マルチパーティ永続的会話のサブセットのみをホストするように構成されている単一のインスタントメッセージバックエンドシステムを使用して前記マルチパーティ永続的会話に関連付けられている2人またはそれ以上のパーティに送信するステップと、
を含むコンピュータ化された方法。
【請求項１２４】
前記第1のメッセージ、前記第2のメッセージ、および前記第3のメッセージは、データベースに記憶される請求項123に記載の方法。
【請求項１２５】
前記一対一会話に関連付けられている前記第1のメッセージは、i)前記一対一会話を提供するインスタントメッセージサービスのリスタートまたはii)前記一対一会話からのすべてのパーティの切断のいずれかの後で少なくとも1人のパーティが前記一対一会話に再び加わるときに取り出し可能である請求項123に記載の方法。
【請求項１２６】
前記マルチパーティ永続的会話に関連付けられている前記第3のメッセージは、i)前記マルチパーティ永続的会話を提供するインスタントメッセージサービスのリスタートまたはii)前記マルチパーティ永続的会話からのすべてのパーティの切断のいずれかの後で少なくとも1人のパーティが前記マルチパーティ永続的会話に再び加わるときに取り出し可能である請求項123に記載の方法。
【請求項１２７】
前記マルチパーティ非永続的会話に関連付けられているパーティは、i)前記マルチパーティ非永続的会話を提供するインスタントメッセージサービスのリスタートまたはii)前記マルチパーティ非永続的会話からのすべてのパーティの切断のいずれかの後で前記マルチパーティ非永続的会話に再び加わるのを制限される請求項123に記載の方法。
【請求項１２８】
少なくとも1つのプログラムを記憶するように各々動作可能である1つまたは複数のメモリユニットと、
前記1つまたは複数のメモリユニットに通信可能に結合されている少なくとも1つのプロセッサであって、前記少なくとも1つのプログラムは、前記少なくとも1つのプロセッサによって実行されたときに、前記少なくとも1つのプロセッサに方法を実行させ、前記方法は、
一対一会話に関連して送信される第1のメッセージ、マルチパーティ非永続的会話に関連して送信される第2のメッセージ、およびマルチパーティ永続的会話に関連して送信される第3のメッセージを受信するステップと、
前記第1のメッセージを前記一対一会話に関連付けられている相手パーティに、前記第2のメッセージを前記マルチパーティ非永続的会話に関連付けられている2人またはそれ以上のパーティに、前記第3のメッセージを、前記一対一会話、前記マルチパーティ非永続的会話、および前記マルチパーティ永続的会話のサブセットのみをホストするように構成されている単一のインスタントメッセージバックエンドシステムを使用して前記マルチパーティ永続的会話に関連付けられている2人またはそれ以上のパーティに送信するステップと、
を含む、少なくとも1つのプロセッサと、
を備えるシステム。
【請求項１２９】
コンピュータ実行可能命令が記憶されている非一時的コンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令はプロセッサによって実行されたときに方法を実行し、前記方法は、
一対一会話に関連して送信される第1のメッセージ、マルチパーティ非永続的会話に関連して送信される第2のメッセージ、およびマルチパーティ永続的会話に関連して送信される第3のメッセージを受信するステップと、
前記第1のメッセージを前記一対一会話に関連付けられている相手パーティに、前記第2のメッセージを前記マルチパーティ非永続的会話に関連付けられている2人またはそれ以上のパーティに、前記第3のメッセージを、前記一対一会話、前記マルチパーティ非永続的会話、および前記マルチパーティ永続的会話のサブセットのみをホストするように構成されている単一のインスタントメッセージバックエンドシステムを使用して前記マルチパーティ永続的会話に関連付けられている2人またはそれ以上のパーティに送信するステップと、
を含む、非一時的コンピュータ可読記憶媒体。
【請求項１３０】
一対一会話、マルチパーティ非永続的会話、およびマルチパーティ永続的会話のうちの多くとも2つをホストするように構成されているインスタントメッセージバックエンドシステムと、
一対一会話、マルチパーティ非永続的会話、およびマルチパーティ永続的会話のすべてに関連して送信されたメッセージを受信し、前記メッセージを前記インスタントメッセージバックエンドシステムに送信するように構成されているメッセージングコアと、
前記メッセージを記憶するように構成されているデータベースと、
を備えるシステム。
【請求項１３１】
前記一対一会話に関連付けられている前記メッセージのうちの少なくとも1つは、i)前記メッセージコアおよび前記インスタントメッセージングバックエンドシステムのうちの少なくとも1つのリスタートまたはii)前記一対一会話からのすべてのパーティの切断のいずれかの後で少なくとも1人のパーティが前記一対一会話に再び加わるときに取り出し可能である請求項130に記載のシステム。
【請求項１３２】
前記マルチパーティ永続的会話に関連付けられている前記第3のメッセージは、i)前記メッセージコアおよび前記インスタントメッセージングバックエンドシステムのうちの少なくとも1つのリスタートまたはii)前記マルチパーティ永続的会話からのすべてのパーティの切断のいずれかの後で少なくとも1人のパーティが前記マルチパーティ永続的会話に再び加わるときに取り出し可能である請求項130に記載のシステム。
【請求項１３３】
前記マルチパーティ非永続的会話に関連付けられているパーティは、i)前記メッセージコアおよび前記インスタントメッセージングバックエンドシステムのうちの少なくとも1つのリスタートまたはii)前記マルチパーティ非永続的会話からのすべてのパーティの切断のいずれかの後で前記マルチパーティ非永続的会話に再び加わるのを制限される請求項130に記載のシステム。
【請求項１３４】
第1のデバイスにインストールされているインスタントメッセージングアプリケーションの機能を拡張するプラグインを受信するステップと、
第1の通信機能を使用してパーティによって採用されている第2のデバイスからメッセージを受信するステップであって、前記メッセージはメッセージペイロードを含む、ステップと、
前記プラグインを使用して、トリガーされたアクションに関連付けられている前記メッセージペイロードの一部を識別するステップと、
前記第1のデバイスのユーザインターフェース上に表示するユーザインターフェースファイルを生成するステップであって、前記ユーザインターフェースファイルは前記トリガーされたアクションに基づき選択された第2の通信機能を使用して前記パーティと通信する能力を備える、ステップと、
を含むコンピュータ化された方法。
【請求項１３５】
前記生成するステップの前に、カスタムHTMLスタンザを生成するステップをさらに含む請求項134に記載の方法。
【請求項１３６】
前記ユーザインターフェースファイルは、前記カスタムHTMLスタンザを含むように標準ユーザインターフェースファイルを修正することによって生成される請求項134に記載の方法。
【請求項１３７】
前記第1の通信機能は、テキスト通信機能を含む請求項134に記載の方法。
【請求項１３８】
前記第2の通信機能は、電話通信機能を含む請求項134に記載の方法。
【請求項１３９】
前記第2の通信機能は、ビデオ会議機能を含む請求項134に記載の方法。
【請求項１４０】
前記第2の通信機能は、電子メール機能を含む請求項134に記載の方法。
【請求項１４１】
前記第2の通信機能は、ファイル転送機能を含む請求項134に記載の方法。
【請求項１４２】
前記第2の通信機能は、画面共有機能を含む請求項134に記載の方法。
【請求項１４３】
少なくとも1つのプログラムを記憶するように各々動作可能である1つまたは複数のメモリユニットと、
前記1つまたは複数のメモリユニットに通信可能に結合されている少なくとも1つのプロセッサであって、前記少なくとも1つのプログラムは、前記少なくとも1つのプロセッサによって実行されたときに、前記少なくとも1つのプロセッサに方法を実行させ、前記方法は、
第1のデバイスにインストールされているインスタントメッセージングアプリケーションの機能を拡張するプラグインを受信するステップと、
第1の通信機能を使用してパーティによって採用されている第2のデバイスからメッセージを受信するステップであって、前記メッセージはメッセージペイロードを含む、ステップと、
前記プラグインを使用して、トリガーされたアクションに関連付けられている前記メッセージペイロードの一部を識別するステップと、
前記第1のデバイスのユーザインターフェース上に表示するユーザインターフェースファイルを生成するステップであって、前記ユーザインターフェースファイルは前記トリガーされたアクションに基づき選択された第2の通信機能を使用して前記パーティと通信する能力を備える、ステップとを含む、少なくとも1つのプロセッサと、
を備えるシステム。
【請求項１４４】
コンピュータ実行可能命令が記憶されている非一時的コンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令はプロセッサによって実行されたときに方法のいずれかを実行し、前記方法は、
第1のデバイスにインストールされているインスタントメッセージングアプリケーションの機能を拡張するプラグインを受信するステップと、
第1の通信機能を使用してパーティによって採用されている第2のデバイスからメッセージを受信するステップであって、前記メッセージはメッセージペイロードを含む、ステップと、
前記プラグインを使用して、トリガーされたアクションに関連付けられている前記メッセージペイロードの一部を識別するステップと、
前記第1のデバイスのユーザインターフェース上に表示するユーザインターフェースファイルを生成するステップであって、前記ユーザインターフェースファイルは前記トリガーされたアクションに基づき選択された第2の通信機能を使用して前記パーティと通信する能力を備える、ステップと、
を含む、非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、その全体が参照により本明細書に組み込まれている、2014年4月24日に出願した米国仮特許出願第61/983,604号の優先権を主張するものである。
【０００２】
本発明は、一般的に、メッセージング通信システム(messaging communication systems)および、より具体的には、インスタントメッセージングアプリケーションの分野に関するものである。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
コンピュータ化された方法、コンピュータシステム、およびプロセッサによって実行されたときに本方法を実行するコンピュータ実行可能命令が記憶されている非一時的コンピュータ可読記憶媒体を含む本発明の実施形態が次に説明される。
【課題を解決するための手段】
【０００４】
本発明の一態様に関連して、インスタントメッセージングシステムへのアクセスの取得を求める要求を記述したデータが、要求側デバイスから受信される。アクセスの取得を求める要求は、識別子を含む。要求内の識別子に基づきデータリポジトリからプラグインが識別される。プラグインは、要求側デバイス上にインストールされているインスタントメッセージングアプリケーションを拡張するように適合される。識別子は、エンドユーザを記述したデータを含み得る。さらなる態様において、プラグインを記述したデータは、要求側デバイスにおいて受信される。なおもさらなる態様において、インスタントメッセージングアプリケーションは、プラグインを使用して拡張される。いくつかの態様において、インスタントメッセージングセッション時に受信されるプラグインは、インスタントメッセージングセッションが終了するまでの間、インスタントメッセージングアプリケーションを拡張する。
【０００５】
本発明のいくつかの態様において、データが受信され、データは、インスタントメッセージングアプリケーションにおいて実装されているメッセージ伝送チャネルに関連して1つまたは複数のデバイスによって開始されるメッセージを記述したデータへのアクセスを求める要求側デバイスからの要求を記述する。要求は、識別子を含む。要求内の識別子に基づきデータリポジトリからプラグインが識別される。プラグインは、要求側デバイス上にインストールされているインスタントメッセージングアプリケーションを拡張するように適合される。いくつかの態様において、この要求は、相手パーティ(counterparty)デバイスによって開始されたメッセージを記述したデータの受信を求める要求である。相手パーティデバイスによって開始されるメッセージを記述したデータは、相手パーティ識別子(counterparty identifier)に関連付けられている。いくつかの態様において、識別子は、相手パーティを記述したデータを含む。識別子は、メッセージ伝送チャネルに関連付けられているアドレスを記述したデータも含み得る。識別子は、要求側デバイスのユーザを記述したデータも含み得る。なおもさらに、識別子は、インスタントメッセージングアプリケーションを実行する要求側デバイスを記述したデータを含み得る。実施形態は、要求側デバイスにおいてプラグインを記述したデータを受信するステップと、プラグインを使用してインスタントメッセージングアプリケーションを拡張するステップとをさらに含み得る。プラグインは、メッセージ伝送チャネルと関連して1つまたは複数のデバイスによって開始されたメッセージを記述したデータへのアクセスが終了するまでの間、インスタントメッセージングアプリケーションを拡張し得る。
【０００６】
さらなる実施形態において、インスタントメッセージングシステムへのアクセスの取得を求める要求を記述したデータは、要求側デバイスから送信され、アクセスの取得を求める要求は、識別子を含む。要求側デバイスは、要求内の識別子に基づきデータリポジトリから識別されたプラグインを受信する。要求側デバイス上にインストールされているインスタントメッセージングアプリケーションは、プラグインに基づき拡張される。識別子は、エンドユーザを記述したデータを含み得る。インスタントメッセージングセッション時に受信されるプラグインは、インスタントメッセージングセッションが終了するまでの間、インスタントメッセージングアプリケーションを拡張し得る。
【０００７】
なおもさらなる実施形態において、データは要求側デバイスから送信される。データは、インスタントメッセージングアプリケーションにおいて実装されているメッセージ伝送チャネルに関連して1つまたは複数のデバイスによって開始されるメッセージを記述したデータへのアクセスを求める要求を記述する。要求は、識別子を含む。要求側デバイスで受信されるのは、要求内の識別子に基づきデータリポジトリから識別されたプラグインである。要求側デバイス上にインストールされているインスタントメッセージングアプリケーションは、要求側デバイスにおいて拡張される。いくつかの実施形態において、この要求は、相手パーティデバイスによって開始されたメッセージを記述したデータの受信を求める要求であり、相手パーティデバイスによって開始されるメッセージを記述したデータは、相手パーティ識別子に関連付けられている。識別子は、相手パーティを記述したデータを含み得る。識別子は、メッセージ伝送チャネルに関連付けられているアドレスを記述したデータを含み得る。識別子は、要求側デバイスのユーザを記述したデータを含み得る。識別子は、インスタントメッセージングアプリケーションを実行する要求側デバイスを記述したデータを含み得る。そのような実施形態において、プラグインは、メッセージ伝送チャネルと関連して1つまたは複数のデバイスによって開始されたメッセージを記述したデータへのアクセスが終了するまでの間、インスタントメッセージングアプリケーションを拡張し得る。
【０００８】
いくつかの実施形態において、データリポジトリからインスタントメッセージングアプリケーションに関連付けられているプラグインを取り出すことを求める要求を記述したデータは、要求側デバイスから受信される。プラグインを記述したデータが、要求側デバイスに送信される。プラグインは、インスタントメッセージングアプリケーションのユーザ、会話へのパーティ(party)、会話、会話タイプ、会話メンバー、およびインスタントメッセージングバックエンドシステムのうちの少なくとも1つのもののコンテキストに従ってインスタントメッセージングアプリケーションを拡張するように構成される。いくつかの実施形態において、この要求は、インスタントメッセージバックエンドシステムの識別子を含み得る。プラグインは、インスタントメッセージングアプリケーションに関連してメッセージを処理するために採用されているインスタントメッセージングバックエンドシステムの識別情報に基づきインスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによってインスタントメッセージングアプリケーションを拡張するように構成され得る。いくつかの実施形態において、この要求は、インスタントメッセージングアプリケーションのユーザの識別子を含む。プラグインは、インスタントメッセージングアプリケーションのユーザの識別情報に基づき送信または受信される少なくともいくつかのメッセージを拡張することによってインスタントメッセージングアプリケーションを拡張するように構成され得る。いくつかの実施形態において、この要求は、会話タイプ識別子を含む。プラグインは、会話タイプに基づきインスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによってインスタントメッセージングアプリケーションを拡張するように構成され得る。会話タイプは、一対一会話(one-to-one conversation)、非永続的マルチパーティ会話(non-persistent multiparty conversation)、または永続的マルチパーティ会話(persistent multiparty conversation)のうちの1つであってよい。いくつかの実施形態において、この要求は、永
続的マルチパーティ会話識別子を含み得る。プラグインは、永続的マルチパーティ会話の識別情報に基づきインスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによってインスタントメッセージングアプリケーションを拡張するように構成され得る。いくつかの実施形態において、この要求は、永続的マルチパーティ会話メンバーシップ識別子(persistent multiparty conversation membership identifier)を含む。プラグインは、永続的マルチパーティ会話のパーティに対して、識別された永続的マルチパーティ会話内のパーティのメンバーシップロール(membership role)に基づき、インスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによってインスタントメッセージングアプリケーションを拡張するように構成され得る。この要求は、会話内の相手パーティに関連付けられている相手パーティ識別子または会話内のインスタントメッセージングアプリケーションのユーザの識別子を含み得る。プラグインは、会話内の相手パーティからインスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによってインスタントメッセージングアプリケーションを拡張するように構成され得る。
【０００９】
いくつかの実施形態において、データリポジトリから要求側デバイス上で実行されるインスタントメッセージングアプリケーションに関連付けられているプラグインを取り出すことを求める要求を記述したデータは、要求側デバイスから送信される。プラグインを記述したデータは、要求側デバイスで受信される。プラグインは、インスタントメッセージングアプリケーションのユーザ、会話へのパーティ、会話、会話タイプ、会話メンバー、およびインスタントメッセージングバックエンドシステムのうちの少なくとも1つのもののコンテキストに従ってインスタントメッセージングアプリケーションを拡張するように構成される。いくつかの実施形態において、この要求は、インスタントメッセージバックエンドシステムの識別子を含む。プラグインは、インスタントメッセージングアプリケーションに関連してメッセージを処理するために採用されているインスタントメッセージングバックエンドシステムの識別情報に基づきインスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによってインスタントメッセージングアプリケーションを拡張するように構成され得る。いくつかの実施形態において、この要求は、インスタントメッセージングアプリケーションのユーザの識別子を含む。プラグインは、インスタントメッセージングアプリケーションのユーザの識別情報に基づき送信または受信される少なくともいくつかのメッセージを拡張することによってインスタントメッセージングアプリケーションを拡張するように構成され得る。いくつかの実施形態において、この要求は、会話タイプ識別子を含み得る。プラグインは、会話タイプに基づきインスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによってインスタントメッセージングアプリケーションを拡張するように構成される。いくつかの実施形態において、会話タイプは、一対一会話、非永続的マルチパーティ会話、または永続的マルチパーティ会話のうちの1つである。いくつかの実施形態において、この要求は、永続的マルチパーティ会話識別子を含む。プラグインは、永続的マルチパーティ会話の識別情報に基づきインスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによってインスタントメッセージングアプリケーションを拡張するように構成され得る。いくつかの実施形態において、この要求は、永続的マルチパーティ会話メンバーシップ識別子を含み得る。プラグインは、永続的マルチパーティ会話のパーティに対して、識別された永続的マルチパーティ会話内のパーティのメンバーシップロール(membership role)に基づき、インスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによってインスタントメッセージングアプリケーションを拡張するように構成され得る。いくつかの実施形態において、この要求は、会話内の相手パーティに関連付けられている相手パーティ識別子または会話内のインスタントメッセージングアプリケーションのユーザの識別子を含む。��ラグインは、会話内の相手パーティからインスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによってインスタントメッセージングアプリケーションを拡張するように構成され得る。
【００１０】
本発明のいくつかの実施形態は、インスタントメッセージングアプリケーションを使用して会話に関連付けられているプラグインをデータリポジトリから取り出すことを求める要求を記述したデータを、要求側デバイスから受信するステップを伴う。プラグインを記述したデータが、要求側デバイスに送信される。プラグインは、会話内の相手パーティの識別情報に基づきインスタントメッセージングアプリケーションを拡張するように構成される。プラグインは、会話内でインスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによってインスタントメッセージングアプリケーションを拡張するように構成され得る。プラグインのダウンロードを求める要求は、相手パーティに関連付けられている相手パーティ識別子を含み得るか、またはインスタントメッセージングアプリケーションのユーザに関連付けられている識別子を含み得る。
【００１１】
本発明の他の実施形態は、データリポジトリからインスタントメッセージングアプリケーションを使用して会話に関連付けられているプラグインをデータリポジトリから取り出すことを求める要求を記述したデータを、要求側デバイスから送信するステップと、プラグインを記述したデータを要求側デバイスにおいて受信するステップとを伴う。プラグインは、会話内の相手パーティの識別情報に基づきインスタントメッセージングアプリケーションを拡張するように構成される。いくつかの実施形態において、プラグインは、会話内でインスタントメッセージングアプリケーションによって送信または受信される少なくともいくつかのメッセージを拡張することによってインスタントメッセージングアプリケーションを拡張するように構成される。プラグインのダウンロードを求める要求は、相手パーティに関連付けられている相手パーティ識別子を含み得るか、またはインスタントメッセージングアプリケーションのユーザに関連付けられている識別子を含み得る。
【００１２】
本発明のいくつかの実施形態は、データリポジトリ内のインスタントメッセージを記述したデータを取り出すことを求める要求を記述したデータを、デバイスから受信するステップを伴う。レコードを記述したデータは、データリポジトリから取り出され、レコードはインスタントメッセージと編集インジケータとを記述したデータを含む。インスタントメッセージを記述したデータを編集するかどうかに関する決定は、編集インジケータに基づいてなされる。インスタントメッセージを記述したデータは、そのインスタントメッセージが編集されたインスタントメッセージであることを編集インジケータが指示する場合に編集された状態でデバイスに送信され、インスタントメッセージが未編集メッセージであることを編集インジケータが指示する場合に未編集状態でインスタントメッセージを記述したデータをデバイスに送信する。編集インジケータが、メッセージが編集されたメッセージであることを指示する場合、インスタントメッセージの少なくとも一部は、インスタントメッセージを記述したデータをデバイスに送信する前に編集される。編集インジケータが、メッセージが未編集メッセージであることを指示する場合、インスタントメッセージのいかなる部分も、インスタントメッセージを記述したデータをデバイスに送信する前に編集されない。いくつかの実施形態において、データリポジトリは、複数のレコードを記述したデータを含み、複数のレコードの各々はインスタントメッセージおよび編集インジケータを含む。いくつかの実施形態において、編集インジケータの各々は、インスタントメッセージのうちのただ1つに対応する。編集インジケータは、インスタントメッセージの少なくとも一部を編集するために使用される文字オフセットおよび文字長を含み得る。
【００１３】
本発明のいくつかの実施形態において、インスタントメッセージを記述したデータが受信され、インスタントメッセージはメタ識別子を含む。インスタントメッセージバックエンドシステムは、インスタントメッセージを処理し、送信するために識別される。インスタントメッセージバックエンドシステムは、インスタントメッセージバックエンドシステム識別子に関連付けられている。識別するステップは、インスタントメッセージに付属するメタ識別子がインスタントメッセージバックエンドシステムに関連付けられているインスタントメッセージバックエンドシステム識別子に対応しているかどうかを決定するステップを含む。インスタントメッセージは、準拠インスタントメッセージ(compliant instant message)に変換され、準拠インスタントメッセージはインスタントメッセージバックエンドシステムに準拠している。準拠インスタントメッセージを記述したデータは、インスタントメッセージバックエンドシステムに送信される。メタ識別子は、会話メタ識別子を含み得る。インスタントメッセージバックエンドシステム識別子は、インスタントメッセージバックエンドシステムによってホストされた会話を識別するインスタントメッセージバックエンドシステム会話識別子を含み得る。メタ識別子は、ユーザメタ識別子を含み得る。インスタントメッセージバックエンドシステム識別子は、インスタントメッセージバックエンドシステムを使用してメッセージを交換することを許可されているユーザを識別するインスタントメッセージバックエンドシステムユーザ識別子を含み得る。メタ識別子は、第1のユーザを識別する第1のユーザメタ識別子および第2のユーザを識別する第2のユーザメタ識別子に対応するものとしてよく、インスタントメッセージバックエンドシステム識別子は、第1のユーザを識別する第1のインスタントメッセージバックエンドシステムユーザ識別子および第2のユーザを識別する第2のインスタントメッセージバックエンドシステムユーザ識別子に対応する。メタ識別子は、ユーザメタ識別子および会話メタ識別子に対応し得る。インスタントメッセージバックエンドシステム識別子は、インスタントメッセージバックエンドシステムを使用してメッセージを交換することができるユーザを識別するインスタントメッセージバックエンドシステムユーザ識別子およびインスタントメッセージバックエンドシステムによってホストされる会話を識別するインスタントメッセージバックエンドシステム会話識別子に対応する。
【００１４】
いくつかの実施形態において、第1のインスタントメッセージバックエンドシステムからインスタントメッセージング会話を第2のインスタントメッセージバックエンドシステムに転送することを求める要求を記述したデータが受信される。インスタントメッセージ会話は、第1のインスタントメッセージバックエンドシステムから第2のインスタントメッセージバックエンドシステムに転送される。インスタントメッセージング会話に関連付けられているメッセージは、第2のインスタントメッセージバックエンドシステムに送信される。いくつかの実施形態において、転送ステップの前に、インスタントメッセージ会話への各パーティのメタ識別子は、第2のインスタントメッセージバックエンドシステムに対するインスタントメッセージバックエンドユーザ識別子に関連付けられていると決定される。いくつかの実施形態において、転送ステップの前に、インスタントメッセージ会話は、第2のインスタントメッセージバックエンドシステム上でホストされることが可能であると決定される。
【００１５】
いくつかの実施形態において、第1のインスタントメッセージバックエンドシステム上のインスタントメッセージ会話は、データリポジトリ内に対応する第1の会話インスタンスを有する。そのような実施形態において、第2の会話インスタンスは、データリポジトリ内に作成される。第2の会話インスタンスは、第2のインスタントメッセージバックエンドシステム上のインスタントメッセージ会話に対応する。
【００１６】
本発明のいくつかの実施形態は、インスタントメッセージバックエンドシステムへの送信のためにクライアントデバイスのユーザインターフェースからメッセージを受信し、アプリケーションプロトコルを使用してメッセージをカプセル化し、カプセル化されたメッセージをメッセージングコアソフトウェアモジュールに送信するように構成されているコンテナソフトウェアモジュールを備えるシステムを対象とする。システムは、インスタントメッセージバックエンドシステムに対応するメッセージングプロトコルを使用してカプセル化されているメッセージをインスタントメッセージバックエンドシステム準拠メッセージにフォーマットし、インスタントメッセージバックエンドシステム準拠メッセージをインスタントメッセージバックエンドシステムに送信するように構成されているメッセージングコアソフトウェアモジュールも備える。システムにおいて、アプリケーションプロトコルは、ハイパーテキスト転送プロトコルまたはCometDプロトコルを含む。メッセージングコアソフトウェアモジュールは、インスタントメッセージバックエンドシステム準拠メッセージを送信する前に新しいメッセージ伝送チャネルを作成するように構成され得る。メッセージングコアソフトウェアモジュールは、インスタントメッセージバックエンドシステム準拠メッセージを送信する前に既存のメッセージ伝送チャネルに接続するように構成され得る。メッセージングコアソフトウェアモジュールおよびコンテナソフトウェアモジュールは、同じデバイス上で実行可能であるものとしてよい。他の実施形態において、メッセージングコアソフトウェアモジュールは、サーバ上で実行可能であり、コンテナソフトウェアモジュールは、サーバとは別のデバイス上で実行可能である。
【００１７】
いくつかの実施形態において、メッセージは、インスタントメッセージバックエンドシステムへの送信のために、コンテナソフトウェアモジュールを使用して、クライアントデバイスのユーザインターフェースから受信される。コンテナソフトウェアモジュールを使用することで、メッセージは、アプリケーションプロトコルを使用してカプセル化され、カプセル化されたメッセージは、メッセージングコアソフトウェアモジュールに送信される。メッセージングコアソフトウェアモジュールを使用することで、カプセル化されたメッセージは、インスタントメッセージバックエンドシステムに対応するメッセージングプロトコルを使用してインスタントメッセージバックエンドシステム準拠メッセージにフォーマットされる。メッセージングコアソフトウェアモジュールを使用することで、インスタントメッセージバックエンドシステム準拠メッセージは、インスタントメッセージバックエンドシステムに送信される。アプリケーションプロトコルは、ハイパーテキスト転送プロトコルまたはCometDプロトコルを含み得る。いくつかの実施形態において、メッセージングコアソフトウェアモジュールを使用することで、新しいメッセージ伝送チャネルが、インスタントメッセージバックエンドシステム準拠メッセージを送信する前に作成される。また、いくつかの実施形態において、メッセージングコアソフトウェアモジュールは、インスタントメッセージバックエンドシステム準拠メッセージを送信する前に既存のメッセージ伝送チャネルに接続するために使用される。いくつかの実施形態において、メッセージングコアソフトウェアモジュールおよびコンテナソフトウェアモジュールは、同じクライアントデバイス上で実行可能であるものとしてよい。いくつかの実施形態において、メッセージングコアソフトウェアモジュールは、サーバ上で実行可能であり、コンテナソフトウェアモジュールは、クライアントデバイス上で実行可能である。
【００１８】
いくつかの実施形態において、コンテナソフトウェアモジュールを使用することで、メッセージがインスタントメッセージバックエンドシステムへの送信のためにクライアントデバイスのユーザインターフェースから受信される。コンテナソフトウェアモジュールを使用することで、メッセージはアプリケーションプロトコルを使用してカプセル化される。またコンテナソフトウェアモジュールを使用することで、カプセル化されたメッセージがメッセージングコアソフトウェアモジュールに送信される。メッセージングコアソフトウェアモジュールを使用することで、カプセル化されたメッセージは、インスタントメッセージバックエンドシステムに対応するメッセージングプロトコルを使用してインスタントメッセージバックエンドシステム準拠メッセージにフォーマットされる。またメッセージングコアソフトウェアモジュールを使用することで、インスタントメッセージバックエンドシステム準拠メッセージは、インスタントメッセージバックエンドシステムに送信される。アプリケーションプロトコルは、ハイパーテキスト転送プロトコルまたはCometDプロトコルを含み得る。この実施形態は、メッセージングコアソフトウェアモジュールを使用することで、インスタントメッセージバックエンドシステム準拠メッセージを送信する前に新しいメッセージ伝送チャネルを作成するステップをさらに含み得る。この実施形態は、メッセージングコアソフトウェアモジュールを使用して、インスタントメッセージバックエンドシステム準拠メッセージを送信する前に既存のメッセージ伝送チャネルに接続するステップをさらに含み得る。いくつかの実施形態において、メッセージングコアソフトウェアモジュールおよびコンテナソフトウェアモジュールは、同じクライアントデバイス上で実行可能である。他の実施形態において、メッセージングコアソフトウェアモジュールは、サーバ上で実行可能であり、コンテナソフトウェアモジュールは、クライアントデバイス上で実行可能である。
【００１９】
いくつかの実施形態は、一対一会話に関連して送信される第1のメッセージ、マルチパーティ非永続的会話に関連して送信される第2のメッセージ、およびマルチパーティ永続的会話に関連して送信される第3のメッセージを受信するステップを伴う。第1のメッセージは、一対一会話に関連付けられている相手パーティに送信され、第2のメッセージは、マルチパーティ非永続的会話に関連付けられている2人またはそれ以上のパーティに送信され、第3のメッセージは、マルチパーティ永続的会話に関連付けられている2人またはそれ以上のパーティに送信され、その際に、一対一会話、マルチパーティ非永続的会話、およびマルチパーティ永続的会話の部分集合のみをホストするように構成されている単一のインスタントメッセージバックエンドシステムを使用する。これらの実施形態のうちのいくつかにおいて、第1のメッセージ、第2のメッセージ、および第3のメッセージは、データベースに記憶される。一対一会話に関連付けられている第1のメッセージは、i)一対一会話を提供するインスタントメッセージサービスのリスタートまたはii)一対一会話からのすべてのパーティの切断のいずれかの後で少なくとも1人のパーティが一対一会話に再び加わるときに取り出し可能であるものとしてよい。マルチパーティ永続的会話に関連付けられている第3のメッセージは、i)マルチパーティ永続的会話を提供するインスタントメッセージサービスのリスタートまたはii)マルチパーティ永続的会話からのすべてのパーティの切断のいずれかの後で少なくとも1人のパーティがマルチパーティ永続的会話に再び加わるときに取り出し可能であるものとしてよい。マルチパーティ非永続的会話に関連付けられているパーティは、i)マルチパーティ非永続的会話を提供するインスタントメッセージサービスのリスタートまたはii)マルチパーティ非永続的会話からのすべてのパーティの切断のいずれかの後でマルチパーティ非永続的会話に再び加わるのを制限され得る。
【００２０】
いくつかの実施形態は、一対一会話、マルチパーティ非永続的会話、およびマルチパーティ永続的会話のうちの多くても2つをホストするように構成されているインスタントメッセージバックエンドシステムと、一対一会話、マルチパーティ非永続的会話、およびマルチパーティ永続的会話のすべてと関連して送信されたメッセージを受信し、メッセージをインスタントメッセージバックエンドシステムに送信するように構成されているメッセージングコアと、メッセージを記憶するように構成されているデータベースとを備えるシステムを含む。いくつかの実施形態において、一対一会話に関連付けられているメッセージのうちの少なくとも1つは、i)メッセージコアおよびインスタントメッセージングバックエンドシステムのうちの少なくとも1つのリスタートまたはii)一対一会話からのすべてのパーティの切断のいずれかの後で少なくとも1人のパーティが一対一会話に再び加わるときに取り出し可能である。他の実施形態において、マルチパーティ永続的会話に関連付けられている第3のメッセージは、i)メッセージコアおよびインスタントメッセージングバックエンドシステムのうちの少なくとも1つのリスタートまたはii)マルチパーティ永続的会話からのすべてのパーティの切断のいずれかの後で少なくとも1人のパーティがマルチパーティ永続的会話に再び加わるときに取り出し可能である。他の実施形態において、マルチパーティ非永続的会話に関連付けられているパーティは、i)メッセージコアおよびインスタントメッセージングバックエンドシステムのうちの少なくとも1つのリスタートまたはii)マルチパーティ非永続的会話からのすべてのパーティの切断のいずれかの後でマルチパーティ非永続的会話に再び加わるのを制限される。
【００２１】
いくつかの実施形態は、第1のデバイスにインストールされているインスタントメッセージングアプリケーションの機能を拡張するプラグインを受信するステップと、第1の通信機能を使用してパーティによって採用されている第2のデバイスからメッセージを受信するステップであって、メッセージはメッセージペイロードを含む、ステップと、プラグインを使用して、トリガーされたアクションに関連付けられているメッセージペイロードの一部を識別するステップと、第1のデバイスのユーザインターフェース上に表示するユーザインターフェースファイルを生成するステップであって、ユーザインターフェースファイルはトリガーされたアクションに基づき選択された第2の通信機能を使用してパーティと通信する能力を備える、ステップとを伴う。いくつかの実施形態において、生成の前に、カスタムHTMLスタンザが生成される。他の実施形態において、ユーザインターフェースファイルは、カスタムHTMLスタンザを含むように標準ユーザインターフェースファイルを修正することによって生成される。いくつかの実施形態において、第1の通信機能は、テキスト通信機能を含み、第2の通信機能は、電話通信機能、ビデオ会議機能、電子メール機能、ファイル転送機能、および/または画面共有機能を含む。
【００２２】
前述の概要、さらには本発明の実施形態の次の詳細な説明は、例示的な実施形態の添付図面と併せて読むとよりよく理解されるであろう。しかしながら、本発明は、図示されている正確な配列構成および手段に限定されないことを理解されたい。
【図面の簡単な説明】
【００２３】
【図１】本発明の少なくとも1つの実施形態によりネットワーク上で送信される電子メッセージを介してユーザ同士が通信することを可能にするためのシステムのブロック図である。
【図２】本発明の少なくとも1つの実施形態によりメッセージを処理し、会話をホストするインスタントメッセージ(「IM」)バックエンドシステムにメッセージを送信するための流れ図である。
【図３】本発明の少なくとも1つの実施形態により単一のIMバックエンドシステムを使用して異なる会話に対するメッセージを受信し、送信し、記憶し、取り出すための流れ図である。
【図４】本発明の少なくとも1つの実施形態により第1のIMバックエンドシステムによってホストされる会話を第2のIMバックエンドシステムに転送する方法のための流れ図である。
【図５】本発明の少なくとも1つの実施形態によりコンテナおよびメッセージングコアを使用してメッセージを送信する方法のための流れ図である。
【図６】本発明の少なくとも1つの実施形態によりインスタントメッセージングユーザインターフェース拡張をクライアントデバイスに動的に配信する方法のための流れ図である。
【図７】本発明の少なくとも1つの実施形態によりインスタントメッセージングのコンテキストにおいてプラグインを使用して出力メッセージを処理する方法のための流れ図である。
【図８】本発明の少なくとも1つの実施形態によりインスタントメッセージングのコンテキストにおいてプラグインを使用して入力メッセージを処理する方法のための流れ図である。
【図９】本発明の少なくとも1つの実施形態によりプラグインを使用して通信機能を備えるユーザインターフェースを生成する方法のための流れ図である。
【図１０】本発明の少なくとも1つの実施形態によりメッセージ履歴を編集する方法のための流れ図である。
【発明を実施するための形態】
【００２４】
本発明の実施形態は、通信ネットワーク(たとえば、インターネット)上で電子メッセージを交換することによってユーザ同士がリアルタイムで通信することを可能にする。一実施形態において、電子メッセージは、インスタントメッセージ(すなわち、リアルタイムテキスト送信)である。
【００２５】
類似の参照番号は全体を通して類似の要素を指示している、図面を詳しく参照すると、図1〜図10には、本発明の少なくとも1つの実施形態によりネットワーク上で送信される電子メッセージを介してユーザ同士が通信することを可能にすることに関連して使用されるシステム100および方法が図示されている。
【００２６】
I.例示的なシステムアーキテクチャ
A.概要
図1を参照すると、本発明の少なくとも1つの実施形態によりネットワーク上で送信される電子メッセージを介してユーザ同士が通信することを可能にするためのシステム100のブロック図が図示されている。システム100は、クライアントデバイス110、クライアントデバイス118、通信ネットワーク120、インスタントメッセージング(IM)サーバ130、アカウントアクティブディレクトリ140、データおよびメッセージングデータベース150、ならびにプラグインリポジトリ160を備える。
【００２７】
クライアントデバイス110は、通信ネットワーク120とインスタントメッセージングサービスをホストするIMサーバ130とを通じてクライアントデバイス118と通信する。第1のクライアントデバイス、たとえば、クライアントデバイス110と、第2のクライアントデバイス、たとえば、クライアントデバイス118との間で送信されるメッセージは、IMサーバ130を用いてデバイス間で交換される。たとえば、IMサーバ130は、クライアントデバイス110から送信されたメッセージを受信し、メッセージをクライアントデバイス118に送信し、そしてその逆も行う。クライアントデバイス110、クライアントデバイス118、およびIMサーバ130の間の通信は、たとえば、伝送制御プロトコル/インターネットプロトコル(TCP/IP)などの1つまたは複数の通信プロトコルを使用して通信ネットワーク120を介して行われる。
【００２８】
クライアントデバイス110およびクライアントデバイス118は、電話、タブレット、コンピュータ、スマートフォン、またはスマートデバイスなどの、任意のコンピューティングデバイスであってよく、類似の機能を実装し得る。クライアントデバイス110およびクライアントデバイス118は各々、相互の通信を円滑にするためのコンテナ111およびユーザインターフェース112を備える。コンテナ111は、ハイパーテキストマークアップ言語(HTML)、カスケーディングスタイルシート(CSS)、およびJavaScript(登録商標)コンテンツをユーザインターフェース112上にレンダリングする機能を有するプラットフォームネイティブのアプリケーションである。「プラットフォームネイティブ」は、ジェネリックなオペレーティングシステム(OS)プラットフォームまたはウェブベースのアプリケーションではなく、特定のOSプラットフォーム上で実行するように書かれたアプリケーションを指す。ユーザインターフェース112は、クライアントデバイス110などの、クライアントデバイスのディスプレイ(図示せず)を制御し、ユーザがIMサーバ130をインタラクティブに操作することを可能にするプログラムである。クライアントデバイス110およびクライアントデバイス118は、一実施形態では、CometDを使用してメッセージをIMサーバ130に送信する。CometDは、AJAXプッシュ技術を使用するスケーラブルなHTTPベースのイベントルーティングプロトコルである。クライアントデバイス110におけるあらゆる機能、さらにはクライアントデバイス110によるIMサーバ130のあらゆるインタラクティブな操作も、クライアントデバイス118に含まれ得るか、またはクライアントデバイス118によって実行され得ることが企図される。
【００２９】
IMサーバ130は、インスタントメッセージングサービスに関係する、第1のクライアントデバイス、たとえば、クライアントデバイス110から電子通信を受信し、電子通信を第1のクライアントデバイス、たとえばクライアントデバイス110または第2のクライアントデバイス、たとえばクライアントデバイス118に送信するように構成される。クライアントデバイス110からIMサーバ130への、およびその逆の方向の、電子通信は、(i)インスタントメッセージングサービスへのアクセスを求めるログイン要求、(ii)会話を作成するか、または会話に加わることを求める要求(異なるタイプの会話の例は以下で説明されている)、(iii)インスタントメッセージング会話に関連付けられている他のクライアントデバイスに送信されるべき電子メッセージ、および(iv)プラグインを含み得る。上記の機能を実装するために、IMサーバ130は、メッセージングコア131、プログラマチックインターフェース132、第1のIMバックエンドシステム133(たとえば、例としてMindAlignから利用可能なものなど)および第2のIMバックエンドシステム134(たとえば、XCPなど)などの1つまたは複数のIMバックエンドシステム、ならびにIMサービスアプリケーションプラットフォーム135を備える。
【００３０】
メッセージングコア131は、多数の異なる能力をIMサーバ130に提供するアプリケーションである。
【００３１】
メッセージングコア131は、第1のクライアントデバイス、たとえば、クライアントデバイス110からの会話に加わることを求める要求を受信するようにも構成される。本明細書で称されているように、「会話」は、IMサーバ130を通じたクライアントデバイス間でのメッセージの交換を指す。「会話」におけるそのようなメッセージは、URLなどの、IMサーバ130上のアドレスに関連付けられ、会話メタ識別子によって識別される。したがって、会話に関連付けられているメッセージは、同じアドレス、たとえば、URLに送信され、そのアドレスから受信される。さらに、会話メタ識別子は(必要ならば、対応するIMバックエンドシステム会話識別子とともに)、第1のIMバックエンドシステム133または第2のIMバックエンドシステム134などの、IMバックエンドシステムを使用する通信ネットワークを通じて送信されるメッセージを交換するため特定の会話を識別することに使用される。第2のIMバックエンドシステム134および第1のIMバックエンドエンドシステム133は各々、会話をホストし、ユーザ間でメッセージを交換するための異なるIMバックエンドシステムを表す。
【００３２】
会話は、2人の参加者(たとえば、パーティと相手パーティ)の間のインスタントメッセージの交換を伴う一対一会話であってよい。一対一会話は、永続的会話であってよい。永続的会話は、会話に関連付けられているすべてのメッセージが、i)IMサービスのリスタートまたはii)会話からのすべてのパーティの切断のいずれかの後で少なくとも1人のパーティが会話に加わるときに、記憶され、取り出し可能であることを意味し、会話は、次いで、メッセージの取り出し後に、継続され得るか、または再開され得る。会話は、最初に3人またはそれ以上の参加者の間の特定の、または指定されたメッセージ伝送チャネル上のインスタントメッセージの交換を伴う非永続的マルチパーティ会話であってもよく、会話は、参加者のすべてが会話から退出した後に終了する(すなわち、会話はパーティが参加しているときだけアクセス可能であるという点で推移的である)。参加者の何人かは、会話がアクセス可能である間に非永続的マルチパーティ会話から退出するか、または加わることができる。
【００３３】
会話は、最初に3人またはそれ以上の参加者の間の特定の、または指定されたメッセージ伝送チャネル上のインスタントメッセージの交換を伴う永続的マルチパーティ会話(たとえば、一般に「チャットルーム」と称される)であってもよく、あらゆる参加者は、会話を終了することなく会話に加わること、退出すること、および再び加わることができる(すなわち、会話は、会話に参加している参加者がいなくてもアクセス可能なままである)。
【００３４】
非永続的会話は、非永続的会話に関連付けられているすべてのメッセージが、i)IMサービスのリスタートまたはii)会話からのすべてのパーティの切断のいずれかの後ですべてのパーティが非永続的会話に再び加わることを制限されるので、取り出し可能でないことを意味する。その代わりに、新しい非永続的会話が作成されなければならない。ユーザは、それでも、データおよびメッセージングアーカイブ150内のメッセージを検索することによって非永続的会話に関連付けられているメッセージにアクセスし、取り出すことができる。
【００３５】
IM/チャットセッションの実装に関するいくつかの一般的事項は、本明細書の説明にも当てはまる。たとえば、会話の参加者によって送信されるメッセージは、すべての参加者に表示される。「チャネル」は、会話と同義である。「セッション」は、特定の会話に対する特定のIMバックエンドシステムとの個別のクライアントデバイスの接続を指す。セッションは、ローカルメモリ内のメッセージングコア131に記憶される。セッションは、メタ会話識別子またはセッションに関連付けられているIMバックエンドシステム会話識別子を介してアクセス可能である。
【００３６】
第1のクライアントデバイス(たとえば、クライアントデバイス110)が、会話に加わった後に、メッセージングコア131は第1のクライアントデバイスから電子メッセージを受信し、XMPPメッセージを処理して第2のIMバックエンドシステム134(たとえば、IMバックエンドシステム)に送信し、第2のIMバックエンドシステム134からXMPPメッセージを受信し、UIレンダリングコードを会話にすでに加わっている第2のクライアントデバイス、たとえば、クライアントデバイス118に配信するように構成される。UIレンダリングコードは、たとえば、HTML、CSS、および/またはJavaScript(登録商標)コードを含み得る。XMPPメッセージは、XML(拡張マークアップ言語)に基づくメッセージ指向ミドルウェアに対する拡張可能なメッセージングおよびプレゼンスプロトコル(XMPP)を介して送信されるメッセージである。第2のIMバックエンドシステム134は、インスタントメッセージング転送プロトコルとして動作してメッセージングコア131を介してクライアントデバイス110からのXMPPメッセージを処理するように構成される。
【００３７】
第2のIMバックエンドシステム134は、XMPPを使用して通信し得るとしても、第1のIMバックエンドシステム133は、インターネットリレーチャット(IRC)などの異なるプロトコルを使用して通信し得る。
【００３８】
第2のIMバックエンドシステム134は、他のXMPPベースのシステムとフェデレーションを行うように構成され得る。フェデレーションは、IMシステムのコンテキストでは、一方のIMバックエンドシステムのユーザが別のIMバックエンドシステムのユーザと通信することを可能にする別個の離れているシステムの間の接続を指す。
【００３９】
メッセージングコア131は、異なるクライアントデバイスからの複数の同時接続をサポートするように構成されてよく、クライアントデバイスの各々は同じユーザまたは異なるユーザと関連付けられ得る。メッセージングコア131は、マルチテナント方式で共有され得る、すなわち、複数のユーザおよび/またはクライアントデバイスがメッセージングコア131を同時に使用することができる。
【００４０】
本発明の異なる実施形態は、複数のメッセージングコアを有し得る。これらの実施形態において、各メッセージングコアは、1つまたは複数のクライアントデバイス(たとえば、クライアントデバイス110またはクライアントデバイス118)と通信するように構成され得る。IMバックエンドシステムは、複数のメッセージングコアと多数の接続を有し得る。それに加えて、メッセージングコア131と同様に、第2のIMバックエンドシステム134は、多数のマルチテナント方式で共有されるメッセージングコアからの接続を同時にサポートすることができる。
【００４１】
メッセージングコア131は、メッセージングコアにおいて公開されているAPIを利用するためのプログラマチックインターフェース132も備える。
【００４２】
メッセージングコア131は、第1のIMバックエンドシステム133および第2のIMバックエンドシステム134などの複数のバックエンドインスタントメッセージングシステムに接続する能力をクライアントデバイスにさらに提供する。ユーザは、それぞれのIMバックエンドシステム上の他のユーザと通信するために第1のIMバックエンドシステム133および第2のIMバックエンドシステム134に対するメタサービス137で提供される個別のアカウントを有していなければならない。第1のIMバックエンドシステム133は、明確に異なるクライアントアプリケーションまたはユーザインターフェースへの接続、さらにはメッセージングコア131への接続を含むものとしてよい。第1のIMバックエンドシステム133に接続されている明確に異なるクライアントアプリケーションは、エンドユーザが、第1のIMバックエンドシステム133のみを使用して他のエンドユーザと通信するか、またはメッセージを交換することを可能にする。
【００４３】
メッセージングコア131、およびIMバックエンドシステムのうちの少なくともいくつか(たとえば、第2のIMバックエンドシステム134)は、他にもあるがとりわけ、データおよびメッセージングアーカイブデータベース150ならびにプラグインリポジトリ160にアクセスするためにIMサービスアプリケーションプラットフォーム135とインターフェースする。IMサービスアプリケーションプラットフォーム135は、データおよびメッセージングアーカイブデータベース150にアクセスするための検索サービス136を備える。データおよびメッセージングアーカイブデータベース150は、ユーザおよびチャットルーム情報(名前、所有者、事業体、地域、など)ならびにユーザメタ識別子または会話メタ識別子を適切なIMバックエンドシステムに関連付けるIMバックエンドシステム識別情報(paul@companyA、aRoom@companyBなど)を記憶する。データおよびメッセージングアーカイブデータベース150は、IMバックエンドシステム(たとえば、第2のIMバックエンドシステム134)上で行われていた会話に対する会話履歴も含む。クライアントデバイスは、データおよびメッセージングアーカイブデータベース150上での、ユーザ、チャットルーム情報、および個人の間のルームまたは会話に関連付けられている履歴に関係する情報の検索を要求し得る。データおよびメッセージングアーカイブデータベース150は、IMサーバ130を使用してユーザによって送信されているメッセージのテーブルを含む。データベースが必要とする記憶域を管理可能なレベルに維持するために、定義されている日付以降にデータおよびメッセージングアーカイブデータベース150のテーブルは、メッセージを消去されるものとしてよい。データベースに記憶されているメッセージは、ユーザが既存のマルチパーティ永続的または一対一会話に加わるか、または一定期間の後に会話に再び加わるときに前の会話コンテキストを提供するためにIMサーバ130によって使用され得る。
【００４４】
検索サービス136は、メッセージングコア131を介してクライアントデバイス110からのインスタントメッセージングサービスに対するメッセージまたは要素検索に応答し、データおよびメッセージングアーカイブデータベース150から関連データを取り出し、メッセージングコア131を介してクライアントデバイス110に提供される一組の結果を返す。
【００４５】
IMサービスアプリケーションプラットフォーム135は、メタサービス137も含む。メタサービス137は、IMサービスに対するユーザ構成、会話構成、およびプラグイン構成を制御するプラグインリポジトリ160の管理層である。以下でより詳しく説明されているように、プラグインリポジトリ160は、クライアントデバイス110上にインストールされてよいプラグインのすべてを記憶しておき、ユーザ向けのインスタントメッセージングサービスを拡張(たとえば、カスタマイズまたは増強)する。プラグインは、クライアントデバイス上にユーザインターフェースを表示するためにアプリケーション(たとえば、ユーザインターフェース112)によって使用されるコード(たとえば、JavaScript(登録商標)ユーザインターフェースコード)への拡張である。
【００４６】
メタサービス137は、アカウントアクティブディレクトリ140を使用してクライアントデバイス110からのログイン要求を制御し、処理し得る。ログイン要求は、ライトウェイトディレクトリアクセスプロトコル(LDAP)を使用して処理されるものとしてよく、このプロトコルはインターネットプロトコル(IP)ネットワーク上で分散型ディレクトリ情報にアクセスし、維持するためのアプリケーションプロトコルである。ディレクトリ情報は、IMサーバ130によってホストされるインスタントメッセージングサービスにアクセスすることを許可されているユーザのリストを含む。第1のIMバックエンドシステム133および第2のIMバックエンドシステム134は、ログイン要求を処理するためにアクティブディレクトリ140にもアクセスし得る。
【００４７】
コンテナ111は、HTML、CSSおよびJavaScript(登録商標)ソースコードをレンダリングし、CometDプロトコルなどのプロトコルを使用してメッセージングコア131と通信するように構成されているアプリケーションである。コンテナは、ウェブブラウザであってよいが、いくつかのコンテキストにおいて、コンテナ111は、それが稼働しているオペレーティングシステムとの統合を構成する専用アプリケーションである。たとえば、コンテナ111が、専用アプリケーションである場合、コンテナ111は、クライアントデバイス110がロックされているかどうかを検出し、それによって、クライアントデバイス110にアクセスするためのユーザログインを要求するように構成され得る。コンテナ111は、専用アプリケーションとして、ウェブブラウザには利用可能でない追加のアプリケーションへのアクセスも含み得るか、またはそのアプリケーションと通信し得る。たとえば、クライアントデバイス110が、電話機能を有していた場合、ウェブブラウザは、マイクロフォンまたはウェブベースのカメラへのアクセスを許可し得ない。コンテナ111は、その一方で、マイクロフォンおよびウェブベースのカメラの両方へのアクセス権を有することができる。コンテナ111は、クライアントデバイスのシステム情報またはメッセージングコア131にその後送信され得るクライアントデバイス上に記憶されているファイルにアクセスする追加の機能も備える。コンテナ111は、ユーザがクライアントデバイス110上の別のアプリケーションでキーボードまたはマウスを使用しているときなどに、クライアントデバイス110上のユーザコマンドを検出することもできるものとしてよい。ウェブブラウザは、一般的に、この機能を備えていない。特に、ウェブブラウザは、一般的に、クライアントデバイスのオペレーティングシステムロック状態を検出すること、またはユーザ許可なしでファイルへのアクセスを許可することはできない。それに加えて、ウェブブラウザは、一般的に、ウェブブラウザ内で行われるユーザ活動のマウス移動およびキーボードアクションしか検出できない。
【００４８】
コンテナ111は、UIプロセッサ113、プラグインプロセッサ114、UIレンダラ115、およびプラグインレンダラ116のうちの1つまたは複数を備え得る。UIプロセッサ113は、メッセージを処理し、標準ユーザインターフェースファイルをレンダリングするための命令を提供するが、UIレンダラ115は、ユーザインターフェース112上に表示を生成するために使用されるユーザインターフェースファイルをレンダリングするか、または生成する。プラグインプロセッサ114は、メッセージを処理し、1つまたは複数のプラグインに基づき拡張ユーザインターフェースファイルをレンダリングするための命令を提供するが、プラグインレンダラ116は、1つまたは複数のプラグインに基づきユーザインターフェース112上に拡張表示を生成するために使用されるカスタムユーザインターフェースファイルをレンダリングするか、または生成する。
【００４９】
メッセージングコア131は、コンテナ111およびユーザインターフェース112(たとえば、クライアントデバイス110)と同じマシン上に配置され得るか、またはIMサーバ130上のクラウドベースのサービスとしてホストされ得、準拠ウェブブラウザまたはコンテナ111のいずれかを介してアクセスされ得る。
【００５０】
B.選択実施形態の実装の詳細
1.すべてのモダリティ
システム100は、多数の異なる方法で従来のIMシステムに対して改善をもたらす。一方法は、ユーザが単一のIMバックエンドシステムを使用して異なる第3のパーティとの複数の種類のIM会話(たとえば、一対一会話、マルチパーティ永続的会話、およびマルチパーティ非永続的会話)を行えるようにする方法である。いくつかの従来のシステムにおいて、クライアントサイドアプリケーションは、ユーザが1つのIMバックエンドシステムを使用して非永続的会話(たとえば、マルチパーティ非永続的会話)を行うことを可能にし得るが、永続的会話(たとえば、一対一およびマルチパーティ永続的会話)を行うためにはユーザが別のIMバックエンドシステムにアクセスすることが必要である。それに加えて、いくつかの従来のシステムでは、クライアントサイドアプリケーションは、ユーザが1つのIMバックエンドシステムを使用してマルチパーティ会話を行うことを可能にし得るが、一対一会話を行うためにはユーザが別のIMバックエンドシステムにアクセスすることが必要である。
【００５１】
それ自体は必ずしも3つすべての会話をホストする能力を有しない単一のIMバックエンドシステムを介してこれら3つの異なるタイプのIM会話をユーザが行えるようにすることによって、システム100は、IMバックエンドシステムが提供するのが永続的チャット会話であろうが非永続的チャット会話であろうが、マルチパーティ会話であろうが一対一会話であろうが関係なく、同じIMバックエンドシステムを使用して異なるパーティとのIMを介した通信に対する単一のシームレスなユーザエクスペリエンスをもたらし得る。この達成方法は以下のとおりである。
【００５２】
最初に、ユーザは、クライアントデバイス110上のユーザインターフェース112を介してシステム100にログインする。次いで、ユーザインターフェース112は、ログイン要求をメッセージングコア131に送信する。メッセージングコア131は、ログイン要求を、さらなる処理のためにIMサービスアプリケーションプラットフォーム135に転送する。
【００５３】
いくつかの実施形態において、ユーザは、ログインした後に、ユーザインターフェース112上に表示されている検索機能を使用して、すべての利用可能パーティ、およびユーザからアクセス可能な任意の永続的または非永続的マルチパーティ会話の検索を要求することができる。ユーザが特定の会話にアクセスできるかどうかは、ユーザおよび相手パーティ、またはユーザおよび永続的マルチパーティ会話に関わっている他者が対応するユーザアクセス資格証明書(たとえば、IMバックエンドシステムユーザ識別子)を使用して同じIMバックエンドシステムにアクセスし、接続することができるかどうかなどのファクターに基づく。ユーザ要求は、メッセージングコア131に送信され、その後、IMサービスアプリケーションプラットフォーム135に転送される。
【００５４】
検索要求に応答して、IMサービスアプリケーションプラットフォーム135は、検索サービス136およびメタサービス137を利用して、データおよびメッセージングデータベース150にすべての利用可能パーティおよび会話に関するクエリを実行する。検索要求に応答して返される検索結果は、ユーザおよび各利用可能パーティに対するユーザメタ識別子を含む。ユーザメタ識別子は、IMサービスにアクセスする各パーティに対するIMサービスに関連付けられている一意的なユーザ識別子である(たとえば、JSmith@IMserver)。それに加えて、各ユーザメタ識別子について、検索結果は、ユーザメタ識別子に関連付けられているIMバックエンドシステムユーザ識別子も含む(たとえば、JSmith@firstIMbackendsystemおよびJSmith@secondIMbackendsystem)。IMバックエンドシステムユーザ識別子は、IMバックエンドシステムによってホストされている会話にユーザがアクセスするためのIMバックエンドシステム(たとえば、第2のIMバックエンドシステム134、第1のIMバックエンドシステム133、または他のIMバックエンドシステム)に関連付けられている一意的なユーザ識別子である。
【００５５】
検索結果は、IMサービスによって提供される各会話に対する会話メタ識別子も含む。会話メタ識別子は、IMサービスに関係するIMバックエンドシステムによってホストされている各会話に対するIMサービスに関連付けられている一意的な会話識別子である(たとえば、convo1@IMserverまたはconvo2@IMserver)。それに加えて、各会話メタ識別子について、検索結果は、会話メタ識別子に関連付けられているIMバックエンドシステム会話識別子も含み得る(たとえば、xcpconvo1@XCPまたはmaconvo1@MindAlign)。IMバックエンドシステム会話識別子は、特定の会話について異なるパーティとメッセージを交換するために1つまたは複数のIMバックエンドシステム(たとえば、第2のIMバックエンドシステム134、第1のIMバックエンドシステム133)によって使用される一意的な会話識別子である。
【００５６】
検索結果は、名前、会社、および各IMバックエンドシステム(たとえば、第2のIMバックエンドシステム134、第1のIMバックエンドシステム133)に対する1つまたは複数のIMバックエンドシステム識別子のうちの1つまたは複数を含む、ユーザ、パーティ、または会話に関する追加の属性も含む。検索結果は、メッセージングコア131に送り返される。
【００５７】
次いで、メッセージングコア131は、対応するユーザもしくは会話メタ識別子および/または1つまたは複数の追加の属性とともにパーティおよび会話のリストを含むユーザインターフェース112に送信すべきユーザインターフェースファイルを生成する。メッセージングコア131が、IMバックエンドシステムユーザ識別子および会話識別子も送信し得るものとしてよいが、メッセージングコア131は、IMバックエンドシステムユーザ識別子および会話識別子をユーザに送信または公開するのを差し控えて、複数のIMバックエンドシステムが使用されているという事実を隠すものとしてよい。見えないよう隠すことによって、メッセージングコア131は、ユーザに対して、IMサービスを使用している間によりシームレスなユーザエクスペリエンスを提供することができる。IMバックエンドシステムユーザ識別子および会話識別子を送信する代わりに、メッセージングコア131は、それらをメッセージングコア131に関連付けられているデータベース内にローカルに記憶し得る。
【００５８】
a.会話に加わる
ユーザインターフェースファイルが、ユーザインターフェース112によって受け取られ、クライアントデバイス110上に表示された後、ユーザは、単一の相手パーティとの会話(すなわち、一対一会話)、マルチパーティ非永続的会話、または既存のチャットルーム(すなわち、マルチパーティ永続的会話)に加わることを選択し、および場合によっては、メッセージを送信または受信し得る。
【００５９】
ユーザ選択の後、ユーザインターフェース112は、以前に受信されているユーザインターフェースファイルからユーザに対するユーザメタ識別子と選択された会話に対する会話メタ識別子とを取り出し、会話に加わることを求める要求をメッセージングコア131に送信する。
【００６０】
メッセージングコア131は、この要求を受け取り、そのローカルデータベースまたはメモリに、ユーザに対するユーザメタ識別子および会話メタ識別子が同じIMバックエンドシステムへのIMバックエンドシステム(ユーザまたは会話)識別子を含むかどうかを決定するためのクエリを実行する。同じIMバックエンドシステムへの対応するIMバックエンドユーザまたは会話識別子を有していることによって、メッセージングコア131は、IMバックエンドシステムがその会話をホストすることができると決定し得る。そうでない場合、メッセージングコア131は、会話に加わることを求める要求を拒絶し、その拒絶をユーザインターフェース112に送信し、クライアントデバイス110上に表示する。代替的に、メッセージングコア131は、以下で説明されているように会話を新しいIMバックエンドシステムに転送することを試みることができる。この場合、メッセージングコア131は、会話に加わることを求める要求を受理し、その受理をユーザインターフェース112に送り返し、クライアントデバイス110上に表示する。次いで、ユーザによって選択された会話に送信されたその後のメッセージは、適切なIMバックエンドシステムに送信され、マルチパーティ永続的会話にアクセスするパーティに転送される。
【００６１】
b.会話を作成する
代替的に、ユーザは、2人もしくはそれ以上のパーティとの会話を始めることを選択することによってマルチパーティ非永続的会話を作成するか、または相手パーティとの会話を始めることを選択することによって一対一会話を作成することを選ぶことができる。
【００６２】
ユーザ選択の後、ユーザインターフェース112は、以前に受信されているユーザインターフェースファイルからユーザに対するユーザメタ識別子とすべてのパーティとを取り出し、マルチパーティ非永続的会話または一対一会話を作成することを求める要求をメッセージングコア131に送信する。
【００６３】
メッセージングコア131は、この要求を受け取り、そのローカルデータベースまたはメモリに、マルチパーティ非永続的会話または一対一会話に入っているユーザおよびすべてのパーティに対するユーザメタ識別子のすべてが同じIMバックエンドシステムへのIMバックエンドユーザ識別子を含むか、またはそれに関連付けられているかを決定するためのクエリを実行する。同じIMバックエンドシステムへのIMバックエンドユーザ識別子を有していることによって、メッセージングコア131は、IMバックエンドシステムがその会話をホストすることができると決定し得る。そうでない場合、マルチパーティ非永続的会話または一対一会話を作成することを求める要求は拒絶され、その拒絶はユーザインターフェース112に送り返され、クライアントデバイス110上に表示される。そうである場合、メッセージングコア131は、マルチパーティ非永続的会話または一対一会話を作成することを求める要求を、第2のIMバックエンドシステム134などのIMバックエンドシステムに送信する。要求は、ユーザおよび各パーティに対するIMバックエンドシステムユーザ識別子を含む。
【００６４】
複数のIMバックエンドシステムが利用可能である場合、IMバックエンドシステムを選択するために他のファクターが使用され得る。たとえば、一方のIMバックエンドシステムが平文を処理するのみであり、別のIMバックエンドシステムが、平文およびリッチテキストの両方を処理する場合、メッセージングコア131は、複数のデータ表現(たとえば、平文とリッチテキストの両方)をサポートするIMバックエンドシステムを選択する。
【００６５】
メッセージングコア131から要求を受信した後、IMバックエンドシステム(たとえば、第2のIMバックエンドシステム134)は、IMバックエンドシステム会話識別子を作成し、IMバックエンドシステム会話識別子をメッセージングコア131に送信する。
【００６６】
次いで、メッセージングコア131は、IMバックエンドシステム会話識別子とユーザおよびマルチパーティ非永続的会話または一対一会話に関連付けられている各パーティのユーザメタ識別子とをそのローカルメモリ内にセッションとして記憶する。
【００６７】
次いで、メッセージングコア131は、IMバックエンドシステム会話識別子をマルチパーティ非永続的会話または一対一会話に関連付けられているすべてのパーティに転送する。
【００６８】
それ以降、すべてのパーティは、対応する会話に関連付けられているメッセージを送受信し得る。
【００６９】
メッセージを処理し、会話をホストしているIMバックエンドシステムに送信する例示的な実装は、図2を参照しつつ説明されている。
【００７０】
図2は、本発明の少なくとも1つの実施形態によりメッセージを処理し、会話をホストするIMバックエンドシステムにメッセージを送信するための流れ図を示している。
【００７１】
ステップ201で、メッセージングコア131は、メタ識別子を含むインスタントメッセージを記述したデータを受信する。
【００７２】
ステップ202で、メッセージングコア131は、インスタントメッセージバックエンドシステムを識別して、インスタントメッセージを処理し、送信する。識別するステップは、インスタントメッセージに付属するメタ識別子がインスタントメッセージバックエンドシステムに関連付けられているインスタントメッセージバックエンドシステム識別子に対応しているかどうかを決定するステップを含む。
【００７３】
ステップ203で、メッセージングコア131は、インスタントメッセージをインスタントメッセージバックエンドシステムに準拠する準拠インスタントメッセージに変換する。
【００７４】
ステップ204で、メッセージングコア131は、準拠インスタントメッセージを記述したデータをインスタントメッセージバックエンドシステムに送信する。
【００７５】
c.メッセージ履歴記憶装置
各メッセージが、第2のIMバックエンドシステム134などの対応するIMバックエンドシステムによって取り出され、処理された後、IMバックエンドシステム、または代替的にメッセージングコア131は、メッセージをIMサービスアプリケーションプラットフォーム135に送信して、データおよびメッセージングアーカイブ150内に記憶する。
【００７６】
メッセージは、将来履歴を取り出すときのために対応するキーとともにレコードとして記憶される。一対一会話については、キーは、ユーザおよび相手パーティのユーザメタ識別子である。マルチパーティ永続的会話およびマルチパーティ非永続的会話については、キーは、対応する会話メタ識別子である。
【００７７】
ユーザは、要求をメッセージングコア131に送信することによって会話履歴にアクセスするものとしてよく、要求は、対応する会話へのキーを含む。いくつかの場合、たとえば、一対一会話およびマルチパーティ永続的会話では、IMバックエンドシステムではなく、メッセージングコア131およびIMサービスアプリケーションプラットフォーム135は、ユーザが相手パーティとの一対一会話に再び加わることを、両方のユーザがすでにメッセージを交換していた場合に要求するときに、またはユーザもしくは相手パーティがメッセージをすでに交換している場合にマルチパーティ永続的会話において、会話履歴を取り出し、会話履歴をユーザインターフェースファイルでクライアントデバイス110に送信することを自動的に行う。メッセージ履歴取り出しは、会話のタイプに関係なく、および会話が2つの異なるIMバックエンドシステム上で行われたかどうかに関係なく、過去または未来の会話に使用されるIMバックエンドシステムから独立している。独立したメッセージ履歴取り出しを行うことによって、どのIMバックエンドシステムが会話をホストしているかどうかに関係なく、IMサービスは、非永続的会話のみを提供するIMバックエンドシステムを永続的会話を含むようにも拡張することができる。
【００７８】
上述の機能の例示的な実装は、図3を参照しつつさらに説明される。
【００７９】
図3は、本発明の少なくとも1つの実施形態により単一のIMバックエンドシステムを使用して一対一、マルチパーティ非永続的、およびマルチパーティ永続的会話に対するメッセージを受信し、送信し、記憶し、取り出すための流れ図を示している。この例では、IMバックエンドシステムそれ自体は、3つすべてのタイプの会話をホストする機能を備えていない。
【００８０】
ステップ301で、メッセージングコア131は、一対一会話に関連して送信される第1のメッセージ、マルチパーティ非永続的会話に関連して送信される第2のメッセージ、およびマルチパーティ永続的会話に関連して送信される第3のメッセージを受信する。
【００８１】
ステップ302で、メッセージングコア131は、第1のメッセージを一対一会話に関連付けられている相手パーティに、第2のメッセージをマルチパーティ非永続的会話に関連付けられている2人またはそれ以上のパーティに、第3のメッセージを、単一のIMバックエンドシステムを使用してマルチパーティ永続的会話に関連付けられている2人またはそれ以上のパーティに、または単一のIMバックエンドシステムに送信する。
【００８２】
ステップ303で、単一のIMバックエンドシステム、またはメッセージングコア131のいずれかが、メッセージをIMサービスアプリケーションプラットフォーム135に送信した後、IMサービスアプリケーションプラットフォーム135は、メッセージをデータおよびメッセージングアーカイブ150に送信して記憶する。
【００８３】
ステップ304で、ユーザが一対一またはマルチパーティ非永続的会話に再び加わることを試みる場合、メッセージングコア131は、IMバックエンドシステムではなく、IMサービスアプリケーションプラットフォーム135を使用して、会話履歴を取り出す。
【００８４】
ステップ305で、メッセージングコア131は、会話履歴をユーザインターフェースファイルでクライアントデバイス110に送信する。
【００８５】
2.バックエンドシステムへの接続性
メッセージングコア131を使用することで、IMサーバ130は、第2のIMバックエンドシステム134および第1のIMバックエンドシステム133などの、複数のIMバックエンドシステムに接続することができ、これにより、ユーザが単一のクライアントサイドアプリケーション(たとえば、コンテナ111)を使用して異なるIMバックエンドシステム上にホストされている会話を介して他のパーティと通信することが可能になる。
【００８６】
しかしながら、会話が1つのIMバックエンドシステムによってホストされているとしても、IMサーバ130が会話を一方のIMバックエンドシステムから別のIMバックエンドシステムに転送する必要があり得る状況が生じることもある。たとえば、システム管理者が一方のIMバックエンドシステム上で保守を実行すると決定し、IMサーバ130から一時的に切断する必要が生じることがある。別の例として、一方のIMバックエンドシステムが別のIMバックエンドシステムによって提供されないリッチテキスト機能を提供する例が挙げられる。第3の例として、ユーザが第1のIMバックエンドシステムへのIMバックエンドシステムユーザ識別子を有することなく第1のIMバックエンドシステムによってホストされる複数の非永続的会話に加わることを試みている例も考えられる。この例では、可能ならば、会話を第2のIMバックエンドシステムに転送することで、すべてのユーザが会話に加わることを可能にし得る。
【００８７】
複数のIMバックエンドシステムに接続することによって、またIMサーバ130にこの接続能力を備えることによって、IMサーバ130は、ユーザに会話が転送されたことを知られることさえなく会話を異なるIMバックエンドシステムに転送することでユーザにシームレスなIMエクスペリエンスを提供することができる。
【００８８】
会話転送の例示的な実装は、図4を参照しつつ説明される。
【００８９】
図4は、本発明の少なくとも1つの実施形態により第1のIMバックエンドシステムによってホストされる会話を第2のIMバックエンドシステムに転送する方法のための流れ図を示している。
【００９０】
ステップ401で、メッセージングコア131またはメタサービス137のいずれかが、第1のIMバックエンドシステム上でホストされている会話を第2のIMバックエンドシステムに転送することを求める要求を受信する。要求は、明示的な要求であるか(たとえば、システム管理者が、第1のIMバックエンドシステム上で保守を実行することを決定し、それによって、転送を要求する)、または暗黙の要求である(たとえば、第1のIMバックエンドシステムではなく第2のIMバックエンドシステムへのアクセス権を有するパーティが、第1のIMバックエンドシステム上にホストされている会話に加わることを要求する)ものとしてよい。
【００９１】
ステップ402で、メッセージングコア131が個別に、またはメッセージングコア131およびメタサービス137が、会話を転送する。
【００９２】
例示的な実施形態において、会話タイプに基づき会話を転送するための異なるプロセスがあり得、その各々について以下で説明する。
【００９３】
会話が、一対一またはマルチパーティ非永続的会話である場合、メッセージングコア131は、第1のIMバックエンドシステムによってホストされている会話を第2のIMバックエンドシステムに動的に転送することができ、第2のIMバックエンドシステムは、その後、会話をホストすることになる。
【００９４】
一対一またはマルチパーティ非永続的会話を第2のIMバックエンドシステムに転送するために、メッセージングコア131は、上で説明されているように新しい会話を作成し得る。一実施形態において、新しい会話は、第2のIMバックエンドシステムがインスタントメッセージを処理し送信するための準拠IMバックエンドシステムであることをメッセージングコア131が識別した場合にのみ作成され得る。一実施形態において、準拠IMバックエンドシステムを識別するために、メッセージングコア131は、すべてのパーティに対するユーザメタ識別子のすべて(たとえば、第1のユーザメタ識別子および第2のユーザメタ識別子)が各々、同じIMバックエンドシステムに関連付けられているそれぞれのIMバックエンドシステムユーザ識別子(たとえば、第1のIMバックエンドシステムユーザ識別子および第2のIMバックエンドシステムユーザ識別子)に対応すると決定する。他の実施形態において、第2のIMバックエンドシステムへの会話の転送は、他の方式で行われ得る(すなわち、上で説明されているように新しい会話を作成せずに)。
【００９５】
会話が、マルチパーティ永続的会話である場合、メッセージングコア131は、メタサービス137とともに、第1のIMバックエンドシステムによってホストされている会話を第2のIMバックエンドシステムに転送することができ、第2のIMバックエンドシステムは、その後、会話をホストすることになる。
【００９６】
メッセージングコア131およびメタサービス137は、マルチパーティ永続的会話が第2のIMバックエンドシステム上で作成され、ホストされることが可能である場合にマルチパーティ永続的会話を識別して第2のIMバックエンドシステムに転送することができる。
【００９７】
会話(すなわち、第1の会話インスタンス)を転送するために、メタサービス137を使用して、第2の会話インスタンスがデータおよびメッセージングアーカイブデータベース150内に作成され得る。一実施形態において、第2の会話インスタンスは、第2のIMバックエンドシステムに関連付けられている新しいIMバックエンドシステム識別子が第1のIMバックエンドシステムに関連付けられている以前のIMバックエンドシステム識別子を置き換えることを除き、同じ会話メタ識別子を含む、第1の会話インスタンスと同じ情報のすべてと関連付けられている。本明細書全体を通して説明されているように、会話メタ識別子は、会話に関連付けられているメッセージ履歴を取り出すために使用される。それに加えて、第2の会話インスタンスに対するステータスインジケータは、アクティブに設定されるものとしてよく、第1の会話インスタンスに対するステータスインジケータは、インアクティブに設定され得る。他の実施形態において、会話を転送することは、上で説明されているのと異なる他の方式で行われてよい。
【００９８】
第2の会話インスタンスが作成された後、メッセージングコア131がメッセージを第1の会話インスタンスに関連付けられている第1のIMバックエンドシステムと交換する(たとえば、そのシステムにメッセージを送信するか、またはそのシステムから受信する)ことを試みた場合に、メッセージングコア131は、エラーメッセージを受信することになる。
【００９９】
所定のリトライ回数だけメッセージの交換をリトライした後、メッセージングコア131は、メタサービス137から第2のIMバックエンドシステム識別子を含む、第2の会話インスタンスに関連付けられている情報を取り出すことができる。メタサービス137は、第2の会話インスタンスに関連付けられているステータスインジケータを使用して、第2のIMバックエンドシステム識別子を含む、新しい会話情報がメッセージングコア131に送信される必要があると決定する。
【０１００】
代替的に、メタサービス137は、メッセージングコア131が第2の会話インスタンスの要求を行うことを必要とせずに、すべての関連情報とともに第2の会話インスタンスをメッセージングコア131にプッシュすることができる。
【０１０１】
次いで、ステップ403で、メッセージングコア131は、そのローカルメモリ内のそのセッション情報をその後更新し、対応する会話に対して第2のIMバックエンドシステムを使用してメッセージを交換する(たとえば、メッセージを送信する)。
【０１０２】
3.メッセージングコアとコンテナとの分離
図1を参照しつつ説明されているシステムにおいて、メッセージングコア131は、メッセージ処理を実行し、コンテナ111は、ユーザインターフェースを通じてレンダリングを実行する。
【０１０３】
従来のシステムでは、メッセージングコア131およびコンテナ111は、単一アプリケーションで実装され得る。しかしながら、従来システムには問題があり、それは、IMシステムにいくつかの変更がなされると、クライアントデバイス上に常駐するフロントエンドクライアントアプリケーションにも変更を加える必要があり得るという点である。たとえば、新しいIMバックエンドシステムが、IMサービスに追加された場合、従来システムでは、クライアントアプリケーションに修正を加え、およびクライアントデバイス110にクライアントアプリケーションを再インストールするか、または更新する必要がある。IMシステムに接続されているクライアントデバイスのすべてにおけるクライアントアプリケーションの必要な再インストールは、時間がかかり、コストが高く付くプロセスであり得る。
【０１０４】
この問題に対処するために、クライアントアプリケーションは、システム100に接続する、2つの別々の明確に異なる構成要素、すなわち、メッセージングコア131およびコンテナ111に分離される。メッセージングコア131は、コンテナ111がユーザインターフェース112を通じてレンダリングを実行している間にメッセージ処理を実行する。この構成を使用すると、メッセージングコア131が、IMサーバ130など、クライアントデバイス110のリモートにおいて実装される場合に、ユーザは、クライアントアプリケーションの再インストールまたは更新はもちろんのこと、IMシステムに変更が加えられたことすら知らなくてよい。それに加えて、メッセージングコア131をコンテナ111から分離することによって、メッセージングコア131がクライアントデバイス上にインストールされる場合であっても、すべての更新は代わりにメッセージングコア131に対して行われるので、コンテナ111は、異なるアプリケーションとの間で将来の更新を調整する必要なく異なるアプリケーションに組み込まれ得るか、または内蔵され得る。
【０１０５】
たとえば、システム100は、2つのIMバックエンドシステム、すなわち、第1のIMバックエンドシステム133および第2のIMバックエンドシステム134を備える。バックエンドシステムのうちの1つ、たとえば、第1のIMバックエンドシステム133は、実装した後でないと明らかにならない問題を引き起こしはじめ得る。この問題を解決するために、新しいコードセットが、第1のIMバックエンドシステム133と通信するアプリケーションにインストールされる必要がある。従来のシステムでは、クライアントアプリケーションは、修正され、クライアントデバイス上に再インストールされる必要がある。システム100では、メッセージングコア131だけが修正されればよい。メッセージングコア131が、コンテナ111から離れた位置にある場合には、コンテナ111には追加の再インストールは不要であり、ユーザインターフェースにおけるサービスの中断または変更をユーザが被る可能性を回避できる。
【０１０６】
従来システムでは、メッセージングコア131とコンテナ111との間に分離がない場合、クライアントIMアプリケーションは、複数のIMバックエンドシステムと通信することができる。使用時に、クライアントアプリケーションは、IMバックエンドシステムのうちの1つを実装するサーバと通信することを求める要求とともにメッセージを受信する。次いで、クライアントアプリケーションは、平文メッセージを伝達するための特定の通信プロトコルを使用してメッセージをIMバックエンドシステム準拠メッセージに変換する。
【０１０７】
本明細書で説明されている実施形態と関連して、メッセージングコア131およびコンテナ111は分離され、それにより、情報の余分な伝送が必要になる。この余分な伝送は、2つのソフトウェア構成要素の間で通信するために使用される事前指定されたアプリケーションプロトコルを有する抽象層として実装される。代替的に、アプリケーションプロトコルは、オープンシステムインターコネクションモデル(OSI)アプリケーション層を使用して2つの別々の明確に異なるデバイスの間で情報を通信するために使用される通信プロトコルである。アプリケーション層は、インターネットプロトコルコンピュータネットワーク上でプロセス間通信を行うように設計されている通信プロトコルおよび方法のために予約されている抽象層である。プロトコルの例は、ハイパーテキスト転送プロトコル(HTTP)またはCometDを含み得る。
【０１０８】
コンテナ111(すなわち、コンテナソフトウェアモジュール)およびメッセージングコア131(すなわち、メッセージングコアソフトウェアモジュール)の実装は、図5を参照しつつさらに説明される。
【０１０９】
図5は、本発明の少なくとも1つの実施形態によりコンテナおよびメッセージングコアを使用してメッセージを送信する方法のための流れ図である。
【０１１０】
最初に、ステップ501で、クライアントデバイス110を使用しているユーザが、パーティまたは会話にメッセージを送信する。
【０１１１】
次に、ステップ502で、コンテナ111がメッセージを受信する。
【０１１２】
ステップ503で、コンテナ111は、メッセージの送信者としてのユーザ、メッセージの受信者としての相手パーティ、およびタイムスタンプに関する情報などの、追加のメタデータとともに、HTTP/HTTPSおよびCometDなどの、アプリケーションプロトコルを使用してメッセージをカプセル化する。
【０１１３】
カプセル化は、メッセージを事前定義されたデータオブジェクトに変換するステップを伴い、これは本発明の範囲内で様々な異なる方法で遂行され得る。カプセル化を実行するために、例示的な一実施形態により、コンテナ111は、メッセージから様々なデータを読み出し、そのデータを、たとえば、JSONの記法を使用してデータオブジェクトメッセージに変換する。データオブジェクトメッセージは、データオブジェクトメッセージの実質的データを収容するメッセージペイロードを含む。データオブジェクトメッセージは、データオブジェクトメッセージを記述するメタデータも含む。データメッセージオブジェクトの一例として、「Bob, please give me a call.」のペイロードを収容するAliceからBobへのメッセージが、データオブジェクトメッセージ{"From":"Alice", "To":"Bob", "Payload":"Bob, please give me a call."}に変換され得る。
【０１１４】
カプセル化の後、ステップ504で、コンテナ111は、たとえば、CometDを使用してデータオブジェクトメッセージ(すなわち、カプセル化されたメッセージ)をメッセージングコア131に送信する。データオブジェクトメッセージは、追加のメタデータおよびプロトコル特有のデータを含み得る。たとえば、データオブジェクトメッセージは、最終的にメッセージを受信するパーティを識別するターゲット終点を含み得る。
【０１１５】
データオブジェクトメッセージは、メッセージングコア131上でホストされるセッションに関連付けられ得る。データオブジェクトメッセージは、セッション情報も含み得る。セッション情報は、コンテナ111およびメッセージングコア131の両方がデータを交換できるようなコンテナ111からメッセージングコア131への特定の通信チャネル(すなわち、セッション)を記述する。セッションは、メッセージングコア131とコンテナ111との間のセッションを識別するセッション識別子に関連付けられ得る。データオブジェクトメッセージは、HTMLアプリケーション層において、セッション認証のためにメッセージングコア131からすでに受信されているクッキーを含み得る。クッキーは、セッション識別子を含んでいてよい。
【０１１６】
コンテナ111からメッセージングコア131に送信されたデータオブジェクトメッセージは、異なる表現を有し得る。表現は、平文表現またはリッチテキスト表現を含む。表現を識別するために、データオブジェクトメッセージは、平文およびリッチテキストと呼ばれるサブフィールドを伴うコンテンツと呼ばれるフィールドを含む。メッセージングコア131は、選択されたフィールドおよびサブフィールドに基づきデータオブジェクトメッセージを処理する。
【０１１７】
データオブジェクトメッセージをメッセージングコア131に送信するために、コンテナ111は、たとえば、HTTP/HTTPSおよびCometDといった、通信プロトコルを使用してカプセル化されたデータオブジェクトメッセージを送信する。
【０１１８】
ステップ505で、メッセージングコア131がコンテナ111からデータオブジェクトメッセージを受信した後に、メッセージングコア131は、カプセル化されたデータオブジェクトメッセージのメタデータを処理し、カプセル化されたデータオブジェクトメッセージに対する適切なIMバックエンドシステムを決定する。
【０１１９】
メタデータを処理するために、メッセージングコア131は、データオブジェクトメッセージを読み出し、メタデータを抽出する。メタデータは、メッセージの送信者、メッセージの受信者、および表現(たとえば、平文、リッチテキストなど)を含み得る。メッセージの送信者は、クライアントデバイス110のユーザのユーザメタ識別子を使用して識別され得る。メッセージの受信者は、受信者のユーザメタ識別子を使用して識別され得る。
【０１２０】
次に、メッセージングコア131は、ユーザが会話を作成していないか、または加わっていない場合に、「会話を作成する」において上で説明されているように新しい会話を作成するか、または「会話に加わる」において上で説明されているように新しい会話に加わる。
【０１２１】
次いで、ステップ506で、メッセージングコア131は、データオブジェクトメッセージを解析して、IMバックエンドシステムのメッセージングプロトコルに基づき、または使用して、データオブジェクトメッセージを、IMバックエンドシステムに準拠するメッセージに変換(すなわち、フォーマット)する。たとえば、IMバックエンドシステムがXCPである場合、メッセージングコア131は、XMPPへの準拠について要求されているとおりにメッセージを変換する。
【０１２２】
次は、XMPPメッセージの一例である。
<message
to='Bob@XCP'
from='Alice@XCP'
type='chat'
xml:lang='en'>
<body>Bob, please give me a call.</body>
</message>
【０１２３】
メッセージングコア131が、ペイロードをIMバックエンドシステム準拠メッセージに変換した後、ステップ507で、メッセージングコア131は、適切な通信プロトコルを使用してIMバックエンドシステム準拠メッセージをメッセージングコア131によって決定された対応するIMバックエンドシステムに送信する。
【０１２４】
II.インスタントメッセージング機能を拡張するためのプラグインの使用
プラグインは、既存のコードを拡張するソフトウェアの断片であり、クライアントデバイス110上で実行されるときに、ユーザインターフェース、メッセージコンテンツ、およびユーザのインタラクティブな操作がクライアントデバイス110のユーザに表示される仕方など、インターフェースの異なる態様を制御する様々なコンテキストにおいて、インスタントメッセージングアプリケーション、およびより具体的には、ユーザインターフェースを拡張するように適用され得る。コンテナ111が、メッセージをサブミットし、受信すると、プラグインは、コンテナ111がメッセージをインタラクティブに操作する仕方、およびユーザインターフェース112がメッセージを表示する仕方を変える追加の拡張機能を付与することができる。プラグインは、コンテキストに応じて様々な仕方で適用され得る(たとえば、特定のユーザに対する、または特定の会話中の、特定のテキストパターンの表示または伝送を制限するコンテンツフィルタリング)。
【０１２５】
また、いくつかのプラグインが、階層的なインタラクティブな操作において同じコンテキストに適用され得る。
【０１２６】
A.動的拡張
従来システムでは、クライアントデバイス上のインスタントメッセージアプリケーションのユーザインターフェースへの変更、修正、または更新は、開発者またはユーザによって、ユーザがインスタントメッセージングアプリケーションを使用しているとき以外の時間に開始される。この結果、ユーザに対するユーザインターフェースは静的なものとなる、すなわち、ユーザインターフェースは、ユーザがインスタントメッセージングアプリケーションを使用している間は変化しない。システム100は、クライアントデバイス上のインスタントメッセージングアプリケーションに対する、すなわち、ユーザがIMサービスを使用している間、たとえユーザがインスタントメッセージングアプリケーションを使用中であってもユーザインターフェースを拡張するプラグインを動的に配信することによって、ユーザインターフェース112を動的に拡張する機能を提供する。
【０１２７】
より具体的には、カスタムユーザインターフェースの動的配信は、アプリケーションコンテキストが変化した(たとえば、会話に加わるか、またはインスタントメッセージングサービスにログインした)場合、IMセッションの持続時間の間(たとえば、IMセッションが終了するまで)、または別のアプリケーションコンテキストが変化する(たとえば、会話から退出するか、または会話へのアクセスを終了する)まで、IMセッションに対してIMサーバ130がプラグインをクライアントデバイス110に配信する能力である。IMセッションは、ユーザがインスタントメッセージングアプリケーションを使用してIMサービスにアクセスしているときの期間である。IMセッションは、ユーザが最初にIMサービスへのアクセスを要求したときに始まり、ユーザがIMサービスから切断したときに終わる。IMサービスへのその後の接続はどれも、新しい、異なるIMセッションを表す。強化するためのプラグインの自動デプロイは、いくつかの異なる拡張を同じユーザセッションに適用することを可能にするが、コンテキストに適しているときのみ受けることができる。動的デプロイは、すべてのプラグインをすべてのユーザまたは拡張を機能させるために必要なファイルを手動でダウンロードするユーザにデプロイすることを必要とせずに、多くのプラグインを作成し、集中管理することを可能にもする。
【０１２８】
これは、新しいプラグインがそのコンテキストに適用されるときに自動的にダウンロードされるので、エンドユーザに対して顕著な変更をもたらすことなくプラグインバージョンへの更新がシステム上で管理され、更新され得ることも意味する。
【０１２９】
図6では、本発明の少なくとも1つの実施形態によりインスタントメッセージングユーザインターフェース拡張をクライアントデバイス110に動的に配信する方法のための流れ図が示されている。
【０１３０】
最初に、クライアントデバイス110は、ユーザインターフェース112をユーザに表示する。ユーザインターフェース112は、ユーザによって選択されたときに、IMサーバ130によってホストされているインスタントメッセージングサービスにログインすることを求める要求を送信するか、または会話に加わることを求める要求を送信することをクライアントデバイス110に行わせるユーザ選択可能アイコンを含む。異なる実施形態において、クライアントデバイスは、人または機械によって操縦され得る。
【０１３１】
ステップ601で、ユーザインターフェース112は、ユーザによって実行されたユーザアクションの指示を受け取る。ユーザアクションは、ログインを求める要求、会話を作成するか、または加わることを求める要求、プラグインをダウンロードすることを求める要求などであってよい。
【０１３２】
ステップ602で、ユーザインターフェース112は、IMサーバ130によってホストされているインスタントメッセージングサービスにログインするか、または会話を作成する/会話に加わることを求める要求をメッセージングコア131に送信する。メッセージングコア131への要求は、プラグインをダウンロードすることを求める要求であってもよい。要求は、ユーザのユーザメタ識別子、会話メタ識別子、または1人もしくは複数のパーティのユーザメタ識別子などの、識別子を含み得る。識別子は、エンドユーザの識別情報、エンドユーザの位置、事業体、会社名などのエンドユーザを記述したデータを含み得る。識別子は、デバイス能力などの、デバイスを記述したデータを含み得る。たとえば、いくつかのデバイスは、単純な平文メッセージまたはリッチテキストメッセージをレンダリングすることができるだけであってもよい。いくつかのデバイスは、デバイスが制限されたインターネット帯域幅を有するときなどに、低忠実度低帯域幅デバイスであってもよい。これらのシナリオにおいて、プラグインは、リッチテキスト、画像などの表示を制限するために使用され得る。
【０１３３】
要求が一対一会話を作成することを求める要求である場合に、要求は、少なくともユーザメタ識別子および相手パーティのユーザメタ識別子(すなわち、相手パーティ識別子)を含む。
【０１３４】
要求が非永続的マルチパーティ会話を作成するものである場合に、要求は、少なくともユーザメタ識別子および2人またはそれ以上のパーティの2つまたはそれ以上のユーザメタ識別子を含む。
【０１３５】
要求が非永続的マルチパーティ会話または永続的マルチパーティ会話に加わることを求める要求である場合、要求は、会話識別子を含む。要求は、メッセージ伝送チャネルに関連付けられているアドレス(たとえば、URL)も含んでいてもよい。
【０１３６】
ユーザメタ識別子は、IMサービスを使用するクライアントデバイス110のユーザ、または別のパーティを識別する文字列および/または数列である。
【０１３７】
クライアントデバイス110は、メッセージを送受信するためにユーザインターフェース112とIMサーバ130のメッセージングコア131との間でインタラクティブな操作を行うためにJavaScript(登録商標)およびCometDに頼る。HTML、CSS、およびJavaScript(登録商標)は、コンテンツをユーザインターフェース112内に表示するために使用される。
【０１３８】
ステップ603で、メッセージングコア131がユーザインターフェース112から要求を受信した後、メッセージングコア131は、投稿要求をメタサービス137に送信する。投稿要求は、ユーザアクションがログインまたは会話ベースであったかを指定し得る。ユーザアクションが、ログインベースである場合、投稿では、ユーザログイン情報を識別する。ユーザアクションが、会話ベースである場合、投稿要求は、要求された会話または会話のタイプを識別し得る。投稿要求は、ユーザおよび場合によっては追加のパーティなどの、1つもしくは複数のユーザメタ識別子、ならびに/または会話メタ識別子も含み得る。会話は、会話メタ識別子を使用して識別される。会話メタ識別子は、IMサービスによって使用される会話の一意的な識別子である。会話メタ識別子は、1つまたは複数のIMバックエンドシステム会話識別子に関連付けられている。会話メタ識別子は、会話のタイプ(たとえば、一対一会話、マルチパーティ非永続的会話、またはマルチパーティ永続的会話)も識別し得る。
【０１３９】
投稿要求は、IMバックエンドシステム識別子、会話タイプ識別子、永続的マルチパーティ会話識別子、永続的マルチパーティ会話メンバーシップ識別子、非永続的マルチパーティ会話識別子、非永続的マルチパーティ会話メンバーシップ識別子、および/または相手パーティ識別子も含み得る。
【０１４０】
IMバックエンドシステム識別子は、クライアントデバイス110のユーザによってアクセスされるIMシステムを識別する文字列および/または数列である。IMシステムの例は、第1のIMバックエンドシステム133および第2のIMバックエンドシステム134を含む。
【０１４１】
会話タイプ識別子は、ユーザが加わることを要求している会話のタイプを識別する文字列および/または数列である。会話タイプの例は、一対一会話、非永続的マルチパーティ会話、および永続的マルチパーティ会話を含む。
【０１４２】
永続的マルチパーティ会話識別子は、ユーザが加わるか、または作成することを試みている一意的な永続的マルチパーティ会話を識別する文字列および/または数列である。
【０１４３】
永続的マルチパーティ会話メンバーシップ識別子は、永続的マルチパーティ会話の一意的な永続的マルチパーティ会話メンバーシップを識別する文字列および/または数列である。
【０１４４】
非永続的マルチパーティ会話識別子は、ユーザが加わることを試みている一意的な非永続的マルチパーティ会話を識別する文字列および/または数列である。
【０１４５】
非永続的マルチパーティ会話メンバーシップ識別子は、非永続的マルチパーティ会話の一意的な非永続的マルチパーティ会話メンバーシップを識別する文字列および/または数列である。
【０１４６】
相手パーティ識別子は、ユーザ以外の会話の別のメンバーを識別する文字列および/または数列である。
【０１４７】
ステップ604で、メタサービス137がメッセージングコア131から投稿を受け取った後、メタサービス137は、データおよびメッセージングアーカイブデータベース150に対してクエリを実行して、インスタントメッセージングサービスにログインするか、または会話に加わるユーザにマッピングするプラグインがあるかどうかを識別する。クエリは、メッセージングコア131からの投稿に情報を含めることができ、これはユーザログイン情報、IMサービスのユーザまたはパーティの1つまたは複数のユーザメタ識別子、会話メタ識別子、会話タイプ識別子、IMバックエンドシステム識別子、永続的マルチパーティ会話識別子、永続的マルチパーティ会話メンバーシップ識別子、非永続的マルチパーティ会話識別子、非永続的マルチパーティ会話メンバーシップ識別子、および相手パーティ識別子のうちの1つまたは複数を含む。
【０１４８】
ステップ605で、メタサービス137は、データおよびメッセージングアーカイブデータベース150から結果を受け取る。データベースクエリの結果で、クライアントデバイス110上のダウンロードに1つまたは複数のプラグインが必要かどうかを識別する。プラグインが必要な場合、クエリ結果は、各必要なプラグインに対するプラグイン名およびプラグインユニフォームリソース識別子(URI)のうちの少なくとも一方を含む。
【０１４９】
ステップ606で、メタサービス137がデータおよびメッセージングアーカイブデータベース150から結果を受け取った後、メタサービス137は、メッセージングコア131からAPIコールへの応答を供給する。APIコールへの応答は、各プラグインに対して、(i)プラグインが必要ないことを示す指示または(ii)プラグイン名および/もしくはプラグインURIを含む。
【０１５０】
ステップ607で、APIコールへの応答が、プラグインが必要であることを指示している場合、メッセージングコア131は、プラグインが、クライアントデバイス110上のコアアプリケーションJavaScript(登録商標)ユーザインターフェースコードとともにキャッシュされているかどうかを決定する。プラグインがキャッシュされているかどうかを決定するために、メッセージングコア131は、プラグイン、すなわちプラグインコードがクライアントデバイス110に送信されたことを指示するデータに関してそのローカルキャッシュをチェックする。
【０１５１】
ステップ608で、APIコールへの応答で識別された各プラグインについて、APIコールへの応答が、プラグインが必要であることを指示し、メッセージングコア131が、プラグインがキャッシュされていないと決定した場合、メッセージングコア131は、検索サービス136を使用してプラグインリポジトリ160からプラグインをダウンロードするためファイル入出力(I/O)コール要求を送信する。要求は、各プラグインに対するプラグインURIを含む。ファイルI/Oコールの一例はfile.get('/theplugindir/1.zip')である。このファイルI/Oコールは、プラグインリポジトリ160内のフォルダパスが予め決められ、構成パラメータによって識別されている場合にファイルを取り出すjava(登録商標)ファイルシステムコールであり、名前は、要求されているプラグインの番号によって決定される。
【０１５２】
ステップ609で、メッセージングコア131は、検索サービス136を使用してプラグインリポジトリ160から1つまたは複数のプラグインを収容しているzipファイルをダウンロードする。
【０１５３】
ステップ610で、zipファイルをダウンロードした後に、メッセージングコア131は、zipファイルに収容されている1つまたは複数のプラグインファイルを読み出し、プラグインファイルをコアアプリケーションJavaScript(登録商標)ユーザインターフェースコードにロードする。他の実施形態では、代替的な圧縮ファイルまたは場合によっては未圧縮ファイルを含む、異なるファイルタイプを使用して、プラグインを送信することができることは理解されるであろう。
【０１５４】
ステップ611で、メッセージングコア131は、コアアプリケーションJavaScript(登録商標)ユーザインターフェースコードをユーザインターフェースファイルとしてユーザインターフェース112に提供する。
【０１５５】
ステップ612で、メッセージングコア131からユーザインターフェースファイルを受信した後、または代替的に、メッセージングコア131が、コアアプリケーションJavaScript(登録商標)ユーザインターフェースコードとともに1つまたは複数のプラグインがキャッシュされていると決定した後に、ステップ607で、ユーザインターフェース112は、コアアプリケーションJavaScript(登録商標)ユーザインターフェースコードまたは以前にキャッシュされていたコアアプリケーションJavaScript(登録商標)ユーザインターフェースコードを使用して拡張されたユーザインターフェースをレンダリングする。拡張されたインターフェースは、たとえば、ユーザインターフェース112上に表示されるバナーの変更、表示されるテキストのフォントタイプの変更、およびIMサービスを使用して交換されるすべてのテキストメッセージを表示するチャットウィンドウまたはクライアントデバイス110のユーザからメッセージを受信するためのメッセージインターフェースウィンドウなどのウィンドウの配置を含み得る。それに加えて、プラグインは、ユーザインターフェース112を使用して送信または受信されるメッセージを拡張することもできる(たとえば、メッセージコンテンツフィルタリングまたはユーザインターフェース112へのビデオの表示)。
【０１５６】
ステップ613で、ステップ606におけるAPIコールへの応答が、プラグインが必要ないことを指示している場合、メッセージングコア131は、ユーザインターフェース112に追加のカスタマイズを行うことなくコアアプリケーションJavaScript(登録商標)ユーザインターフェースコードをユーザインターフェースファイルとして送信する。
【０１５７】
ステップ614で、メッセージングコア131から追加のカスタマイズなしでユーザインターフェースファイルを受信した後、ユーザインターフェース112は拡張されていない表示インターフェースをレンダリングする。
【０１５８】
いくつかの実施形態において、管理者は、プラグインの自動デプロイを管理し得る。たとえば、管理者は、すべてのユーザ、または特定の個人もしくはシステム関係特性を有するユーザはプラグインをロードする必要があることをプログラムにより指令することができる。この場合、メッセージがクライアントデバイスに送信され、プラグインをダウンロードするようクライアントデバイスに指令するものとしてよい。
【０１５９】
B.粒度の細かい拡張
プラグインは、システムワイドコンテキスト、ユーザワイドコンテキスト、会話タイプコンテキスト、永続的マルチパーティ会話コンテキスト、永続的マルチパーティメンバーシップコンテキスト、および相手パーティコンテキストを含む、多数の異なるコンテキスト(たとえば、インスタントメッセージングアプリケーションに適用されるべき、カスタマイズまたは機能強化などの、異なる拡張を必要とし得る状況)においてユーザインターフェースに適用され得る。
【０１６０】
システムワイドコンテキストは、プラグインが特定のIMバックエンドシステム上のユーザアカウントを有するユーザに対するユーザインターフェースに適用され、特定のIMバックエンドシステムに関連付けられているすべてのクライアントデバイスを伴うすべての会話およびメッセージをインタラクティブに操作することができることを意味する。
【０１６１】
システムワイドコンテキストプラグインの一例は、会社の決算発表がまもなくあることをすべてのユーザに知らせるためにアプリケーションの上部にバナーを配置するプラグインである。このプラグインは、週の初めに適用され、発表の後に取り除かれるものとしてよい。システムワイドコンテキストプラグインを取り出すために、プラグインに対する要求は、IMバックエンドシステム識別子を含む必要がある(すなわち、関連するシステムを識別する必要がある)。
【０１６２】
ユーザワイドコンテキストは、プラグインがユーザインターフェースに適用され、会話およびメッセージがクライアントデバイス110の特定のユーザによって送信または受信されることを意味する。プラグインが適用されていないユーザからは、ユーザインターフェース112でプラグイン拡張、または機能の変更が見えない。ユーザワイドコンテキストプラグインの一例は、すべての新しいメッセージを赤色の18ptのフォントでユーザインターフェース112に表示させるプラグインである。ユーザワイドコンテキストプラグインを取り出すために、プラグインに対する要求は、ユーザメタ識別子を含む必要がある。
【０１６３】
会話タイプコンテキストは、プラグインがユーザインターフェースに適用され、メッセージが与えられたタイプ、すなわち、一対一、非永続的マルチパーティ、または永続的マルチパーティ会話のユーザについて送信または受信されることを意味する。プラグイン拡張は、ユーザインターフェース112内のそのタイプのすべての会話に対して適用される。会話タイプコンテキストプラグインの一例は、ユーザによって相手パーティに送信された最後の電子メールをインスタントメッセージングサービス内のすべての一対一会話に表示させるプラグインである。会話タイプコンテキストプラグインを取り出すために、プラグインに対する要求は、少なくとも会話タイプ識別子、およびいくつかの場合において、IMシステム識別子を含む必要がある。
【０１６４】
永続的マルチパーティ会話コンテキストは、プラグインがユーザインターフェースに適用され、メッセージが単一のまたは特定の永続的マルチパーティ会話のユーザについて送信または受信されることを意味する。永続的マルチパーティ会話コンテキストプラグインの一例は、特定の永続的マルチパーティ会話に対してユーザインターフェース112に特定のダッシュボードを表示するプラグインである。永続的マルチパーティ会話コンテキストプラグインを取り出すために、プラグインに対する要求は、会話メタ識別子を含む必要がある。
【０１６５】
永続的マルチパーティ会話メンバーシップコンテキストは、プラグインが特定の永続的マルチパーティ会話におけるユーザメンバーシップロールに基づき特定の永続的マルチパーティ会話について特定のユーザによって送信または受信されるメッセージに適用されることを意味する。会話におけるパーティのメンバーシップロール(たとえば、参加者、所有者など)に基づき、パーティは関連付けられているプラグインを受信する。対応するメンバーシップロールを有していない会話に参加しているユーザは、そのユーザインターフェースにロードされるプラグインを有しない。永続的マルチパーティ会話メンバーシップコンテキストプラグインを取り出すために、プラグインに対する要求は、永続的マルチパーティ会話に関連付けられている永続的マルチパーティ会話メンバーシップ識別子を含む必要がある。
【０１６６】
永続的マルチパーティ会話メンバーシップコンテキストの一例は、特定の永続的マルチパーティチャットルームにおける与えられたメンバーシップロールを有するユーザがそのチャットルームに加わったときに、そのユーザに、チャットルーム内で議論されているトピックを表示するプラグインによってレンダリングされるダッシュボードが見えるというものである。対照的に、異なるメンバーシップロールを有する別のユーザには、ユーザのディスプレイ内のダッシュボードなしの標準的な会話ビューしか見えない。ダッシュボードカスタマイズの別の例は、ヘルプデスクチャネルを伴うものである。一方のユーザ、ヘルプデスクオペレータに、現在の待ちキューが表示されている状態で、ユーザインターフェース内のチャネルの上部に小さなウィンドウが見えるものとしてよい。別のユーザである、ヘルプデスクスーパーバイザは、キューおよびヘルプデスクオペレータから応答する時間の両方を示す異なるビューを有し得る。チャットルームへの異なるビューを異なるユーザに提供するプラグインの他の例は、本発明の範囲内にある。
【０１６７】
C.相手パーティ拡張
相手パーティコンテキストは、プラグインが会話への相手パーティ参加者に基づきユーザに適用されることを意味する。別の相手パーティとの会話に加わる参加者は、参加者のユーザインターフェースにおいてプラグイン拡張を受け取る。相手パーティコンテキストプラグインの機能は、ユーザとメッセージを交換する相手パーティのコンテキストに基づきカスタマイズを行うことを可能にする。
【０１６８】
相手パーティコンテキストプラグインの一例は、相手パーティ識別子に関連付けられているユーザのピクチャを表示するプラグインである。そのユーザとの会話に加わる相手パーティユーザに、そのユーザインターフェース内でユーザのピクチャが見える。ユーザ自身は、プラグインをロードしないか、またはピクチャが見えない。
【０１６９】
相手パーティコンテキストプラグインの別の例は、ユーザに対して、ユーザが同僚と通信するときに、同僚の以前の応答、または同僚の部門、免責条項、識別子、またはカスタマイズされた挨拶のブランディングの評価スコアを表示するプラグインである。
【０１７０】
インスタントメッセージングコンテキストにおいて、リアルタイムメッセージングは対話に関するものなので、会話のその時点における他の参加者に関する追加の情報を受信することが望ましいことが多い。参加者に関するコア情報は、アプリケーション全体の一部として配信されるが、相手パーティカスタマイズは、参加者に対する追加の非標準的な視覚的および機能的挙動の実装を可能にする。
【０１７１】
相手パーティコンテキストプラグインを取り出すために、プラグインに対する要求は、相手パーティ識別子を含む必要がある。
【０１７２】
III.拡張を実装するためのメッセージ処理
A.出力メッセージを処理する
図7には、本発明の少なくとも1つの実施形態によりインスタントメッセージングのコンテキストにおいてプラグインを使用して出力メッセージを処理する方法のための流れ図が示されている。
【０１７３】
一般的に、システム100は、メッセージを送信するときに、2つのアクション、すなわち、対応するIMバックエンドシステム(たとえば、第2のIMバックエンドシステム134)へのメッセージの送信およびローカルユーザインターフェース内でのそのメッセージのレンダリングを実行する。これは、送信済みメッセージを対応するIMバックエンドシステムから受信するのを待つこと、またはメッセージ履歴応答をサーバに要求することに比べてユーザへの応答を高速化する。
【０１７４】
ステップ701で、ユーザインターフェース112は、ユーザ選択可能アイコン(たとえば、「send」ボタン)が選択されたことおよびメッセージを指示するユーザからのユーザアクションを受け取る。
【０１７５】
ステップ702で、ユーザインターフェース112がユーザからユーザアクションを受け取った後、ユーザインターフェース112は、メッセージをユーザからUIプロセッサ113に送信する。
【０１７６】
ステップ703で、ユーザインターフェース112からメッセージを受信した後、UIプロセッサ113は、相手パーティまたは別のパーティのユーザインターフェース上にメッセージをレンダリングするためのプラグインが存在しているかどうかを決定する。プラグインが存在しているかどうかを決定するために、UIプロセッサ113は、プラグインのリストを記憶しておき、次いでそのリストをチェックして、相手パーティまたは別のパーティのユーザインターフェース上にメッセージをレンダリングするためのプラグインがあるかどうかを決定することが可能である。
【０１７７】
ステップ704で、相手パーティまたは参加者のユーザインターフェース上にメッセージをレンダリングするためのプラグインが、ステップ703で決定されたとおりに存在している場合に、UIプロセッサ113は、メッセージをプラグインプロセッサ114に送信する。
【０１７８】
ステップ705で、UIプロセッサ113からメッセージを受信した後、プラグインプロセッサ114は、1つまたは複数のプラグインを使用してメッセージを処理する。プラグイン処理は、様々な異なる仕方でメッセージにおいてメッセージを修正するステップを含み得る。たとえば、プラグインは、メッセージ内の「アカウント(account)」という単語を削除するか、または「緊急(urgent)」という単語をボールド体にすることによってメッセージを修正することが可能である。プラグインは、たとえば、メッセージに含まれている特定の単語に基づき、別の機能をトリガーすることも可能である。プラグインは、他のプラグインもしくはベースコードがメッセージに適用されることを防ぐ、またはその逆に、他のプラグインおよび/もしくはベースコードがメッセージをさらに処理することを許すことも可能である。
【０１７９】
次に、プラグインプロセッサ114は、UIプロセッサ113にプラグイン応答を送信する。プラグイン応答は、メッセージに適用されたプラグインに基づきフォーマットされたとおりのメッセージを含む。
【０１８０】
ステップ706で、プラグインがコンテナ111内に存在していた場合にプラグインプロセッサ114からプラグイン応答を受信した後、またはプラグインがコンテナ111内に存在していなかった場合にユーザインターフェース112からメッセージを受信した後、UIプロセッサ113は、メッセージ(元のメッセージまたはフォーマットされたメッセージのいずれか)およびメッセージメタデータをメッセージングコア131に送信するCometDパブリッシュコマンドを呼び出す。メッセージメタデータは、メッセージを送信したユーザ、およびメッセージを受信しているパーティまたは会話に関する情報を含み得る。
【０１８１】
ステップ707で、UIプロセッサ113からメッセージおよびメッセージメタデータを受信した後、メッセージングコア131は、IMバックエンドシステム(たとえば、第2のIMバックエンドシステム134)に関連付けられている通信プロトコル(たとえば、XMPP)に従ってUIプロセッサ113からのメッセージを準拠IMバックエンドシステムメッセージにフォーマットする。次いで、メッセージングコア131は、メッセージを解析して、ペイロード(すなわち、メッセージデータ)を抽出し、IMバックエンドシステムによって使用される適切な通信プロトコルを使用してそのメッセージをメッセージペイロードとともに準拠IMバックエンドシステムメッセージに変換する。
【０１８２】
次に、メッセージングコア131は、準拠IMバックエンドシステムメッセージをIMバックエンドシステム(たとえば、第2のIMバックエンドシステム134)に送信する。
【０１８３】
ステップ708で、準拠IMバックエンドシステムメッセージがIMバックエンドシステムに送信された後、UIプロセッサ113は、ユーザインターフェース112上のユーザレンダリングに関係するプラグインがコンテナ111上に存在しているかどうかを決定する。プラグインが存在しているかどうかを決定するために、UIプロセッサ113は、プラグインのリストを記憶しておき、次いでそのリストをチェックして、クライアントデバイス110のユーザインターフェース112上にメッセージをレンダリングするためのプラグインがあるかどうかを決定することが可能である。
【０１８４】
ユーザインターフェース112上にメッセージをレンダリングすることに関係するプラグインが存在する場合、UIプロセッサ113は、ステップ709で、メッセージをプラグインプロセッサ114に送信する。
【０１８５】
ステップ710で、UIプロセッサ113からメッセージを受信した後、プラグインプロセッサ114は、該当するプラグインに従ってメッセージを処理し、メッセージをプラグインレンダラ116に送信する前にユーザのユーザインターフェース112上に必要な高められたレンダリングを行う。プラグインは、メッセージコンテンツを修正するか、またはプラグイン内に収められているコード機能を呼び出して、本明細書全体を通して説明されている他のカスタマイズおよび機能強化に似たアクションを実行するものとしてよい。実行される実際の機能は、プラグインの中に書き込まれているコードに依存する。
【０１８６】
ステップ711で、プラグインプロセッサ114からメッセージを受信した後、プラグインレンダラ116は、たとえば、JavaScript(登録商標)、CSS、およびHTMLを使用して、メッセージをHTMLスタンザ(すなわち、HTMLコードの完全に解析可能な部分)にフォーマットし、ユーザインターフェース112上に表示するためのユーザインターフェースファイル(たとえば、HTMLページ)を生成し、そのユーザインターフェースファイルを他の表示構成要素とともにユーザインターフェース112に送信する。
【０１８７】
ステップ712で、UIプロセッサ113が、ステップ708で説明されているようにクライアントデバイス112上のユーザレンダリングに関係するプラグインがコンテナ111内に存在していないと決定した場合、UIプロセッサ113はメッセージをUIレンダラ115に送信する。
【０１８８】
ステップ713で、UIプロセッサ113からメッセージを受信した後、UIレンダラ115は、JavaScript(登録商標)、CSS、およびHTMLを使用して、メッセージをHTMLスタンザにフォーマットし、ユーザインターフェースファイル(たとえば、HTMLページ)を生成し、そのユーザインターフェースファイルを他の表示構成要素とともにユーザインターフェース112に表示するために送信する。
【０１８９】
ステップ714で、ユーザインターフェース112は、フォーマット済みメッセージを含むユーザインターフェースをユーザに表示する。
【０１９０】
B.入力メッセージを処理する
図8には、本発明の少なくとも1つの実施形態によりインスタントメッセージングのコンテキストにおいてプラグインを使用して入力メッセージを処理する方法のための流れ図が示されている。
【０１９１】
最初に、IMバックエンドシステム(たとえば、第2のIMバックエンドシステム134)が、クライアントデバイス118のユーザインターフェース上にメッセージを表示することを意図してクライアントデバイス110から発信されるメッセージを受信する。
【０１９２】
ステップ801で、IMバックエンドシステム(たとえば、第2のIMバックエンドシステム134)は、IMバックエンドシステムに関連付けられている通信プロトコル(たとえば、XMPP)を使用してメッセージをメッセージングコア131に送信する。
【０１９３】
ステップ802で、IMバックエンドシステム(たとえば、第2のIMバックエンドシステム134)からメッセージを受信した後、メッセージングコア131は、メッセージをフォーマットする。フォーマット作業が必要なのは、メッセージがIMバックエンドサーバから受信されるときに、そのIMバックエンドシステムに対する通信プロトコルフォーマットで届くからである。
【０１９４】
メッセージをフォーマットするために、メッセージングコア131はメッセージを読み出して、メッセージに関連付けられているIMバックエンドシステム会話識別子(たとえば、一対一、マルチパーティ永続的、マルチパーティ非永続的)を識別する。次に、メッセージングコア131は、そのメモリ内でIMバックエンドシステム会話識別子に関連付けられているセッション識別子についてチェックし、IMバックエンドシステム会話識別子に関連付けられている会話メタ識別子を識別する。
【０１９５】
次いで、メッセージングコア131はメッセージを処理して、メッセージに関連付けられている受信者のIMバックエンドシステムユーザ識別子を識別する。次に、メッセージングコア131は、そのメモリ内でIMバックエンドシステムユーザ識別子に関連付けられているセッション識別子についてチェックし、IMバックエンドシステムユーザ識別子に関連付けられているユーザメタ識別子を識別する。
【０１９６】
次に、メッセージングコア131は、メッセージペイロード(すなわち、メッセージを記述した情報ではなく、メッセージデータ)を抽出し、メッセージペイロードを、会話メタ識別子およびユーザメタ識別子とともに新しいフォーマット済みメッセージ内に挿入する。
【０１９７】
次に、メッセージングコア131は、新しいフォーマット済みメッセージをクライアントデバイス118上のUIプロセッサ113に送信する。
【０１９８】
ステップ803で、メッセージングコア131からフォーマット済みメッセージを受信した後、UIプロセッサ113は、プラグインがコンテナ111上に存在しているかどうかを決定する。プラグインが存在しているかどうかを決定するために、UIプロセッサ113は、プラグインのリストを記憶しておき、次いでそのリストをチェックして、プラグインがあるかどうかを決定することが可能である。
【０１９９】
ステップ804で、プラグインが存在している場合、UIプロセッサ113は、メッセージをプラグインプロセッサ114に送信する。
【０２００】
続くステップ、ステップ805〜808については、UIプロセッサ113からメッセージを受信した後、プラグインプロセッサ114は、1つまたは複数のプラグインに基づきメッセージを処理する。この処理機能は、クライアントの動作の拡張が制御される場である。処理機能は、メッセージを取り出して、必要なアクションを実行するために必要な特定のプラグインコードを実行する。
【０２０１】
ステップ805で、プラグインプロセッサ114は、メッセージメタデータを読み出す。「読み出す」は、メッセージ内のいくつかのフィールドを抽出するか、または解析することを意味する。メッセージメタデータは、メッセージペイロード内にないフィールドを指す。メッセージメタデータの例は、送信者(たとえば、「from」フィールド)、受信者(たとえば、「to」フィールド)、メッセージがいつ送信されたかを指示するタイムスタンプ(たとえば、「timestamp」フィールド)、およびメッセージに関連付けられている会話を識別する会話識別子(たとえば、「conversation identifier」フィールド)を含む。
【０２０２】
ステップ806で、プラグインプロセッサ114がメッセージメタデータを読み出した後、プラグインプロセッサ114は、1つまたは複数のペイロード名前空間を識別する。たとえば、プラグインプロセッサ114は、<x> … </x>などの予め決められている名前空間内の1つまたは複数の要素の存在を識別し得る。
【０２０３】
ステップ807で、プラグインプロセッサ114が1つまたは複数のペイロード名前空間を識別した後、プラグインプロセッサ114は、ペイロード名前空間を解析し、1つまたは複数のプラグインに関連するメッセージペイロードの少なくとも一部を識別する。
【０２０４】
ステップ808で、プラグインプロセッサ114がペイロード名前空間を解析した後、プラグインプロセッサ114は、多数の修正点に基づきカスタムHTMLスタンザを生成する。一修正例において、プラグインプロセッサ114は、受信されたメッセージに関係し、1つまたは複数のプラグインに基づく、ユーザインターフェース112上に表示されるユーザインターフェースファイルにおいて使用されるHTML要素のコンテンツを変更するためにHTML DOMを修正する。HTML DOM修正の一例は、会話所有者からのメッセージが特定のパーティに対する会話においてメッセージを交換することに制限を課す場合に特定の会話に対するユーザインターフェースにおいてメッセージを送信するためのテキストボックスを削除するなど、構成要素特徴を追加または削除するステップを含み得る。プラグインプロセッサ114は、1つまたは複数のプラグインに基づきメッセージコンテンツも修正する。一例は、メッセージが銀行口座番号を含む場合に、銀行口座番号などの特定のコンテンツをメッセージから編集するステップを含み得る。最後に、プラグインプロセッサ114は、1つまたは複数のプラグインに基づきメッセージメタデータを修正する。一例は、メッセージメタデータ内の受信者名を編集して、メッセージを特定の会話に投稿するすべてのパーティに匿名性を付与するステップを含み得る。
【０２０５】
ステップ809で、プラグインプロセッサ114がステップ808での修正を実行した後、プラグインプロセッサ114は、プラグインレンダラ116によるプラグイン拡張ユーザインターフェースレンダリングが必要かどうかを決定する。この決定を行うために、プラグインプロセッサ114は、プラグイン拡張ユーザインターフェースレンダリングに関係するプラグインのリストを記憶し、次いでそのリストをチェックして、関係するプラグインがあるかどうかを決定し得る。
【０２０６】
ステップ810で、プラグイン拡張ユーザインターフェースレンダリングが必要な場合、プラグインプロセッサ114は、カスタムHTMLスタンザをプラグインレンダラ116に送信する。
【０２０７】
続くステップ、ステップ811〜812については、プラグインレンダラ116がカスタムHTMLスタンザを受信した後、プラグインレンダラ116は、クライアントユーザインターフェースレンダリングの拡張を制御する。プラグインレンダラ116は、メッセージパケット(適宜、プラグインプロセッサ114によって処理されている)を取り出して、メッセージがユーザインターフェース112内に視覚化される仕方を変更するレンダリング機能を持つプラグインを実行する。一例において、これは、異なるカスケーディングスタイルシート(CSS)の、ユーザインターフェース112への適用であってよい。
【０２０８】
ステップ811で、プラグインレンダラ116が修正されたメッセージを受信した後、プラグインレンダラ116は、HTMLスタンザを処理し、該当するプラグインに基づき修正されたメッセージとともにカスタムユーザインターフェースファイルを生成する。カスタムレンダリングは、CSSを適用するステップ、追加メッセージHTML DOMを追加してカスタムユーザインターフェースファイル内のHTMLオブジェクトのコンテンツを変更するステップ、および追加のリソース(たとえば、画像、ビデオなど)を追加するステップを含む。
【０２０９】
ステップ812で、プラグインレンダラ116がカスタムユーザインターフェースファイルを生成した後、プラグインレンダラ116は、カスタムユーザインターフェースファイルをユーザインターフェース112に送信してクライアントデバイス118上に表示する。
【０２１０】
ステップ813で、プラグイン拡張レンダリングが、ステップ809において決定されているように必要でない場合、プラグインプロセッサ114は、修正されたメッセージをUIレンダラ115に送信する。
【０２１１】
ステップ814で、UIレンダラ115が修正されたメッセージを受信した後、UIレンダラ115は、標準レンダリングプロトコルに基づき修正されたメッセージを含むユーザインターフェースファイルを生成する。標準的なレンダリングは、コンテナ111に記憶されているCSSファイルによって定義されているような、ボールド、下線、テキストフォント、サイズカラーなどのフォント特性を含む。
【０２１２】
ステップ815で、UIレンダラ115が標準ユーザインターフェースファイルを生成した後、UIレンダラ115は、標準ユーザインターフェースファイルをユーザインターフェース112に送信してクライアントデバイス118上に表示する。
【０２１３】
続くステップ、ステップ816〜820については、プラグインが、ステップ803において決定されたように存在していない場合、UIプロセッサ113の場合に、メッセージは、追加のプラグインのインタラクティブな操作なしでUIの標準的方法で処理される。
【０２１４】
ステップ816で、プラグインが、ステップ803において決定されているように存在していない場合、UIプロセッサ113はステップ805で、上で説明されているようにメッセージメタデータを読み出す。
【０２１５】
ステップ817で、UIプロセッサ113がメッセージメタデータを読み出した後、UIプロセッサ113は、ステップ806で、上で説明されているように1つまたは複数のペイロード名前空間を識別する。
【０２１６】
ステップ818で、UIプロセッサ113が1つまたは複数のペイロード名前空間を識別した後、UIプロセッサ113は、ペイロード名前空間を解析し、フォーマッティングに関連するメッセージの少なくとも一部を識別する。
【０２１７】
ステップ819で、UIプロセッサ113がペイロード名前空間を解析した後、UIプロセッサ113は、ペイロード名前空間内のメッセージペイロードに基づき標準HTMLスタンザを作成する。
【０２１８】
ステップ820で、UIプロセッサ113が標準HTMLスタンザを作成した後、UIプロセッサ113は、HTMLスタンザをUIレンダラ115に送信する。
【０２１９】
ステップ821で、UIレンダラ115がUIプロセッサ113からHTMLスタンザを受信した後、UIレンダラ115は、ステップ814で、上で説明されている標準レンダリングプロトコルに基づきHTMLスタンザとともに標準ユーザインターフェースファイルを生成する。
【０２２０】
ステップ822で、UIレンダラ115は、標準ユーザインターフェースファイルをユーザインターフェース112に送信してクライアントデバイス118上に表示する。
【０２２１】
C.拡張デプロイの例
1.サーベイプラグインの例
インスタントメッセージングサービスを使用している間に、ユーザは、マルチパーティ会話に対して質問をし、個別の参加者が一組の応答のうちの1つで応答することを可能にしたい場合がある。サーベイプラグイン機能を使用することで、ユーザインターフェース112はサーベイの結果を示すサーベイバナーを含み得る。サーベイバナーにおいて、ユーザは、「Appleの調査に興味がありますか?(Interested in Apple Research?)」と尋ねており、会話の他のすべての参加者は、それぞれのユーザインターフェース上のユーザ選択可能アイコンをクリックすることによって「はい(Yes)」または「いいえ(No)」のオプションの応答を与えることができる。参加者が、それらのボタンのうちの1つをクリックしてサーベイに応答すると、会話のすべての参加者にメッセージが送信される。メッセージがプラグインによって処理された後、各参加者に対する各ユーザインターフェースは、すべてのユーザインターフェース表示上の円グラフアイコンを、更新されたサーベイ結果で更新する。
【０２２２】
2.ビデオプラグインの例
インスタントメッセージングサービスを使用している間に、ユーザは、会話の参加者に、中心ビデオホスティングソリューション上でホストされ、インスタントメッセージングウィンドウ(図示せず)内のユーザインターフェース112に表示されるビデオを提供することができるようにしたい場合がある。ビデオプラグイン機能は、いくつかの会話にとっては望ましいが、すべての会話に適しているとは限らない。プラグイン、特にビデオプラグインを利用することによって、ビデオメッセージング機能は、機能が望まれている会話に関連付けられる。
【０２２３】
インスタントメッセージングサービスを使用してビデオを参加者に提供するために、ユーザは、最初に、ビデオプラグインコマンドを含むメッセージおよびビデオ識別子を、コロンで区切って(たとえば、「video:19458」)送信する。
【０２２４】
すべての参加者によって会話上にロードされたプラグインは、入力メッセージをインターセプトして、「video」がカスタムレンダリングをトリガーし、メッセージにあるビデオIDを解析する必要があることを認識する。
【０２２５】
コンテナ111上のプラグインレンダラ116は、ビデオIDをビデオ19458にリンクされているHTML5 <video>タグで置き換える。次いで、修正されたメッセージは、ルームのすべての受信者に送信される。
【０２２６】
このメッセージのすべての受信者は、メッセージ内に埋め込まれたビデオタグ<video><source src="http://video.barclays.com/19458" type="video/mp4"></video>を含むメッセージを受信する。
【０２２７】
このHTMLメッセージがUIに表示されると、ビデオは、ユーザインターフェース内に一列にレンダリングされる。
【０２２８】
3.自然言語推論の例
自然言語推論は、プラグインによってインスタントメッセージ内で識別された推論に応答してなされるクライアントデバイス110またはIMサーバ130によるアクションを伴う。自然言語推論プラグインは、ユーザインターフェース112によって送信され受信されるときにメッセージをインタラクティブに操作するJavaScript(登録商標)ソースコードを含む。
【０２２９】
アクションは、正規表現と追加の論理から構成され得る、1つまたは複数のトリガーを検出した結果として実行されるものとしてよい。プラグインは、そのトリガーが活性化された場合に、メッセージコンテンツを解析し、追加の通信機能(たとえば、テキスト、電話、ビデオ会議、電子メール、ファイル転送、画面共有など)を呼び出す。送信されたメッセージおよび受信されたメッセージは両方とも、トリガーがないか監視され得る。
【０２３０】
自然言語推論プラグインの一例は、ユーザが送信または受信されたメッセージに基づき電話をかけたいと思っている可能性を認識するステップと、ユーザが「今電話しても平気?(Are you free for a quick call?)」と書かれているメッセージを受信した場合に他のパーティの電話番号がユーザインターフェース112にすでに入力されている電話機能(たとえば、選択可能電話ダイアルパッドアイコン)を表示するステップとを含み得る。
【０２３１】
次の説明では、図9を参照しつつ、コンテナ111が自然言語推論プラグインを使用して上記のメッセージをどのように処理するかをステップバイステップで説明している。
【０２３２】
図9には、本発明の少なくとも1つの実施形態によりプラグインを使用して新しい通信機能を備えるユーザインターフェースを生成するための流れ図が示されている。
【０２３３】
自然言語推論プラグインを受信し、プラグインプロセッサ114が図8のステップ804と同様にUIプロセッサ113から上記のメッセージを受信した後に、ステップ901で、プラグインプロセッサ114は、ステップ902で、ステップ805と同様に、メッセージからメッセージメタデータを読み出す。この場合、メッセージが特定の送信者からであることを読み取ることで、コンテナ111は、検索要求をIMサーバ130に対して行ってアクティブディレクトリ140またはデータおよびメッセージングアーカイブデータベース150から特定の送信者に対する電話番号を取り出し、ユーザインターフェース112内のダイアルパッドアイコンに表示させることができる。
【０２３４】
ステップ806と同様に、ステップ903では、プラグインプロセッサ114は、ペイロード名前空間を識別する。この例では、<msgpayload> … </msgpayload>というペイロード名前空間があり得、この名前空間は、「今電話しても平気?(Are you free for a quick call?)」というメッセージを含む。
【０２３５】
ステップ807と同様に、ステップ904では、プラグインプロセッサ114は、ペイロード名前空間を解析する。
【０２３６】
ステップ808と同様に、ステップ905では、プラグインプロセッサ114は、自然言語プラグインに関連し、トリガーされたアクションに関連付けられているメッセージペイロードまたはメッセージメタデータの一部を識別し得る。一例において、トリガーされたアクションは、新しい通信機能をユーザインターフェースに追加するステップを伴うものとしてよい。プラグインプロセッサ114が、受信パーティがプラグインおよび/または受信されたメッセージに基づき新しい通信機能を使用して送信パーティと通信する必要があり得ると決定した場合、プラグインプロセッサ114は、多数の可能な修正点に基づき新しい通信機能を表すコードを含むカスタムHTMLスタンザを生成し得る。たとえば、プラグインプロセッサ114は、ユーザインターフェース112上に表示され得るHTML要素のコンテンツの一部を変更するようにHTML DOMを修正することができる。このシナリオにおいて、プラグインプロセッサ114は、複数の通信機能から新しい通信機能を選択するためにHTML要素を含めるようにHTML DOMを修正し得る。次に、プラグインプロセッサ114は、プラグインおよび/または受信されたメッセージに基づき、ユーザインターフェースに、電話機能などの新しい通信機能を表示させるコードをHTMLスタンザに含めることができる。
【０２３７】
新しい通信機能、すなわち、電話機能は、ユーザ選択可能ダイアルパッドアイコンの表示であってよく、また送信者の電話番号を含んでいてもよい。別の例では、プラグインプロセッサ114は、ユーザインターフェース112内のテキスト機能などの通信機能を取り除き、電話機能のみを許すようにHTML DOMを修正し得る。
【０２３８】
別の例では、プラグインプロセッサ114は、「通話(call)」という単語を、選択されると、クライアントデバイス110上で電話アプリケーションを起動させるユーザ選択可能アイコンにすることによって修正するようにメッセージコンテンツを修正し得る。
【０２３９】
別の例では、プラグインプロセッサ114は、たとえば、CEOが自分のアシスタントに代理としてメッセージを送信してくれるように頼み、CEOが受信者に直通電話回線で自分への電話をかけてもらいたい場合に、受信者の送信者を変更するようにメッセージメタデータを修正し得る。この例では、プラグインプロセッサ114は、メッセージがCEOからであって、アシスタントからではなかったことを指示するように「from」フィールドを修正し得る。この修正は、また、アシスタントの直通電話回線ではなくダイアルパッドアイコンまたはURLにCEOの直通電話番号を入れるようにHTMLスタンザを変更することもできる。
【０２４０】
プラグインは、新しい通信機能を備えるかどうかを決定するためのクライアントデバイスの特性を考えることもできる。たとえば、ユーザのモバイルデバイスがローミング領域内にある場合にユーザが送信者を呼び出したくないことがある。このシナリオでは、プラグインは、電話機能がメッセージに基づき保証され得ることを決定し得るが、クライアントデバイスの特性に基づきその機能をユーザインターフェースに載せるのを差し控えることができる。
【０２４１】
ステップ809と同様に、ステップ906で、プラグインプロセッサ114は、ユーザインターフェース112に電話機能を表示するためにユーザインターフェース112への追加の拡張が必要ないと決定し得る。もしそうならば、ステップ813と同様に、プラグインプロセッサ114は、カスタムHTMLスタンザをUIレンダラ115に送信する。
【０２４２】
ステップ814と同様に、ステップ907で、UIレンダラ115は、カスタムHTMLスタンザを含むように標準ユーザインターフェースファイルを修正することによって標準レンダリングプロトコルに基づきHTMLスタンザとともに標準ユーザインターフェースファイルを生成し得る。上で説明されているように、標準ユーザインターフェースファイルへの修正は、通信機能(たとえば、電話機能)を追加するステップ、通信機能を取り除くステップ、またはユーザインターフェースへの他の修正を含み得る。
【０２４３】
ステップ815と同様に、ステップ908で、UIレンダラ115が標準ユーザインターフェースファイルを生成した後、UIレンダラ115は、標準ユーザインターフェースファイルをユーザインターフェース112に送信してクライアントデバイス118上に表示する。
【０２４４】
上で説明されているように、通信機能を変更する必要があることを認識する能力を提供することと、自然言語推論プラグインを使用してこの能力を特定のコンテキストに合わせてカスタマイズすることとによるものである。
【０２４５】
IV.履歴編集
たとえば、準拠および規制目的に関して、IMサーバ130を使用して送信されるすべてのメッセージは、その後取り出せるようにメッセージ履歴としてデータおよびメッセージングデータベース150内に自動的にアーカイブされ得る。しかしながら、この機能は、メッセージがその後取り出されるときに問題を引き起こす可能性がある。たとえば、国によっては、特定の情報が表示されるのを制限し、情報が表示されるごとに罰金を科すいくつかの法律または条例がある。たとえば、ある国では、クライアントが特定の銀行の銀行口座および/またはその銀行のクライアントの銀行口座番号を有することを識別する情報を表示することを制限することがある。この情報が、ルーム内でIMメッセージにより送信された場合、IMサービスをホストする会社は、罰金を払う必要があり得る。しかしながら、誰かがルームに入り、メッセージ履歴要求を介してメッセージ履歴を取り出すたびごとに、会社は、罰金を次々に支払って行く必要が生じる。
【０２４６】
この問題を解決するために、システム100は、不適切とみなされるメッセージまたはメッセージの一部分を編集するか、または破壊することなく隠して見えなくする能力を備える。
【０２４７】
サブミットされたメッセージが不適切であるとみなされた場合、システム管理者は、このメッセージがメッセージ履歴要求を介して他のユーザによって取り出されることを止めるよう求められ得る。IMサーバ130は、メッセージ履歴要求に応答してメッセージ詳細が履歴メッセージの一部として取り出されないようにシステム管理者が編集インジケータ(たとえば、編集フラグ)をデータおよびメッセージングデータベース150内のメッセージと関連付けることを可能にする。システム管理者は、メッセージ識別子および編集インジケータをトグルする指示を与える命令をメタサービス137に送信することによってメッセージに対する編集インジケータを設定することができる。
【０２４８】
最初に、ユーザが、会話に加わること、または履歴的なアーカイブされているメッセージをアクティブに要求することのいずれかによってユーザインターフェース112においてメッセージ履歴を要求する。メッセージ履歴要求がユーザインターフェース112によって受信された後、ユーザインターフェース112は、メッセージ履歴要求をメッセージングコア131に送信する。メッセージ履歴要求は、会話識別子、「from」タイムスタンプ、および「to」タイムスタンプなどのパラメータを含む。会話識別子は、特定の会話からメッセージを取り出すために使用される。「from」タイムスタンプおよび「to」タイムスタンプは、2つの期間の間にあるすべてのメッセージを取り出すために使用される。
【０２４９】
メッセージ履歴編集に対する例示的な実装は、図10を参照して説明される。
【０２５０】
図10には、本発明の少なくとも1つの実施形態によりメッセージ履歴を編集する方法のための流れ図が示されている。
【０２５１】
ステップ1001で、メッセージングコア131は、ユーザインターフェース112からメッセージ履歴要求を受信する。
【０２５２】
ステップ1002で、メッセージングコア131がメッセージ履歴要求を受信した後、メッセージングコア131は、HTML「rest」コールを検索サービス136に送信する。
【０２５３】
ステップ1003で、検索サービス136がメッセージングコア131から要求を受信した後、検索サービス136は、データおよびメッセージングデータベース150から1つまたは複数のレコードを取り出す。最初に、検索サービス136は、会話識別子、「from」タイムスタンプ、および「to」タイムスタンプなどの、メッセージングコア131からのメッセージ履歴要求内のパラメータに基づきSQLクエリをデータおよびメッセージングデータベース150に送信する。次いで、検索サービス136は、SQLクエリ内のパラメータの条件を満たすメッセージについてデータおよびメッセージングデータベース150からレコードを受信する。レコードは、また、編集インジケータも含む。編集インジケータは、2つの状態、すなわち、編集状態と未編集状態のうちの1つを指示する。
【０２５４】
ステップ1004で、検索サービス136は、メッセージに関連付けられている編集インジケータをチェックし、編集インジケータがメッセージが編集されるべきであることを指示している場合にメッセージを編集することによって、メッセージを編集するかどうかを決定する。
【０２５５】
編集インジケータが編集状態にある場合、メッセージは編集される。
【０２５６】
編集インジケータが未編集状態にある場合、メッセージは編集されない。
【０２５７】
ステップ1005で、検索サービス136がメッセージが編集されるべきと決定した後、検索サービス136は、編集されたメッセージをメッセージングコア131に送信する。編集の例は、メッセージ全体、もしくはメッセージの一部を編集するステップ、または他にもタイプはあるがとりわけ、送信者名を編集するステップを含み得る。メッセージの一部を編集するには、編集インジケータが、開始文字オフセットおよび編集の長さを含むものとしてよい。たとえば、メッセージ「Hi Mike(やあ、マイク)」から単語「Mike(マイク)」を削除するために、編集インジケータは、「M」が第3の文字なので開始文字オフセット3、および「Mike」が4文字なので長さ4を含むことになる。
【０２５８】
ステップ1006で、検索サービス136がメッセージが編集されるべきでないと決定した後、検索サービス136は、未編集のメッセージをメッセージングコア131に送信する。
【０２５９】
ステップ1007で、メッセージングコア131が検索サービス136からメッセージを受信した後、メッセージングコア131は、ユーザインターフェース112上に表示しやすいようにメッセージをフォーマットする。
【０２６０】
ステップ1008で、メッセージングコア131は、メッセージをユーザインターフェース112に送信し、メッセージはユーザに表示される。
【０２６１】
V.総括
本明細書で説明されているコンピュータは、一般的に、1つまたは複数のプロセッサとメモリ(たとえば、1つまたは複数の不揮発性記憶デバイス)とを備える。いくつかの実施形態において、メモリまたはメモリのコンピュータ可読記憶媒体は、プログラム、モジュール、およびデータ構造体、または本明細書で開示されている様々なシステムおよび方法をプロセッサが制御し、実行するためのそれらのサブセットを記憶する。一実施形態において、非一時的コンピュータ可読記憶媒体は、プロセッサによって実行されたときに本明細書で開示されている方法のうちの1つまたは複数を実行するコンピュータ実行可能命令を記憶している。
【０２６２】
当業者であれば、本発明の広範な新規の概念から逸脱することなく上に図示され説明されている例示的な実施形態に対し変更を加えることが可能であることを理解するであろう。したがって、本発明は、図示され説明されている例示的な実施形態に限定されず、請求項によって定められているような本発明の趣旨と範囲のうちにある修正を対象とすることが意図されていることは理解される。たとえば、例示的な実施形態の特定の特徴は、請求されている発明の一部であってもなくてもよく、また開示されている実施形態の特徴は、組み合わせることもできる。本明細書において特に断りのない限り、「1つの」(英文中の「a」、「an」について必要に応じて訳す)および「その」(英文中の「the」について、必要に応じて訳す)は、1つの要素に限られず、その代わりに、「少なくとも1つ」を意味するものと解釈されるべきである。
【０２６３】
本発明の図および説明のうちの少なくともいくつかは、明確にすることを目的として、当業者が他の要素も本発明の一部を含み得ると理解する他の要素を排除しながら、本発明をはっきり理解できるように関連する要素に的を絞るため簡素化されていることを理解されたい。しかし、このような要素は当技術分野でよく知られている、また必ずしも本発明の理解度を増すとは限らないという理由から、そのような要素の説明は本明細書では行わない。
【０２６４】
さらに、方法が、本明細書で説明されているステップの特定の順序に依存しない限り、ステップの特定の順序は、請求項への制限と解釈されるべきでない。本発明の方法を対象とする請求項は、それらのステップを書かれている順序で実行することに限定されるべきではなく、また当業者は、それらのステップは変えられてもよいが、それでも本発明の趣旨および範囲に従っていることを容易に理解できる。
【符号の説明】
【０２６５】
100  システム
110  クライアントデバイス
111  コンテナ
112  ユーザインターフェース
113  UIプロセッサ
114  プラグインプロセッサ
115  UIレンダラ
116  プラグインレンダラ
118  クライアントデバイス
120  通信ネットワーク
130  インスタントメッセージング(IM)サーバ
131  メッセージングコア
132  プログラマチックインターフェース
133  第1のIMバックエンドシステム
134  第2のIMバックエンドシステム
135  IMサービスアプリケーションプラットフォーム
136  検索サービス
137  メタサービス
140  アカウントアクティブディレクトリ
150  データおよびメッセージングデータベース
150  データおよびメッセージングアーカイブ
160  プラグインリポジトリ
【図１】
2017517063.tif 000003
【図２】
2017517063.tif 000004
【図３】
2017517063.tif 000005
【図４】
2017517063.tif 000006
【図５】
2017517063.tif 000007
【図６】
2017517063.tif 000008
【図７】
2017517063.tif 000009
【図８】
2017517063.tif 000010
【図９】
2017517063.tif 000011
【図１０】
2017517063.tif 000012
【国際調査報告】
2017517063.tif 000013
2017517063.tif 000014
2017517063.tif 000015
2017517063.tif 000016
2017517063.tif 000017