IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ オラクル・インターナショナル・コーポレイションの特許一覧

特許6999580インターネットクラウドでホストされる自然言語による対話型メッセージングシステムサーバ連携
<>
  • 特許-インターネットクラウドでホストされる自然言語による対話型メッセージングシステムサーバ連携 図1
  • 特許-インターネットクラウドでホストされる自然言語による対話型メッセージングシステムサーバ連携 図2
  • 特許-インターネットクラウドでホストされる自然言語による対話型メッセージングシステムサーバ連携 図3
  • 特許-インターネットクラウドでホストされる自然言語による対話型メッセージングシステムサーバ連携 図4
  • 特許-インターネットクラウドでホストされる自然言語による対話型メッセージングシステムサーバ連携 図5
  • 特許-インターネットクラウドでホストされる自然言語による対話型メッセージングシステムサーバ連携 図6
  • 特許-インターネットクラウドでホストされる自然言語による対話型メッセージングシステムサーバ連携 図7
  • 特許-インターネットクラウドでホストされる自然言語による対話型メッセージングシステムサーバ連携 図8
  • 特許-インターネットクラウドでホストされる自然言語による対話型メッセージングシステムサーバ連携 図9
  • 特許-インターネットクラウドでホストされる自然言語による対話型メッセージングシステムサーバ連携 図10
  • 特許-インターネットクラウドでホストされる自然言語による対話型メッセージングシステムサーバ連携 図11
  • 特許-インターネットクラウドでホストされる自然言語による対話型メッセージングシステムサーバ連携 図12
  • 特許-インターネットクラウドでホストされる自然言語による対話型メッセージングシステムサーバ連携 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2021-12-24
(45)【発行日】2022-01-18
(54)【発明の名称】インターネットクラウドでホストされる自然言語による対話型メッセージングシステムサーバ連携
(51)【国際特許分類】
   H04L 67/02 20220101AFI20220111BHJP
   G06Q 30/06 20120101ALI20220111BHJP
   G06Q 50/10 20120101ALI20220111BHJP
   H04L 51/02 20220101ALI20220111BHJP
【FI】
H04L67/02
G06Q30/06 300
G06Q50/10
H04L51/02
【請求項の数】 10
(21)【出願番号】P 2018562350
(86)(22)【出願日】2017-03-17
(65)【公表番号】
(43)【公表日】2019-10-24
(86)【国際出願番号】 US2017022952
(87)【国際公開番号】W WO2017222617
(87)【国際公開日】2017-12-28
【審査請求日】2020-03-16
(31)【優先権主張番号】62/353,002
(32)【優先日】2016-06-21
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】セイガー,アカシュ
(72)【発明者】
【氏名】クマール,アヌシュ
【審査官】今川 悟
(56)【参考文献】
【文献】米国特許出願公開第2004/0030750(US,A1)
【文献】特開2007-219964(JP,A)
【文献】米国特許出願公開第2003/0093480(US,A1)
【文献】特表2016-511886(JP,A)
【文献】米国特許出願公開第2013/0346513(US,A1)
【文献】中国特許出願公開第1780412(CN,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 29/06
G06Q 30/06
G06Q 50/10
H04L 12/58
(57)【特許請求の範囲】
【請求項1】
サーバ連携のための方法であって、
統一資源識別子(URI)に関連付けられる第1ボットサーバによって、ハイパーテキスト転送プロトコル(HTTP)POST呼び出しメッセージを受信するステップを含み、前記HTTP POST呼び出しメッセージは、ユーザに関連付けられて、メッセージングアプリケーションサーバから前記URIに送られ、前記HTTP POST呼び出しメッセージからの情報は、セッションに関連付けられ、前記方法は、さらに、
前記第1ボットサーバによって、前記HTTP POST呼び出しメッセージに基づいて前記セッションを第2ボットサーバに転送すると決定するステップをさらに含み、前記第2ボットサーバは、第2URIに関連付けられ、前記方法は、さらに、
前記第1ボットサーバによって、転送要求を送信するステップを含み、前記転送要求は、前記セッションの前記第1ボットサーバとの関連付けを解除させて、前記セッションを前記第2ボットサーバに関連付けさせる、方法。
【請求項2】
前記第1ボットサーバに関連付けられた情報は、前記第2ボットサーバに関連付けられた情報とは別々に前記セッションに保存される、請求項1に記載の方法。
【請求項3】
前記第2ボットサーバによってリターン要求を送信するステップをさらに含み、前記リターン要求は、前記セッションの前記第2ボットサーバとの関連付けを解除させて、前記セッションを前記第1ボットサーバに関連付けさせる、請求項1または2に記載の方法。
【請求項4】
前記リターン要求は、前記第2ボットサーバが前記セッションを終えた後に、前記第2ボットサーバから送信される、請求項3に記載の方法。
【請求項5】
前記第1ボットサーバによって、リターン要求を前記第2ボットサーバに送信するステップをさらに含み、前記リターン要求は、前記セッションの前記第2ボットサーバとの関連付けを解除させて、前記セッションを前記第1ボットサーバに関連付けさせ、前記リターン要求は、前記転送要求が送信されてから時間が経過した後に送信される、請求項1~4のいずれかに記載の方法。
【請求項6】
前記HTTP POST呼び出しメッセージは、自然言語対話を含む、請求項1~5のいずれかに記載の方法。
【請求項7】
前記メッセージングアプリケーションサーバは、FACEBOOK(登録商標)Messengerアプリケーション、WHATSAPP(登録商標)インスタントメッセージングソフトウェア、WECHAT(登録商標)モバイルテキスト/音声メッセージング通信サービス、KIK(登録商標)Messengerインスタントメッセージングアプリケーション、TELEGRAM(登録商標)Messengerメッセージングアプリケーション、またはSKYPE MOBILE(登録商標)ビデオ電話アプリケーション、のうちの1つに関連付けられ、前記HTTP POST呼び出しメッセージのコンテンツの一部は、モバイル機器から前記メッセージングアプリケーションサーバに送信される、請求項1~6のいずれかに記載の方法。
【請求項8】
サーバ連携のためのシステムであって、
1つ以上のプロセッサと、
命令を含んだ非一時的なコンピュータ読み取り可能な媒体とを備え、前記命令は、前記1つ以上のプロセッサによって実行されると、前記1つ以上のプロセッサに動作を実行させ、前記動作は、
統一資源識別子(URI)に関連付けられる第1ボットサーバによって、ハイパーテキスト転送プロトコル(HTTP)POST呼び出しメッセージを受信することを含み、前記HTTP POST呼び出しメッセージは、ユーザに関連付けられて、メッセージングアプリケーションサーバから前記URIに送られ、前記HTTP POST呼び出しメッセージからの情報は、セッションに関連付けられ、前記動作は、さらに、
前記第1ボットサーバによって、前記HTTP POST呼び出しメッセージに基づいて前記セッションを第2ボットサーバに転送すると決定することを含み、前記第2ボットサーバは、第2URIに関連付けられ、前記動作は、さらに、
前記第1ボットサーバによって、転送要求を送信することを含み、前記転送要求は、前記セッションの前記第1ボットサーバとの関連付けを解除させて、前記セッションを前記第2ボットサーバに関連付けさせる、システム。
【請求項9】
請求項1~7のいずれかに記載の方法を1つ以上のプロセッサに実行させる、プログラム。
【請求項10】
請求項9に記載のプログラムを格納したメモリと、
前記プログラムに含まれる命令を実行する1つ以上のプロセッサとを備える、システム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本願は、米国特許法第119条の下で、2016年6月21日に出願された米国仮出願第62/353,002号の利益を主張するものであり、そのすべての記載内容を、引用により本明細書に援用する。
【背景技術】
【0002】
背景
メッセージングアプリケーション(たとえば、FACEBOOK(登録商標)Messenger、WHATSAPP(登録商標)インスタントメッセージングソフトウェア、WECHAT(登録商標)モバイルテキスト/音声メッセージング通信サービス、KIK(登録商標)Messenger、TELEGRAM(登録商標)Messenger、SKYPE MOBILE(登録商標)など)は、電子機器(たとえば、コンピュータ、モバイル機器、スマートテレビなど)において急速に人気を集めた技術である。メッセージングアプリケーションは、広く浸透しており、1日の使用回数が多い。しかしながら、モバイル機器上の企業アプリケーション(たとえば、事業および/または企業に関連したアプリケーション)は、ユーザに企業アプリケーションを定期的にダウンロードして使用してもらうことに苦労している。そのため、企業は、企業のコンテンツをさらに浸透させて、1日の使用回数を増やす必要がある。
【発明の概要】
【課題を解決するための手段】
【0003】
概要
メッセージングアプリケーションを利用してユーザと通信するためのボット(bot)サーバを提供するための方法、システム、およびコンピュータプログラムプロダクトを、本明細書において提供する。いくつかの実装形態において、メッセージングアプリケーションを利用するボットサーバが受信するメッセージを関連付けるための方法、システム、およびコンピュータプログラムプロダクトを提供する。たとえば、第1の方法は、メッセージングアプリケーションサーバからハイパーテキスト転送プロトコル(HTTP:Hypertext Transfer Protocol)POST呼び出しメッセージを受信することを含み得る。いくつかの例において、HTTP POST呼び出しメッセージは、統一資源識別子(URI:Uniform Resource Identifier)に関連付けられたボットサーバによって受信され得る。このような例において、HTTP POST呼び出しメッセージは、ユーザに関連付けられて、メッセージングアプリケーションサーバから当該URIに送られ得る。
【0004】
第1の方法は、HTTP POST呼び出しメッセージのコンテンツを構文解析してキーワードを特定するステップをさらに含み得る。第1の方法は、HTTP POST呼び出しメッセージのコンテキストおよびキーワードに基づいて複数のセッションの中から現在のセッションを特定するステップをさらに含み得る。いくつかの例において、複数のセッションのうちの1つのセッションは、ユーザとボットサーバとの間の対話を表す。いくつかの実装形態において、現在のセッションは、当該セッションであり得る。
【0005】
第1の方法は、HTTP POST呼び出しメッセージからの情報を現在のセッションに関連付けるステップをさらに含み得る。第1の方法は、現在のセッションに基づいてHTTP POST呼び出しメッセージに対する応答を生成するステップをさらに含み得る。
【0006】
いくつかの実装形態において、HTTP POST呼び出しメッセージは、自然言語による対話を含み得る。いくつかの実装形態において、メッセージングアプリケーションサーバは、FACEBOOK(登録商標)Messenger、WHATSAPP(登録商標)インスタントメッセージングソフトウェア、WECHAT(登録商標)モバイルテキスト/音声メッセージング通信サービス、KIK(登録商標)Messenger、TELEGRAM(登録商標)Messenger、およびSKYPE MOBILEのうちの少なくとも1つ以上に関連付けられ得る。このような実装形態において、モバイル機器上のメッセージングアプリケーションを用いて、HTTP POST呼び出しメッセージのコンテンツの少なくとも一部は、メッセージングアプリケーションサーバに送信され得る。たとえば、文字、オーディオ、またはメディアなどのユーザコンテンツが、モバイル機器からメッセージングアプリケーションサーバに送信され得る。次に、メッセージングアプリケーションサーバは、ユーザコンテンツを用いて、ボットサーバに送信されるHTTP POST呼び出しメッセージを作成することができる。
【0007】
いくつかの実装形態において、HTTP POST呼び出しメッセージは、ボットサーバのコネクタによって受信され得る。このような実装形態において、コネクタは、メッセージングアプリケーションサーバとボットサーバとの間のインタフェースであり得る。このような実装形態において、コネクタは、複数のメッセージングアプリケーションサーバ間でメッセージを正規化することができる。正規化には、HTTP POST呼び出しメッセージを共通フォーマットにフォーマットすることが含まれ得る。
【0008】
いくつかの実装形態において、HTTP POST呼び出しメッセージは、ボットサーバのロードバランサ・コンポーネントによって受信され得る。このような実装形態において、ロードバランサ・コンポーネントは、ボットサーバの負荷に基づいてHTTP POST呼び出しメッセージをボットサーバ上の複数のコネクタのうちの1つのコネクタに送信することができる。
【0009】
いくつかの実装形態において、セッションは、第1ボットサーバからの第1のHTTP POST呼び出しメッセージからの情報と、第2ボットサーバからの第2のHTTP POST呼び出しメッセージからの情報とを含み得る。いくつかの実装形態において、セッションは、第1メッセージングアプリケーションからの第1のHTTP POST呼び出しメッセージからの情報と、第2メッセージングアプリケーションからの第2のHTTP POST呼び出しメッセージからの情報とを含み得る。
【0010】
いくつかの実装形態において、現在のセッションを特定するステップは、HTTP POST呼び出しメッセージが現在のセッションに関係するかどうかを判定するステップを含み得る。いくつかの実装形態において、HTTP POST呼び出しメッセージは、2人以上のユーザ間の会話に含まれ得、メッセージングアプリケーションによって当該会話が容易になる。このような実装形態において、会話は、第1トピックと、第2トピックとを含み得る。第1トピックは、第1セッションに関連付けられ得、第2トピックは、第2セッションに関連付けられ得る。いくつかの実装形態において、2人以上のユーザのうちの1人のユーザは、ボットサーバである。
【0011】
いくつかの実装形態において、コンテキストは、HTTP POST呼び出しメッセージのタイムスタンプ、企業データ、ユーザからの1通以上の前のメッセージ、ユーザのユーザプロファイル、ユーザの1つ以上のユーザ嗜好、ボットサーバに関連付けられた企業とユーザとの間の1つ以上の対話についての以前の履歴、またはそれらの任意の組合せ、のうちの少なくとも1つ以上を含み得る。いくつかの例において、以前の履歴は、過去の購入、過去の会話、過去のアクション、過去のクエリ、過去のアプリケーション・プログラミング・インターフェース(API:Application Programming Interface)呼び出し、過去のデータ要求、または過去のデータ検索を含み得る。いくつかの例において、企業データは、メッセージングアプリケーションサーバとは無関係のソースからボットサーバが取得した情報を含み得る。このような実装形態において、会話は、2人以上のユーザ間の会話であり得る。メッセージングアプリケーションサーバによって会話が容易になり得、会話は、HTTP POST呼び出しメッセージの少なくとも一部を含み得る。いくつかの実装形態において、第1の方法は、HTTP POST呼び出しメッセージに対する応答からの情報をセッションに関連付けるステップをさらに含み得る。
【0012】
いくつかの実装形態において、複数のメッセージをユーザに関連付けるための方法、システム、およびコンピュータプログラムプロダクトを提供する。たとえば、第2の方法は、第1のハイパーテキスト転送プロトコル(HTTP:Hypertext Transfer Protocol)POST呼び出しメッセージを受信するステップを含み得る。いくつかの実装形態において、第1のHTTP POST呼び出しメッセージは、統一資源識別子(URI:Uniform Resource Identifier)に関連付けられたボットサーバによって受信され得る。第1のHTTP POST呼び出しメッセージは、第1ユーザに関連付けられて、第1のメッセージングアプリケーションサーバからURIに送られ得る。
【0013】
第2の方法は、第2のHTTP POST呼び出しメッセージを受信するステップをさらに含み得る。いくつかの実装形態において、第2のHTTP POST呼び出しメッセージは、URIに関連付けられたボットサーバによって受信され得る。第2のHTTP POST呼び出しメッセージは、第2ユーザに関連付けられて、第2のメッセージングアプリケーションサーバからURIに送られ得る。
【0014】
第2の方法は、第1のHTTP POST呼び出しメッセージのコンテンツを構文解析して第1キーワードを特定するステップをさらに含み得る。第2の方法は、第1のHTTP POST呼び出しメッセージのコンテキストおよび第1キーワードに基づいて複数のユーザの中から第1の現在のユーザを特定するステップをさらに含み得る。第2の方法は、第1のHTTP POST呼び出しメッセージからの情報を第1の現在のユーザに関連付けるステップをさらに含み得る。
【0015】
第2の方法は、第2のHTTP POST呼び出しメッセージのコンテンツを構文解析して第2キーワードを特定するステップをさらに含み得る。第2の方法は、第2のHTTP POST呼び出しメッセージのコンテキストおよび第2キーワードに基づいて第2のHTTP POST呼び出しメッセージの第2の現在のユーザを複数のユーザの中から特定するステップをさらに含み得る。いくつかの例において、第2の現在のユーザは、第1の現在のユーザであり得る。
【0016】
第2の方法は、第2のHTTP POST呼び出しメッセージからの情報を第1の現在のユーザに関連付けるステップをさらに含み得る。第2の方法は、第1のHTTP POST呼び出しメッセージ、第2のHTTP POST呼び出しメッセージ、および第1の現在のユーザの少なくとも1つ以上からの情報に基づいて第2のHTTP POST呼び出しメッセージに応答するステップをさらに含み得る。
【0017】
いくつかの実装形態において、第1ユーザのIDは、第2ユーザのIDとは異なり得る。第2のHTTP POST呼び出しメッセージに対する応答は、第1のメッセージングアプリケーションサーバを用いてユーザに送信され得る。
【0018】
第2の方法は、第1の現在のユーザを企業アカウントに関連付けるステップをさらに含み得る。企業アカウントは、メッセージングアプリケーションサーバとは別であり得る。いくつかの実装形態において、第1のメッセージングアプリケーションサーバおよび第2のメッセージングアプリケーションサーバの各々は、FACEBOOK(登録商標)Messenger、WHATSAPP(登録商標)インスタントメッセージングソフトウェア、WECHAT(登録商標)モバイルテキスト/音声メッセージング通信サービス、KIK(登録商標)Messenger、TELEGRAM(登録商標)Messenger、およびSKYPE MOBILE(登録商標)のうちの1つに関連付けられ得る。いくつかの例において、第1のHTTP POST呼び出しメッセージのコンテンツの少なくとも一部は、第1のモバイル機器から第1のメッセージングアプリケーションサーバに送信され得、第2メッセージのコンテンツの少なくとも一部は、第2のモバイル機器から第2のメッセージングアプリケーションサーバに送信され得る。第1のモバイル機器は、第2のモバイル機器と同じで有り得、または、第2のモバイル機器とは異なり得る。
【0019】
いくつかの実装形態において、第1のHTTP POST呼び出しメッセージおよび第2のHTTP POST呼び出しメッセージは、各々、自然言語対話を含み得る。いくつかの実装形態において、第1のHTTP POST呼び出しメッセージ、第2のHTTP POST呼び出しメッセージ、第1のメッセージングアプリケーションサーバ、第2のメッセージングアプリケーションサーバ、第1ユーザ、第2ユーザ、またはそれらの任意の組合せ、のうちの少なくとも1つ以上からの情報は、セッションに関連付けられ得る。
【0020】
いくつかの実装形態において、サーバ連携のための方法、システム、およびコンピュータプログラムプロダクトを提供する。たとえば、第3の方法は、ハイパーテキスト転送プロトコル(HTTP:Hypertext Transfer Protocol)POST呼び出しメッセージを受信するステップを含み得る。HTTP POST呼び出しメッセージは、第1ボットサーバによって受信され得る。いくつかの実装形態において、第1ボットサーバは、第1統一資源識別子(URI:Uniform Resource Identifier)を含み得る。HTTP POST呼び出しメッセージは、ユーザに関連付けられて、第1のメッセージングアプリケーションサーバからURIに送られ得る。HTTP POST呼び出しメッセージからの情報は、セッションに関連付けられ得る。
【0021】
第3の方法は、HTTP POSTメッセージに基づいて第2ボットサーバにセッションを転送すると決定するステップをさらに含み得る。当該決定は、第1ボットサーバによって行われ得る。いくつかの実装形態において、第2ボットサーバは、第2URIを含み得る。
【0022】
第3の方法は、第1ボットサーバによって、転送要求を送信するステップをさらに含み得る。いくつかの実装形態において、転送要求は、第2ボットサーバに送られ得る。転送要求は、セッションの第1ボットサーバとの関連付けを解除させて、当該セッションを第2ボットサーバに関連付けさせ得る。いくつかの実装形態において、第1ボットサーバに関連付けられた情報は、第2ボットサーバに関連付けられた情報とは別々にセッションに保存され得る。
【0023】
第3の方法は、第1ボットサーバによってリターン要求を受信するステップをさらに含み得る。リターン要求は、セッションの第2ボットサーバとの関連付けを解除させて、当該セッションを第1ボットサーバに関連付けさせることができる。いくつかの実装形態において、リターン要求は第2ボットサーバがセッションを終えた後、または転送要求が送信されてから時間が経過した後に、第2ボットサーバから第1ボットサーバに送信され得る。
【0024】
いくつかの例において、HTTP POST呼び出しメッセージは、自然言語対話を含み得る。いくつかの実装形態において、メッセージングアプリケーションサーバは、FACEBOOK(登録商標)Messenger、WHATSAPP(登録商標)インスタントメッセージングソフトウェア、WECHAT(登録商標)モバイルテキスト/音声メッセージング通信サービス、KIK(登録商標)Messenger、TELEGRAM(登録商標)Messenger、およびSKYPE MOBILE(登録商標)のうちの1つに関連付けられ得る。このような実装形態において、HTTP POST呼び出しメッセージのコンテンツの少なくとも一部は、モバイル機器からメッセージングアプリケーションサーバに送信され得る。
【0025】
使用する用語および表現は、説明のための用語として使用されるが、限定するものではない。このような用語および表現の使用に際して、図示および説明された特徴またはそれらの一部の均等物を除外する意図はない。しかしながら、クレームされるシステムおよび方法の範囲内でのさまざまな変更例が可能であることが分かる。よって、本システムおよび方法が例および任意選択の特徴によって具体的に開示されるが、本明細書において開示の概念の変更および変形は、当業者によって行使されてもよく、このような変更例および変形例は、添付の請求項で定められるシステムおよび方法の範囲内であると考えられる、と理解されたい。
【0026】
本概要欄は、クレームされる主題の重要または本質的な特徴を断定することを意図せず、クレームされる主題の範囲を決定するために単独で使用されることも意図しない。本発明の主題は、本特許明細書全体のうちの適切な部分、図面の一部またはすべて、および各請求項を参照することによって理解される。
【0027】
上記を、他の特徴および例とともに、次の明細書、請求項、および添付の図面において、さらに詳しく以下に説明する。
【0028】
例示的な実施例を、以下の図面を参照して詳細に以下に説明する。
【図面の簡単な説明】
【0029】
図1】メッセージングアプリケーションを用いてユーザと通信するためのボットサーバを実装するシステムの例を説明する図である。
図2】1つ以上のメッセージングアプリケーションを用いて複数のユーザと通信を行うためにスケーラブルであるボットサーバの例を説明する図である。
図3】複数のセッションを用いた、モバイル機器上のユーザとボットサーバとの会話の例を示す図である。
図4】セッションにメッセージを関連付けるためのプロセスの例を説明するフローチャートである。
図5】FIG.5Aは、第1メッセージングアプリケーションを用いた、ボットサーバとユーザとの第1の会話の例を説明する図である。FIG.5Bは、第2メッセージングアプリケーションを用いた、ボットサーバとユーザとの第2の会話の例を説明する図である。
図6】前のメッセージが受信されたメッセージングアプリケーションとは異なるメッセージングアプリケーションを用いて応答するボットサーバの例を説明する図である。
図7】複数のメッセージをユーザに関連付けるためのプロセスの例を説明するフローチャートである。
図8】FIG.8Aは、1つの会話中の第1ボットサーバと第2ボットサーバとの間のハンドオフの例を説明する図である。FIG.8Bは、1つの会話中の第1ボットサーバと第2ボットサーバとの間のハンドオフの例のさらに他の会話を説明する図である。
図9】第1ボットサーバに従って第2ボットサーバがタイムアウトした後の、第1ボットサーバと第2ボットサーバとの間のハンドオフの例を説明する図である。
図10】サーバ連携のためのプロセスの例を説明するフローチャートである。
図11】分散システムの例を説明する図である。
図12】システム環境の構成要素を簡略化したブロック図である。
図13】コンピュータシステムの例を説明する図である。
【発明を実施するための形態】
【0030】
詳細な説明
以下の説明において、説明の便宜上、本開示の十分な理解のために、具体的な詳細を記載する。しかしながら、これらの具体的な詳細がなくても、さまざまな例を実施することができることが明らかになるだろう。図面および説明は、限定を意図したものではない。
【0031】
次の説明は、例に過ぎず、本開示の範囲、利用可能性、または構成を限定することを意図しない。むしろ、これらの例の以下の説明は、本開示の例を実現するための、実施を可能にする説明を当業者に提供する。添付の請求の範囲に記載の本開示の趣旨および範囲を逸脱することなく、要素の機能および配置にさまざまな変更を行ってもよいと理解されたい。
【0032】
これらの例の十分な理解のために、具体的な詳細を以下の説明に記載する。しかしながら、当業者は、これらの具体的な詳細がなくてもこれらの例を実施することができると理解するだろう。不必要な詳細で当該例を曖昧にしないように、たとえば、回路、システム、ネットワーク、プロセス、およびその他の構成要素は、ブロック図の形で構成要素として図示される場合がある。他の場合、周知の回路、プロセス、アルゴリズム、構造、および技術が、これらの例を曖昧にしないように、不必要な詳細を説明しないで図示される場合がある。
【0033】
なお、個々の例は、フローチャート、フロー図、データフロー図、構造図、またはブロック図として示されるプロセスとして説明される場合もある。フローチャートは、逐次プロセスとして動作を示し得るが、動作の多くのは、平行して、または同時に実行することができる。これに加えて、動作の順序は、並び替えられてもよい。プロセスは、その動作が完了したときに終了するが、図に含まれないステップをさらに有し得る。プロセスは、方法、関数、プロシージャ、サブルーチン、サブプログラムなどに相当してもよい。プロセスが関数に相当する場合、その終了は、呼び出し関数またはメイン関数へのこの関数の戻りに相当し得る。
【0034】
用語「機械読み取り可能な記憶媒体」または「コンピュータ読み取り可能な記憶媒体」は、持ち運び可能なもしくは据え置き型の記憶装置、光記憶装置、および、命令(複数可)ならびに/またはデータを格納、含有、または保持できるさまざまなその他の媒体を含むが、これらに限定されない。機械読み取り可能な記憶媒体またはコンピュータ読み取り可能な憶媒体は、データを格納することができ、かつ、無線でもしくは有線接続で伝播する搬送波および/または一時的な電気信号を含まない非一時的な媒体を含んでもよい。非一時的な媒体として、磁気ディスクもしくは磁気テープ、CD(Compact Disk)もしくはDVD(Digital Versatile Disk)などの光記憶媒体、フラッシュメモリ、メモリ、または記憶装置などが挙げられ得るが、これらに限定されない。コンピュータプログラムプロダクトは、プロシージャ、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、または、命令、データ構造、もしくはプログラム文の任意の組合せを表し得るコードおよび/または機械によって実行可能な命令を含んでもよい。コードセグメントは、情報、データ、引数、パラメータ、もしくはメモリコンテンツを渡すおよび/または受けることによって、別のコードセグメントまたはハードウェア回路に接続されてもよい。情報、引数、パラメータ、データなどが、メモリ共有、メッセージパッシング、トークンパッシング、ネットワーク伝送などを含む任意の適した手段を介して渡されたり、転送されたり、送信されてもよい。
【0035】
さらに、例は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはそれらの任意の組合せによって実現されてもよい。ソフトウェア、ファームウェア、ミドルウェア、またはマイクロコードで実現された場合、必要なタスク(たとえば、コンピュータプログラムプロダクト)を実行するためのプログラムコードまたはコードセグメントが、機械読み取り可能な媒体に格納されてもよい。プロセッサ(複数可)が当該必要なタスクを実行してもよい。
【0036】
図面のいくつかに示すシステムは、さまざまな構成で提供されてもよい。いくつかの例において、これらのシステムは、システムの1つ以上の構成要素がクラウドコンピューティングシステムにおける1つ以上のネットワーク間で分散される分散システムとして構成されてもよい。
【0037】
A.概要
本明細書における例は、自然言語メッセージを利用したメッセージングアプリケーションを通して自然言語による質問および/またはコメントに応答することができるボットサーバに関する。具体的には、例によって、企業は、ユーザと通信する1つ以上のボット(bot)サーバを定義し、マルチテナント、クロスメッセージングプラットフォームのように、当該1つ以上のボットサーバを大規模に実行できるようになる。いくつかの例において、当該1つ以上のボットサーバは、ユーザとの通信を開始することができる。
【0038】
いくつかの例において、ボットサーバは、統一資源識別子(URI:Uniform Resource Identifier)(たとえば、URL(Uniform Resource Locator)および統一資源名(URN:Uniform Resource Name))に関連付けられ得る。URIは、文字列を利用してボットサーバを識別できる。いくつかの例において、当該URIは、1つ以上のメッセージングアプリケーションサーバ用のwebhook(たとえば、HTTP POST呼び出しメッセージなど、HTTPコールバック)として利用できる。いくつかの例において、メッセージングアプリケーションサーバは、webhookを使用して1つ以上のイベントが発生した場合に、メッセージをボットサーバに送信することができる。webhookは、ボットサーバが、情報が発生した際に、当該情報を頻繁にポーリングするのではなく、当該情報を受信する手段として機能し得る。
【0039】
いくつかの例において、ボットサーバは、メッセージングアプリケーションサーバからメッセージ(たとえば、ハイパーテキスト転送プロトコル(HTTP:Hypertext Transfer Protocol)POST呼び出しメッセージ)を受信するように設計され得る。HTTP POST呼び出しメッセージは、メッセージングアプリケーションサーバからURIに送られ得る。いくつかの例において、メッセージは、HTTP POST呼び出しメッセージとは異なり得る。たとえば、ボットサーバは、SMS(Short Message Server)からメッセージを受信できる。本明細書における説明は、ボットサーバがメッセージとして受信するデータに関する説明であるが、当業者は、このメッセージが、HTTP POST呼び出しメッセージ、SMSメッセージ、またはメッセージングプラットフォームからのその他の種類のメッセージであり得ることが分かるだろう。これに加えて、当業者は、ある構成要素から別の構成要素にボットサーバがメッセージを送信するときは実際のメッセージが送信されない可能性がいつでもあることが分かるだろう。その代わりに、メッセージからの情報、またはメッセージの記憶場所を指すポインタが送信され得る。
【0040】
いくつかの例において、ボットサーバは、1つ以上のユーザの操作を自動的に処理できる。たとえば、所望の目的を達成するために、ユーザは、1通以上のメッセージをボットサーバに送信できる。メッセージは、自然言語のメッセージ(たとえば、文字、絵文字、音声、またはメッセージを伝達するその他の方法)を含み得る。ボットサーバは、このメッセージを、標準化された形式(たとえば、企業サービスに対する、正しいパラメータを用いたREST呼び出し)に変換して、自然言語による応答を生成できる。また、ボットサーバは、必要なパラメータをユーザにさらに求めることができ、かつ、情報をさらに要求できる。また、いくつかの例において、ボットサーバは、ユーザとの通信文を開始することができる。
【0041】
図1は、メッセージングアプリケーションを用いてユーザと通信するためのボットサーバ120を実装するシステムの例を示す図である。いくつかの例において、メッセージングアプリケーションは、電子機器(たとえば、デスクトップコンピュータ、ラップトップ、モバイル機器110)上にインストールすることができる。本明細書における説明では、モバイル機器とメッセージングアプリケーションとを例にするが、当業者は、任意の電子機器を用いることができ、任意のメッセージングプラットフォームを利用することができることが分かるだろう(たとえば、FACEBOOK(登録商標)Messenger、WHATSAPP(登録商標)インスタントメッセージングソフトウェア、WECHAT(登録商標)モバイルテキスト/音声メッセージング通信サービス、KIK(登録商標)Messenger、TELEGRAM(登録商標)Messenger、SKYPE MOBILE(登録商標)、SMS(Short Message Service))。他の例において、メッセージングアプリケーションは、モバイル機器110上にインストールされたブラウザ(たとえば、GOOGLE CHROME(登録商標)、MOZILLA(登録商標)FIREFOX(登録商標)、およびINTERNET EXPLORER)を通じて動作し得る。メッセージングアプリケーションは、FACEBOOK(登録商標)Messenger、WHATSAPP(登録商標)インスタントメッセージングソフトウェア、WECHAT(登録商標)モバイルテキスト/音声メッセージング通信サービス、KIK(登録商標)Messenger、TELEGRAM(登録商標)Messenger、SKYPE MOBILE(登録商標)、または、ユーザが通信できるようになるためのプラットフォームを提供するその他のメッセージングアプリケーションであり得る。メッセージングアプリケーションは、メッセージングアプリケーションサーバ115に関連付けられ得る。いくつかの例において、モバイル機器110は、第1ネットワーク(たとえば、インターネット、または、あるデバイスを別のデバイスに接続する他の方法)によって、メッセージングアプリケーションサーバ115に接続され得る。メッセージングアプリケーションサーバ115は、メッセージングアプリケーションを通してモバイル機器間で送受信されるコンテンツを管理できる。コンテンツは、文字、絵文字、音声、メディア(たとえば、写真、映像、リンク)、またはメッセージを伝達する他の方法を含み得る。いくつかの例において、ボットサーバ120がFACEBOOK(登録商標)Messengerから受信する通常のメッセージは、以下の通りであり得る。
【0042】
【数1】
【0043】
いくつかの例において、メッセージングアプリケーションサーバ115は、ボットサーバ120とも通信できる。メッセージングアプリケーションサーバ115とボットサーバ120との間の通信では、第2ネットワーク(たとえば、インターネット、または、あるデバイスを別のデバイスに接続する他の方法)を使用できる。第1ネットワークと第2ネットワークとは、同じネットワークで有り得、または、同様のまたは完全に異なるネットワークであり得る。メッセージングアプリケーションサーバ115は、インターネットを利用して、モバイル機器110からのコンテンツ(たとえば、メッセージ、メッセージからの情報、または、メッセージの記憶場所を指すポインタ)を、ボットサーバ120にルーティングすることができる。コンテンツの送信先(たとえば、ボットサーバ120のID)は、名目上の受信者として、コンテンツに含まれ得る。
【0044】
ボットサーバ120は、コネクタ130を利用してコンテンツを受信できる。コネクタ130は、メッセージングアプリケーションサーバ115とボットサーバ120との間のインタフェースとして機能することができる。いくつかの例において、コネクタ120は、ボットサーバ120が異なるメッセージングアプリケーションサーバ間のコンテンツを解析できるように、メッセージングアプリケーションサーバ115からのコンテンツを正規化することができる。正規化には、各種類のメッセージングアプリケーションからのコンテンツを処理するために共通フォーマットにフォーマットすることが含まれ得る。いくつかの例において、ボットサーバ120は、図2において説明するように、メッセージングアプリケーション(FACEBOOK(登録商標)Messenger、WHATSAPP(登録商標)インスタントメッセージングソフトウェア、WECHAT(登録商標)モバイルテキスト/音声メッセージング通信サービス、KIK(登録商標)Messenger、TELEGRAM(登録商標)Messenger、およびSKYPE MOBILE(登録商標)、SMS(Short Message Service)など)の各々に対して、1つ以上のコネクタを含み得る。
【0045】
コネクタ130は、このコンテンツを受信メッセージキュー140にルーティングすることができる。いくつかの例において、受信メッセージキュー140は、コンテンツを受信した順番に格納することができる。他の例において、受信メッセージキュー140は、コンテンツを、各方法に割り当てられた優先順位に基づいて格納することができる。このような例において、当該優先順位は、コンテンツ、コンテンツのタイムスタンプ、コンテンツを送信したユーザに関連する情報、またはコンテンツもしくはボットサーバに関するその他の情報(たとえば、コンテンツの予想処理量と比較したボットサーバの負荷)、のうちの少なくとも1つ以上に基づき得る。いくつかの例において、コネクタ130は、図2に説明するように、1つ以上の受信メッセージキューに関連付けられ得る。
【0046】
受信メッセージキュー140は、メッセージプロセッサパイプライン150が利用可能になったときに、コンテンツをメッセージプロセッサパイプライン150に送信できる。いくつかの例において、メッセージプロセッサパイプライン150は、本明細書に記載のイノベーションのうちの1つ以上を用いてコンテンツを解析できる。たとえば、メッセージプロセッサパイプライン150は、セッション化部152、ユーザリゾルバ154、自然言語プロセッサ156、またはそれらの任意の組合せ、のうちの少なくとも1つ以上を含み得る。全体的に、セッション化部152は、ユーザのセッションおよびボットサーバのセッションを作成および管理できる。全体的に、ユーザリゾルバ154は、ユーザが複数のメッセージングアプリケーションを利用していることを理由にまとめることができるセッションを決定できる。全体的に、自然言語プロセッサ156は、メッセージを構文解析して、メッセージの意図やセッションを判断することができる。当該意図は、メッセージの目的を含み得る。たとえば、メッセージの目的は、ピザを注文する、コンピュータを注文する、配達について質問をすることなどであり得る。
【0047】
メッセージプロセッサパイプライン150によってコンテンツが解析された後、解析されたコンテンツは、ボットコード(bot code)160に送信され得る。ボットコード160は、サードパーティ(たとえば、ボットサーバが関連付けられた企業)によって書かれ得、解析されたコンテンツおよびセッションに基づいて、実行するアクションを決定し得る。いくつかの例において、ボットコード160は、アウトバウンドコンテンツを送信メッセージキュー170に送信できる。送信メッセージキュー170は、アウトバウンドコンテンツをコネクタ130に送信できる。次に、コネクタ130は、アウトバウンドコンテンツを、ボットコード160が示すメッセージングアプリケーションサーバに送信できる。次に、メッセージングアプリケーションサーバ115は、モバイル機器115上のメッセージングアプリケーションに当該アウトバウンドコンテンツを転送することができる。
【0048】
ボットサーバ120は、1つ以上の企業サービス(たとえば、企業サービス125)、ナレッジグラフサーバ(図示せず)、または他のコンテンツ送信元(たとえば、リモートデータベースまたはリモートデバイスなど)とさらに通信できる。企業サービス125は、コネクタ130、ボットコード160、またはそれらの任意の組合せ、のうちの少なくとも1つ以上と通信することができる。企業サービス125は、メッセージングアプリケーションサーバ115と同様の方法でコネクタ130と通信することができる。企業サービス125は、1人以上のユーザに関連付けられるコネクタ130にコンテンツを送信できる。また、企業サービス125は、コンテンツをコネクタ130に送信して、ボットサーバ120に、ユーザに関連付けられたアクションを実行させることができる。ボットコード160は、企業サービス125から情報を取得する、および/または、ボットコード160で識別されるアクションを企業サービス125が行えるように、企業サービス125と通信することができる。
【0049】
いくつかの例において、ボットサーバ120は、1つ以上のタイマを備えることができる。タイマは、時間が経過した後に、コネクタ130がメッセージングアプリケーションサーバ115を利用することによって、ボットコード160にユーザに対してコンテンツを送信させる。このコンテンツは、ユーザのデバイス上にインストールされたメッセージングアプリケーション上でユーザまで届き得る。いくつかの例において、タイマは、ユーザまたは企業サービス125と同様に、コンテンツをボットサーバ120に送信できる。たとえば、タイマは、ユーザからのメッセージが解析されるように解析されるメッセージをボットサーバ120に送信できる。
【0050】
ボットサーバ120の通信プロセスを説明するために、ここで、例を説明する。ユーザは、ユーザのデバイス上のメッセージングアプリケーションを用いて、メッセージをメッセージングアプリケーションサーバに送信できる。メッセージングアプリケーションサーバは、当該メッセージを送信するために、このメッセージを構文解析してメッセージングアプリケーションサーバに関連付けられたアカウントを特定することができる。メッセージングアプリケーションサーバは、ボットサーバを当該アカウントであると識別できる。次に、メッセージングアプリケーションサーバは、このメッセージをボットサーバに送信できる。いくつかの例において、メッセージングアプリケーションサーバは、ボットサーバに送信するために、このメッセージを異なるフォーマットにパッケージ化し直すことができる(たとえば、HTTP POST呼び出しメッセージ)。当該メッセージは、あいさつの言葉を含み得る。ボットサーバは、ユーザとの新しい会話が開始したと識別できる。ボットサーバは、ユーザの1つ以上の特性を特定できる。たとえば、ボットサーバは、メッセージングアプリケーションサーバ上でユーザに関連付けられたプロファイルを用いて、ユーザの名前を特定できる。1つ以上の特性を利用して、ボットサーバは、メッセージングアプリケーション上でユーザに応答できる。この応答は、ユーザから受信したメッセージに応答する、ユーザへの個人的なメッセージを含み得る。たとえば、応答は、ユーザの名前を用いたあいさつの言葉を含み得る。
【0051】
ボットサーバに関連付けられた企業によっては、ボットサーバは、企業の目的を達成するように発展し得る。たとえば、ボットサーバがピザ配達企業に関連付けられている場合、ボットサーバは、ピザの購入を容易にすることができる。ボットサーバとユーザとの間の会話は、ボットサーバが会話を完了するまで、またはユーザがボットサーバに応答するのをやめるまで継続し得、行ったり来たりする。
【0052】
いくつかの例において、ボットサーバは、ユーザとの会話を開始できる。ボットサーバによって開始された会話は、ユーザとの前の会話に応答するものであり得る。たとえば、ユーザは、前の会話において、ピザを注文し得る。次に、ボットサーバは、ピザの用意ができたときに会話を開始し得る。いくつかの例において、ボットサーバは、ボットサーバに関連付けられた企業から指示を受信(たとえば、従業員がピザの用意ができたというメッセージをボットサーバに送信)したときに、ピザの用意ができたと判断し得る。会話は、ピザが出来たことを示す、ユーザに送信されたメッセージを含み得る。別の例として、ボットサーバは、前の会話から一定の間が経過した後に、別の会話を開始できる。
【0053】
いくつかの例において、ボットサーバは、前のメッセージを受信したメッセージングアプリケーションとは異なるメッセージングアプリケーション上でユーザにメッセージを送信できる。たとえば、ボットサーバは、FACEBOOK(登録商標)Messengerではなく、SMS(Short Message Service)を用いてメッセージを送信すると決定できる。このような実装形態において、ボットサーバは、複数のメッセージングアプリケーションを統合することができる。
【0054】
いくつかの例において、ボットサーバは、タイマに基づいて会話を開始すると決定できる。たとえば、ボットサーバは、メッセージングアプリケーションを通してピザが最後に購入されてから1週間後に、ユーザがピザをまた欲しいかどうかをボットサーバが尋ねることを決定してもよい。タイマは、企業によって設定し、ボットサーバによって実施することができる。
【0055】
いくつかの例において、ボットサーバは、会話間のユーザの情報を保持できる。この情報は、ユーザとボットサーバとの間で新しい会話が開始されるたびにボットサーバが質問をしなくて済むように利用できる。たとえば、ボットサーバは、ユーザによる前のピザの注文を記憶できる。新しい会話では、ボットサーバは、前回と同じ注文がよいかを尋ねるメッセージをユーザに送信できる。
【0056】
図2は、1つ以上のメッセージングアプリケーションを用いて複数のユーザと通信を行うためにスケーラブルであるボットサーバ220の例を示す図である。ボットサーバ220は、図1において説明した構成要素のうちの多くの構成要素の複数のインスタンスを含み得る。たとえば、ボットサーバ220は、メッセージングアプリケーションサーバからコンテンツを受信できる。しかしながら、コンテンツは、コネクタにおいて受信されるのではなく、第1ロードバランサ225において受信され得る。第1ロードバランサ225は、このコンテンツを1つ以上のコネクタ230にインテリジェントにルーティングし、ボットサーバ220の効率を改善することができる。第1ロードバランサ225は、メッセージの1つ以上の属性をハッシングすることによって、メッセージを送信する先のコネクタを決定できる。たとえば、ユーザのIDおよびメッセージの長さがハッシングされ得る。
【0057】
いくつかの例において、1つ以上のコネクタ230のうちの少なくとも1つが各メッセージングアプリケーションサーバに関連付けられ得る。いくつかの例において、それぞれ異なるメッセージングアプリケーションサーバは、各メッセージングアプリケーションサーバからの通常または現在のボットサーバ220に対する負荷に応じて、異なる数のコネクタに関連付けられ得る。
【0058】
1つ以上のコネクタ230は、ボットサーバ220が受信したコンテンツを1つ以上の受信メッセージキュー240に分けることができる。Apache Kafkaなど、待ち行列システムを利用して、1つ以上の受信メッセージキュー240を管理することができる。各企業、またはユーザは、1つ以上の受信メッセージキュー240のうちの少なくとも1つに関連付けられ得る。
【0059】
いくつかの例において、ユーザからの着信メッセージにおいて特定される1つ以上のプロパティに基づいて1つ以上の受信メッセージキュー240の中から1つの受信メッセージキューが決定され得る。たとえば、特定のユーザまたは会話からの着信メッセージを、同じ受信メッセージキューに入れることができる。
【0060】
いくつかの例において、受信メッセージキューは、1つ以上のメッセージプロセッサパイプライン250にコンテンツを送信できる。いくつかの例において、1つ以上のメッセージプロセッサパイプラインの各々は、仮想マシンであり得る。このような例において、1つ以上のメッセージプロセスパイプライン250の負荷に応じて、仮想マシンをさらに追加できる。
【0061】
いくつかの例において、1つ以上のメッセージプロセスパイプライン250は、解析されたコンテンツを第2ロードバランサ255に送信できる。第2ロードバランサ255は、解析されたコンテンツを、ボットコード260の1つ以上のインスタンスに分けることができる。ボットコード260の1つ以上のインスタンスは、1通以上のアウトバウンドメッセージを1つ以上の送信メッセージキュー270に送信できる。いくつかの例において、1つ以上の送信メッセージキュー270の数は、ボットコード260の1つ以上のインスタンスの数に対応し得る。他の例において、1つ以上の送信メッセージキュー270は、ボットコード260から送信されてくる大量のメッセージに対応し得る。1つ以上の送信メッセージキュー270は、1通以上のアウトバウンドメッセージを第3ロードバランサ275に漸進的に送信できる。第3ロードバランサ275は、1通以上のアウトバウンドメッセージを1つ以上のコネクタ230にインテリジェントにルーティングでき、これによって、1通以上のアウトバウンドメッセージをメッセージングアプリケーションサーバに送信できる。図1と同様に、1つ以上のコネクタ230およびボットコード260の1つ以上のインスタンスは、1つ以上の企業サービスと通信できる。
【0062】
ボットサーバ220によるメッセージの処理および送信に失速が認められた場合、ボットサーバ220は、ボットサーバ220の各構成要素をスケール変更させることができる。たとえば、閾値(たとえば、ボットサーバ220の現在の構成で効率よく処理できるメッセージの数を示す閾値)を超える数のメッセージがコネクタ230に届いていることをボットサーバ220が認めた場合、コネクタ230に1つ以上のコネクタがさらに追加され得る。これに加えて、失速が認められるかどうか、および/またはどこで失速が認められるかによって、受信メッセージキューの数、メッセージプロセッサパイプラインの数、ボットコードのインスタンスの数、送信メッセージキューの数、またはそれらの任意の組合せの数を増やすことができる。このような実装形態において、他の追加の構成要素(たとえば、受信メッセージキュー)を追加しなくても、構成要素(たとえば、コネクタ)をさらに追加することができる。たとえば、ボットコードのインスタンスをさらに追加しなくても、コネクタを追加することができる。いくつかの実装形態において、ボットサーバ220の1つ以上の構成要素、またはボットサーバ220の1つの構成要素の一部を仮想マシン上で実行させることができる。1つの仮想マシン上で実行させることによって、追加の仮想マシンを自在に開始させることができる。
【0063】
いくつかの例において、ボットサーバ220は、ユーザに関連する情報をキャッシュに記憶できる。当該キャッシュは、コネクタ230からメッセージングアプリケーションサーバにアウトバウンドメッセージが送信された後にこの情報を保存するために、長期メモリ(たとえば、データベース、読出し専用メモリ、フラッシュメモリ、ハードディスクドライブ、フロッピー(登録商標)ディスク、磁気テープ、または光ディスクなど、不揮発性メモリ)に書き込むことができる。他の例において、キャッシュは、異なるタイミングで長期メモリに書き込むことができる(たとえば、特定の構成要素の後、各構成要素の後、長期メモリに書き込むタイミングを決定するための時間またはその他の評価指標の後)。
【0064】
本開示においてボットサーバがアクションを実行すると記載される場合はいつでも、当該アクションは、ボットサーバのセッションおよびボットサーバ間のセッションを制御する管理サーバによって実行され得ることを理解されたい。
【0065】
B.セッション化部
上述したように、メッセージプロセッサパイプライン150は、セッション化部152を含み得る。セッション化部152は、ボットサーバ120が受信したメッセージをセッションに関連付けることと、当該セッションを管理することとができる。いくつかの例において、メッセージは、セッションに関連付けられなくてもよい、その代わりに、メッセージの一部、メッセージの記憶場所を指すポインタ、またはメッセージからの情報がセッションに関連付けられ得る。いくつかの例において、メッセージをセッションに関連付けることは、メッセージの一部またはメッセージからの情報を、セッションを表すオブジェクト(または他のデータ構造)に含めることを意味し得る。セッションは、1人以上のユーザと1つ以上のボットサーバとの間の対話を表す1通以上のメッセージ(または、1通以上のメッセージからの情報)を含み得る。セッションは、ボットサーバ152に関連付けられた揮発性メモリおよび/または不揮発性メモリに格納される、セッション化部152によって作成されるオブジェクトであり得る。
【0066】
いくつかの例において、メッセージをセッションに関連付けるステップは、セッションの開始、メッセージを当該セッションに含めるかどうか、およびセッションの終了を決定するステップを含み得る。たとえば、会話では、異なるセッションを各々が表す複数のトピックが話題になり得る。このような例において、セッション化部152は、1つの通信において1つ以上のメッセージがインターリーブされていた場合であっても、各セッションに関連付けられる1つ以上のメッセージを判断できる。この判断は、メッセージが題名を含まない場合であっても起こり得る。判断は、メッセージのコンテンツおよびメッセージのコンテキストに基づき得る。
【0067】
メッセージコンテンツは、メッセージに含まれるデータを含み得る。たとえば、メッセージコンテンツは、ボットサーバのID、メッセージングアプリケーションのID、メッセージングアプリケーションサーバ上のユーザのID、メッセージングアプリケーションの種類、メッセージングアプリケーションにおけるウィンドウのID、メッセージのID、メッセージに含まれるコンテンツ、メッセージに含まれるコンテンツの種類、またはメッセージのコンテンツに関する本明細書に記載のその他の情報、のうちの少なくとも1つ以上を含み得る。いくつかの例において、メッセージに含まれるコンテンツは、メッセージの本文に含まれ得、文字、絵文字、音声、メディア(たとえば、写真、映像、リンク)または、それらのその他の組合せ、のうちの少なくとも1つ以上を含む。いくつかの例において、コンテンツは、メッセージのトピックを判断するために解析され得る。
【0068】
メッセージコンテキストは、HTTP POST呼び出しメッセージのタイムスタンプ、企業データ(たとえば、企業が知る情報)、ユーザからの1通以上の前のメッセージ、ユーザのユーザプロファイル、ユーザの1つ以上のユーザ嗜好、ユーザとボットサーバに関連付けられた企業との間の1つ以上の対話についての以前の履歴、またはそれらの任意の組合せ、のうちの少なくとも1つ以上を含み得る。いくつかの例において、以前の履歴は、過去の購入、過去の会話、過去のアクション、過去のクエリ、過去のAPI(Application Programming Interface)呼び出し、過去のデータ要求、または過去のデータ検索を含み得る。いくつかの例において、企業データは、メッセージングアプリケーションサーバとは無関係のソースからボットサーバが取得した情報を含み得る。いくつかの例において、第1メッセージからのタイムスタンプと第2メッセージからのタイムスタンプとの差は、閾値を上回り得、第1メッセージおよび第2メッセージがそれぞれ異なるセッションに関連付けられていることを示す。企業データは、メッセージのコンテンツに直接含まれていないコンテンツを含み得る。たとえば、企業データは、メッセージの外部のボットサーバによって特定された情報を含み得る。いくつかの例において、メッセージの一部がセッションに関連付けられ得る。
【0069】
一旦セッションが作成されれば、セッション化部152は、新しいメッセージがボットサーバ120によって受信されるときに、当該セッションを保持することができる。たとえば、セッション化部152は、セッションに関連付けられるべきと判断された新しいメッセージからの情報を当該セッションに加えることができる。いくつかの例において、メッセージに対して応答することに関連する情報がセッションに加えられてもよい。
【0070】
いくつかの例において、メッセージのコンテキストに基づいて、1つ以上のセッションが特定され得る。一旦1つ以上のセッションが特定されれば、メッセージのコンテンツが構文解析されてキーワードが特定され得る。次に、一致するセッションを特定するために、このキーワードは、1つ以上のセッションのうちの1つに含まれる単語と照合され得る。一致がない場合、このメッセージのために新しいセッションが作成され得る。他の例において、メッセージのコンテンツが構文解析されてキーワードが特定され得る。このキーワードは、類似する1つ以上のセッションを特定するために利用され得る。次に、メッセージのコンテキストに基づいて、1つ以上のセッションのうちの1つのセッションがメッセージと照会され得る。
【0071】
図3は、モバイル機器310上のユーザとボットサーバとの間の、複数のセッションを有する会話の例を示す図である。いくつかの例において、メッセージングアプリケーションサーバ(たとえば、モバイル機器310は、メッセージングアプリケーションサーバに関連付けられたメッセージングアプリケーションを含み得る)によってこの会話が容易になり得る。左側のメッセージ(たとえば、メッセージ320、340、360)は、ユーザからのメッセージであり得、右側のメッセージ(たとえば、メッセージ330、350)は、ボットサーバからのメッセージであり得る。たとえば、ユーザは、モバイル機器310にインストールされたメッセージングアプリケーションを用いて、メッセージングアプリケーションサーバに第1メッセージ320を送信できる。第1メッセージ320は、「ピザが欲しいです。」という文句を含み得る。
【0072】
上述したように、第1メッセージ320は、ボットサーバのセットアップに応じて、ボットサーバのコネクタまたはロードバランサに届き得る。第1メッセージ320は、受信メッセージキューに入れられ得、最終的に、メッセンジャープロセッサパイプラインに送信される。メッセンジャープロセッサパイプラインでは、第1メッセージ320は、自然言語プロセッサによって解析され得る。第1メッセージ320は、第1メッセージ320のコンテンツおよびメッセージ320のコンテキストに基づいてセッションに入れられ得る。これがユーザとボットサーバとの間の第1メッセージであるため、第1メッセージ320は、第1メッセージ320用のセッションを作成させる。このセッションは、ユーザに関する情報、メッセージのコンテンツ、およびボットサーバがアクセスできる第1メッセージ320に関連付けられたその他の情報を記憶し得る。第1メッセージおよび/またはセッションはボットコードに送信されて、応答が決定され得る。
【0073】
この応答は、第2メッセージ330に含まれる文句「どのような種類のピザが欲しいですか?」を含み得る。第2メッセージ330は、ボットコードから送信メッセージキューに送信され得、最終的に、コネクタに送信されて、メッセージングアプリケーションサーバを利用してモバイル機器310にインストールされたメッセージングアプリケーションに送り返され得る。モバイル機器310にインストールされたメッセージングアプリケーションは、第2メッセージ330を受信して、図3に示すように第2メッセージ330を表示できる。第2メッセージ330からの情報は、セッションに保存され得る。
【0074】
ユーザは、第2メッセージ330を受信後、モバイル機器310上のメッセージングアプリケーションを用いて、ボットサーバに第3メッセージ340を送信できる。第3メッセージ340は、「ピザが欲しいです。」という文句を含み得る。ボットサーバは、セッション化部を用いて、第3メッセージのコンテンツおよび第3メッセージのコンテキストに基づいて第3メッセージ340が新しいセッションであると判断できる。たとえば、ユーザが第2メッセージ330を受信してから、およびユーザが第3メッセージ340を送信してから、時間が経過し得る。別の例において、セッション化部は、第3メッセージ340が第2メッセージ330に対する応答ではないと判断できる。いずれの例においても、セッション化部は、第3メッセージ340用の新しいセッションを作成できる。ボットサーバは、第1メッセージ320と同様に(たとえば、どのような種類のピザをユーザが食べたいかを尋ねる第4メッセージ350を送信することによって)第3メッセージ340に応答できる。
【0075】
ユーザは、第4メッセージ350に対して、ユーザが食べたいピザの種類を含む第5メッセージ360で応答できる。ボットサーバは、上述したように第5メッセージ360を受信できる。しかしながら、セッション化部は、第5メッセージ360用の新しいセッションを作成するのではなく、第5メッセージ360が第3メッセージ340および第4メッセージ350を含む会話の一部であると判定することができる。ボットサーバがこれらの3通のメッセージをまとめることによって、ボットサーバのボットコードは、第3メッセージ、第4メッセージ、および第5メッセージをまとめて解析することによって、第5メッセージ360に対してどう応答するかを決定できる。いくつかの例において、応答は、ボットサーバに関連付けられた企業に送信されて、ユーザがペパロニピザを欲しがっていることを通知するメッセージであり得る。
【0076】
図4は、メッセージをセッションに関連付けるためのプロセス400の例を説明するフローチャートである。いくつかの態様において、プロセス400は、ボットサーバによって実行され得る。ボットサーバの具体例を示すが、当業者は、プロセス400に他のデバイスが含まれ得ることが分かるだろう。
【0077】
プロセス400は、論理フロー図として示されており、その動作は、ハードウェア、コンピュータ命令、またはそれらの組合せで実現され得る一連の動作を表す。コンピュータ命令において、当該動作は、1つ以上のコンピュータ読み取り可能な記憶媒体上に格納されるコンピュータ実行可能な命令を表し、当該命令は、1つ以上のプロセッサによって実行されると、記載の動作を行う。一般に、コンピュータ実行可能な命令は、特定の機能を実行する、または特定のデータ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。動作が記載される順序は、限定と解釈される意図はなく、任意の数の記載の動作が任意の順序および/または平行に組み合わされて、プロセスが実行され得る。
【0078】
これに加えて、プロセス400は、実行可能な命令を有して構成される1つ以上のコンピュータシステムの制御のもとでハードウェアによって実行され得、ハードウェアまたは1つ以上のコンピュータシステムの組合せによって、1つ以上のプロセッサ上でまとめて実行するコード(たとえば、実行可能な命令、1つ以上のコンピュータプログラム、または1つ以上のアプリケーション)として実現され得る。上記のように、当該コードは、機械読み取り可能な記憶媒体上に、たとえば、1つ以上のプロセッサによって実行可能な複数の命令からなるコンピュータプログラムの形で格納され得る。機械読み取り可能な記憶媒体は、非一時的な記憶媒体であり得る。
【0079】
ステップ410において、プロセス400は、ハイパーテキスト転送プロトコル(HTTP:Hypertext Transfer Protocol)POST呼び出しメッセージを受信するステップを含む。いくつかの例において、HTTP POST呼び出しメッセージは、統一資源識別子(URI:Uniform Resource Identifier)に関連付けられたボットサーバによって受信され得る。HTTP POST呼び出しメッセージは、ユーザに関連付けられて、メッセージングアプリケーションサーバから当該URIに送られ得る。メッセージングアプリケーションサーバは、FACEBOOK(登録商標)Messenger、WHATSAPP(登録商標)インスタントメッセージングソフトウェア、WECHAT(登録商標)モバイルテキスト/音声メッセージング通信サービス、KIK(登録商標)Messenger、TELEGRAM(登録商標)Messenger、およびSKYPE MOBILE(登録商標)のうちの1つに関連付けられ得る。HTTP POST呼び出しメッセージのコンテンツの少なくとも一部は、モバイル機器からメッセージングアプリケーションサーバに送信され得る。いくつかの例において、HTTP POST呼び出しメッセージは、自然言語対話を含み得る。いくつかの例において、HTTP POST呼び出しメッセージは、2人以上のユーザ(たとえば、少なくとも1人のユーザおよびボットサーバ)間の会話に関連付けられ得る。メッセージングアプリケーションサーバによってこの会話が容易になり得る。このような例において、会話は、第1トピックと、第2トピックとを含み得る。第1トピックは、第1セッションに関連付けられ得、第2トピックは、第2セッションに関連付けられ得る。
【0080】
いくつかの例において、HTTP POST呼び出しメッセージは、ボットサーバのコネクタによって受信され得る。コネクタは、メッセージングアプリケーションサーバとボットサーバとの間のインタフェースであり得る。いくつかの例において、コネクタは、複数のメッセージングアプリケーションサーバ間でメッセージを正規化することができる。このような例において、正規化には、メッセージングアプリケーションサーバからのHTTP POST呼び出しメッセージ(または、HTTP POST呼び出しメッセージに含まれるコンテンツ)を共通フォーマットにフォーマットすることが含まれ得る。他の例において、HTTP POST呼び出しメッセージは、ボットサーバのロードバランサ・コンポーネントによって受信され得る。ロードバランサ・コンポーネントは、ボットサーバの負荷に基づいて、HTTP POST呼び出しメッセージを複数のコネクタのうちの1つのコネクタに送信できる。ボットサーバは、複数のコネクタを含み得る。
【0081】
ステップ420において、プロセス400は、メッセージのコンテンツを構文解析してキーワードを特定するステップをさらに含む。ステップ430において、プロセス400は、メッセージのコンテキストおよびキーワードに基づいて複数のセッションの中から現在のセッションを特定するステップをさらに含む。いくつかの例において、複数のセッションのうちの1つのセッションがユーザとボットサーバとの間の対話を表し得る。このセッションは、第1ボットサーバからの第1のHTTP POST呼び出しメッセージからの情報と、第2ボットサーバからの第2のHTTP POST呼び出しメッセージからの情報とを含み得る。いくつかの例において、このセッションは、第1のメッセージングアプリケーションサーバからの第1のHTTP POST呼び出しメッセージからの情報と、第2のメッセージングアプリケーションサーバからの第2のHTTP POST呼び出しメッセージからの情報とを含み得る。
【0082】
コンテキストは、HTTP POST呼び出しメッセージのタイムスタンプ、企業データ、ユーザからの1通以上の前のメッセージ、ユーザのユーザプロファイル、ユーザの1つ以上のユーザ嗜好、ユーザとボットサーバに関連付けられた企業との間の1つ以上の対話についての以前の履歴、またはそれらの任意の組合せ、のうちの少なくとも1つ以上を含み得る。いくつかの例において、以前の履歴は、過去の購入、過去の会話、過去のアクション、過去のクエリ、過去のAPI(Application Programming Interface)呼び出し、過去のデータ要求、または過去のデータ検索を含み得る。いくつかの例において、企業データは、メッセージングアプリケーションサーバとは無関係のソースからボットサーバが取得した情報を含み得る。企業データは、HTTP POST呼び出しメッセージに含まれていないコンテンツを含み得る。タイムスタンプは、メッセージングアプリケーション、メッセージングアプリケーションサーバ、またはボットサーバによってHTTPメッセージに含まれる情報の少なくとも一部が受信されたタイミングに関連付けられ得る。いくつかの例において、現在のセッションは、当該セッションである。
【0083】
ステップ440において、プロセス400は、HTTP POST呼び出しメッセージからの情報を現在のセッションに関連付けるステップをさらに含む。いくつかの例において、HTTP POST呼び出しメッセージを現在のセッションに関連付けるステップは、セッションの開始を決定するステップ、およびHTTP POST呼び出しメッセージが現在のセッションに関係するかどうかを決定するステップのうち少なくとも1つ以上を含み得る。
【0084】
ステップ450において、プロセス400は、現在のセッションに基づいてHTTP POST呼び出しメッセージに対する応答を生成するステップをさらに含む。いくつかの例において、プロセス400は、HTTP POST呼び出しメッセージに対する応答からの情報をセッションに関連付けるステップをさらに含み得る。
【0085】
C.ユーザリゾルバ
上述したように、メッセージプロセッサパイプラインは、ユーザリゾルバ154を含み得る。ユーザリゾルバ154は、異なるメッセージングアプリケーションサーバ間で、ボットサーバ120が受信したメッセージをユーザに関連付けることができる。いくつかの例において、ユーザリゾルバ154は、少なくともボットサーバ120が第1のメッセージングアプリケーションサーバから受信した第1メッセージ、および、少なくともボットサーバ120が第2のメッセージングアプリケーションサーバから受信した第2メッセージが、同じユーザ、同じアカウント、および/または同じセッションに関連付けられていると判断できる。このような例において、メッセージが同じユーザ、同じアカウント、および/または同じセッションに関連付けられている場合であっても、各メッセージの送信者に関連付けられた識別子(たとえば、ユーザID)は異なり得る。ユーザリゾルバ154は、この関連付けを判断することができ、メッセージ、ユーザ、アカウント、および/またはセッション同士を結び付けることができる。
【0086】
いくつかの例において、セッション化部152が保持するセッションは、同じユーザに関連付けられた1つ以上のメッセージングアプリケーションサーバのアカウントへの参照を含み得る。このような例において、ボットサーバ120は、第1のメッセージングアプリケーションサーバからメッセージを受信できる。ボットサーバ120は、第2のメッセージングアプリケーションサーバを利用して、このメッセージに応答できる。メッセージが異なるメッセージングアプリケーション上で送信された場合、このメッセージは、当該異なるメッセージングアプリケーションに適合するようにフォーマットされ得る。いくつかの例において、このメッセージは、当該メッセージングアプリケーションに一意のオプションを利用できる。たとえば、メッセージは、当該異なるメッセージングアプリケーションが提供するウィジェットを使用できる。
【0087】
いくつかの例において、ユーザリゾルバ154は、既知の企業アカウントに1つ以上のメッセージを結び付けることができる。たとえば、企業アカウントは、銀行預金口座、光熱費口座、または非メッセージングアプリケーションに関連付けられた他のアカウントを含み得る。このような例において、ユーザリゾルバは、上記と同様の方法で、非メッセージングアカウントをメッセージングアカウントに結び付けることができる。たとえば、銀行のボットサーバは、ユーザと銀行との間のトランザクションを容易にすることができる。ユーザは、FACEBOOK(登録商標)Messenger、WHATSAPP(登録商標)インスタントメッセージングソフトウェア、WECHAT(登録商標)モバイルテキスト/音声メッセージング通信サービス、KIK(登録商標)Messenger、TELEGRAM(登録商標)Messenger、またはSKYPE MOBILE(登録商標)など、メッセージングアプリケーションから、銀行のサーバと通信できる。ユーザは、1つ以上の本人認証に関する質問によってユーザの素性を確認できる。一旦結び付けられれば、ユーザは、メッセージングアプリケーションを利用して、まるで銀行と直接通信しているかのようにボットサーバと通信できる。
【0088】
FIG.5Aは、モバイル機器510にインストールされた第1メッセージングアプリケーションを用いた、ボットサーバとユーザとの第1の会話の例を示す図である。この会話は、ユーザが第1メッセージングアプリケーションを用いて第1メッセージ520をボットサーバに送信することから開始し得る。第1メッセージ520は、「ピザが欲しいです。」を含み得る。第1メッセージ520は、第1メッセージングアプリケーションに関連付けられた第1のメッセージングアプリケーションサーバを通して、ボットサーバに送信され得る。
【0089】
ボットサーバは、ボットコードを用いて、第1メッセージ520に対して、「どのような種類のピザが欲しいですか?」を含み得る第2メッセージ525で応答できる。ユーザは、第2メッセージ525に対して、「ペパロニです。」を含み得る第3メッセージ530で応答できる。ボットサーバは、ボットコードを用いて、第3メッセージ530に対して、「ピザはどちらに配達いたしましょうか?」とユーザに尋ねる第4メッセージ535で応答できる。第1、第2、第3、および、第4メッセージは、すべて、ボットサーバのセッション化部によって1つのセッションに含まれ得る。
【0090】
FIG.5Bは、モバイル機器510上にインストールされた第2メッセージングアプリケーションを用いた、ボットサーバとユーザとの第2の会話の例を示す図である。FIG.5Aに記載のように、第2の会話は、第1の会話の後に起こり得る。第2の会話もまた、第1メッセージ540において「ピザが欲しいです。」とユーザがボットサーバに伝えることから開始し得る。
【0091】
ボットサーバは、第2のメッセージングアプリケーションサーバに関連付けられたユーザが第1のメッセージングアプリケーションサーバに関連付けられたユーザと同じユーザであると判断できる。この判断は、第1のメッセージングアプリケーションサーバに関連付けられたユーザのIDと、第2のメッセージングアプリケーションサーバに関連付けられたユーザのIDとを比較するステップを含み得る。また、この判断は、第1メッセージングアプリケーションおよび第2メッセージングアプリケーションがインストールされたモバイル機器を検出することも含む。また、この判断は、第1のメッセージングアプリケーションサーバに関連付けられたユーザと第2のメッセージングアプリケーションサーバに関連付けられたユーザとの予め特定された結び付きも含み得る。
【0092】
ユーザ同士が結び付けられた後、これらの2人のユーザに関連付けられたセッション情報が1つのセッションに含まれ得る。たとえば、第1の会話からのセッションが第2の会話と組み合わされ得る。いくつかの例において、ユーザ同士の結び付きは、特定のメッセージングアプリケーションサーバから2通以上のメッセージが受信された後に判断され得る。このような例においても、ユーザ同士は、結び付けられ得、セッションは、組み合わされ得る。いくつかの例において、ボットサーバは、第2メッセージングアプリケーション上でメッセージをユーザに送信し、第1メッセージングアプリケーションに関連付けられたユーザが第2メッセージングアプリケーションに関連付けられたユーザと同じであるかどうかを尋ねることができる。
【0093】
一旦ユーザ、アカウント、および/またはセッション同士が結び付けられれば、ボットサーバは、第1のメッセージングアプリケーションサーバに関連付けられた情報を、第2のメッセージングアプリケーションサーバを用いた会話に使用することができる。たとえば、ボットサーバは、第2メッセージ525においてなされたように、ピザについて尋ねる一般的な質問で再度応答するのではなく、「ペパロニピザがよろしいでしょうか?」を含む第2メッセージ545など、個人用メッセージでユーザに応答することができる。第2の質問545は、セッションがFIG.5Aの第1の会話から作成されるため、ペパロニという追加情報を含み得る。ボットサーバは、ユーザがペパロニピザを以前注文したことがあるという情報を保存できる。
【0094】
第2の会話は、メッセージ550、555、560、565で継続し得る。メッセージ550、555、560、565は、ユーザとボットサーバとの第2の会話と、第2の会話用に作成されたセッションを完結させ得る。
【0095】
図6は、前のメッセージを受信したメッセージングアプリケーションとは異なるメッセージングアプリケーションを用いて応答するボットサーバの例を示す図である。具体的には、メッセージ620、630、640、650は、FIG.5Aに示す、第2メッセージングアプリケーションを用いた第1の会話に含まれ得る。しかしながら、ボットサーバは、ボットコードを用いて、最後の通信文が第2メッセージングアプリケーション(たとえば、第6メッセージ565)に含まれていても、第2メッセージングアプリケーションではなく第1メッセージングアプリケーションを用いてユーザに第5メッセージ660を送信すると決定できる。
【0096】
ボットサーバは、いろいろな理由から、第1メッセージングアプリケーションを用いてユーザに第5メッセージ660を送信すると決定できる。たとえば、ユーザは、第1メッセージングアプリケーションを用いてメッセージが送信されるのを好むことを示し得る。別の例として、ボットサーバは、ユーザが第2メッセージングアプリケーションに送信されたメッセージを読んでいないと判断し得る。このような例において、ボットサーバは、メッセージが送信または受信されてから経過した時間、および、ユーザが第5メッセージ660を受信した切迫度合いなどの情報を使用できる。別の例として、ボットサーバは、第2メッセージングアプリケーションが含まないオプションを第1メッセージングアプリケーションが含んでおり、第1メッセージングアプリケーションの方が第5メッセージ660の情報を提示するのに適していると判断できる。たとえば、第1メッセージングアプリケーションは、特定のウィジェットを許可できる一方、第2メッセージングアプリケーションは、許可しない。
【0097】
図7は、複数のメッセージを1人のユーザ(または、アカウント)に関連付けるためのプロセスの例を説明するフローチャートである。いくつかの態様において、プロセス700は、ボットサーバによって実行され得る。ボットサーバの具体例を示すが、当業者は、プロセス700に他のデバイスが含まれ得ることが分かるだろう。
【0098】
プロセス700は、論理フロー図として示されており、その動作は、ハードウェア、コンピュータ命令、またはそれらの組合せで実現され得る一連の動作を表す。コンピュータ命令において、当該動作は、1つ以上のコンピュータ読み取り可能な記憶媒体上に格納されるコンピュータ実行可能な命令を表し、当該命令は、1つ以上のプロセッサによって実行されると、記載の動作を行う。一般に、コンピュータ実行可能な命令は、特定の機能を実行する、または特定のデータ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。動作が記載される順序は、限定と解釈される意図はなく、任意の数の記載の動作が任意の順序および/または平行に組み合わされて、プロセスが実行され得る。
【0099】
これに加えて、プロセス700は、実行可能な命令を有して構成される1つ以上のコンピュータシステムの制御のもとでハードウェアによって実行され得、ハードウェアまたは1つ以上のコンピュータシステムの組合せによって、1つ以上のプロセッサ上でまとめて実行するコード(たとえば、実行可能な命令、1つ以上のコンピュータプログラム、または1つ以上のアプリケーション)として実現され得る。上記のように、当該コードは、機械読み取り可能な記憶媒体上に、たとえば、1つ以上のプロセッサによって実行可能な複数の命令からなるコンピュータプログラムの形で格納され得る。機械読み取り可能な記憶媒体は、非一時的な記憶媒体であり得る。
【0100】
ステップ710において、プロセス700は、第1のハイパーテキスト転送プロトコル(HTTP:Hypertext Transfer Protocol)POST呼び出しメッセージを受信するステップを含む。いくつかの例において、第1のHTTP POST呼び出しメッセージは、統一資源識別子(URI:Uniform Resource Identifier)に関連付けられたボットサーバによって受信され得る。第1のHTTP POST呼び出しメッセージは、第1ユーザに関連付けられ得、第1のメッセージングアプリケーションサーバからURIに送られ得る。いくつかの例において、第1のメッセージングアプリケーションサーバは、FACEBOOK(登録商標)Messenger、WHATSAPP(登録商標)インスタントメッセージングソフトウェア、WECHAT(登録商標)モバイルテキスト/音声メッセージング通信サービス、KIK(登録商標)Messenger、TELEGRAM(登録商標)Messenger、およびSKYPE MOBILE(登録商標)のうちの1つに関連付けられ得る。いくつかの例において、第1のHTTP POST呼び出しメッセージのコンテンツの少なくとも一部は、第1のモバイル機器から第1のメッセージングアプリケーションサーバに送信され得る。第1のHTTP POST呼び出しメッセージは、ボットサーバとの自然言語対話を含み得る。
【0101】
ステップ720において、プロセス700は、第2のHTTP POST呼び出しメッセージを受信するステップをさらに含む。いくつかの例において、第2のHTTP POST呼び出しメッセージは、ボットサーバによって受信され得る。第2のHTTP POST呼び出しメッセージは、第2ユーザに関連付けられ、第2のメッセージングアプリケーションサーバからURIに送られ得る。いくつかの例において、第2のメッセージングアプリケーションサーバは、第1のメッセージングアプリケーションサーバとは異なり得る。いくつかの例において、第1ユーザのIDは、第2ユーザのIDとは異なり得る。いくつかの例において、第2のメッセージングアプリケーションサーバは、FACEBOOK(登録商標)Messenger、WHATSAPP(登録商標)インスタントメッセージングソフトウェア、WECHAT(登録商標)モバイルテキスト/音声メッセージング通信サービス、KIK(登録商標)Messenger、TELEGRAM(登録商標)Messenger、およびSKYPE MOBILE(登録商標)のうちの1つに関連付けられ得る。このような例において、第1のメッセージングアプリケーションサーバは、第2のメッセージングアプリケーションサーバとは異なり得る。他の例において、第1のメッセージングアプリケーションサーバは、第2のメッセージングアプリケーションサーバと同じであり得る。このような例において、第1ユーザおよび第2ユーザは、それぞれ異なるIDを含み得る。いくつかの例において、第2のHTTP POST呼び出しメッセージのコンテンツ少なくとも一部は、第2のモバイル機器から第2のメッセージングアプリケーションサーバに送信され得る。第2のHTTP POST呼び出しメッセージは、ボットサーバとの自然言語対話を含み得る。
【0102】
ステップ730において、プロセス700は、第1のHTTP POST呼び出しメッセージのコンテンツを構文解析して第1キーワードを特定するステップをさらに含む。ステップ740において、プロセス700は、第1のHTTP POST呼び出しメッセージのコンテキストおよび第1キーワードに基づいて複数のユーザの中から第1の現在のユーザを特定するステップをさらに含む。いくつかの例において、第1のHTTP POST呼び出しメッセージについて第1の現在のユーザが特定され得る。ステップ750において、プロセス700は、第1のHTTP POST呼び出しメッセージからの情報を第1の現在のユーザに関連付けるステップをさらに含む。
【0103】
ステップ760において、プロセス700は、第2のHTTP POST呼び出しメッセージのコンテンツを構文解析して第2キーワードを特定するステップをさらに含む。ステップ770において、プロセス700は、第2メッセージのコンテキストおよび第2キーワードに基づいて複数のユーザの中から第2の現在のユーザを特定するステップをさらに含む。いくつかの例において、第2のHTTP POST呼び出しメッセージについて第2の現在のユーザが特定され得る。いくつかの例において、第2の現在のユーザは、第1の現在のユーザであり得る。ステップ780において、プロセス700は、第2のHTTP POST呼び出しメッセージからの情報を第1の現在のユーザに関連付けるステップをさらに含む。
【0104】
ステップ790において、プロセス700は、第1のHTTP POST呼び出しメッセージ、第2のHTTP POST呼び出しメッセージ、および第1の現在のユーザのうちの少なくとも1つ以上からの情報に基づいて第2のHTTP POST呼び出しメッセージに対する応答を生成するステップをさらに含む。いくつかの例において、第2のHTTP POST呼び出しメッセージに対する応答は、第1のメッセージングアプリケーションサーバを用いて送信され得る。いくつかの例において、第1のHTTP POST呼び出しメッセージ、第2のHTTP POST呼び出しメッセージ、応答、第1のメッセージングアプリケーションサーバ、第2のメッセージングアプリケーションサーバ、第1ユーザ、および第2ユーザのうちの少なくとも1つ以上からの情報は、セッションに関連付けられる。
【0105】
いくつかの例において、プロセス700は、第1の現在のユーザを企業アカウントに関連付けるステップをさらに含み得る。企業アカウントは、メッセージングアプリケーションサーバとは別であり得る。
【0106】
D.サーバ連携
また、いくつかの例において、セッション化部152は、ボットサーバ間のセッションを管理できる。このような例において、1人以上のユーザと第1ボットサーバとの間のセッションは、セッション化部152によって維持され得る。セッションは、第1ボットサーバに関連付けられた情報を当該セッションの第1の位置に含み得る。また、セッションは、第2ボットサーバに関連付けられた情報をセッションの第2の位置に含み得る。第1の位置と第2の位置は、それぞれ異なり得る。各ボットサーバに関連付けられた情報を異なる位置に有することによって、情報の上書きを回避できる。
【0107】
いくつかの例において、第1ボットサーバは、ユーザ、アカウント、および/またはセッションを、第2ボットサーバにハンドオフまたは転送すると決定できる。このような例において、第1ボットサーバのセッションは、第1ボットサーバが収集、保存、および/または受信したセッションに含まれる情報を第2ボットサーバが有することができるように、第2ボットサーバに転送され得る。たとえば、第1ボットサーバは、人材センターに関連付けられ得る。第1ボットサーバは、第2ボットサーバにユーザを送信して第2ボットサーバからサービスを受信すると決定できる。このような例において、第2ボットサーバは、第1ボットサーバが格納または保存した情報の恩恵を受けることができる。
【0108】
ハンドオフを容易にするために、第1ボットサーバは、ちょうどユーザが第2ボットサーバにメッセージを送信するように、メッセージを第2ボットサーバに送信できる。このメッセージは、第2ボットサーバに関連付けられたセッション化部に、第1ボットサーバからのセッションを第2ボットサーバに対して再構成させ得る。他の例において、第1ボットサーバは、ロードバランサ・コンポーネント、受信メッセージキュー、またはメッセージプロセッサパイプラインなど、第2ボットサーバの別の構成要素にメッセージを送信できる。たとえば、ハンドオフメッセージは、以下の通りであり得る。
【0109】
【数2】
【0110】
いくつかの例において、セッション情報は、ボットサーバ間で切り離され得る。たとえば、ハンドオフが発生した場合、第1ボットサーバからのセッション情報と第2ボットサーバからのセッション情報は、別々に保存され得る。
【0111】
いくつかの例において、第2ボットサーバは、セッションを第1ボットサーバに戻すことができる。この転送は、第2ボットサーバがその目的を完了したときに起こり得る。いくつかの例において、第2ボットサーバは、上述したようにメッセージを第1ボットサーバのセッション化部に送信してセッションを第1ボットサーバに戻すことができる。また、この転送は、第1ボットサーバがハンドオフをキャンセルしたときに起こり得る。たとえば、第1ボットサーバは、第2ボットサーバが時間がかかりすぎていると判断できる。このような例において、第1ボットサーバは、第2ボットサーバのセッション化部にメッセージを送信してセッションを第1ボットサーバに戻すことができる。たとえば、第2ボットサーバから第1ボットサーバにセッションを戻すためのメッセージは、以下の通りであり得る。
【0112】
【数3】
【0113】
例示のために、企業における新しい従業員の例を説明することができる。新しい従業員には、最初に完了しなければならないいくつかのタスクがある。たとえば、電子メールが発行され得、ラップトップが注文され得、場所が割り当てられ得る。しかしながら、タスクは、各々、企業において異なる人に関連付けられ得る。このような例において、ボットサーバは、各タスクに関連付けられ得る。そして、各ボットサーバは、その他のボットサーバと通信して効率を改善させることができる。
【0114】
FIG.8A~FIG.8Bは、1つの会話中の第1ボットサーバと第2ボットサーバとの間のハンドオフの例を示す図である。FIG.8A~FIG.8Bの目的のために、FIG.8Bの会話は、FIG.8Aの会話の続きであると見ることができるだろう。この1つの会話は、企業における新しい従業員に関し得る。新しい従業員に、企業においていくつかのエンティティと個々に接触させるのではなく、本明細書における例では、モバイル機器810にインストールされたメッセージングアプリケーションにおいて従業員に1つのメッセージスレッドを使用させる。
【0115】
たとえば、ユーザは、モバイル機器810上にインストールされたメッセージングアプリケーションのチャットウィンドウにおいて、第1メッセージ820を第1ボットサーバに送信できる。第1メッセージ820は、メッセージングアプリケーションに関連付けられたメッセージングアプリケーションサーバに送信され得る。メッセージングアプリケーションサーバは、第1メッセージ820を第1ボットサーバに送信できる。第1ボットサーバは、ボットコードを用いて、第1メッセージ820に対して、「こんにちは、人事です。お名前は何ですか?」を含む第2メッセージ825で応答することができる。ユーザは、第2メッセージ825に対して、「ボブです。」を含む第3メッセージ830で応答できる。第1ボットサーバは、ユーザに関連付けられたセッションに、ユーザの名前として「ボブ」を保存できる。
【0116】
第1ボットサーバは、ユーザが「新しいコンピュータが欲しい」かどうかを尋ねる第4メッセージ835で第3メッセージに返信できる。第4メッセージ835に対する返信である第5メッセージ840においてユーザが「はい。」と応答することによって、第1ボットサーバのボットコードは、セッションが第2ボットサーバにハンドオフされるべきであると判断できる。第2ボットサーバは、新しい従業員の第1ステップである、コンピュータを注文することに関連付けられ得る。ハンドオフを容易にするために、第1ボットサーバは、転送要求を第2ボットサーバに送信できる。転送要求は、第2ボットサーバのセットアップに応じて、コネクタまたはロードバランサにおいて受信され得る。いくつかの例において、転送要求は、受信メッセージキューまたはセッション化部を含む、第2ボットサーバの異なる要素に送信され得る。転送要求は、セッションに関連付けられる1通以上の新しい受信メッセージが第1ボットサーバではなく第2ボットサーバによって受信されるように、ユーザに関連付けられたセッションの第1ボットサーバとの関連付けを解除させて、当該セッションを第2ボットサーバに関連付けさせ得る。
【0117】
いくつかの例において、1通以上の新しいメッセージが、第1ボットサーバではなく、第2ボットサーバによって受信され得る。なぜならば、第1ボットサーバに関連付けられたURIが変更され得るからである。たとえば、第1ボットサーバおよび第2ボットサーバを再構成することによって、URIは、第1ボットサーバではなく、第2ボットサーバに割り当てられ得る。別の例として、メッセージングアプリケーションサーバが新しいメッセージを第2ボットサーバに送信するようにセッションのURIを変更するためのメッセージが、メッセージングアプリケーションサーバに送信され得る。別の例として、URIは、1つ以上のボットサーバ宛てのすべてのメッセージを受信する管理サーバに関連付けられ得る。次に、管理サーバは、メッセージを適切なボットサーバに送信し得る。別の例として、第1ボットサーバは、第2ボットサーバの仲介役として機能し得、第1ボットサーバが受信したメッセージを第2ボットサーバに転送する。
【0118】
ここで、第1ボットサーバがメッセージに応答するのではなく、第2ボットサーバがメッセージングアプリケーションサーバを通してメッセージに応答する。しかしながら、このメッセージは、第2ボットサーバが第1ボットサーバであるかのように、チャットウィンドウに含まれたままであり得る。転送要求、および、第5メッセージ840におけるユーザによる肯定的回答に応答して、第2ボットサーバは、第6メッセージ845をユーザに送信できる。第6メッセージ845は、「ボブさん、どのような種類のコンピュータが欲しいですか?」を含み得る。このような例において、ユーザは、別のボットサーバがユーザと通信していることに気が付かないだろう。ユーザは、第6メッセージ845に対して第7メッセージ850で応答できる。ユーザと第2ボットサーバとの会話は、第2ボットサーバがその目的(たとえば、ボブのためにコンピュータを注文する)を完了するまで継続し得る。第2ボットサーバがその目的を完了した場合、第2ボットサーバは、ユーザを第1ボットサーバに戻す、ユーザを第3ボットサーバに送信する、または、この会話を完了させることができる(サーバ間の転送は、上記と同様の方法で行われ得る)。
【0119】
図9は、第1ボットサーバに従って第2ボットサーバがタイムアウトした後の、第1ボットサーバと第2ボットサーバとの間のハンドオフの例を示す図である。このような例において、第1ボットサーバは、第2ボットサーバがその目的を完了するタイマを設定し得る。たとえば、第1ボットサーバは、第2ボットサーバがその目的を10分で完了することが望ましいと決定できる。タイマが満了すると、第1ボットサーバは、第2ボットサーバにメッセージを送信し、ユーザと第2ボットサーバとの会話のステータスを要求できる。まだユーザを処理中であると第2ボットサーバが第1ボットサーバに応答した場合、第1ユーザは、第2ボットサーバとのハンドオフを終了する(そして、第1ボットサーバにユーザを戻す)、第2ボットサーバがその目的を完了する新しいタイマをセットする(これは、上記と同様の方法で動作する)、または、何もしない、と決定できる。
【0120】
ハンドオフを終了するために、第1ボットサーバは、第2ボットサーバにメッセージを送信できる。当該メッセージは、第1および第2ボットサーバのセットアップに応じて、コネクタ、ロードバランサ、またはセッション化部に送信され得る。メッセージは、図8に上記した同様の方法で、セッションの第2ボットサーバとの関連付けを解除させて、当該セッションを第1ボットサーバに関連付けさせることができる。第2ボットサーバとのハンドオフを終了することによって、本明細書における例は、第2ボットサーバのボットコードが遅延、失敗、またはフリーズする状況に対処できる。
【0121】
たとえば、ユーザが第7メッセージ950(第7メッセージ850と同様)を送信した後、第1ボットサーバは、第1ボットサーバが第2ボットサーバへのハンドオフを終了することが望ましいと決定できる。第2ボットサーバへのハンドオフを終了することによって、上述したように、セッションの第2ボットサーバとの関連付けは解除され、当該セッションは、第1ボットサーバに関連付けられる。ハンドオフの後、第1ボットサーバは、「欲しいコンピュータを注文し終わりましたか?」と尋ねる第8メッセージ955をユーザに送信できる。その後、第1ボットサーバは、ユーザとの会話を継続できる。
【0122】
他の例において、第1ボットサーバは、第2ボットサーバが完了できなかったと判断できる。このような例において、第1ボットサーバは、第8メッセージ955の送信を取りやめて、第2ボットサーバが完了できなかったことを分かった状態で会話を継続することができる。第1ボットサーバは、セッションを解析することによって、第2ボットサーバが完了できなかったと判断できる。
【0123】
図10は、サーバ連携のためのプロセス1000の例を示すフローチャートである。いくつかの態様において、プロセス1000は、ボットサーバによって実行され得る。ボットサーバの具体例を示すが、当業者は、プロセス1000に他のデバイスが含まれ得ることが分かるだろう。
【0124】
プロセス1000論理フロー図として示されており、その動作は、ハードウェア、コンピュータ命令、またはそれらの組合せで実現され得る一連の動作を表す。コンピュータ命令において、当該動作は、1つ以上のコンピュータ読み取り可能な記憶媒体上に格納されるコンピュータ実行可能な命令を表し、当該命令は、1つ以上のプロセッサによって実行されると、記載の動作を行う。一般に、コンピュータ実行可能な命令は、特定の機能を実行する、または特定のデータ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。動作が記載される順序は、限定と解釈される意図はなく、任意の数の記載の動作が任意の順序および/または平行に組み合わされて、プロセスが実行され得る。
【0125】
これに加えて、プロセス1000は、実行可能な命令を有して構成される1つ以上のコンピュータシステムの制御のもとでハードウェアによって実行され得、ハードウェアまたは1つ以上のコンピュータシステムの組合せによって、1つ以上のプロセッサ上でまとめて実行するコード(たとえば、実行可能な命令、1つ以上のコンピュータプログラム、または1つ以上のアプリケーション)として実現され得る。上記のように、当該コードは、機械読み取り可能な記憶媒体上に、たとえば、1つ以上のプロセッサによって実行可能な複数の命令からなるコンピュータプログラムの形で格納され得る。機械読み取り可能な記憶媒体は、非一時的な記憶媒体であり得る。
【0126】
ステップ1010において、プロセス1000は、ハイパーテキスト転送プロトコル(HTTP:Hypertext Transfer Protocol)POST呼び出しメッセージを受信するステップを含む。いくつかの例において、HTTP POST呼び出しメッセージは、第1統一資源識別子(URI:Uniform Resource Identifier)を有する第1ボットサーバによって受信され得る。HTTP POST呼び出しメッセージは、ユーザに関連付けられて、メッセージングアプリケーションサーバから当該URIに送られ得る。いくつかの例において、HTTP POST呼び出しメッセージからの情報は、セッションに関連付けられ得る。いくつかの例において、HTTP POST呼び出しメッセージは、自然言語対話を含み得る。いくつかの例において、メッセージングアプリケーションサーバは、FACEBOOK(登録商標)Messenger、WHATSAPP(登録商標)インスタントメッセージングソフトウェア、WECHAT(登録商標)モバイルテキスト/音声メッセージング通信サービス、KIK(登録商標)Messenger、TELEGRAM(登録商標)Messenger、およびSKYPE MOBILE(登録商標)のうちの1つに関連付けられ得る。いくつかの例において、HTTP POST呼び出しメッセージのコンテンツの少なくとも一部は、モバイル機器からメッセージングアプリケーションサーバに送信される。
【0127】
ステップ1020において、プロセス1000は、HTTP POST呼び出しメッセージに基づいて第2ボットサーバにセッションを転送すると決定するステップをさらに含む。いくつかの例において、この転送の決定は、第1ボットサーバによるものであり得る。いくつかの例において、第2ボットサーバは、第2URIを含み得る。
【0128】
ステップ1030において、プロセス1000は、第1ボットサーバによって、転送要求を送信するステップをさらに含む。いくつかの例において、転送要求は、セッションの第1ボットサーバとの関連付けを解除させて、当該セッションを第2ボットサーバに関連付けさせ得る。いくつかの例において、第1ボットサーバに関連付けられた情報は、第2ボットサーバに関連付けられた情報とは別にセッションに保存され得る。
【0129】
いくつかの例において、プロセス1000は、第1ボットサーバまたは第2ボットサーバによってリターン要求を送信するステップをさらに含み得る。リターン要求は、セッションの第2ボットサーバとの関連付けを解除させて、当該セッションを第1ボットサーバに関連付けさせ得る。いくつかの例において、リターン要求は、転送要求が送信または受信されてから時間が経過した後に送信され得る。
【0130】
E.例示的なシステム
図11は、分散システム1100を簡素化した図を示す。分散システム1100は、1つ以上のクライアントコンピューティングデバイス1102、1104、1106、および1108を備える。1つ以上のクライアントコンピューティングデバイス1102、1104、1106、および1108は、各々、1つ以上のネットワーク(複数可)1110で、ウェブブラウザ、プロプライエタリ・クライアント(たとえば、Oracle Forms)などのクライアントアプリケーションを実行および操作するように構成され得る。サーバ1112は、ネットワーク1110を介して、リモートクライアントコンピューティングデバイス1102、1104、1106、および1108と通信可能に接続されてもよい。
【0131】
さまざまな例において、サーバ1112は、分散システム1100の構成要素のうちの1つ以上が提供する1つ以上のサービスまたはソフトウェアアプリケーションを実行するようになされてもよい。サービスまたはソフトウェアアプリケーションは、非仮想環境および仮想環境を含み得る。仮想環境は、2次元表現であれ3次元(3D)表現であれ、仮想イベント、見本市、シミュレータ、教室、品物の売買、および企業のための仮想環境、ページベースの論理的環境、または上記以外のその他のものを含み得る。いくつかの例において、これらのサービスは、クライアントコンピューティングデバイス1102、1104、1106、および/または1108のユーザに対して、ウェブベースのサービスもしくはクラウドサービスとして提供されてもよく、または、SaaS(Software as a Service)モデル下で提供されてもよい。クライアントコンピューティングデバイス1102、1104、1106、および/または1108を操作するユーザは、1つ以上のクライアントアプリケーションを利用してサーバ1112とやり取りして、これらの構成要素が提供するサービスを利用できる。
【0132】
図11において、分散システム1100のソフトウェアコンポーネント1118、1120、および1122がサーバ1112上に実装されたものとして示される。他の例において、分散システム1100の構成要素のうちの1つ以上および/またはこれらの構成要素が提供するサービスのうちの1つ以上は、クライアントコンピューティングデバイス1102、1104、1106、および/または1108のうちの1つ以上によって実現されてもよい。次に、クライアントコンピューティングデバイスを操作しているユーザは、1つ以上のクライアントアプリケーションを利用して、これらの構成要素が提供するサービスを使用してもよい。これらの構成要素は、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組合せで実現されてもよい。さまざまな異なるシステム構成が可能であり、これらは、分散システム1100とは異なってもよいことを理解されたい。よって、図に示す例は、例示的なシステムを実現するための分散システムの一例であって、限定を意図したものではない。
【0133】
クライアントコンピューティングデバイス1102、1104、1106、および/または1108は、Microsoft Windows Mobile(登録商標)などのソフトウェアおよび/またはiOS、Windows Phone、Android、BlackBerry 10、Palm OSなどのいろいろなモバイルオペレーティングシステムを実行し、かつ、インターネット、電子メール、SMS(Short Message Service)、Blackberry(登録商標)、または他の通信プロトコルに対応する手のひらサイズのポータブルデバイス(たとえば、iPhone(登録商標)、携帯電話、iPad(登録商標)、コンピューティングタブレット、PDA(Personal Digital Assistant))またはウェアラブルデバイス(たとえば、Google Glass(登録商標)ヘッドマウントディスプレイ)であってもよい。クライアントコンピューティングデバイスは、例として、さまざまなバージョンのMicrosoft Windows(登録商標)、Apple Macintosh(登録商標)、および/またはLinux(登録商標)オペレーティングシステムを実行するパーソナルコンピュータおよび/またはラップトップコンピュータを含む、汎用パーソナルコンピュータであり得る。クライアントコンピューティングデバイスは、これらに限定されないが、たとえば、Google Chrome OSなどいろいろなGNU/Linuxオペレーティングシステムを含む各種市販のUNIX(登録商標)またはUNIXに似たオペレーティングシステムを実行するワークステーションコンピュータであり得る。これに代えて、またはこれに加えて、クライアントコンピューティングデバイス1102、1104、1106、および1108は、シン・クライアントコンピュータ、インターネット対応のゲーミングシステム(たとえば、Kinect(登録商標)ジェスチャ入力装置付きまたは無しのMicrosoft Xboxのゲーミングコンソール)、および/またはパーソナルメッセージングデバイスなど、ネットワーク(複数可)1110で通信可能なその他の電子機器であってもよい。
【0134】
例示的な分散システム1100は、4台のクライアントコンピューティングデバイスとともに示されているが、任意の数のクライアントコンピューティングデバイスがサポートされてもよい。センサ付きデバイスなど、他のデバイスがサーバ1112と対話を行ってもよい。
【0135】
分散システム1100におけるネットワーク(複数可)1110は、これらに限定されないが、TCP/IP(Transmission Control Protocol/Internet Protocol)、SNA(Systems Network Architecture)、IPX(Internet Packet Exchange)、AppleTalkなどを含む、各種市販のプロトコルを使用したデータ通信をサポートできる、当業者にとってなじみのある任意の種類のネットワークであってもよい。単に一例として、ネットワーク(複数可)1110は、Ethernet(登録商標)および/またはトークンリングなどに基づいたLAN(Local Area Network)などのLANであり得る。ネットワーク(複数可)1110は、ワイドエリアネットワークおよびインターネットであり得る。ネットワーク(複数可)1110は、これらに限定されないが、VPN(Virtual Private Network)、イントラネット、エクストラネット、PSTN(Public Switched Telephone Network)、赤外線ネットワーク、ワイヤレスネットワーク(たとえば、IEEE(Institute of Electrical and Electronics)802.11スイートのプロトコル、Bluetooth(登録商標)、および/またはその他のワイヤレスプロトコルのうちのいずれかの下で動作するネットワーク)、および/もしくはこれらの任意の組合せを含む仮想ネットワーク、ならびに/または他のネットワークを含み得る。
【0136】
サーバ1112は、1つ以上の汎用コンピュータ、専用サーバコンピュータ(一例として、PC(Personal Computer)サーバ、UNIX(登録商標)サーバ、ミッドレンジ・サーバ、メインフレーム・コンピュータ、ラックマウント式サーバなどを含む)、サーバファーム、サーバ・クラスタ、またはその他の適切な配置および/もしくは組合せから構成されてもよい。サーバ1112は、仮想オペレーティングシステムを実行している1つ以上の仮想マシン、または仮想化を伴う他のコンピューティングアーキテクチャを含み得る。論理記憶装置の1つ以上のフレキシブルプールを仮想化して、サーバ用の仮想記憶装置を維持することができる。仮想ネットワークは、SDN(Software-Defined Networking)を用いて、サーバ1112によって制御され得る。さまざまな例において、サーバ1112は、上記の開示において説明した1つ以上のサービスまたはソフトウェアアプリケーションを実行するようになされてもよい。たとえば、サーバ1112は、本開示の例に従って上述した処理を行うためのサーバに対応してもよい。
【0137】
サーバ1112は、上述のオペレーティングシステムのいずれか、および任意の市販のサーバオペレーティングシステムを実行してもよい。また、サーバ1112は、HTTP(Hypertext Transport Protocol)サーバ、FTP(File Transfer Protocol)サーバ、CGI(Common Gateway Interface)サーバ、JAVA(登録商標)サーバ、データベースサーバなどを含む、各種の追加のサーバアプリケーションおよび/またはミッドティア・アプリケーションを実行してもよい。例示的なデータベースサーバとして、Oracle、Microsoft、Sybase、IBM(International Business Machines)などが販売するデータベースサーバが挙げられるが、これらに限定されない。
【0138】
いくつかの実装形態において、サーバ1112は、クライアントコンピューティングデバイス1102、1104、1106、および1108のユーザから受信したデータフィードおよび/またはイベント更新を分析するおよび1つにまとめるための1つ以上のアプリケーションを含んでもよい。例として、データフィードおよび/またはイベント更新は、Twitter(登録商標)フィード、Facebook(登録商標)更新、または1つ以上のサードパーティ情報ソースおよび連続したデータストリームから受信されるリアルタイム更新を含んでもよいが、これらに限定されない。データフィードおよび/またはイベント更新は、センサーデータアプリケーション、チッカー(financial ticker)、ネットワークパフォーマンス測定ツール(たとえば、ネットワーク監視およびトラフィック管理アプリケーション)、クリックストリーム分析ツール、自動車交通量監視などに関するリアルタイムイベントを含み得る。また、サーバ1112は、クライアントコンピューティングデバイス1102、1104、1106、および1108の1つ以上の表示装置を介してデータフィードおよび/またはリアルタイムイベントを表示するための1つ以上のアプリケーションを含んでもよい。
【0139】
また、分散システム1100は、1つ以上のデータベース1114および1116を含んでもよい。データベース1114および1116は、いろいろな場所に存在してもよい。例として、データベース1114および1116のうちの1つ以上は、サーバ1112にローカルな(および/または存在する)非一時的な記憶媒体上に存在してもよい。これに代えて、データベース1114および1116は、サーバ1112から遠隔の場所に存在し、ネットワークベースの接続または専用の接続を通してサーバ1112と通信していてもよい。一組の例において、データベース1114および1116は、SAN(Storage-Area Network)に存在してもよい。同様に、サーバ1112に起因する機能を実行するための必要なファイルは、いずれも、サーバ1112上のローカルな場所および/またはサーバ1112から遠隔の場所に適宜格納されてもよい。一組の例において、データベース1114および1116は、Oracleが提供するデータベースなど、SQLフォーマットのコマンドに応答してデータを格納、更新、および取り出すようになされたリレーショナルデータベースを含んでもよい。
【0140】
図12は、システム環境1200の1つ以上の構成要素を簡略化したブロック図である。システム環境1200によって、1つ以上の構成要素が提供するサービスがクラウドサービスとして提供されてもよい。図示された例において、システム環境1200は、1つ以上のクライアントコンピューティングデバイス1204、1206、および1208を含む。1つ以上のクライアントコンピューティングデバイス1204、1206、および1208は、ユーザによって、クラウドサービスを提供するクラウドインフラストラクチャシステム1202と対話するために使用されもよい。クライアントコンピューティングデバイスは、ウェブブラウザ、プロプライエタリ・クライアントアプリケーション(たとえば、Oracle Forms)、または他のアプリケーションなど、クライアントアプリケーションを操作するように構成されてもよい。クライアントアプリケーションは、クライアントコンピューティングデバイスのユーザによって、クラウドインフラストラクチャシステム1202と対話を行ってクラウドインフラストラクチャシステム1202が提供するサービスを利用するために使用され得る。
【0141】
クラウドインフラストラクチャシステム1202が図示された構成要素以外の構成要素を有し得ることを理解されたい。さらに、図に示す例は、本開示の例を組み込み得るクラウドインフラストラクチャシステムの一例に過ぎない。他のいくつかの例において、クラウドインフラストラクチャシステム1202は、図12に示す構成要素よりも多いまたは少ない数の構成要素を有してもよく、2つ以上の構成要素を組み合わせてもよく、または構成要素の構成もしくは配置が異なっていてもよい。
【0142】
クライアントコンピューティングデバイス1204、1206、および1208は、1102、1104、1106、および1108に関して上述したクライアントコンピューティングデバイスと同様のデバイスであってもよい。例示的なシステム環境1200は、3つのクライアントコンピューティングデバイスとともに示されているが、任意の数のクライアントコンピューティングデバイスがサポートされてもよい。センサ付きデバイスなど、他のデバイスがクラウドインフラストラクチャシステム1202と対話を行ってもよい。
【0143】
ネットワーク(複数可)1210は、クライアント1204、1206、および1208とクラウドインフラストラクチャシステム1202との間のデータの通信およびやり取りを容易にしてもよい。各ネットワークは、ネットワーク(複数可)1210に関して上述したプロトコルを含む各種市販のプロトコルのいずれかを用いたデータ通信をサポートできる、当業者にとってなじみのある任意の種類のネットワークであってもよい。
【0144】
クラウドインフラストラクチャシステム1202は、サーバ1112に関して上述したコンピュータおよびサーバを含み得る1台以上のコンピュータおよび/またはサーバから構成されてもよい。
【0145】
特定の例において、クラウドインフラストラクチャシステムが提供するサービスは、オンラインのデータストレージおよびバックアップソリューション、ウェブベースの電子メールサービス、ホストされたオフィススイートドキュメント連携サービス、データベース処理、管理されたテクニカルサポートサービスなど、クラウドインフラストラクチャシステムのユーザが要求すれば利用可能になるサービスのホストを含んでもよい。クラウドインフラストラクチャシステムが提供するサービスは、動的にスケール変更してそのユーザのニーズを満たすことができる。クラウドインフラストラクチャシステムが提供するサービスを具体的にインスタンス化したものは、本明細書において、「サービスインスタンス」と称される。一般に、インターネットなどの通信ネットワークを介してユーザが利用できるようになる、クラウドサービスプロバイダのシステムからのいずれのサービスも、「クラウドサービス」と称される。通常、パブリッククラウド環境において、クラウドサービスプロバイダのシステムを構成するサーバおよびシステムは、顧客所有のオンプレミス・サーバおよびシステムとは異なる。たとえば、クラウドサービスプロバイダのシステムは、アプリケーションをホストしてもよく、ユーザは、インターネットなどの通信ネットワークを介して、要求に基づいてアプリケーションを注文および使用すればよい。
【0146】
いくつかの例において、コンピュータネットワークのクラウドインフラストラクチャにおけるサービスは、ストレージ、ホストされたデータベース、ホストされたウェブサーバ、ソフトウェアアプリケーションへの保護されたコンピュータネットワークアクセス、もしくはクラウドベンダーがユーザに提供するその他のサービス、または、当技術分野で周知の上記以外のその他のサービスを含んでもよい。たとえば、サービスは、インターネットを通した、クラウド上のリモートストレージへのパスワード保護されたアクセスを含み得る。別の例として、サービスは、ネットワークで結ばれた開発者が私的使用するための、ウェブサービスベースのホストされたリレーショナルデータベースおよびスクリプト言語のミドルウェアエンジンを含み得る。別の例として、サービスは、クラウドベンダーのウェブサイト上にホストされた電子メールソフトウェア・アプリケーションへのアクセスを含み得る。
【0147】
特定の例において、クラウドインフラストラクチャシステム1202は、顧客にセルフサービスでサブスクリプション方式で伸縮自在にスケーラブルで信頼性があり、かつ高い可用性を有するセキュアな方法で届けられるアプリケーションのスイート、ミドルウェア、およびデータベースサービス提供物を含んでもよい。このようなクラウドインフラストラクチャシステムの例が、本願の譲受人が提供するオラクルパブリッククラウド(Oracle Public Cloud)である。
【0148】
ビッグデータと呼ばれることもある大容量のデータは、インフラストラクチャシステムによって、多くのレベルかつ異なる規模でホストおよび/または操作され得る。このようなデータは、大規模かつ複雑過ぎるために通常のデータベース管理ツールまたは旧来のデータ処理アプリケーションを用いて処理することが難しいデータセットを含み得る。たとえば、パーソナルコンピュータまたはそれらのラック式パーソナルコンピュータを用いてテラバイトのデータを格納、取り出し、および処理することは、難しいだろう。最新のリレーショナルデータベース管理システムおよびデスクトップ統計データならびに可視化パッケージを用いてこのようなサイズのデータを扱うのは難しいだろう。このようなサイズのデータを許容可能な経過時間内で収取、取りまとめ、管理、および処理するためには、よく用いられるソフトウェアツールの構造では対応できない何千ものサーバコンピュータを実行する大規模並列処理ソフトウェアを必要とし得る。
【0149】
大量のデータを可視化する、トレンドを検出する、および/または当該データを用いてやり取りするために、極めて大きなデータセットが格納されてアナリストおよび研究者によって操作され得る。このようなデータを提示する、またはこのデータに対する外力または当該データが表すものをシミュレーションするために、並列にリンクされた何十、何百、または何千ものプロセッサがこのデータに作用し得る。これらのデータセットは、データベースに編成された構造化データもしくは構造化モデルに応じて編成された構造化データ、および/または非構造化データ(たとえば、Eメール、画像、データBLOB(Binary Large Objects)、ウェブページ、複雑なイベント処理など)を伴い得る。比較的素早くより多くの(または、より少ない)コンピューティングリソースを目標に集中させる例の能力を活用することによって、クラウドインフラストラクチャシステムは、事業、政府関係機関、研究機関、私人、同じ意見を持った個人同士のグループもしくは組織、または他のエンティティからの要求に基づいて大きなデータセットに対してタスクを実行するためにさらに利用できるようになってもよい。
【0150】
さまざまな例において、クラウドインフラストラクチャシステム1202は、クラウドインフラストラクチャシステム1202が提供するサービスへの顧客のサブスクリプションを自動的にプロビジョニング、管理、および追跡するようになされてもよい。クラウドインフラストラクチャシステム1202は、それぞれ異なるデプロイメントモデルを介してクラウドサービスを提供してもよい。たとえば、サービスは、クラウドサービス(たとえば、オラクルコーポレーション所有)を販売する組織がクラウドインフラストラクチャシステム1202を所有してサービスが一般大衆またはそれぞれ異なる産業企業に利用可能になるパブリッククラウドモデル下で提供されてもよい。別の例として、サービスは、クラウドインフラストラクチャシステム1202が1つの組織のためだけに動かされてクラウドインフラストラクチャシステム1202が組織内の1つ以上のエンティティ用のサービスを提供し得るプライベートクラウドモデル下で提供されてもよい。また、クラウドサービスは、クラウドインフラストラクチャシステム1202およびクラウドインフラストラクチャシステム1202が提供するサービスが関連コミュニティ内のいくつかの組織によって共有されるコミュニティクラウドモデル下で提供されてもよい。クラウドサービスは、2つ以上の異なるモデルの組み合せであるハイブリッドクラウドモデル下で提供されてもよい。
【0151】
いくつかの例において、クラウドインフラストラクチャシステム1202が提供するサービスは、SaaS(Software as a Service)カテゴリ、PaaS(Platform as a Service)カテゴリ、IaaS(Infrastructure as a Service)カテゴリ下で提供される1つ以上のサービス、またはハイブリッドサービスを含むその他のカテゴリのサービスを含んでもよい。顧客は、クラウドインフラストラクチャシステム1202が提供する1つ以上のサービスを、サブスクリプションの注文によって注文してもよい。次に、クラウドインフラストラクチャシステム1202は、処理を実行して、顧客のサブスクリプションの注文にあるサービスを提供する。
【0152】
いくつかの例において、クラウドインフラストラクチャシステム1202が提供するサービスは、アプリケーションサービス、プラットフォームサービス、およびインフラストラクチャサービスを含んでもよいが、これらに限定されない。いくつかの例において、アプリケーションサービスは、SaaSサービスを介してクラウドインフラストラクチャシステムによって提供されてもよい。SaaSプラットフォームは、SaaSカテゴリに該当するクラウドサービスを提供するように構成されてもよい。たとえば、SaaSプラットフォームは、オンデマンドアプリケーションのスイートを構築して統合開発/デプロイメントプラットフォームに届けるための機能を提供してもよい。SaaSプラットフォームは、SaaSサービスを提供するための基礎となるソフトウェアおよびインフラストラクチャを管理および制御してもよい。SaaSプラットフォームが提供するサービスを利用することによって、顧客は、クラウドインフラストラクチャシステム上で実行されるアプリケーションを利用できる。顧客は、アプリケーションサービスを、ライセンスおよびサポートを別に購入する必要なしに、入手できる。さまざまな異なるSaaSサービスが提供されてもよい。例として、大きな組織のための販売実績管理、企業統合、および事業の柔軟性に対するソリューションを提供するサービスなどが挙げられるが、これに限定されない。
【0153】
いくつかの例において、プラットフォームサービスは、PaaSプラットフォームを介してクラウドインフラストラクチャシステムによって提供されてもよい。PaaSプラットフォームは、PaaSカテゴリに該当するクラウドサービスを提供するように構成されてもよい。プラットフォームサービスとして、存在するアプリケーションを組織(Oracleなど)が共有の共通アーキテクチャ上に1つにまとめることを可能にするサービス、およびプラットフォームサービスが提供する共有サービスを活用する新しいアプリケーションを作る能力などが挙げられるが、これらに限定されない。PaaSプラットフォームは、PaaSサービスを提供するための基礎となるソフトウェアおよびインフラストラクチャを管理および制御してもよい。顧客は、PaaSクラウドインフラストラクチャシステムが提供するサービスを、ライセンスおよびサポートを別に購入する必要なしに、入手できる。プラットフォームサービスとして、JCS(Oracle Java Cloud Service)、DBCS(Oracle Database Cloud Service)、およびその他が挙げられるが、これらに限定されない。
【0154】
PaaSプラットフォームが提供するサービスを利用することによって、顧客は、クラウドインフラストラクチャシステムがサポートするプログラミング言語およびツールを採用することができ、また、デブロイされたサービスを管理することができる。いくつかの例において、クラウドインフラストラクチャシステムが提供するプラットフォームサービスは、データベース・クラウドサービス、ミドルウェアクラウドサービス(たとえば、Oracle Fusion Middlewareサービス)、およびJavaクラウドサービスを含んでもよい。一例において、データベース・クラウドサービスは、組織がデータベースリソースをプールすることと、データベース・クラウドの形でDatabase as a Serviceを顧客に提供することとを可能にする共有サービスデプロイメントモデルをサポートしてもよい。クラウドインフラストラクチャシステムにおいて、ミドルウェアクラウドサービスは、顧客がさまざまなビジネスアプリケーションを開発およびデプロイするためのプラットフォームを提供してもよく、Javaクラウドサービスは、顧客がJavaアプリケーションをデプロイするためのプラットフォームを提供してもよい。
【0155】
クラウドインフラストラクチャシステムでは、IaaSプラットフォームによってさまざまな異なるインフラストラクチャサービスが提供されてもよい。インフラストラクチャサービスによって、ストレージ、ネットワークなど基礎となるコンピューティングリソース、および、SaaSプラットフォームおよびPaaSプラットフォームが提供するサービスを利用している顧客のためのその他の基本的なコンピューティングリソースの管理および制御が容易になる。
【0156】
また、特定の例において、クラウドインフラストラクチャシステム1202は、クラウドインフラストラクチャシステムの顧客にさまざまなサービスを提供するために使用されるリソースを提供するためのインフラストラクチャ・リソース1230を含んでもよい。一例において、インフラストラクチャ・リソース1230は、PaaSプラットフォームおよびSaaSプラットフォームが提供するサービスを実行するための、サーバなどのハードウェアと、ストレージと、ネットワーキング・リソースとの予め統合された最適な組合せを含んでもよい。
【0157】
いくつかの例において、クラウドインフラストラクチャシステム1202におけるリソースは、複数のユーザによって共有され、要求に応じて動的に再割り当てされてもよい。これに加えて、リソースは、それぞれ異なるタイムゾーンのユーザに割り当てられてもよい。たとえば、クラウドインフラストラクチャシステム1230は、第1のタイムゾーンにいる第1セットのユーザがクラウドインフラストラクチャシステムのリソースを指定された時間数利用することを可能にした後、異なるタイムゾーンに位置する別のセットのユーザに同じリソースを再割り当てすることを可能にし、リソースの利用を最大限に活用できるようになる。
【0158】
特定の例において、クラウドインフラストラクチャシステム1202のそれぞれ異なる構成要素またはモジュールによって、およびクラウドインフラストラクチャシステム1202が提供するサービスによって共有されるいくつかの内部共有サービス1232が提供されてもよい。これらの内部共有サービスは、セキュリティ/素性サービス、統合サービス、企業リポジトリサービス、企業マネージャサービス、ウイルススキャン/ホワイトリストサービス、可用性の高いバックアップ・リカバリサービス、クラウドサポートを可能にするためのサービス、Eメールサービス、通知サービス、ファイル転送サービスなどを含み得るが、これらに限定されない。
【0159】
特定の例において、クラウドインフラストラクチャシステム1202は、クラウドインフラストラクチャシステムにおけるクラウドサービス(たとえば、SaaSサービス、PaaSサービス、およびIaaSサービス)の包括的な管理を提供してもよい。一例において、クラウド管理機能は、クラウドインフラストラクチャシステム1202が受信した顧客のサブスクリプションなどをプロビジョニング、管理、および追跡するための機能を含んでもよい。
【0160】
一例において、図12に示すように、クラウド管理機能は、オーダー管理モジュール1220、オーダーオーケストレーションモジュール1222、オーダープロビジョニングモジュール1224、オーダー管理/監視モジュール1226、および素性管理モジュール1228など、1つ以上のモジュールによって提供されてもよい。これらのモジュールは、1つ以上のコンピュータおよび/またはサーバを含んでもよく、または、これらを使用して提供されてもよい。1つ以上のコンピュータおよび/またはサーバは、汎用コンピュータ、専用サーバコンピュータ、サーバファーム、サーバ・クラスタ、またはその他の適切な配置および/もしくは組合せであり得る。
【0161】
例示的な動作1234において、クライアントデバイス1204、1206、または1208などのクライアントデバイスを使用している顧客は、クラウドインフラストラクチャシステム1202が提供する1つ以上のサービスを要求し、クラウドインフラストラクチャシステム1202が提供する1つ以上のサービスのサブスクリプションを注文することによって、クラウドインフラストラクチャシステム1202と対話してもよい。特定の例において、顧客は、クラウドUI(User Interface)、クラウドUI1212、クラウドUI1214、および/またはクラウドUI1216にアクセスし、これらのUIを介してサブスクリプションの注文を行ってもよい。顧客が注文をすることに応答してクラウドインフラストラクチャシステム1202が受信するオーダー情報は、この顧客を特定する情報、および、クラウドインフラストラクチャシステム1202が提供する、顧客がサブスクリプションをする目的の1つ以上のサービスを含んでもよい。
【0162】
顧客によって注文がされた後、クラウドUI1212、1214、および/または1216を介してオーダー情報が受け付けられる。
【0163】
動作1236において、この注文は、オーダーデータベース1218に格納される。オーダーデータベース1218は、クラウドインフラストラクチャシステム1218によって操作され、かつ、他のシステム要素と共に操作されるいくつかのデータベースのうちの1つであり得る。
【0164】
動作1238において、オーダー情報がオーダー管理モジュール1220に転送される。場合によっては、オーダー管理モジュール1220は、注文の確認、確認後の注文の登録など、注文に関する課金機能および会計機能を実行するように構成されてもよい。
【0165】
動作1240において、注文に関する情報がオーダーオーケストレーションモジュール1222に伝送される。オーダーオーケストレーションモジュール1222は、このオーダー情報を利用して、顧客が行った注文に関するサービスおよびリソースのプロビジョニングをオーケストレーションしてもよい。場合によっては、オーダーオーケストレーションモジュール1222は、リソースのプロビジョニングをオーケストレーションして、オーダープロビジョニングモジュール1224のサービスを使用してサブスクリプションされているサービスをサポートしてもよい。
【0166】
特定の例において、オーダーオーケストレーションモジュール1222は、各注文に関連する業務の流れの管理を可能にし、ビジネスロジックを適用して、注文がプロビジョニングに進むべきかどうかを判断する。動作1242において、新しいサブスクリプションの注文を受けると、オーダーオーケストレーションモジュール1222は、サブスクリプションの注文を満たすために必要なリソースを割り当ててこれらのリソースを構成する要求をオーダープロビジョニングモジュール1224に送信する。オーダープロビジョニングモジュール1224は、顧客が申し込んだサービスのためのリソースの割り当てを有効にする。オーダープロビジョニングモジュール1224は、クラウドインフラストラクチャシステム1200が提供するクラウドサービスと、要求されたサービスを提供するためのリソースをプロビジョニングするために使用される物理実施層との間に抽象度を設ける。よって、サービスおよびリソースがオンザフライで実際にプロビジョニングされたかどうか、または予めプロビジョニングされて要求された場合にのみ割り当てられたかどうかなどの実装の詳細からオーダーオーケストレーションモジュール1222を切り離すことができる。
【0167】
動作1244において、一旦サービスおよびリソースがプロビジョニングされれば、クラウドインフラストラクチャシステム1202のオーダープロビジョニングモジュール1224によって、クライアントデバイス1204、1206、および/または1208上の顧客に、提供されたサービスについての通知が送信されてもよい。
【0168】
動作1246において、オーダー管理/監視モジュール1226よって顧客のサブスクリプションの注文が管理および追跡されてもよい。場合によっては、オーダー管理/監視モジュール1226は、サブスクリプションの注文におけるサービスに関する使用統計データ、たとえば、使用されたストレージの量、転送されたデータの量、ユーザの数、ならびにシステムの稼働時間およびシステムの休止時間などを収集するように構成されてもよい。
【0169】
特定の例において、クラウドインフラストラクチャシステム1200は、素性管理モジュール1228を備えてもよい。素性管理モジュール1228は、クラウドインフラストラクチャシステム1200におけるアクセス管理およびアクセス認可サービスなどの素性サービスを提供するように構成されてもよい。いくつかの例において、素性管理モジュール1228は、クラウドインフラストラクチャシステム1202が提供するサービスを利用したい顧客についての情報を制御/管理してもよい。このような情報は、このような顧客の素性を認証する情報、および、さまざまなシステムリソース(たとえば、ファイル、ディレクトリ、アプリケーション、通信ポート、メモリセグメントなど)に対してそれらの顧客がどのような操作を行うことが承認されているのかを記述する情報を含み得る。また、素性管理モジュール1228は、各顧客についての記述情報の管理、およびその記述情報が誰によってどのようにアクセスおよび変更され得るかについての管理を含んでもよい。
【0170】
図13は、本開示のさまざまな例が実施され得るコンピュータシステム1300の例を示す図である。コンピュータシステム1300を使用して、上述したコンピュータシステムのいずれかを実現してもよい。図に示すように、コンピュータシステム1300は、バス・サブシステム1302を介していくつかの周辺サブシステムと通信する処理装置1304を備える。これらの周辺サブシステムは、処理高速化装置1306と、I/Oサブシステム1308と、ストレージサブシステム1318と、通信サブシステム1324とを含んでもよい。ストレージサブシステム1318は、有形のコンピュータ読み取り可能な記憶媒体1322と、システムメモリ1310とを含む。
【0171】
バス・サブシステム1302は、コンピュータシステム1300のさまざまな構成要素およびサブシステムを互いに意図した通りに通信させるためのメカニズムを提供する。バス・サブシステム1302は、1つのバスとして図示されているが、バス・サブシステムの別の例は、複数のバスを利用してもよい。バス・サブシステム1302は、各種のバスアーキテクチャを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含むいくつかの種類のバス構造のうちのいずれかであってもよい。たとえば、このようなアーキテクチャは、ISA(Industry Standard Architecture)バス、MCA(Micro Channel Architecture)バス、EISA(Enhanced ISA)バス、VESA(Video Electronics Standards Association)ローカルバス、およびPCI(Peripheral Component Interconnect)バスを含んでもよく、これらは、IEEE P1386.1標準規格に準拠して製造されるMezzanineバスとして実現され得る。
【0172】
1つ以上の集積回路(たとえば、従来のマイクロプロセッサまたはマイクロコントローラ)として実現され得る処理装置1304は、コンピュータシステム1300の動作を制御できる。処理装置1304には、1つ以上のプロセッサが含まれてもよい。これらのプロセッサは、シングルコア・プロセッサまたはマルチコア・プロセッサを含んでもよい。特定の例において、処理装置904は、シングルコア・プロセッサまたはマルチコア・プロセッサを各々が含んだ1つ以上の独立した処理装置1332および/または1334として実現されてもよい。また、他の例において、処理装置1304は、2つのデュアルコアプロセッサを1つのチップに組み込むことによって形成されるクアッドコア処理装置として実現されてもよい。
【0173】
さまざまな例において、処理装置1304は、プログラムコードに応答していろいろなプログラムを実行でき、複数の同時に実行しているプログラムまたはプロセスを維持することができる。いつでも、実行されるプログラムコードの一部またはすべては、プロセッサ(複数可)1304に、および/またはストレージサブシステム1318に存在し得る。適したプログラミングによって、プロセッサ(複数可)1304は、上述したさまざまな機能を提供できる。コンピュータシステム1300は、処理高速化装置1306をさらに備えてもよい。処理高速化装置1306は、DSP(Digital Signal Processor)および/または専用プロセッサなどを含み得る。
【0174】
I/Oサブシステム1308は、ユーザインタフェース入力装置と、ユーザインタフェース出力装置とを含んでもよい。ユーザインタフェース入力装置は、キーボード、マウスもしくはトラックボールなどのポインティングデバイス、タッチパッドもしくはディスプレイに組み込まれたタッチスクリーン、スクロールホイール、クリックホイール、ダイヤル、ボタン、スイッチ、キーパッド、ボイスコマンド認識システムを有する音声入力装置、マイクロホン、および他の種類の入力装置を含んでもよい。また、ユーザインタフェース入力装置は、たとえば、ジェスチャコマンドおよび音声コマンドを用いた自然なユーザインタフェースによってユーザがMicrosoft Xbox(登録商標)360ゲームコントローラなどの入力装置を制御およびそれとやり取りすることを可能にするMicrosoft Kinect(登録商標)モーションセンサなどの動き検知デバイスおよび/またはジェスチャ認識デバイスを含んでもよい。また、ユーザインタフェース入力装置は、ユーザの目の行動(たとえば、写真を撮影しているおよび/またはメニュー選択を行っている間の「まばたき」)を検出し、目の仕草(eye gesture)を入力装置(たとえば、Google Glass(登録商標))への入力として変形させるGoogle Glass(登録商標)まばたき検出装置などのアイジェスチャ認識デバイスを含んでもよい。これに加えて、ユーザインタフェース入力装置は、ユーザがボイスコマンドによって音声認識システム(たとえば、Siri(登録商標)ナビゲータ)とやり取りすることを可能にする音声認識検知デバイスを含んでもよい。
【0175】
また、ユーザインタフェース入力装置は、3次元(3D)マウス、ジョイスティックもしくはポインティングスティック、ゲームパッドおよびグラフィックタブレット、ならびに、スピーカ、デジタルカメラ、デジタルカムコーダー、ポータブルメディアプレーヤ、ウェブカム、イメージスキャナ、指紋スキャナ、バーコードリーダ3Dスキャナ、3Dプリンタ、レーザー測距器、および視線追跡装置などのオーディオ/ビジュアル装置を含むが、これらに限定されない。これに加えて、ユーザインタフェース入力装置は、たとえば、コンピュータ断層撮影法、磁気共鳴画像、陽電子放出断層撮影装置、超音波検査デバイスなど、医用画像入力装置を含んでもよい。また、ユーザインタフェース入力装置は、たとえば、MIDIキーボード、デジタル楽器などのオーディオ入力装置を含んでもよい。
【0176】
ユーザインタフェース出力装置は、表示サブシステム、インジケーターライト、または音声出力装置などの非視覚的表示装置などを含んでもよい。表示サブシステムは、ブラウン管(CRT)、液晶ディスプレイ(LCD)またはプラズマディスプレイを使用するものなどのフラットパネル表示装置、投影装置、タッチスクリーンなどであってもよい。一般に、用語「出力装置」の使用は、コンピュータシステム1300からユーザまたは他のコンピュータに情報を出力するためのあらゆる種類のデバイスおよびメカニズムを含むことを意図する。たとえば、ユーザインタフェース出力装置は、モニタ、プリンタ、スピーカ、ヘッドホン、自動車ナビゲーションシステム、作図装置、音声出力装置、およびモデムなど、文字、図形、および音声/映像情報を視覚的に伝えるいろいろな表示装置を含み得るが、これらに限定されない。
【0177】
コンピュータシステム1300は、システムメモリ1310内に現在位置して図示されているソフトウェア要素を含むストレージサブシステム1318から構成されてもよい。システムメモリ1310は、処理装置1304上でロード可能かつ実行可能なプログラム命令、およびこれらのプログラムの実行中に生成されるデータを格納してもよい。
【0178】
コンピュータシステム1300の構成および種類によっては、システムメモリ1310は、揮発性メモリであってもよく(RAM(Random Access Memory)など)、および/または不揮発性メモリ(ROM(Read-Only Memory)、フラッシュメモリなど)であってもよい。RAMは、通常、処理装置1304がすぐにアクセスできる、および/または現在操作および実行しているデータおよび/またはプログラムモジュールを含む。いくつかの実装形態において、システムメモリ1310は、SRAM(Static Random Access Memory)またはDRAM(Dynamic Random Access Memory)など、複数の異なる種類のメモリを含んでもよい。いくつかの実装形態において、起動中などで、コンピュータシステム1300内の要素間で情報を転送することを助ける基本ルーチンを含むBIOS(Basic Input/Output System)は、通常、ROMに格納されてもよい。また、一例として、限定ではないが、システムメモリ1310は、クライアントアプリケーション、ウェブブラウザ、ミッドティア・アプリケーション、リレーショナルデータベース管理システム(RDBMS:Relational Database Management Systems)などを含み得るアプリケーションプログラム1312と、プログラムデータ1314と、オペレーティングシステム1316とを含む。例として、オペレーティングシステム1316は、さまざまなバージョンのMicrosoft Windows(登録商標)、Apple Macintosh(登録商標)、および/もしくはLinuxオペレーティングシステム、いろいろな市販のUNIX(登録商標)もしくはUNIXに似たオペレーティングシステム(いろいろなGNU/Linuxオペレーティングシステム、Google Chrome(登録商標)OSなどを含むが、これらに限定されない)、ならびに/またはiOS、Windows(登録商標)Phone、Android(登録商標)OS、BlackBerry(登録商標)10OS、およびPalm(登録商標)OSオペレーティングシステムなど、モバイルオペレーティングシステムを含んでもよい。
【0179】
また、ストレージサブシステム1318は、いくつかの例の機能を提供する基本プログラミング構成およびデータ構成を格納するための有形のコンピュータ読み取り可能な記憶媒体を提供してもよい。ストレージサブシステム1318には、プロセッサによって実行されると上述の機能を提供するソフトウェア(プログラム、コードモジュール、命令)が格納されてもよい。これらのソフトウェアモジュールまたは命令は、処理装置1304によって実行されてもよい。また、ストレージサブシステム1318は、本開示に従って使用されるデータを格納するためのリポジトリを提供してもよい。
【0180】
また、ストレージサブシステム1300は、コンピュータ読み取り可能な記憶媒体1322にさらに接続され得るコンピュータ読み取り可能な記憶媒体リーダ1320を含んでもよい。システムメモリ1310と合わせて、必要に応じてシステムメモリ1310と組み合わせて、コンピュータ読み取り可能な記憶媒体1322は、遠隔の記憶装置、ローカル記憶装置、固定記憶装置、および/またはリム―バブル記憶装置、ならびにコンピュータ読み取り可能な情報を一時的におよび/またはさらに永続して含み、格納し、送信し、および取り出すための記憶媒体を包括的に表してもよい。
【0181】
コードまたはコードの一部を含んだコンピュータ読み取り可能な記憶媒体1322は、これらに限定されないが、情報の格納および/または伝送のための任意の方法および技術で実現される揮発性媒体および不揮発性媒体、取り外し可能な媒体および固定型媒体などの記憶媒体および通信媒体を含む、当技術分野において既知または使用される任意の適切な媒体も含んでもよい。これは、RAM、ROM、EEPROM(Electronically Erasable Programmable ROM)、フラッシュメモリ、もしくは他のメモリ・テクノロジー、CD-ROM、DVD(Digital Versatile Disk)、もしくは他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、もしくは他の磁気記憶装置などの有形の非一時的なコンピュータ読み取り可能な記憶媒体、またはその他の有形のコンピュータ読み取り可能な媒体を含み得る。特に指定する場合、これは、データ信号、データ伝送など無形の一時的なコンピュータ読み取り可能な媒体、または所望の情報を伝送するために使用され得るその他の媒体、およびコンピューティングシステム1300によってアクセスされ得るその他の媒体なども含み得る。
【0182】
例として、コンピュータ読み取り可能な記憶媒体1322は、固定型不揮発性磁気媒体から読み出しまたは書き込みを行うハードディスクドライブ、取外し可能な不揮発性磁気ディスクから読み出しまたは書き込みを行う磁気ディスクドライブ、ならびに、CD ROM、DVD、およびBlu-Ray(登録商標)ディスクなどの取外し可能な不揮発性光ディスクもしくは他の光学媒体から読み出しまたは書き込みを行う光ディスクドライブを含んでもよい。コンピュータ読み取り可能な記憶媒体1322は、Zip(登録商標)ドライブ、フラッシュメモリーカード、USB(Universal Serial Bus)フラッシュドライブ、SD(Secure Digital)カード、DVDディスク、デジタルビデオテープなどを含んでもよいが、これらに限定されない。また、コンピュータ読み取り可能な記憶媒体1322は、フラッシュメモリベースのSSD(Solid-State Drives)、エンタープライズフラッシュドライブ、ソリッドステートROMなど、不揮発性メモリに基づくSSD(Solid-State Drives)と、ソリッドステートRAM、動的RAM、静的RAM、DRAMベースのSSDなど、揮発性メモリに基づくSSDと、MRAM(Magnetoresistive RAM)SSDと、DRAMとフラッシュメモリとの組合せベースのSSDを使用するハイブリッドSSDとを含んでもよい。これらのディスクドライブおよびそれらの関連するコンピュータ読み取り可能な媒体は、コンピュータ読み取り可能な命令、データ構造、プログラムモジュール、およびその他のコンピュータシステム1300用データの不揮発性ストレージを提供してもよい。
【0183】
通信サブシステム1324は、他のコンピュータシステムおよびネットワークへのインタフェースを提供する。通信サブシステム1324は、コンピュータシステム1300からデータを受信し、コンピュータシステム1300から他のシステムにデータを送信するためのインタフェースとして機能する。たとえば、通信サブシステム1324は、コンピュータシステム1300がインターネットを介して1つ以上のデバイスに接続することを可能にしてもよい。いくつかの例において、通信サブシステム1324は、(たとえば、携帯電話技術、3G、4G、もしくはEDGE(Enhanced Data Rates For Global Evolution)などの次世代データネットワークテクノロジー、WiFi(IEEE802.11ファミリー標準規格)、他の移動体通信技術、またはそれらの任意の組合せを使用する)ワイヤレス音声ネットワークもしくは/またはデータネットワークにアクセスするためのRF(Radio Frequency)トランシーバコンポーネント、GPS(Global Positioning System)レシーバコンポーネント、および/または他の構成要素を含み得る。いくつかの例において、通信サブシステム1324は、ワイヤレスインタフェースに加えて、またはワイヤレスインタフェースの代わりに、有線ネットワーク接続性(たとえば、Ethernet)を提供できる。
【0184】
また、いくつかの例において、通信サブシステム1324は、コンピュータシステム1300を利用し得る1人以上のユーザに代わって、構造化および/または非構造化データフィード1326、イベントストリーム1328、イベント更新1330などの形で入力通信文を受信してもよい。
【0185】
例として、通信サブシステム1324は、Twitter(登録商標)フィード、Facebook(登録商標)の更新、RSS(Rich Site Summary)フィードなどのwebフィード、および/もしくは1つ以上のサードパーティ情報ソースからのリアルタイム更新など、ソーシャルメディアネットワークならびに/または他のコミュニケーションサービスのユーザからデータフィード2926をリアルタイムで受信するように構成されてもよい。
【0186】
また、これに加えて、通信サブシステム1324は、連続したデータストリームの形でデータを受信するように構成されてもよい。連続したデータストリームは、リアルタイムイベントのイベントストリーム1328および/またはイベント更新1330を含んでもよく、実際に明確な終端がない連続ストリームまた無限ストリームであってもよい。連続データを生成するアプリケーションとして、たとえば、センサーデータアプリケーション、チッカー、ネットワークパフォーマンス測定ツール(たとえば、ネットワーク監視およびトラフィック管理アプリケーション)、クリックストリーム分析ツール、自動車交通量監視などが挙げられてもよい。
【0187】
また、通信サブシステム1324は、コンピュータシステム1300に接続された1つ以上のストリーミングデータソースコンピュータと通信中であり得る1つ以上のデータベースに、構造化および/または非構造化データフィード1326、イベントストリーム1328、イベント更新1330などを出力するように構成されてもよい。
【0188】
コンピュータシステム1300は、手のひらサイズのポータブルデバイス(たとえば、iPhone(登録商標)携帯電話、iPad(登録商標)コンピューティングタブレット、PDA)、ウェアラブルデバイス(たとえば、Google Glass(登録商標)ヘッドマウントディスプレイ)、PC、ワークステーション、メインフレーム、キオスク、サーバラック、またはその他のデータ処理システムを含む、さまざまな種類のうちの1つであり得る。
【0189】
変わり続けるというコンピュータおよびネットワークの性質のため、図に示すコンピュータシステム1300の説明は、具体例にすぎない。図に示すシステムよりも多いまたは少ない構成要素を有する多くの他の構成が可能である。たとえば、カスタマイズされたハードウェアが使用されてもよく、および/または、ハードウェア、ファームウェア、ソフトウェア(アプレットを含む)、またはそれらの組合せで特定の要素が実現されてもよい。さらに、ネットワーク入/出力装置など、他のコンピューティングデバイスへの接続を採用してもよい。本明細書に記載の開示および教示に基づいて、当業者は、さまざまな例を実現するための他のやり方および/または方法が分かるだろう。
【0190】
上記の明細書において、本開示の態様をその具体例を参照しながら説明したが、当業者は本開示がこれに限定されないことが分かるだろう。上述した開示のさまざまな特徴および態様は、個々に、または共同で用いられてもよい。さらに、例は、本明細書のより広義の趣旨および範囲から逸脱することなく、本明細書において記載した環境およびアプリケーションの数を上回る任意の数の環境およびアプリケーションにおいて利用され得る。明細書および添付の図面は、したがって、限定ではなく例示とみなされる。
【0191】
上記の説明において、例示のために方法を特定の順序で説明した。他の例において、これらの方法は、記載された順序とは異なる順序で実行されてもよいことを理解されたい。上述した方法は、ハードウェアコンポーネントによって実行されてもよく、機械によって実行可能な命令シーケンスに含まれてもよいことも理解されたい。機械によって実行可能な命令は、汎用プロセッサもしくは専用プロセッサ、または当該命令がプログラムされた論理回路などの機械に当該方法を実行させ得る。これらの機械によって実行可能な命令は、CD-ROMもしくは他の種類の光ディスク、フロッピーディスケット、ROM、RAM、EPROM、EEPROM、磁気カードもしくは光カード、フラッシュメモリ、または電子命令を格納するのに適した他の種類の機械読み取り可能な媒体など、1つ以上の機械読み取り可能な記媒体上に格納されてもよい。これに代えて、方法は、ハードウェアとソフトウェアとの組み合わせによって実行されてもよい。
【0192】
構成要素が特定の動作を実行するように構成されると説明されている箇所では、このような構成は、たとえば、この動作を実行するように電子回路または他のハードウェアを設計することによって、この動作を実行するようにプログラム可能な電子回路(たとえば、マイクロプロセッサ、または他の適した電子回路)をプログラムすることによって、またはそれらの任意の組合せによって達成され得る。
【0193】
アプリケーションの例示的な例を本明細書において詳細に説明したが、当然ながら、当該発明概念は、それ以外の場合、種々に実施および用いられてもよく、従来技術によって限定されない限り、添付の請求の範囲は、このような変形例を含むと解釈されることを意図する。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13