(57)【要約】  テレフォニーアプリケーションを生成することに対する１つの取り組み方は、グラフィカルユーザーインターフェースを使用して呼制御エレメント、及びダイアログエレメントを生成することである。１側面では、１つの方法が存在する。その方法は、グラフィカルユーザーインターフェースを提供すること、ユーザがグラフィカルユーザーインターフェースを使用して複数のエレメントから１つのエレメントを選択することを可能にすること、及びテレフォニーアプリケーションのためのモジュールをグラフィカルユーザーインターフェースを使用して生成することを含む。複数のエレメントは、少なくとも１つの呼制御エレメント、及び少なくとも１つのダイアログエレメントを含む。少なくとも１つの呼制御エレメントは、少なくとも１つのダイアログエレメントに関連する少なくとも１つの発呼イベントの制御を定める。
2008546325.tif 000002
【特許請求の範囲】
【請求項１】
統合された呼制御、及びダイアログアプリケーションを生成するための方法であって、
グラフィカルユーザーインターフェースを提供すること、
ユーザに、前記グラフィカルユーザーインターフェースを使用して、複数のエレメントから１つのエレメントを選択させ、前記複数のエレメントが少なくとも１つの呼制御エレメント、及び少なくとも１つのダイアログエレメントを含み、前記少なくとも１つの呼制御エレメントが前記少なくとも１つのダイアログエレメントに関連する少なくとも１つの発呼イベントの制御を定めること、並びに
テレフォニーアプリケーションのためのモジュールを前記グラフィカルユーザーインターフェースを使用して生成することの諸ステップを含むことを特徴とする方法。
【請求項２】
前記グラフィカルユーザーインターフェースを使用して、前記ダイアログエレメントを前記呼制御エレメントと結合させることを更に含む、請求項１に記載の方法。
【請求項３】
前記ダイアログエレメントを前記呼制御エレメントと結合させることが、前記呼制御エレメント中の前記ダイアログエレメントにリファレンスを挿入することを含む、請求項２に記載の方法。
【請求項４】
前記ダイアログエレメントを前記呼制御エレメントと結合させることが、前記ダイアログエレメントを前記呼制御エレメントに埋め込むことを含む、請求項２に記載の方法。
【請求項５】
前記複数のエレメントが、設計ファイル、ソースコード、実行可能ファイル、又はそれらの組み合わせの１つ又は２つ以上を含む、請求項１に記載の方法。
【請求項６】
前記呼制御エレメントが、呼制御ＸＭＬ（ＣＣＸＭＬ）、呼処理言語（ＣＰＬ）、又はそれらの組み合わせに基づき得る、請求項１に記載の方法。
【請求項７】
前記呼制御エレメントが Java Server Page （ＪＳＰ）の内部に埋め込まれる、請求項６に記載の方法。
【請求項８】
１又は複数の予め定められた呼制御エレメントの組を提供することを更に含み、前記呼制御エレメントが前記組に含まれる、請求項１に記載の方法。
【請求項９】
前記ダイアログエレメントが、音声ＸＭＬ（ＶＸＭＬ）、メディアサーバ制御マークアップ言語（ＭＳＣＭＬ）、メディアサーバマークアップ言語（ＭＳＭＬ）、メディアオブジェクトマークアップ言語（ＭＯＭＬ）、又はそれらの組み合わせに基づく、請求項１に記載の方法。
【請求項１０】
前記ダイアログエレメントが、 Java Server Page （ＪＳＰ）の内部に埋め込まれる、請求項９に記載の方法。
【請求項１１】
１又は複数の予め定められたダイアログエレメントの組を提供することを更に含み、前記ダイアログエレメントが前記組に含まれる、請求項１に記載の方法。
【請求項１２】
前記呼制御エレメント、又は前記ダイアログエレメントが、ＥＣＭＡスクリプトに基づくエレメントを含む、請求項１に記載の方法。
【請求項１３】
前記モジュールを生成することが、前記呼制御エレメント、又は前記ダイアログエレメントを構成することを含む、請求項１に記載の方法。
【請求項１４】
前記モジュールを生成することが呼フローを定めることを含み、前記呼フローが前記呼制御エレメント、又は前記ダイアログエレメントを含む、請求項１に記載の方法。
【請求項１５】
文字ユーザインターフェースを提供すること、及び
前記モジュールを前記文字ユーザインターフェースを使用して構成することを更に含む、請求項１に記載の方法。
【請求項１６】
情報担体中で実体的に実施されるコンピュータプログラムプロダクトであって、データ処理装置に以下のこと、即ち、
グラフィカルユーザーインターフェースを提供すること、
ユーザに、前記グラフィカルユーザーインターフェースを使用して、複数のエレメントから１つのエレメントを選択させ、前記複数のエレメントが少なくとも１つの呼制御エレメント、及び少なくとも１つのダイアログエレメントを含み、前記少なくとも１つの呼制御エレメントが前記少なくとも１つのダイアログエレメントに関連する少なくとも１つの発呼イベントの制御を定めること、並びに
テレフォニーアプリケーションのためのモジュールを前記グラフィカルユーザーインターフェースを使用して生成することを可能にするように動作可能な命令を前記コンピュータプログラムプロダクトが含むことを特徴とする、コンピュータプログラムプロダクト。
【請求項１７】
サービス作成ツールを含むシステムであって、以下のこと、即ち、
グラフィカルユーザーインターフェースを提供すること、
ユーザに、前記グラフィカルユーザーインターフェースを使用して、複数のエレメントから１つのエレメントを選択させ、前記複数のエレメントが少なくとも１つの呼制御エレメント、及び少なくとも１つのダイアログエレメントを含み、前記少なくとも１つの呼制御エレメントが前記少なくとも１つのダイアログエレメントに関連する少なくとも１つの発呼イベントの制御を定めること、並びに
テレフォニーアプリケーションのためのモジュールを前記グラフィカルユーザーインターフェースを使用して生成することに適合されることを特徴とするシステム。
【請求項１８】
テレフォニーアプリケーションのためのモジュールを生成することであって、前記モジュールが複数のエレメントを含み、前記複数のエレメントの少なくとも第１のエレメントが呼制御エレメントであり、前記複数のエレメントの少なくとも第２のエレメントがダイアログエレメントであり、前記呼制御エレメントが前記ダイアログエレメントに関連する少なくとも１つの発呼イベントの制御を定め、
前記モジュールを中間設計ファイルに記憶することであって、前記中間設計ファイルは１又は複数の中間言語に基づき、及び
変換規則を使用して、前記中間設計ファイルの少なくとも一部を１又は複数の目的設計ファイルに変換することであって、前記１又は複数の目的設計ファイルが１又は複数の目的言語に基づき、前記１又は複数の目的言語が前記１又は複数の中間言語とは異なる諸ステップを含むことを特徴とする方法。
【請求項１９】
前記１又は複数の中間言語が、呼制御ＸＭＬ（ＣＣＸＭＬ）、呼処理言語（ＣＰＬ）、音声ＸＭＬ（ＶＸＭＬ）、メディアサーバ制御マークアップ言語（ＭＳＣＭＬ）、メディアサーバマークアップ言語（ＭＳＭＬ）、メディアオブジェクトマークアップ言語（ＭＯＭＬ）、又はそれらの組み合わせを含む、請求項１８に記載の方法。
【請求項２０】
前記１又は複数の中間言語が、拡張可能マークアップ言語(ＸＭＬ)を含む、請求項１８に記載の方法。
【請求項２１】
前記１又は複数の中間言語が汎用言語を含む、請求項１８に記載の方法。
【請求項２２】
前記１又は複数の目的言語が、呼制御ＸＭＬ（ＣＣＸＭＬ）、呼処理言語（ＣＰＬ）、音声ＸＭＬ（ＶＸＭＬ）、メディアサーバ制御マークアップ言語（ＭＳＣＭＬ）、メディアサーバマークアップ言語（ＭＳＭＬ）、メディアオブジェクトマークアップ言語（ＭＯＭＬ）、又はそれらの組み合わせを含む、請求項１８に記載の方法。
【請求項２３】
Java Server Page （ＪＳＰ）の内部の前記１又は複数の目的設計ファイルの少なくとも１つをカプセル化することを更に含む、請求項２２に記載の方法。
【請求項２４】
前記中間言語は１つのモデルに基づき、前記モデルが、前記呼制御エレメントに関連する呼制御コンポーネント、及び前記ダイアログエレメントに関連するダイアログコンポーネントを含む、請求項１８に記載の方法。
【請求項２５】
前記呼制御コンポーネントが発呼イベント関数を定める、請求項２４に記載の方法。
【請求項２６】
前記発呼イベント関数が、 start 関数、 end 関数、 log 関数、 action 関数、 call action 関数、 dialog 関数、又はそれらの組み合わせを含む、請求項２５に記載の方法。
【請求項２７】
前記 call action 関数が、 answer 関数、 connect 関数、 disconnect 関数、 redirect 関数、 remove 関数、 create call 関数、 create conference 関数、又はそれらの組み合わせを含む、請求項２６に記載の方法。
【請求項２８】
前記ダイアログコンポーネントが dialog 関数を定める、請求項２４に記載の方法。
【請求項２９】
前記 dialog 関数が、 start 関数、 end 関数、 log 関数、 action 関数、 play action 関数、 form 関数、 menu 関数、又はそれらの組み合わせを含む、請求項２８に記載の方法。
【請求項３０】
前記 play action 関数が、 prompt 関数、 record 関数、又はそれらの組み合わせを含む、請求項２９に記載の方法。
【請求項３１】
前記変換規則が、拡張スタイルシート言語変換（ＸＳＬＴ）に基づく、請求項１８に記載の方法。
【請求項３２】
前記１又は複数の目的設計ファイルを１又は複数のウェブアプリケーションにアセンブルすることを更に含む、請求項１８に記載の方法。
【請求項３３】
前記１又は複数のウェブアプリケーションの少なくとも１つが、
１又は複数の呼制御アプリケーション、又は
１又は複数のダイアログアプリケーションの少なくとも１つを含む、請求項３２に記載の方法。
【請求項３４】
情報担体中で実体的に実施されるコンピュータプログラムプロダクトであって、データ処理装置に以下のこと、即ち、
テレフォニーアプリケーションのためのモジュールを生成することであって、前記モジュールが複数のエレメントを含み、前記複数のエレメントの少なくとも第１のエレメントが呼制御エレメントであり、前記複数のエレメントの少なくとも第２のエレメントがダイアログエレメントであり、前記呼制御エレメントが前記ダイアログエレメントに関連する少なくとも１つの発呼イベントの制御を定め、
前記モジュールを中間設計ファイルに記憶することであって、前記中間設計ファイルは１又は複数の中間言語に基づき、及び
変換規則を使用して、前記中間設計ファイルの少なくとも一部を１又は複数の目的設計ファイルに変換することであって、前記１又は複数の目的設計ファイルが１又は複数の目的言語に基づき、前記１又は複数の目的言語が前記１又は複数の中間言語とは異なることを可能にするように動作可能な命令を前記コンピュータプログラムプロダクトが含むことを特徴とする、コンピュータプログラムプロダクト。
【請求項３５】
サービス作成ツールを含むシステムであって、以下のこと、即ち、
テレフォニーアプリケーションのためのモジュールを生成することであって、前記モジュールが複数のエレメントを含み、前記複数のエレメントの少なくとも第１のエレメントが呼制御エレメントであり、前記複数のエレメントの少なくとも第２のエレメントがダイアログエレメントであり、前記呼制御エレメントが前記ダイアログエレメントに関連する少なくとも１つの発呼イベントの制御を定め、
前記モジュールを中間設計ファイルに記憶することであって、前記中間設計ファイルは１又は複数の中間言語に基づき、及び
変換規則を使用して、前記中間設計ファイルの少なくとも一部を１又は複数の目的設計ファイルに変換することであって、前記１又は複数の目的設計ファイルが１又は複数の目的言語に基づき、前記１又は複数の目的言語が前記１又は複数の中間言語とは異なることに適合されることを特徴とするシステム。
【請求項３６】
セッション開始プロトコルに基づいてメッセージを相互作用させるための方法であって、
１又は複数の命令の第１の組を規則に関連付けること、
第１のフォーマットに基づくセッション開始プロトコルメッセージを受信すること、
前記規則を使用して、１又は複数の命令の前記第１の組が前記セッション開始プロトコルメッセージに適用可能であるか否かを決定すること、及び
１又は複数の命令の前記第１の組が前記セッション開始プロトコルメッセージに適用可能であるとき、命令の前記第１の組を使用して、前記セッション開始プロトコルメッセージを目的のセッション開始プロトコルメッセージに変換し、前記目的のセッション開始プロトコルメッセージは、前記第１フォーマットとは異なる第２フォーマットに基づく諸ステップを含むことを特徴とする方法。
【請求項３７】
前記セッション開始プロトコルメッセージは、開放型システム間相互接続（ＯＳＩ）参照モデルによって定められるトランスポート層から受信される、請求項３６に記載の方法。
【請求項３８】
目的の前記セッション開始プロトコルメッセージをＯＳＩ参照モデルによって定められるアプリケーション層に転送することを更に含む、請求項３７に記載の方法。
【請求項３９】
目的のセッション開始プロトコルメッセージが、正規化されたセッション開始プロトコルメッセージを含む、請求項３８に記載の方法。
【請求項４０】
前記セッション開始プロトコルメッセージが、開放型システム間相互接続（ＯＳＩ）参照モデルによって定められるアプリケーション層から受信される、請求項３６に記載の方法。
【請求項４１】
前記目的のセッション開始プロトコルメッセージをＯＳＩ参照モデルによって定められるトランスポート層に転送することを更に含む、請求項４０に記載の方法。
【請求項４２】
前記セッション開始プロトコルメッセージ中のパラメータを識別することを更に含み、前記パラメータは、予め定められたアドレス、予め定められたＴＣＰ又はＵＤＰポート、伝送制御プロトコル（ＴＣＰ）ＩＤ、セッション開始プロトコル方法、又はそれらの組み合わせを含む、請求項３６に記載の方法。
【請求項４３】
前記予め定められたアドレスが、ソースＩＰアドレス、デスティネーションＩＰアドレス、又はそれらの組み合わせを含む、請求項４２に記載の方法。
【請求項４４】
前記セッション開始プロトコル方法が、 INVITE, RE-INVITE, REGISTER, ACK, CANCEL, BYE, OPTIONS, INFO, NOTIFY, SUBSCRIBE, UNSUBSCRIBE, UPDATE, MESSAGE, REFER, PRACK, PUBLISH 又はそれらの組み合わせを含む、請求項４２に記載の方法。
【請求項４５】
１又は複数の命令の前記第１の組が前記セッション開始プロトコルメッセージに適用可能であるか否かを決定することが、前記パラメータを対応する規則パラメータに合致させることを含み、前記規則は規則パラメータを含む、請求項４２に記載の方法。
【請求項４６】
１又は複数の命令の前記第１の組が、 Practical Extraction and Report 言語（ＰＥＲＬ）、 Tool Command 言語（ＴＣＬ）、Ｃ言語、Ｃ＋＋言語、又はそれらの組み合わせに基づく、請求項３６に記載の方法。
【請求項４７】
前記セッション開始プロトコルメッセージを前記目的のセッション開始プロトコルメッセージに変換することが、前記セッション開始プロトコルメッセージの内部の１又は複数のＳＩＰヘッダを操作すること、追加すること、又は除去することを含む、請求項３６に記載の方法。
【請求項４８】
前記セッション開始プロトコルメッセージを前記目的のセッション開始プロトコルメッセージに変換することが、前記セッション開始プロトコルメッセージの内部のスタートラインを操作することを含む、請求項３６に記載の方法。
【請求項４９】
前記セッション開始プロトコルメッセージを前記目的のセッション開始プロトコルメッセージに変換することが、前記セッション開始プロトコルメッセージの内部の本体部分を操作することを含む、請求項３６に記載の方法。
【請求項５０】
オブジェクトが前記規則を含み、前記オブジェクトがデータベースに記憶される、請求項３６に記載の方法。
【請求項５１】
前記オブジェクトが、名前、記述、１又は複数の命令の前記第１の組の名前、又はそれらの組み合わせを更に含む、請求項５０に記載の方法。
【請求項５２】
情報担体中で実体的に実施されるコンピュータプログラムプロダクトであって、データ処理装置に以下のこと、即ち、
１又は複数の命令の第１の組を規則に関連付けること、
第１のフォーマットに基づくセッション開始プロトコルメッセージを受信すること、
前記規則を使用して、１又は複数の命令の前記第１の組が前記セッション開始プロトコルメッセージに適用可能であるか否かを決定すること、及び
１又は複数の命令の前記第１の組が前記セッション開始プロトコルメッセージに適用可能であるとき、命令の前記第１の組を使用して、前記セッション開始プロトコルメッセージを目的のセッション開始プロトコルメッセージに変換し、前記目的のセッション開始プロトコルメッセージは、前記第１フォーマットとは異なる第２フォーマットに基づくことを可能にするように動作可能な命令を前記コンピュータプログラムプロダクトが含むことを特徴とする、コンピュータプログラムプロダクト。
【請求項５３】
セッション開始プロトコルに基づいてメッセージを相互作用させるためのシステムであって、以下のこと、即ち、
１又は複数の命令の第１の組を規則に関連付けること、
第１のフォーマットに基づくセッション開始プロトコルメッセージを受信すること、
前記規則を使用して、１又は複数の命令の前記第１の組が前記セッション開始プロトコルメッセージに適用可能であるか否かを決定すること、及び
１又は複数の命令の前記第１の組が前記セッション開始プロトコルメッセージに適用可能であるとき、命令の前記第１の組を使用して、前記セッション開始プロトコルメッセージを目的のセッション開始プロトコルメッセージに変換し、前記目的のセッション開始プロトコルメッセージは、前記第１フォーマットとは異なる第２フォーマットに基づくことに適合されるネットワーク装置を含むことを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、グラフィカルユーザーインターフェースを使用してテレフォニーサービスアプリケーションのための呼制御エレメント、及びダイアログエレメントを生成するための、コンピュータプログラムプロダクトを含む、コンピュータに基づく方法と装置に関する。他の側面では、本発明は一般に、テレフォニーサービスアプリケーションのための呼制御エレメント、及びダイアログエレメントを中間言語から目的言語に変換するための、コンピュータプログラムプロダクトを含む、コンピュータに基づく方法と装置に関する。他の側面では、本発明は一般に、セッション開始プロトコルメッセージを第１フォーマットから第２フォーマットに変換するための、コンピュータプログラムプロダクトを含む、コンピュータに基づく方法と装置に関する。
【背景技術】
【０００２】
最近、パケットベースのネットワークの急増が、従来の回線ベースのテレフォニーネットワークに対する代替案の出現をもたらした。パケットベースのネットワーク、例えば、インターネットプロトコル（ＩＰ）ネットワーク、がテレフォニー通信のデータコンテンツをパケット化して送信する機能を提供してきた。その種の構成は Voice over IP （ＶＯＩＰ）ネットワークと一般に呼ばれ、音声、画像、及び／又はデータコンテンツをサポートできる。ＶＯＩＰの使用の増加に連動して、ユーザ対話をサポートして向上させるために種々のテレフォニーサービスが開発されてきた。ＩＰマルチメディア・サブシステム（ＩＭＳ）アーキテクチャは、新しいテレフォニーサービスの開発と配信を出来るだけ素早く簡単に行う方法で、新しいテレフォニーサービスを提供する、標準化された次世代ネットワーク（ＮＧＮ）アーキテクチャである。基礎となるＩＭＳアーキテクチャはセッション開始プロトコル（ＳＩＰ）であり、インターネット技術タスクフォース（ＩＥＴＦ）によるコメント要求（ＲＦＣ）３２６１によって標準化される。ＳＩＰメッセージの基本構造はＲＦＣ３２６１に準拠するが、ネットワーク上の発信側装置のベンダによって使用されるフォーマットによって決まるＳＩＰメッセージのフォーマットには種々の差異が存在する。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
テレフォニーサービスの開発は２つの独立したステップを含む。即ち、呼制御サービスの生成、及びダイアログサービスの生成である。テレフォニーサービスは、それに対してテレフォニーサービスが実行される特定の目的言語で開発され生成される。同じテレフォニーサービスを他の目的言語で生成するために、別の開発プロセスが必要である。
【課題を解決するための手段】
【０００４】
テレフォニーアプリケーションを生成することに対する１つの取り組み方は、グラフィカルユーザーインターフェースを使用して呼制御エレメント、及びダイアログエレメントを生成することである。１側面では、１つの方法が存在する。その方法は、グラフィカルユーザーインターフェースを提供すること、ユーザがグラフィカルユーザーインターフェースを使用して複数のエレメントから１つのエレメントを選択することを可能にすること、及びテレフォニーアプリケーションのためのモジュールをグラフィカルユーザーインターフェースを使用して生成することを含む。複数のエレメントは、少なくとも１つの呼制御エレメント、及び少なくとも１つのダイアログエレメントを含む。少なくとも１つの呼制御エレメントは、少なくとも１つのダイアログエレメントに関連する少なくとも１つの発呼イベントの制御を定める。
【０００５】
他の側面では、１つのシステムが存在する。そのシステムは、サービス作成環境を含む。サービス作成環境は、グラフィカルユーザーインターフェースを提供するように適合されたサービス作成ツールを含み、ユーザがグラフィカルユーザーインターフェースを使用して複数のエレメントから１つのエレメントを選択することを可能にし、及びグラフィカルユーザーインターフェースを使用してテレフォニーアプリケーションのためのモジュールを生成する。複数のエレメントは、少なくとも１つの呼制御エレメント、及び少なくとも１つのダイアログエレメントを含む。少なくとも１つの呼制御エレメントは、少なくとも１つのダイアログエレメントに関連する少なくとも１つの発呼イベントの制御を定める。
【０００６】
他の側面では、１つのコンピュータプログラムプロダクトが存在する。コンピュータプログラムプロダクトは情報担体中で実体的に実施され、コンピュータプログラムプロダクトはデータ処理装置がグラフィカルユーザーインターフェースを提供することを可能にするように動作可能な命令を含み、ユーザがグラフィカルユーザーインターフェースを使用して複数のエレメントから１つのエレメントを選択することを可能にし、及びテレフォニーアプリケーションのためのモジュールをグラフィカルユーザーインターフェースを使用して生成する。複数のエレメントは、少なくとも１つの呼制御エレメント、及び少なくとも１つのダイアログエレメントを含む。少なくとも１つの呼制御エレメントは、少なくとも１つのダイアログエレメントに関連する少なくとも１つの発呼イベントの制御を定める。
【０００７】
他の実施例では、上記側面の何れかは次の特徴の１つ又は２つ以上を含み得る。また、その方法は、グラフィカルユーザーインターフェースを使用して、ダイアログエレメントを呼制御エレメントと結合させることも含み得る。ダイアログエレメントを呼制御エレメントと結合させることは、呼制御エレメント中のダイアログエレメントにリファレンスを挿入することを含み得る。ダイアログエレメントを呼制御エレメントと連結させることは、ダイアログエレメントを呼制御エレメントに埋め込むことを含み得る。複数のエレメントは、設計ファイル、ソースコード、実行可能ファイル、又はそれらの組み合わせの１つ又は２つ以上を含み得る。呼制御エレメントは、呼制御ＸＭＬ（ＣＣＸＭＬ）、呼処理言語（ＣＰＬ）、又はそれらの組み合わせに基づき得る。呼制御エレメントは、 Java Server Page （ＪＳＰ）の内部に埋め込まれ得る。また、その方法は、１又は複数の予め定められた呼制御エレメントの組を提供することも含み得る。呼制御エレメントは、その組に含まれ得る。ダイアログエレメントは、音声ＸＭＬ（ＶＸＭＬ）、メディアサーバ制御マークアップ言語（ＭＳＣＭＬ）、メディアサーバマークアップ言語（ＭＳＭＬ）、メディアオブジェクトマークアップ言語（ＭＯＭＬ）、又はそれらの組み合わせに基づき得る。ダイアログエレメントは、 Java Server Page （ＪＳＰ）の内部に埋め込まれ得る。また、その方法は、１又は複数の予め定められたダイアログエレメントの組を提供することも含み得る。ダイアログエレメント、その組に含まれ得る。呼制御エレメント、又はダイアログエレメントは、ＥＣＭＡスクリプトに基づくエレメントを含み得る。モジュールを生成することは、呼制御エレメント、又はダイアログエレメントを構成することを含み得る。モジュールを生成することは呼フローを定めることを含み得て、呼フローは呼制御エレメント、又はダイアログエレメントを含む。また、その方法は、文字ユーザインターフェースを提供すること、及びモジュールを文字ユーザインターフェースを使用して構成することも含み得る。
【０００８】
上記実施例の何れかは、次の利点の１つ又は２つ以上を実現し得る。サービス作成ツールはグラフィカルユーザーインターフェースを提供し、グラフィカルユーザーインターフェースは、新しいアプリケーション、及びサービスを容易に早く生成するサービス開発者のためのドラッグ・アンド・ドロップ開発環境を使用するシンプルさを呈示する。呼制御エレメント、及びダイアログエレメントを含むグラフィカルユーザーインターフェースは、先進的な電気通信アプリケーションのための統合された呼制御サービス、及びダイアログサービスの迅速なサービス作成、テスト、及び配備を可能にする。アプリケーション開発を加速することによって、グラフィカルユーザーインターフェースはプログラミングコスト、及び開発コストを著しく減少させる。更に、プログラマは標準ベースのウェブツール知識を必要とし、独自のソフトウェア開発キットの知識は必要としない。
【０００９】
テレフォニーアプリケーションを生成することに対する１つの取り組み方は、呼制御エレメント、及びダイアログエレメントを中間言語から目的言語に変換することである。１側面では、１つの方法が存在する。その方法はテレフォニーアプリケーションのためのモジュールを生成することを含み、モジュールは複数のエレメントを含み、複数のエレメントの少なくとも第１のエレメントは呼制御エレメントであり、複数のエレメントの少なくとも第２のエレメントはダイアログエレメントである。呼制御エレメントは、ダイアログエレメントに関連する少なくとも１つの発呼イベントの制御を定める。また、その方法は中間設計ファイルにモジュールを記憶することも含む。中間設計ファイルは、１又は複数の中間言語に基づく。また、その方法は、変換規則を使用して、中間設計ファイルの少なくとも一部を１又は複数の目的設計ファイルに変換することも含む。１又は複数の目的設計ファイルは、１又は複数の目的言語に基づく。１又は複数の目的言語は、１又は複数の中間言語とは異なる。
【００１０】
他の側面では、１つのシステムが存在する。そのシステムは、サービス作成環境を含む。サービス作成環境は、テレフォニーアプリケーションのためのモジュールを生成するように適合されたサービス作成ツールを含む。モジュールは、複数のエレメントを含む。複数のエレメントの少なくとも第１のエレメントは呼制御エレメントであり、複数のエレメントの少なくとも第２のエレメントはダイアログエレメントである。呼制御エレメントは、ダイアログエレメントに関連する少なくとも１つの発呼イベントの制御を定める。また、サービス作成環境は、中間設計ファイル中でモジュールを記憶するようにも適合される。中間設計ファイルは、１又は複数の中間言語に基づく。また、サービス作成環境は、変換規則を使用して、中間設計ファイルの少なくとも一部を１又は複数の目的設計ファイルに変換するようにも適合される。１又は複数の目的設計ファイルは、１又は複数の目的言語に基づく。１又は複数の目的言語は、１又は複数の中間言語とは異なる。
【００１１】
他の側面では、１つのコンピュータプログラムプロダクトが存在する。コンピュータプログラムプロダクトは情報担体中で実体的に実施され、コンピュータプログラムプロダクトはデータ処理装置がテレフォニーアプリケーションのためのモジュールを生成することを可能にするように動作可能な命令を含む。モジュールは、複数のエレメントを含む。複数のエレメントの少なくとも第１のエレメントは呼制御エレメントであり、複数のエレメントの少なくとも第２のエレメントはダイアログエレメントである。呼制御エレメントは、ダイアログエレメントに関連する少なくとも１つの発呼イベントの制御を定める。また、コンピュータプログラムプロダクトは、中間設計ファイル中でモジュールを記憶するように動作可能な命令も含む。中間設計ファイルは、１又は複数の中間言語に基づく。また、コンピュータプログラムプロダクトは、変換規則を使用して、中間設計ファイルの少なくとも一部を１又は複数の目的設計ファイルに変換するように動作可能な命令も含む。１又は複数の目的設計ファイルは、１又は複数の目的言語に基づく。１又は複数の目的言語は、１又は複数の中間言語とは異なる。
【００１２】
他の実施例では、上記側面の何れかは次の特徴の１つ又は２つ以上を含み得る。１又は複数の中間言語は、呼制御ＸＭＬ（ＣＣＸＭＬ）、呼処理言語（ＣＰＬ）、音声ＸＭＬ（ＶＸＭＬ）、メディアサーバ制御マークアップ言語（ＭＳＣＭＬ）、メディアサーバマークアップ言語（ＭＳＭＬ）、メディアオブジェクトマークアップ言語（ＭＯＭＬ）、又はそれらの組み合わせを含み得る。１又は複数の中間言語は、拡張可能マークアップ言語(ＸＭＬ)を含み得る。１又は複数の中間言語は、汎用言語を含み得る。１又は複数の目的言語は、呼制御ＸＭＬ（ＣＣＸＭＬ）、呼処理言語（ＣＰＬ）、音声ＸＭＬ（ＶＸＭＬ）、メディアサーバ制御マークアップ言語（ＭＳＣＭＬ）、メディアサーバマークアップ言語（ＭＳＭＬ）、メディアオブジェクトマークアップ言語（ＭＯＭＬ）、又はそれらの組み合わせを含み得る。また、その方法は、 Java Server Page （ＪＳＰ）の内部の１又は複数の目的設計ファイルの少なくとも１つをカプセル化することも含み得る。中間言語は１つのモデルに基づき得て、そのモデルは呼制御エレメントに関連する呼制御コンポーネント、及びダイアログエレメントに関連するダイアログコンポーネントを含む。呼制御コンポーネントは、発呼イベント関数を定めることができる。発呼イベント関数は、 start 関数、 end 関数、 log 関数、 action 関数、 call action 関数、 dialog 関数、又はそれらの組み合わせを含み得る。 call action 関数は、 answer 関数、 connect 関数、 disconnect 関数、 redirect 関数、 remove 関数、 create call 関数、 create conference 関数、又はそれらの組み合わせを含み得る。ダイアログコンポーネントは、 dialog 関数を定めることができる。 dialog 関数は、 start 関数、 end 関数、 log 関数、 action 関数、 play action 関数、 form 関数、 menu 関数、又はそれらの組み合わせを含み得る。 play action 関数は、 prompt 関数、 record 関数、又はそれらの組み合わせを含み得る。変換規則は、拡張スタイルシート言語変換（ＸＳＬＴ）に基づき得る。また、その方法は、１又は複数の目的設計ファイルを１又は複数のウェブアプリケーションにアセンブルすることも含み得る。１又は複数のウェブアプリケーションの少なくとも１つは、１又は複数の呼制御アプリケーション、又は１又は複数のダイアログアプリケーションの少なくとも１つを含み得る。
【００１３】
上記実施例の何れかは、次の利点の１つ又は２つ以上を実現し得る。中間言語を生成することによって、開発者は複数の目的言語に変換できる単一の設計ソース中のアプリケーションの設計情報を取り込むことができ、設計情報は以前に設計されたアプリケーションが１又は複数のプラットフォームで初期設計を変更することなく対象にされることを可能にする。
【００１４】
メッセージを相互に送信することに対する１つの取り組み方は、メッセージを第１フォーマットから第２フォーマットに変換することである。１側面では、１つの方法が存在する。その方法は、１又は複数の命令の第１の組を規則に関連付けること、及びセッション開始プロトコルメッセージを受信することを含み、セッション開始プロトコルメッセージは第１フォーマットに基づく。また、その方法は、規則を使用して、１又は複数の命令の第１の組がセッション開始プロトコルメッセージに適用可能であるか否かを決定すること、及び１又は複数の命令の第１の組がセッション開始プロトコルメッセージに適用可能であるとき命令の第１の組を使用して、セッション開始プロトコルメッセージを目的のセッション開始プロトコルメッセージに変換することも含む。目的のセッション開始プロトコルメッセージは、第１フォーマットとは異なる第２フォーマットに基づく。
【００１５】
他の側面では、セッション開始プロトコルに基づいてメッセージを相互作用させるための１つのシステムが存在する。そのシステムは、１又は複数の命令の第１の組を規則に関連付けること、及びセッション開始プロトコルメッセージを受信することに適合されたネットワーク装置を含み、セッション開始プロトコルメッセージは第１フォーマットに基づく。また、ネットワーク装置は、規則を使用して、１又は複数の命令の第１の組がセッション開始プロトコルメッセージに適用可能であるか否かを決定すること、及び１又は複数の命令の第１の組がセッション開始プロトコルメッセージに適用可能であるとき、命令の第１の組を使用して、セッション開始プロトコルメッセージを目的のセッション開始プロトコルメッセージに変換することにも適合される。目的のセッション開始プロトコルメッセージは、第１フォーマットとは異なる第２フォーマットに基づく。
【００１６】
他の側面では、１つのコンピュータプログラムプロダクトが存在する。コンピュータプログラムプロダクトは情報担体中で実体的に実施され、コンピュータプログラムプロダクトは、１又は複数の命令の第１の組を規則に関連付け、セッション開始プロトコルメッセージを受信するように動作可能な命令を含み、セッション開始プロトコルメッセージは、第１フォーマットに基づく。また、ネットワーク装置は、規則を使用して、１又は複数の命令の第１の組がセッション開始プロトコルメッセージに適用可能であるか否かを決定すること、及び１又は複数の命令の第１の組がセッション開始プロトコルメッセージに適用可能であるとき、命令の第１の組を使用して、セッション開始プロトコルメッセージを目的のセッション開始プロトコルメッセージに変換することにも適合される。目的のセッション開始プロトコルメッセージは、第１フォーマットとは異なる第２フォーマットに基づく。
【００１７】
他の実施例では、上記側面の何れかは次の特徴の１つ又は２つ以上を含み得る。セッション開始プロトコルメッセージは、開放型システム間相互接続（ＯＳＩ）参照モデルによって定められるトランスポート層から受信され得る。また、その方法は、目的のセッション開始プロトコルメッセージをＯＳＩ参照モデルによって定められるアプリケーション層に転送することも含み得る。目的のセッション開始プロトコルメッセージは、正規化されたセッション開始プロトコルメッセージを含み得る。セッション開始プロトコルメッセージは、開放型システム間相互接続（ＯＳＩ）参照モデルによって定められるアプリケーション層から受信され得る。また、その方法は、目的のセッション開始プロトコルメッセージをＯＳＩ参照モデルによって定められるトランスポート層に転送することも含み得る。また、その方法は、セッション開始プロトコルメッセージ中のパラメータを識別することも含み得て、パラメータは、予め定められたアドレス、予め定められたＴＣＰ又はＵＤＰポート、伝送制御プロトコル（ＴＣＰ）ＩＤ、セッション開始プロトコル方法、又はそれらの組み合わせを含む。予め定められたアドレスは、ソースＩＰアドレス、デスティネーションＩＰアドレス、又はそれらの組み合わせを含み得る。セッション開始プロトコル方法は、 INVITE, RE-INVITE, REGISTER, ACK, CANCEL, BYE, OPTIONS, INFO, NOTIFY, SUBSCRIBE, UNSUBSCRIBE, UPDATE, MESSAGE, REFER, PRACK, PUBLISH, 又はそれらの組み合わせを含み得る。また、その方法は、１又は複数の命令の第１の組がセッション開始プロトコルメッセージに適用可能であるか否かを決定することを含み得て、パラメータを対応する規則パラメータに合致させることを含み、規則は規則パラメータを含む。１又は複数の命令の第１の組は、 Practical Extraction and Report 言語（ＰＥＲＬ）、 Tool Command 言語（ＴＣＬ）、Ｃ言語、Ｃ＋＋言語、又はそれらの組み合わせに基づき得る。また、その方法は、セッション開始プロトコルメッセージを目的のセッション開始プロトコルメッセージに変換することを含み得て、セッション開始プロトコルメッセージの内部の１又は複数のＳＩＰヘッダを操作すること、追加すること、又は除去することを含む。また、その方法は、セッション開始プロトコルメッセージを目的のセッション開始プロトコルメッセージに変換することも含み得て、セッション開始プロトコルメッセージの内部のスタートラインを操作することを含む。また、その方法は、セッション開始プロトコルメッセージを目的のセッション開始プロトコルメッセージに変換することを含み得て、セッション開始プロトコルメッセージの内部で本体部分を操作することを含む。オブジェクトは規則を含み得て、オブジェクトはデータベースに記憶され得る。更に、オブジェクトは、名前、記述、１又は複数の命令の第１の組の名前、又はそれらの組み合わせを含み得る。
【００１８】
上記実施例の何れかは、次の利点の１つ又は２つ以上を実現し得る。相互作用シナリオ中のメッセージ・カスタマイズは、ＳＩＰメッセージに対してどのフォーマットを使用するかにかかわらず、まるで同じフォーマットを使用したかのように、エンドエージェントが継ぎ目なく互いに情報をやり取りすることを可能にする。加えて、類似の結果に到達するＳＩＰプロトコルレベルにおいてコードを変更することと比較して、メッセージ・カスタマイズは、スクリプトを使用して、システムの設計が大幅に単純化されることを可能にする。加えて、ＳＩＰカスタマイズは、スクリプトを使用して、早い開発も可能にする。何故ならば、小スクリプトは容易に作成できるからである。文字列操作に適合したスクリプトは、ＳＩＰカスタマイズに特に適合する。何故ならば、ＳＩＰはテキストベースのプロトコルだからである。加えて、スクリプトは、より大きな柔軟性をユーザ（例えば、サービスプロバイダ）に提供する。何故ならば、ユーザは、パッチのリリースを待つ代わりに、相互作用シナリオ中のＳＩＰカスタマイズに対するスクリプトを変更、及び／又は追加できるからである。また、スクリプトを使用することの単純さも、ＳＩＰ処理システムの更に迅速な開発、テスト、及び／又は市場流通を可能にする。
【００１９】
本発明の他の側面、及び利点は、例示のみの手段として本発明の原理を示す添付の図面と関連する次の詳細な記述から明らかになるであろう。
【発明を実施するための最良の形態】
【００２０】
ＩＭＳネットワークのようなＶＯＩＰネットワークでは、テレフォニーサービスは、音声呼出し／会議、ビデオ通話／会議、テキスト及び／又はインスタント・メッセージング、 push-to-talk over cellular （ＰＯＣ）、マルチパーティゲーム、データベースアクセス、ユーザが定めた呼出音、及び／又は他のネットワーク通信を含み得る。その種のテレフォニーサービスは、呼制御、ダイアログ制御、及び／又は他のテレフォニーサービス機能の各々を提供するために、テレフォニーサービスアプリケーションとして実施され得る。テレフォニーサービス呼制御は、呼設定、呼修正、ダイアログ呼び出し、及び／又は呼終了を制御することを含み得て、呼は２又は３以上の発呼者の間、及び／又は１発呼者と１又は複数のデータベースにアクセスするための１又は複数のサーバの間であり得る。呼制御は、例えば、呼制御拡張マークアップ言語（ＣＣＸＭＬ）、呼処理言語（ＣＰＬ）、（フロリダ州オーランドにある Voxeo 社によって開発された）ＣａｌｌＸＭＬ、及び／又は他の呼制御言語に基づく命令の組を含むアプリケーションを使用して実施され得る。また、テレフォニーサービスアプリケーションは、ユーザと１又は複数のデータベースの間のユーザ対話のためのダイアログ制御を提供し得る。例えば、ユーザ対話は、（例えば、音声、及び／又は dual-tone multifrequency （ＤＴＭＦ）対話によって）入力を要求すること、及び／又は情報を収集することを含み得る。例えば、ダイアログ制御は、音声拡張マークアップ言語（ＶＸＭＬ）、メディアサーバ制御マークアップ言語（ＭＳＣＭＬ）、メディアサーバマークアップ言語（ＭＳＭＬ）、メディアオブジェクトマークアップ言語（ＭＯＭＬ）、 Speech Application Language Tags （ＳＡＬＴ）、他の相互音声応答（ＩＶＲ）言語、及び／又は他のダイアログ制御言語に基づく命令の組を含むアプリケーションを使用して実行され得る。また、テレフォニーサービスアプリケーションは、追加の機能、例えば、テレフォニーサービスによって要求されるデータの計算、を実行するためのスクリプト、例えば、ＥＣＭＡベースのスクリプト、 JavaScripts、 JScripts 、及び／又は類似のスクリプトも含み得る。加えて、テレフォニーサービスは、１又は複数のリモートデータベースに対するユーザアクセスも提供し得て、リモートデータベースでは、ユーザは情報、例えば、個人のアドレス帳、個人のダイヤルプラン、個人秘書、接触リスト、部門情報、及び／又は類似の情報を検索、及び／又は更新し得る。
【００２１】
図１は、テレフォニーサービスの生成、提供、及び実行に関連する装置を有する例示的なネットワーク１００を示すブロック図である。ネットワーク１００は、パケットベースのネットワーク１０１、例えば、インターネット、キャリアＩＰネットワーク（ＬＡＮ，ＷＡＮ，又は類似のネットワーク）、構内ＩＰネットワーク、及び／又は他のパケットベースのネットワークを含む。アプリケーションサーバ（ＡＳ）１１０、メディアサーバ（ＭＳ）１２０、ルーティングサーバ（ＲＳ）１３０、１又は複数のアクセスネットワーク１４０，１５０、及び１又は複数のユーザ１６５がネットワーク１０１に接続される。アプリケーションサーバ１１０、及びメディアサーバ１２０は、テレフォニーサービスアプリケーションを実行するためのプラットフォームを提供することを担う。プラットフォームは、アプリケーションサーバ１１０（例えば、ＣＣＸＭＬ）、及びメディアサーバ１２０（例えば、ＶＸＭＬ）のスクリプト機能を含む。アプリケーションサーバ１１０は、 Linux, Solaris 又は Windows（登録商標） を動作させる標準的キャリアクラス Intel プラットフォームに配備され得る。この実施例では、メディアサーバ１２０はアプリケーションサーバ１１０から分離されるが、他の構成も使用でき、例えば、メディアサーバ１２０はアプリケーションサーバ１１０と同じノードに配置され得る。
【００２２】
サービス作成環境（ＳＣＥ）１１１がアプリケーションサーバ１１０に接続され、ＳＣＥ１１１は、テレフォニーサービスアプリケーションを生成することを担う。ＳＣＥ１１１は、呼制御機能、及びダイアログ制御機能を用いてテレフォニーサービスアプリケーションを生成するためのグラフィカルユーザーインターフェースを提供する。この実施例では、ＳＣＥ１１１はアプリケーションサーバ１１０に接続されるが、他の構成も使用され得る。例えば、ＳＣＥ１１１はアプリケーションサーバ１１０に含まれ得るか、又はＳＣＥ１１１はネットワーク１０１のリモート位置においてアクセス可能に作成され得る。
【００２３】
生成されたテレフォニーサービスアプリケーションは１又は複数のデータベース（図示されない）、例えば、ウェブサーバにおいて提供され得て、１又は複数のデータベースは、アプリケーションサーバ１１０及び／又はメディアサーバ１２０によってローカル又はリモートにアクセスされ得る。ルーティングサーバ１３０は、１又は複数のアプリケーションサーバ１１０とのネットワークに対するルーティング及び／又はサービス選択を提供し得る。ルーティングサーバ１３０は、ネットワーク１０１の全てのアプリケーションサーバ１１０の状態、及び所定のアプリケーションサーバ１１０で実行され得るテレフォニーサービスアプリケーションの組についての情報を維持し得る。例えば、発呼エージェント（例えば、ユーザ１６５）はルーティングサーバ１３０にコンタクトし得て、ルーティングサーバ１３０はアプリケーションサーバ１１０のアドレスを発呼エージェントに戻す。
【００２４】
ゲートウェイ１４１，１５１は、アクセスネットワーク１４０，１５０をパケットベースのネットワーク１０１に各々結合させる。アクセスネットワーク１４０，１５０は、他のパケットベースのネットワーク、例えば、公衆交換電話網（ＰＳＴＮ）、無線アクセスネットワーク（ＲＡＮ）、（従来の、又はＩＰ）構内交換機（ＰＢＸ）、及び／又は類似のネットワークであり得る。アクセスネットワーク１４０，１５０は、複数のユーザ装置１４５，１５５に各々結合され得る。ユーザ装置１４５，１５５，１６５は、コンピュータ、電話機、ＩＰ電話機、無線電話機（例えば、携帯電話、ＰＤＡ装置、及び／又は類似の装置）、及び／又は他のテレフォニー装置であり得る。
【００２５】
図２は、テレフォニーサービスの生成、提供、及び実行を示すフローチャート２００である。フローチャート２００のエレメントは、図１の例示的なネットワーク１００を使用して記述される。テレフォニーサービスは、ＳＣＥ１１１において生成される（２０１）。テレフォニーサービスは、１又は複数のアプリケーション（例えば、呼制御に対するＣＣＸＭＬドキュメント、及びダイアログ制御に対するＶＸＭＬドキュメント）であり得る。呼制御アプリケーションを用いて、ユーザ（例えば、サービス作成者）は呼フローを通して制御を完了し得て、アプリケーションサーバ１１０が連続するユーザエージェント（Ｂ２ＢＵＡ）、プロキシサーバ、又はリダイレクトサーバとして振る舞うか否かを含む。また、呼制御はイベント処理も提供し得て、イベント処理は任意の時間に種々のソースから起こり得る。発呼イベントは呼制御アプリケーション（例えば、出呼要求、又はダイアログ要求）による動作を含み、呼制御アプリケーション（例えば、出呼要求に応答して呼がオフフックになるときのイベント指示、又はダイアログのイベント指示終了）によって、及び／又は外部ソース（例えば、応答すべき入呼）から以前の動作に応答し得る。呼制御アプリケーションは、ユーザ対話を使用してダイアログを制御し得る。ダイアログは情報を呼制御アプリケーションに戻し得て、呼制御アプリケーションはダイアログによって何が戻されたかによって次に何をするかを決定し得る。呼制御アプリケーションはダイアログを非同期イベントとして処理し得て、ダイアログが開始されるとき、制御は呼制御アプリケーションへ直ぐに戻り、呼制御アプリケーションはダイアログの結果を後で非同期イベントによって知らされ得る。テレフォニーサービスが要求されるまで、テレフォニーサービスは、１又は複数のデータベース（図示されない）に記憶のための１又は複数のアプリケーションとして提供され得る（２０２）。データベースはネットワークの何処でも、及び／又は１又は複数のウェブサーバを介してアクセスし得る。提供は、ファイル転送プロトコル（ＦＴＰ）、セキュアシェルＦＴＰ（ＳＦＴＰ）、セキュアコピー（ＳＣＰ）、及び／又は他の転送プロトコルを使用することを含み得る。テレフォニーサービスアプリケーションは、アプリケーションサーバ１１０、及び／又はメディアサーバ１２０において実行され得る（２０３）。実行はウェブモデルを使用して行われ得て、アプリケーションサーバ１１０、及び／又はメディアサーバ１２０は、１又は複数のウェブサーバからウェブアプリケーションとしてテレフォニーサービスアプリケーションを要求しているハイパーテキスト転送プロトコル（ＨＴＴＰ）クライアントとして動作する。
【００２６】
図３は、例えば、ユーザ１６５とメディアサーバ１２０の間の呼の設定のための呼フロー３００を示す。呼は、例えば、データベース中の情報にアクセスすることをユーザが所望することであり得る。呼フロー３００のエレメントは、セッション開始プロトコル (ＳＩＰ)に基づく信号メッセージ、及び図１の例示的なネットワーク１００を使用して記述される。しかし、他の信号プロトコル（例えば、Ｈ．３２３、又はＳＳ７）も使用され得る。ユーザが INVITE メッセージをアプリケーションサーバ１１０に送信するとき、ラダー図が始まる。アプリケーションサーバ１１０は、適用可能な呼制御アプリケーション（例えば、特定のＣＣＸＭＬドキュメント）を検索し実行する。アプリケーションサーバ１１０は 200 OK メッセージをユーザに送信し、ユーザにアプリケーションサーバ１１０が関連したテレフォニーサービスアプリケーションを正常に検索したことを知らせる。ユーザは、 ACK メッセージをアプリケーションサーバ１１０に送信する。アプリケーションサーバ１１０はメディアサーバ１２０が要求されたことを決定し、 INVITE メッセージをメディアサーバ１２０に送信する。メディアサーバ１２０は、 200 OK メッセージをアプリケーションサーバ１１０に送信する。アプリケーションサーバ１１０は、 ACK メッセージをメディアサーバ１２０に送信する。アプリケーションサーバ１１０は Re-INVITE メッセージを、メディアサーバ１２０を指示するセッション記述プロトコル（ＳＤＰ）を用いてユーザに送信し、 Re-INVITE メッセージを、ユーザを指示するセッション記述プロトコル（ＳＤＰ）を用いてメディアサーバ１２０に送信する。ユーザは、 200 OK メッセージをアプリケーションサーバ１１０に送信する。アプリケーションサーバ１１０は、 ACK メッセージをユーザに送信する。メディアサーバ１２０は、 200 OK メッセージをアプリケーションサーバ１１０に送信する。アプリケーションサーバ１１０は、 ACK メッセージをメディアサーバ１２０に送信する。ユーザは情報を、例えば、リアルタイム転送プロトコル（ＲＴＰ）を使用してメディアサーバ１２０と交換する。メディアサーバ１２０は BYE メッセージを送信し、アプリケーションサーバ１１０に通信のやり取りが終了したことを知らせる。アプリケーションサーバ１１０は、 200 OK メッセージをメディアサーバ１２０に送信する。アプリケーションサーバ１１０は、 BYE メッセージをユーザに送信する。ユーザは、 200 OK メッセージをアプリケーションサーバ１１０に送信する。
【００２７】
サービス作成環境（実行時間の側面）
図４は、ＳＣＥ１１１を使用してテレフォニーサービスの開発、アセンブリ、テスト、及び配備を示すプロセスフロー４００である。ＳＣＥ１１１は、ユーザ４０１、例えば、サービスプロバイダ、がアプリケーションサーバ１１０、及び／又はメディアサーバ１２０に対してテレフォニーサービスアプリケーションを開発、編集、構成、テスト、デバッグ、及び／又は配備できる開発環境である。テレフォニーサービスアプリケーションの生成は、アプリケーション開発（４１０）、アプリケーションアセンブリ（４２０）、アプリケーションテスト（４３０）、及び／又はアプリケーション配備（４４０）を含む。アプリケーション開発（４１０）、アプリケーションアセンブリ（４２０）、及び／又はアプリケーションテスト（４３０）は、不特定の順番で実行される反復プロセスであり得る。ＳＣＥ１１１はグラフィカルユーザーインターフェース（ＧＵＩ）を提供して、呼制御エレメント、及びダイアログエレメントを含むテレフォニーサービスアプリケーションの生成を容易にする。テレフォニーサービスアプリケーションは、ユーザ４０１によってグラフィカルユーザーインターフェースを使用して開発される（４１０）。グラフィカルユーザーインターフェースは、呼制御アプリケーションをビルドするためのドラッグ・アンド・ドロップ・インターフェースを提供し得て、呼制御アプリケーションは呼フロー、及び呼フローに関連する音声ダイアログを定める。加えて、ＳＣＥ１１１は、グラフィカルユーザエディタと関連して使用されるテレフォニーサービスアプリケーションの編集のためのテキストユーザエディタを提供し得る。アプリケーション開発の間、呼制御エレメント、及びダイアログエレメントのパレットを提供するデータベース４０５は、ユーザ４０１に対して利用可能にされ得る。データベース４０５は、アプリケーション開発を開始するのに用いる１組の基本エレメント、又はビルディングブロックを提供し得る。これらのエレメントは、ユーザ４０１によってカスタマイズ、編集、及び／又は新しいビルディングブロックと一体化され得て、並びに新しいアプリケーション呼フローで使用するための新しいエレメントとしてデータベース４０５に記憶され得る。また、データベース４０５は、アプリケーション開発をブートストラップするための予めバンドルされた、予め構成された、及び／又はテンプレート呼アプリケーション（即ち、「スタータキット」）も提供し得る。スタータキットは、種々の基本機能に対して呼制御、及びダイアログアプリケーションが如何にして実施され得るかを実演し得る。スタータキット中のファイルは、アプリケーション開発者によって直接的に使用され得るか、及び／又は新しい呼制御、及びダイアログアプリケーションを生成するための起点として機能し得る。データベース４０５によって提供された呼制御エレメント、及びダイアログエレメントは、１又は複数の特定の言語、例えば、ＣＣＸＭＬ、及び／又はＶＸＭＬ基づき得るか、又は汎用言語、例えば、汎用サービス作成マークアップ言語（ＧＳＣＭＬ）、若しくはＸＭＬ図に基づく言語に基づき得て、それらは技術にとらわれない。産業の中には、ＳＣＭＬと呼ばれることもある、サービス作成マークアップ言語を使用してきたものもある。ここでのサービス作成マークアップ言語の使用は、産業が定めたサービス作成マークアップ言語との関係を暗示しない。また、データベース４０５は、開発された呼制御ダイアログアプリケーション、及び／又はダイアログアプリケーションをカプセル化するための１組の Java Server Page （ＪＳＰ）テンプレートを提供できる。ＪＳＰページは、ダイナミックコンテンツ生成を可能にする。また、データベース４０５は、データ検索のためのバックエンドシステムに接続するための呼制御アプリケーション、及び／又はダイアログアプリケーションによって使用される１組のデータベース記憶域クラスを提供し得る。データベース記憶域クラスは、その種の機能、例えば、カスタムプロンプト検索、口座確認、部門ディレクトリ・ルックアップ、 find-me/follow me 構成、及び／又は類似の構成を実行するためのアプリケーションによって使用される。ＳＣＥ１１１は、開発されたアプリケーションを１又は複数の設計ファイルとしてデータベース４１５に記憶する。設計ファイルは、１又は複数の特定の言語、例えば、ＣＣＸＭＬ及び／又はＶＸＭＬに基づき得るか、又は汎用言語（例えば、ＧＳＣＭＬ）、若しくはＸＭＬ図に基づく言語に基づき得て、それらは技術にとらわれない。
【００２８】
設計ファイルは、テスト及び／又は配備のためにユーザ４０１によってアプリケーションにアセンブルされ得る（４２０）。１又は複数の設計ファイルの呼制御部分は呼制御ウェブアプリケーションにアセンブルされ得て、呼制御ウェブアプリケーションは、テレフォニーサービスアプリケーションの呼制御部分を実施する ready-to-run ウェブアプリケーションである。１又は複数の設計ファイルのダイアログ部分はダイアログウェブアプリケーションにアセンブルされ得て、ダイアログウェブアプリケーションは、呼制御アプリケーションによって使用されるダイアログを実施する ready-to-run ウェブアプリケーションである。呼制御ウェブアプリケーション及び／又はダイアログウェブアプリケーションは、１又は複数のウェブアプリケーション・アーカイブファイル(warfile)にアセンブルされ得る。テレフォニーサービスアプリケーションの一部である全てのファイルは、（例えば、 warfile として）パッケージ化された形態で一緒にアセンブルされ得る。ＪＳＰファイル中で実施される任意のアプリケーションは、パッケージ化された形態にアセンブルされる前にコンパイルされ得る。コンパイル前のＪＳＰファイルは、アプリケーションがアクセスされる間のコンパイルの実行時間オーバーヘッドを回避する。アセンブルされたアプリケーションは、設計ファイルとしてデータベース４２５に記憶され得る。
【００２９】
テレフォニーサービスアプリケーションは、ユーザ４０１によってテストされ得る（４３０）。テストはローカルウェブサーバを使用して実行され得て、例えば、統合開発環境（ＩＤＥ）を使用してアプリケーションをデバッグすることを含み得る。例えば、アプリケーションはローカルウェブサーバに配備され得て、ウェブブラウザ中のアプリケーションに対して適切な Uniform Resource Locator （ＵＲＬ）を入力することによって実行され得る。まるでテレフォニーサービスアプリケーションが現実の環境に配備されるように、任意のサーバ側ロジックが実行され得る。戻されたアプリケーション、例えば、ＣＣＸＭＬ及び／又はＶＸＭＬテキスト、がウェブブラウザ中に表示され得る。もし所望するなら、ＩＤＥはウェブサーバで動作中のアプリケーションをリモートでデバッグするために使用され得て、アプリケーションのスクリプト（例えば、 Java ソース）コンポーネントのソースレベル・デバッグを容易にする。メディアサーバ及びソフトフォンは、適切なダイアログＵＲＬを用いてメディアサーバを呼び出すことによって、ダイアログを直接的にテストするために使用され得る。これは、まるでアプリケーションサーバによってそうするように命令されたように、メディアサーバにダイアログアプリケーションを検索させる。同様に、呼制御アプリケーションのテストも容易にされ得る。呼制御インタープリタプロセスでオープンされたリモートデバッグ・セッション、例えば、サービスロジック実行エンジンは、アプリケーションサーバで命令された呼の実行を遮断し得る。もし更なる開発のために必要なら、編集された、又はデバッグされた設計ファイルは、配備のためのデータベース４２５及び／又はデータベース４１５に戻され得る。
【００３０】
ＳＣＥ１１１によって生成されたテレフォニーサービスアプリケーションは、例えば、ウェブサーバによってアクセス可能なウェブアプリケーションとして、データベースにユーザ４０１によって配備され得る（４４０）。テレフォニーサービスアプリケーションは、ＨＴＴＰクライアント（例えば、アプリケーションサーバ１１０及び／又はメディアサーバ１２０）から受信した要求によって駆動され得る。配備は、ウェブアプリケーション・アーカイブファイル (warfile) を目的のアプリケーションサーバ１１０にコピーすることを含み得て、アプリケーションを起動することを含み得る。アプリケーションが目的のアプリケーションサーバ１１０にコピーされ得る機構は、ＦＴＰ，ＳＦＴＰ，ＳＣＰ、及び／又は他の転送プロトコルを含み得る。アプリケーションは、データベース４２５から目的のアプリケーションサーバ１１０のアプリケーション・ルートディレクトリ、及び／又は他のデータベースにコピーされ得る。アプリケーションサーバ１１０の管理機構は、テレフォニーサービスアプリケーションをそのサーバにインストールして起動するために使用され得る。例えば、 Jakarta の Tomcat サーバは、アプリケーションが配備され、撤去され、開始され、停止等される管理アプリケーションを提供する。目的のアプリケーションサーバ１１０は、生成されたテレフォニーサービスアプリケーションのホストとして機能し得る。アプリケーションサーバ１１０は、 Java Servlet 仕様(2.3/2.4)に準拠し得る。定められた目的のアプリケーションサーバは、 JBoss 4.0.x/4.1であり得る。
【００３１】
また、アプリケーション・アセンブリプロセス（４２０）及び／又は配備プロセス（４４０）は、変換規則を使用して中間言語から１又は複数の目的言語に１又は複数の設計ファイルを変換するプロセスも含み得る。データベース４１５及び／又は４２５に記憶された中間設計ファイル中のＳＣＥ１１１によって取り込まれた情報は、中間言語とは異なる１又は複数の目的言語のテレフォニーサービスアプリケーションの呼制御エレメント、及びダイアログエレメントの全体のトポロジを定めるのに充分であり得る。中間言語は、例えば、特定の言語、及び／又は汎用言語であり得る。目的言語は、特定の言語である。特定の言語は、例えば、ＣＣＸＭＬ，ＣＰＬ，他の呼制御言語，ＶＸＭＬ，ＭＳＣＭＬ，ＭＳＭＬ，ＭＯＭＬ，ＳＡＬＴ，他のＩＶＲ言語、及び／又は他のダイアログ制御言語を含み得る。以下に記載するように、汎用言語は、ＵＭＬモデルの任意のクラスを表し得る。汎用言語は、例えば、ＧＳＣＭＬ、ＸＭＬ図に基づく言語、及び／又は他の技術にとらわれない言語を含み得る。中間設計ファイルは、例えば、拡張スタイルシート言語変換（ＸＳＬＴ）に基づき、変換規則を使用して目的設計ファイルに変換され得る。変換規則は、中間言語に基づく中間設計ファイルの少なくとも一部を目的言語に基づく目的設計ファイルに変換するための１又は複数の命令を指定し得る。変換規則は「テンプレート規則」に基づき得て、「テンプレート規則」は中間設計ファイル中の特定のノード、又はパターンと一致し、目的設計ファイルのための特定の出力を生成する。
【００３２】
本願明細書に添付の付録Ａには、汎用中間言語を使用して呈示される中間設計ファイルを示すＧＳＣＭＬのサンプル設計ファイルがリストアップされる。付録Ａにリストアップされた設計ファイルは、入呼に適用されるアプリケーションを示す。アプリケーションはオフ・プラットフォーム・ウェブリソースを呼び出して、何れの呼出し音が発呼者を表すかを決定する。データベース中の発呼者番号をルックアップすること、及び関連する呼出し音ファイル名を返すことによって、呼出し音が決定される。アプリケーションは、メディアサーバで実行されるＶＸＭＬダイアログを呼び出す。メディアサーバは、選択された呼出し音を鳴らす。被呼者が応答するとき、呼出し音は終了し（即ち、ダイアログが終了し）、発呼者と被呼者は通話で接続される。
【００３３】
付録Ａに示される中間設計ファイルは、ＸＳＬＴ 変換規則を使用してＣＣＸＭＬ目的言語に変換され得る。付録Ｂにリストアップされるのは、変換後に付録ＡにリストアップされるＧＳＣＭＬドキュメントに対応するＣＣＸＭＬに基づく目的設計ファイルである。
【００３４】
以下は、汎用中間言語を使用して表される中間設計ファイルを示すＧＳＣＭＬに基づく他のサンプル設計ファイルである。次の設計ファイルは、上記のＣＣＸＭＬアプリケーションに関連するダイアログアプリケーションを表す。
<?xml version="1.0" encoding="UTF-8" ?> 
<design xmlns="http://www.sonusnet.com/sce" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" id="playmusic" type="dialog" version="V01.01.00R005">
<prolog>
<decls/>
</prolog>
<components>
<comp xsi:type="Start" id="Start8">
<extension>
<graphic xsi:type="anyType" x="153" y="92"/>
</extension>
<outputs/>
<exits>
<exit name="next" target="music"/>
</exits>
</comp>
<comp xsi:type="Prompt" id="music">
<extension>
<graphic xsi:type="anyType" x="179" y="276"/>
</extension>
<outputs/>
<exits>
<exit name="next" target="End10"/>
</exits>
<prompts>
<audio src="prompt" file="static" scope="param">TTS prompt text</audio>
</prompts>
</comp>
<comp xsi:type="End" id="End10">
<extension>
<graphic xsi:type="anyType" x="177" y="413"/>
</extension>
<outputs/>
</comp>
</components>
<epilog/>
</design>
【００３５】
上記の中間設計ファイルは、ＸＳＬＴ変換規則を使用してＶＸＭＬ目的言語に変換され得る。付録Ｃにリストアップされたのは、ＶＸＭＬに基づき、変換後に上記のＧＳＣＭＬドキュメントに対応するＪＳＰページの内部で実施される目的設計ファイルである。
【００３６】
図４では、データベース４０５，４１５，４２５は互いに分離されるが、他の構成も使用され得る。例えば、データベース４０５，４１５，４２５の１又は複数が同じデータベースであり得る。
【００３７】
上記のように、中間設計ファイルを表すための汎用言語は、必要な呼制御の全て、及び１又は複数の特定の目的言語の生成を容易にするために必要なダイアログ情報を含むように設計され得る。図５Ａ及び図５Ｂは、汎用言語モデルの呼制御エレメント、及びダイアログエレメントを表す例示的な Universal Modeling Language （ＵＭＬ）を示すブロック図５００及びブロック図５５０である。ブロック図５００及びブロック図５５０で示されるクラスは、アプリケーションを構成する呼制御、及びダイアログ呼フローで使用される利用可能なエレメントに対する定義のソースとして使用し得る。このモデルは利用可能な設計コンポーネントを定め得るだけでなく、ＳＣＥ１１１によって生成された設計ファイルの構造も指定し得る。
【００３８】
ＵＭＬクラス図５００は、呼制御クラス及びダイアログクラスの例示的なベースコンポーネント構造の関連関係を示す。 Design クラス５０１は、設計ファイルに対する全体のコンテナである。 Design クラス５０１に関連するのは、 Prolog クラス５０２、１又は複数の Component クラス５０３、及び／又 Epilog クラス５０４であり得る。 Prolog クラス５０２は、例えば、アプリケーションによって使用される広域変数宣言のようなエレメントを含み得る。１又は複数の Component クラス５０３は、設計ファイルを構成するコンポーネントに対する全体のコンテナであり得る。各 Component クラス５０３は、 Inputs ５０５、Outputs ５０６ 及び Exits ５０７の空でない組の任意の収集を有する。 Inputs ５０５は、コンポーネントによって利用され得るデータを定め得る。 Outputs ５０６は、コンポーネントによって生成されたデータを定め得る。 Exits ５０７はコンポーネントの範囲外の変化を定め得て、実行中の変化に対する「次の」コンポーネントに関連付けられる。「End」クラス及び「Abort」クラスを除く各 Component クラス５０３は、少なくとも１つの出口を有するべきである。ＵＭＬクラス図５００は、汎用言語を表す利用可能な呼制御コンポーネント、及びダイアログ設計コンポーネントをカプセル化する高レベル構造である。
【００３９】
ＵＭＬクラス図５５０は、テレフォニーサービスアプリケーションの呼制御部分、及びダイアログ部分を表すために使用される Component クラス５０３の一般化された関係を示す。 Component クラス５０３は、呼制御クラス５１０、及びダイアログクラス５３０を含み得る一般化されたクラスである。呼制御クラス５１０は、次のクラス、 Start ５１１、 End ５１２、 Log ５１３、 Dialog ５１４、 CallAction ５１５及び／又は類似のクラスの１又は複数を含み得る一般化されたクラスである。 Start クラス５１１は、アプリケーションの起点を定め得る。 End クラス５１２は、アプリケーションの終点を定め得る。 Log クラス５１３は、プラットフォーム・ログ・メッセージを発し得る。 Dialog クラス５１４は、ユーザ対話ダイアログを呼び出し得る。 CallAction クラス５１５は、 Answer ５２１、Connect ５２２、Redirect ５２３、Remove ５２４、Disconnect ５２５、CreateCall ５２６、CreateConference ５２７、及び／又は類似の関数を含む、全ての呼に関連する管理関数に対するベースクラスである。 Answer クラス５２１は、入呼に応え得る。 Connect クラス５２２は、 call leg を他の call leg 又は conference に接続し得る。例えば、 Connect クラス５２２は、 <join> を定める。 Redirect クラス５２３は、入呼をリダイレクトし得る。 Remove クラス５２４は、他の call leg 又は conference から call leg を除去し得る。例えば、 Remove クラス５２４は、 <unjoin> を定め得る。 Disconnect クラス５２５は、 call leg 又は dialog を切断し得る。 CreateCall クラス５２６は、新しい call leg を創出し得る。 CreateConference クラス５２７は、新しい conference を創出し得る。また、 CallAction クラス５１５は、図示されない追加のクラスも含み得る。例えば、 Reject 及び／又は RemoveConference である。 Reject クラスは、入呼を拒否し得る。 RemoveConference クラスは、 conference を破棄し得る。
【００４０】
また、呼制御クラス５１０は、図示されない追加のクラスも含み得る。例えば、 Decision, Error, Event, Assignment, Script, Timer, 及び／又は Action である。その出力が関連する条件によって２以上の変化を起こすとき、 Decision クラスはコンポーネントの「ファンアウト」特定出力として使用され得る。 Error クラスは、広域エラーハンドラであり得る。 Event クラスは、統計カウンタをインクリメントするための機構であり得る。 Assignment クラスは、表現式を変数に割り当て得る。 Script クラスは、ＥＣＭＡスクリプト・プログラミングを容易にし得る。 Timer クラスはスタートタイマ、及びキャンセルタイマとして使用し得て、キャンセルされたタイマは経過した時間をキャンセルされる前に戻し得る。 Action クラスは、他のシステムと通信するために使用され得る。例えば、Action クラスは、 <send> を定める。 Dialog クラスは PlayPrompt クラスのためのベースクラスであり得て、 PlayPrompt クラスは予測される、又は可能なユーザ対話なしにオーディオ出力だけを再生し得る。
【００４１】
Dialog クラス５３０は、次のクラス Start ５３１, End ５３２, Log ５３３, Form ５３４, Menu ５３５, Play ５３６, 及び／又は類似のクラスの１又は複数を含み得る一般化されたクラスである。 Start クラス５３１は、アプリケーションの起点を定め得る。 End クラス５３２は、アプリケーションの終点を定め得る。 Log クラス５３３は、プラットフォーム・ログ・メッセージを発し得る。 Form クラス５３４は、複数の PromptCollect/PlayPrompt コンポーネントを管理するためのコンテナであり得る。 Menu クラス５３５は、入力に依存する多くのデスティネーションの１つに対して変化し得る単一の（複数選択の）入力を有する Form クラスであり得る。例えば、ユーザ対話が予測されない、又は可能でないとき、 Play クラス５３５はオーディオ出力を再生する。 Play クラス５３５は PromptCollect クラス５４０に対するベースクラスであり、 PromptCollect クラス５４０は、ユーザ入力を可能にすることによって「Play」を拡張し得る。 PromptCollect クラス５４０は Record クラス５４１に対するベースクラスであり得て、後の再生、又はサーバ側処理のための口述入力を録音することによって、 Record クラス５４１は PromptCollect クラス５４０を拡張し得る。
【００４２】
また、 Dialog クラス５３０は、図示されない追加のクラスも含み得る。例えば、 Abort, Decision, Error, Event, Assignment, Script, External, Timer, Action, PromptCollect, 及び／又は CallAction である。 Abort クラスは、アプリケーションのエラー状態終点を定め得る。その出力が 関連する条件によって２以上の変化を起こすとき、 Decision クラスはコンポーネントの「ファンアウト」特定出力に対して使用し得る。 Error クラスは、広域エラーハンドラであり得る。 Event クラスは、統計カウンタをインクリメントするための機構であり得る。 Assignment クラスは、表現式を変数に割り当て得る。 Script クラスは、ＥＣＭＡスクリプト・プログラミングを容易にし得る。 External クラスは、ダイアログコンポーネントの外部実施であり得る。例えば、 External クラスは、 <subdialog> 呼を定め得る。 Timer クラスはスタートタイマ、及びキャンセルタイマに対して使用い得て、キャンセルされたタイマは経過した時間をキャンセルされる前に戻し得る。 Action クラスは、他のシステムと通信するために使用され得る。例えば、 Action クラスは <subdialog>, <submit>, 及び／又は <goto> を定め得る。 PromptCollect クラスは、ユーザ入力を促して集めるユーザ対話を定め得る。 CallAction クラスは Transfer クラスを含む全ての呼に関連する管理関数に対するベースクラスであり得て、 Transfer クラスは呼を転送し得る。
【００４３】
図６Ａは、ＳＣＥ１１１によってテレフォニーサービスを生成することに関連する例示的なグラフィカルユーザーインターフェース６００を示すブロック図である。ＳＣＥ１１１は、呼制御アプリケーション、及び関連するダイアログ制御アプリケーションをグラフィカルに開発するためのツールのパレットを提供し得る。グラフィカルユーザーインターフェース６００は、メインウィンドウ６０１、ナビゲータウィンドウ６０２、ダイアログエレメントウィンドウ６０３、呼制御エレメントウィンドウ６０４、及びアウトラインウィンドウ６０５を含む。ナビゲータウィンドウ６０２は、開発中の、及び／又は他のアプリケーションディレクトリへのアクセスを提供するアプリケーションのワーキングディレクトリをリストアップし得る。図６Ｂに示されるダイアログエレメントウィンドウ６０３は、テレフォニーサービスアプリケーションの開発のための基本的なダイアログエレメントのパレットを提供し得る。基本的なダイアログエレメントは、 Abort 関数、 Assign 関数、 Counter 関数、 Decision 関数、１又は複数の Dialog Action 関数、 Dispatch Action 関数、１又は複数の Dispatch Target 関数、 End 関数、 Error Return 関数、 External Action 関数、１又は複数の Prompt 関数、 Return 関数、 Start 関数、及び／又は他のダイアログ関連関数を含み得る。ウィンドウ６０３に示される基本的なダイアログエレメントの各々は、ブロック図５５０に示されるような各ＵＭＬダイアログコンポーネントによって呈示され得る。図６Ｃに示される呼制御エレメントウィンドウ６０４は、テレフォニーサービスアプリケーションの開発のための基本的な呼制御エレメントのパレットを提供し得る。基本的な呼制御エレメントは、 Abort 関数、 Assign 関数、 Call Action 関数、 Counter 関数、 Decision 関数、１又は複数の Dialog Action 関数、 Dispatch Action 関数、１又は複数の Dispatch Target 関数、 End 関数、 External Action 関数、 Start 関数、及び／又は他の呼制御関連関数を含み得る。ウィンドウ６０４の各々に示される基本的な呼制御エレメントは、ブロック図５５０に示されるような各ＵＭＬ呼制御コンポーネントによって呈示され得る。
【００４４】
図６Ｄに示されるメインウィンドウ６０１は、発呼者に暗証番号の入力を促す例示のテレフォニーサービスアプリケーションの開発をグラフィカルに示す。呼フローは Start エレメント６１０から始まり、 Start エレメント６１０は呼セッションを開始する呼制御エレメントであり得る。呼フローは Main Menu エレメント６２０に進み、 Main Menu エレメント６２０は、例えば、ユーザにオプションのリストを表示し得る。ユーザ入力に応答して、例えば、呼フローは Get Number エレメント６３０に進む。もし Get Number エレメント６３０がエラーに遭遇したら、呼フローは Exit エレメント６９０に進む。もし Get Number エレメント６３０が正常に実行されたら、呼フローは Register Number Action dialog エレメント６４０に進み、 Register Number Action dialog エレメント６４０は収集された番号をデータベースに登録する。もし Register Number Action dialog エレメント６４０がユーザの暗証番号を正常に登録したら、呼フローは Main Menu エレメント６２０に戻る。もし Register Number Action dialog エレメント６４０が障害に遭遇したら、 Retry Decision エレメント６６０に進む前に、呼フローは Counter エレメント６５０に進む。もし Retry Decision 関数６６０が真を返したら、呼フローは proceeds to a Wrong Number Prompt エレメント６７０に進み、 Wrong Number Prompt エレメント６７０はユーザに番号を再入力する必要があることを知らせ、 Get Number エレメント６３０に戻る。もし Retry Decision エレメント６７０が偽を返したら（例えば、カウンタの値が予め定められた値を超えたとき）、 Exit エレメント６９０に進む前に、呼フローは Hang-up Prompt エレメント６８０に進む。
【００４５】
アプリケーションサーバ（実行時間の側面）
図７は、図１の例示的なネットワーク１００で示されるアプリケーションサーバ１１０のコンポーネントを示すブロック図７００である。アプリケーションサーバ１１０は、サービスロジック実行エンジン（ＳＬＥＥ）７１０、呼セッションマネージャ（ＣＳＭ）７２０、ダイアログマネージャ（ＤＭ）７３０、ＳＩＰアダプタ７４０、及びＳＩＰアクセス層７５０を含む。ＳＬＥＥ７１０は呼のセッションコントローラであり、テレフォニーサービスアプリケーションの呼フローを制御するためのスクリプト可能な環境（例えば、ＣＣＸＭＬ）を提供するように適合される。ＣＳＭ７２０は、呼状態情報を維持することによってテレフォニーサービスに参加している個別の呼セッションを管理する。テレフォニーサービスは、任意の時点の呼に参加している１又は複数のセッションを有し得る。ＣＳＭ７２０は、各セッションに対する状態変化に従事している有限状態機械を有し得る。また、ＣＳＭ７２０は、 call leg を結合し、呼を切断し、呼をキャンセルするためのサポート、及び／又は他の呼セッション関数も提供し得る。ＣＳＭ７２０は、ＳＬＥＥ７１０とＳＬＥＥアプリケーションプログラムインターフェース（ＳＡＰＩ）７１２を介してインターフェースする。ＤＭ７３０は、ＳＬＥＥ７１０によって実行されるテレフォニーサービスアプリケーションに含まれ得るダイアログ要求を処理する。ＤＭ７３０は、適用可能なダイアログアプリケーションがロケート、及び／又は実行され得るメディアサーバ１２０を決定し得る。また、ＤＭ７３０は、フローの処理のためのサポートに関連するダイアログを提供することを担い得る。ＤＭ７３０は、ＳＬＥＥ７１０とＳＡＰＩ７１１を介してインターフェースする。ＳＡＰＩ７１１，７１２は、ＳＬＥＥ７１０が呼フロー、及びダイアログを容易にすることを要求する１組のプリミティブを提供し得る。ダイアログを開始するためのメディアサーバ１２０を用いてセッションを設定するために、ＤＭ７３０はＣＳＭ７２０とアプリケーションプログラムインターフェース（ＡＰＩ）７１３を介してインターフェースする。
【００４６】
ＳＩＰアダプタ７４０は、ネットワーク１０１を通してアプリケーションサーバ１１０に送信されたＳＩＰメッセージを逐次解釈し、信号メッセージをＣＳＭ７２０に呈示する。また、ＳＩＰアダプタ７４０は、ネットワーク１０１を通して送信されるＣＳＭ７２０から受信するＳＩＰメッセージも構成し得る。ＳＩＰアダプタ７４０は、ＣＳＭ７２０にインターフェース７１４を介して結合される。ＳＩＰアクセス層７５０は、例えば、 User Datagram Protocol (ＵＤＰ)、 Transmission Control Protocol (ＴＣＰ)、 Stream Control Transmission Protocol （ＳＣＴＰ）、及び／又は他の転送プロトコルに準拠するパケットからの、ネットワーク１０１から入ってくるＳＩＰメッセージを構文解析する。また、ＳＩＰアクセス層７５０は、例えば、ＵＤＰ、ＴＣＰ、ＳＣＴＰ、及び／又は他の転送プロトコルに準拠するパケット中の送出ＳＩＰメッセージのカプセル化も提供し得る。また、ＳＩＰアクセス層７５０は、着信、及び／又は送出ＳＩＰメッセージのフォーマットをカスタマイズ、及び／又は操作し得る。カスタマイズ、及び／又は操作は、異なるＳＩＰエージェントが異なるＳＩＰフォーマットを使用する相互作用シナリオにおいて有用であり得る。ＳＩＰアダプタ７４０、及びＳＩＰアクセス層７５０は、ＳＩＰのプロトコルレベルの詳細からＣＳＭ７２０をシールドする。また、ＳＩＰアダプタ７４０、及びＳＩＰアクセス層７５０は、ＳＩＰメッセージに対する転送、及び受信エンジンも形成する。
【００４７】
図８は、例えば、ユーザ１６５とメディアサーバ１２０の間の呼を設定するためのテレフォニーサービスアプリケーションの実行を表す呼フロー８００を示す。呼は、例えば、データベース中のユーザがアクセスを所望する情報であり得る。呼フロー８００のエレメントは、ＳＩＰ、図７のアプリケーションサーバ１１０のコンポーネント、及び図１の例示的なネットワーク１００に基づく信号メッセージを使用して記述される。しかし、他の信号プロトコルも使用され得る。ユーザが INVITE メッセージをアプリケーションサーバ１１０に送信するとき、ラダー図が始まる。 INVITE メッセージは、ＳＩＰアダプタ７４０によって受信される。ＳＩＰアダプタ７４０は、 INVITE メッセージを逐次解釈し、 INVITE メッセージから得られた関連情報を保持するＣＳＭ７２０にセッション設定指示メッセージを送信する。ＳＩＰアダプタ７４０は、 100 TRYING メッセージをユーザに送信する。ＣＳＭ７２０は、接続設定通メッセージをＳＬＥＥ７１０に送信する。ＳＬＥＥ７１０は、接続設定通メッセージから、どのアプリケーション（例えば、特定のＣＣＸＭＬキュメント）が要求されているかを決定し、関連したアプリケーションを適切なデータベース（図示されない）、例えば、ウェブサーバからＨＴＴＰを使用して検索する。ＳＬＥＥ７１０は、接続回答命令メッセージをＣＳＭ７２０に送信する。ＣＳＭ７２０は、セッション設定応答メッセージをＳＩＰアダプタ７４０に送信する。ＳＩＰアダプタ７４０は 200 OK メッセージをユーザに送信し、ユーザにアプリケーションサーバ１１０が関連したテレフォニーサービスアプリケーションを正常に検索したことを知らせる。ユーザは、 ACK メッセージをＳＩＰアダプタ７４０に送信する。ＳＩＰアダプタ７４０は、セッション設定確認メッセージをＣＳＭ７４０に送信する。ＣＳＭ７４０は、接続回答返信メッセージをＳＬＥＥ７１０に送信する。ＳＬＥＥ７１０によって実行中のテレフォニーサービスアプリケーションによって定められ制御される呼フローは、ダイアログアプリケーションが要求され、ダイアログ開始命令メッセージをＤＭ７３０に送信することを決定する。ＤＭ７３０は、ダイアログアプリケーション（例えば、ＶＸＭＬドキュメント）がメディアサーバ１２０において利用可能であることを決定する。ＤＭ７３０は接続設定命令メッセージをＣＳＭ７２０に送信し、メディアサーバ１２０と接続することを要求する。ＣＳＭ７２０はセッション設定要求メッセージをＳＩＰアダプタ７４０に送信する。ＳＩＰアダプタ７４０は、 INVITE メッセージをメディアサーバ１２０に送信する。メディアサーバ１２０は、 200 OK メッセージをＳＩＰアダプタ７４０に送信して、アプリケーションサーバ１１０に関連したテレフォニーサービスアプリケーションが正常に検索されたことを知らせる。ＳＩＰアダプタ７４０は、 ACK メッセージをメディアサーバ１２０に送信する。ＳＩＰアダプタ７４０は、セッション設定確認メッセージをＣＳＭ７２０に送信する。ＣＳＭ７２０は、接続設定返信メッセージをＤＭ７３０に送信する。ＤＭ７３０は、ユーザとメディアサーバ１２０の間の接続が確立されるべきであることを決定する。ＤＭ７３０は、接続結合命令メッセージをＣＳＭ７２０に送信する。ＣＳＭ７２０は、セッション変更要求メッセージをＳＩＰアダプタ７４０に送信して、ユーザとの結合を要求する。ＳＩＰアダプタ７４０は、メディアサーバ１２０を指示するセッション記述プロトコル（ＳＤＰ）を用いて、 INVITE メッセージをユーザに送信する。ユーザは、 200 OK メッセージをＳＩＰアダプタ７４０に送信する。ＳＩＰアダプタ７４０は、 ACK メッセージをユーザに送信する。ＳＩＰアダプタ７４０は、セッション変更応答メッセージをＣＳＭ７２０に送信する。ＣＳＭ７２０は、セッション変更要求メッセージをＳＩＰアダプタ７４０に送信し、メディアサーバ１２０に結合することを要求する。ＳＩＰアダプタ７４０は、ユーザを指示するセッション記述プロトコル（ＳＤＰ）を用いて、 INVITE メッセージをメディアサーバ１２０に送信する。メディアサーバ１２０は、 200 OK メッセージをＳＩＰアダプタ７４０に送信する。ＳＩＰアダプタ７４０は、 ACK メッセージをメディアサーバ１２０に送信する。ＳＩＰアダプタ７４０は、セッション変更応答メッセージをＣＳＭ７２０に送信する。ＣＳＭ７２０は、接続結合返信メッセージをＤＭ７３０に送信する。ＤＭ７３０はダイアログ開始返信をＳＬＥＥ７１０に送信し、ユーザとメディアサーバ１２０の間のダイアログ対話が開始されたことを示す。ユーザは、例えば、リアルタイム転送プロトコル（ＲＴＰ）を使用して、情報をメディアサーバ１２０と交換する。
【００４８】
図９は、図７のＳＩＰアクセス層７５０のコンポーネントを示すブロック図である。ＳＩＰアクセス層７５０は、ＳＩＰカスタマイザ９１０、トランスポート層９２０、及びソケットインターフェース９３０を含む。ソケットインターフェース９３０は、パケット中でカプセル化されたＳＩＰメッセージをパケットネットワーク１０１と送受信するためのソケット層機能を提供し得る。ソケットインターフェース９３０は、ＵＤＰ、ＴＣＰ、ＳＣＴＰ、及び／又は他の転送プロトコルに対する物理層サービスを提供し得る。１つのＳＩＰメッセージは、ＵＤＰパケット、又は１若しくは複数のＴＣＰパケットとして送信、又は受信され得る。何故ならば、ＴＣＰは転送プロトコルに基づくストリームだからである。トランスポート層９２０は、ＳＩＰカスタマイザ９１０から受信される送出ＳＩＰメッセージからパケットを形成し得て、パケットネットワーク１０１を通した伝送のためのソケットインターフェース９３０まで通過させる。また、トランスポート層９２０は、１又は複数のパケットでカプセル化されたソケットインターフェース９３０から受信された着信ＳＩＰメッセージからメッセージ境界も識別できる。着信ＳＩＰメッセージはバッファ中に収集され得て、バッファはＳＩＰカスタマイザ９１０まで通過させられて受信される。着信ＳＩＰメッセージに加えて、トランスポート層９２０は、ＳＩＰメッセージに関連する追加のパラメータをＳＩＰカスタマイザ９１０まで通過させ得る。また、ＳＩＰカスタマイザ９１０は、パケットネットワーク１０１に送信されるＳＩＰアダプタ７４０から送出ＳＩＰメッセージも受信し得る。ＳＩＰメッセージに関連するパラメータは、（ソース、及び／又はデスティネーション）ＩＰアドレス、ＩＰポート番号、接続ＩＤ（ＴＣＰのみ）、ＳＩＰメソッド、及び／又は他のＳＩＰパラメータを含み得る。ＳＩＰメソッドは、 INVITE, RE-INVITE, REGISTER, ACK, CANCEL, BYE, OPTIONS, INFO, NOTIFY, SUBSCRIBE, UNSUBSCRIBE, UPDATE, MESSAGE, REFER, PRACK, PUBLISH, 他のＳＩＰメッセージ型、又はそれらの組み合わせを含み得る。
【００４９】
ＳＩＰカスタマイザ９１０は、着信、及び／又は送出ＳＩＰメッセージを、１つのフォーマットから他のフォーマットへ、例えば、１又は複数の命令を含むスクリプトを使用して変換し得る。着信ＳＩＰメッセージは、ＳＩＰカスタマイザ９１０によってトランスポート層９２０から受信され、送出ＳＩＰメッセージは、ＳＩＰカスタマイザ９１０によってＳＩＰアダプタ７４０から受信される。ＳＩＰメッセージのエレメントは、第１のライン、１又は複数のヘッダ、及び本体部分を含み得る。相互作用シナリオでは、エンドエージェント、及び／又はベンダの中には、ＳＩＰメッセージの任意のエレメントに対して異なるフォーマットを実施するものもある。認識されないフォーマットでＳＩＰメッセージを受信するエンドエージェントは、信号メッセージの処理中にエラーをもたらし得る。ＳＩＰメッセージに対してどのフォーマットを使用するかにかかわらず、相互作用シナリオのメッセージ・カスタマイズは、エンドエージェントが互いの相互運用を容易にすることを可能にする。メッセージ・カスタマイズ・スクリプトを使用することは利点である。何故ならば、ＳＩＰプロトコルレベル自体においてコードを変更することと比較して、システム設計が大幅に単純化されるからである。また、スクリプトを使用することの単純さも、ＳＩＰ処理システムの更に迅速な開発、テスト、及び／又は市場流通を可能にする。例えば、スクリプトは Practical Extraction and Report 言語（ＰＥＲＬ）、 Tool Command 言語（ＴＣＬ）、Ｃ言語、Ｃ＋＋言語、及び／又は他のプログラミング言語を含み得る。また、ＳＩＰカスタマイズ スクリプトを使用することは、早い開発も可能にする。何故ならば、スクリプトは容易に創出し得るからである。文字列操作に適合したスクリプト（例えば、ＰＥＲＬ）は、ＳＩＰカスタマイズに特に適合する。何故ならば、ＳＩＰはテキストベースのプロトコルだからである。加えて、スクリプトは、更に大きな柔軟性をユーザ（例えば、サービスプロバイダ）に提供する。何故ならば、ユーザは、パッチのリリースを待つ代わりに、相互作用シナリオ中のＳＩＰカスタマイズに対するスクリプトを変更、及び／又は追加できるからである。また、ＳＩＰカスタマイズは、ＳＩＰパラメータ、及びメッセージ本体が、ＳＩＰメッセージに挿入、またはＳＩＰメッセージから抽出される特化したアプリケーションの配信に対して有用であることを可能にし得る。
【００５０】
ＳＩＰカスタマイザ９１０は、受信したＳＩＰメッセージを変換するためにどのスクリプトを使用するか決定するための１又は複数の規則、及び／又は基準の組を使用し得る。規則、及び／又は基準は、データベースに記憶され得る。規則は、ＳＩＰメッセージの１又は複数のパラメータ、及び／又はＳＩＰメッセージが着信、又は送出であるか否かに基づき得る。規則、及びスクリプトの例示の関連は、次の表に示される。
着信                                    送出
規則        基準           スクリプト         基準            スクリプト
10.1.1.1    InCr_IP1.pl    InSc_IP1.pl        OutCr_IP1.pl    OutSc_IP1.pl
10.1.1.2    InCr_IP2.pl    InSc_IP2.pl        OutCr_IP2.pl    OutSc_IP2.pl
10.1.1.3    INVITE         InSc_IP3.pl        INVITE          OutSc_IP3.pl
この実施例では、予め構成された規則、及びスクリプトは、 10.1.1.1, 10.1.1.2, 及び 10.1.1.3 のＩＰアドレスを有するエンドエージェントとの相互運用を容易にするように創出されてきた。例えば、サービスプロバイダは、これらのエージェントが、それらのＳＩＰメッセージに対して異なるフォーマットを実施するＳＩＰベンダを使用することを認識する。規則は、ＳＩＰメッセージに関連する着信、及び／又は送出ＩＰアドレスに基づいて定められる。例えば、ＳＩＰメッセージがＩＰアドレス 10.1.1.1 を有するエンドエージェントから着信するとき、ＳＩＰカスタマイザ９１０は、着信基準ファイル InCr_IP1.pl を用いてＳＩＰメッセージを処理する。基準ファイルは、例えば、ＳＩＰメソッドのような他の規則であり得るか、又はＰＥＲＬに基づくスクリプトでもあり得る。着信基準ファイルは、ＳＩＰメッセージに関連する他のパラメータに基づいて、どのスクリプトがメッセージ・カスタマイズに対して適用可能であるかを決定し得る。この実施例では、着信スクリプトファイル InSc_IP1.pl が検索され、このファイルを使用してＳＩＰメッセージがカスタマイズされる。ＳＩＰアダプタ７４０によって認識可能なフォーマットにＳＩＰメッセージが変換された後、着信ＳＩＰメッセージはＳＩＰアダプタ７４０まで通過する。同様に、 10.1.1.1 に向けられる送出ＳＩＰメッセージは、 10.1.1.1 におけるＳＩＰエージェントによって使用されるフォーマットにＳＩＰカスタマイザ９１０によって変換され得て、トランスポート層９２０まで通過し得る。
【００５１】
上記の情報を使用する規則、及びスクリプトの他の例示の関連は、次の表に示される。
欄                定義                                              
名前              メッセージ・カスタマイズ・オブジェクトに対する名前
記述              オブジェクトを記述するテキスト欄
ＩＰアドレス      着信、又は送出メッセージに対するソース、
又はデスティネーションＩＰアドレス／ネットマスクを定める。
ポート番号        着信、又は送出メッセージに対するソース、
又はデスティネーション・ポートを定める。
ポート番号を０と指定することによって、
ポートとの整合が開始され得る。
ＳＩＰメソッド    このメッセージ・カスタマイズが適用される
ＳＩＰメソッドを選択する。
可能な選択は、次のようである。
INVITE    SIP/2.0
INFO    CANCEL
OPTIONS    BYE
ACK    SUBSCRIBE
NOTIFY    REFER
SIP ALL
メッセージ方向    これが着信、又は送出メッセージ・カスタマイズの
何れであるかを定める。
スクリプト名      メッセージ・カスタマイズ・スクリプトの名前
この実施例では、カスタマイズ・オブジェクトが定められ、名前欄、オプション記述欄、１又は複数の規則（例えば、ＩＰアドレス）、及びＳＩＰメッセージをカスタマイズするための対応スクリプトの名前を含む。
【００５２】
下記は、第１フォーマットに準拠するサンプルＳＩＰメッセージである。ＳＩＰメッセージは 受信したＳＩＰ INVITE メッセージに対応し、ＳＩＰメッセージが、２つの発呼者の間の音声経路が非活動状態であると誤って示す。
INVITE sip:9788461032@208.45.178.195:5060 SIP/2.0
Via: SIP/2.0/UDP 208.45.178.155:5060;branch=z9hG4bK008f42648f4cc33f
From: <sip:imx@208.45.178.155:5060>;tag=gK0000324b
To: "SipClient" <sip:9788461032@208.45.178.195:5060>;tag=gK0a8038c7
Call-ID: b855bb74-ffff-ffff-8000-000e0c9f6001_136880601@208.45.178.155
CSeq: 1441885107 INVITE
Max-Forwards: 70
Allow: INVITE,ACK,CANCEL,BYE,INFO
Accept: multipart/mixed, application/sdp, application/isup, application/dtmf, application/dtmf-relay
Contact: <sip:imx@208.45.178.155:5060>
Content-Length:  183
Content-Disposition: session; handling=optional
Content-Type: application/sdp
v=0
o=Sonus_UAC 25893 19024 IN IP4 208.45.178.195
s=SIP Media Capabilities
c=IN IP4 208.45.178.163
t=0 0
m=audio 5430 RTP/AVP 0
a=rtpmap:0 PCMU/8000
a=inactive
a=maxptime:20
【００５３】
下記の第２フォーマットに準拠する目的ＳＩＰメッセージを生成するために、上記のＳＩＰメッセージはカスタマイズされ得る。この場合、カスタマイズ・スクリプトは音声経路の誤った非活動状態を認識し得て、経路を再イネーブルし得る。
INVITE sip:9788461032@208.45.178.195:5060 SIP/2.0
Via: SIP/2.0/UDP 208.45.178.155:5060;branch=z9hG4bK008f42648f4cc33f
From: <sip:imx@208.45.178.155:5060>;tag=gK0000324b
To: "SipClient" <sip:9788461032@208.45.178.195:5060>;tag=gK0a8038c7
Call-ID: b855bb74-ffff-ffff-8000-000e0c9f6001_136880601@208.45.178.155
CSeq: 1441885107 INVITE
Max-Forwards: 70
Allow: INVITE,ACK,CANCEL,BYE,INFO
Accept: multipart/mixed, application/sdp, application/isup, application/dtmf, application/dtmf-relay
Contact: <sip:imx@208.45.178.155:5060>
Content-Length:  183
Content-Disposition: session; handling=optional
Content-Type: application/sdp
v=0
o=Sonus_UAC 25893 19024 IN IP4 208.45.178.195
s=SIP Media Capabilities
c=IN IP4 208.45.178.163
t=0 0
m=audio 5430 RTP/AVP 0
a=rtpmap:0 PCMU/8000
a=sendrecv
a=maxptime:20
【００５４】
下記のように、上記で使用されるカスタマイズ・スクリプトは、ＰＥＲＬスクリプトであり得る。
#!/usr/bin/perl
# this simple example changes the string "inactive" to the string "sendrecv"
# when the input line is of the form 'string1=inactive'
sub Embed::Persistent::manipBuffer  {
my $outbuf="";
my @lines = split( '＼n', $_[0] );
foreach ( @lines ) {
if ( $_ =~ /(＼w+)(=)(.*)(inactive)(.*)/ ) {
$outbuf = $outbuf. "$1$2$3sendrecv$5＼n";
} else {
$outbuf = $outbuf."$_＼n";
}
}
return $outbuf;
}
【００５５】
上記の技術は、ディジタル電子回路で、又はコンピュータ・ハードウェア、ファームウェア、ソフトウェア、若しくはそれらの組み合わせで実施され得る。実施は、コンピュータプログラムプロダクト、即ち、データ処理装置、例えば、プログラム可能なプロセッサ、１又は複数のコンピュータの動作によって実行するための（又は、データ処理装置、例えば、プログラム可能なプロセッサ、１又は複数のコンピュータの動作の動作を制御するための）情報担体、例えば、機会読み取り可能な記憶装置、又は伝搬信号で実体的に実施されるコンピュータプログラムであり得る。コンピュータプログラムはコンパイル、又は逐次解釈された言語を含む任意の形態のプログラミング言語で書き得て、コンピュータプログラムは、スタンドアロン・プログラム、又はサブルーチン、エレメント、若しくはコンピュータ環境での仕様に適する他のユニットを含む任意の形態で配備され得る。コンピュータプログラムは、１つのサイトにおいて１又は複数のコンピュータで実行されるように配備され得る。
【００５６】
方法ステップは、入力データで動作すること、及び出力を生成することによって本発明の機能を実行するためのコンピュータプログラムを実行する１又は複数のプログラム可能なプロセッサによって実行され得る。また、方法ステップ、及び装置は、特定目的の論理回路、例えば、ＦＰＧＡ(field programmable gate array)又はＡＳＩＣ(application-specific integrated circuit)として実施され得る。サブルーチンは、コンピュータプログラム、及び／又はその機能を実施するプロセッサ／特別回路の一部を呼び得る。
【００５７】
コンピュータプログラムの実行に適するプロセッサは、一例として、一般用途、及び特定用途のマイクロプロセッサの両方、並びに任意の種類のディジタルコンピュータの１又は複数のプロセッサを含む。一般に、プロセッサは、命令、及びデータを読み出し専用メモリ、ランダムアクセスメモリ、又は両方から受信する。コンピュータの基本要素は、命令を実行するためのプロセッサ、並びに命令、及びデータを記憶するための１又は複数のメモリ装置である。一般に、コンピュータは、データを記憶するための１又は複数の大容量記憶装置、例えば、磁気ディスク、光磁気ディスク、若しくは光ディスクも含むか、又はデータを送信、受信、若しくは両方のために動作可能なように結合される。また、データ伝送、及び命令は、通信ネットワークを通して起こり得る。コンピュータプログラム命令、及びデータを実施するのに適した情報担体は、全ての形態の不揮発性メモリ、一例として、半導体メモリ装置（例えば、 EPROM, EEPROM, 及びフラッシュメモリ装置）、磁気ディスク（例えば、内蔵ハードディスク、又はリムーバブル・ディスク）、光磁気ディスク、ＣＤ−ＲＯＭディスク、及びＤＶＤ−ＲＯＭディスクを含む。プロセッサ、及びメモリは、特定目的の論理回路によって追加されるか、又は特定目的の論理回路に内蔵される。
【００５８】
対話をユーザに提供するために、情報をユーザに表示するためのディスプレイ装置、例えば、ＣＲＴ(cathode ray tube)又はＬＣＤ(liquid crystal display)モニタ、キーボード、及びユーザが入力をコンピュータに提供し得る（例えば、ユーザ・インターフェース・エレメントと相互作用する）ポインティング装置、例えば、マウス、又はトラックボールを有するコンピュータ上で上記の技術は実施し得る。同様に、他の種類の装置も、対話をユーザに提供するために使用され得る。例えば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック、例えば、視覚フィードバック、聴覚フィードバック、又は触覚フィードバックであり得てユーザからの入力は、聴覚、口述、又は触覚入力を含む任意の形態で受信され得る。
【００５９】
上記の技術は、例えば、データサーバとしてバックエンド・コンポーネント、及び／又はミドルウェア・コンポーネントとして、例えば、アプリケーションサーバ、及び／又はフロントエンド・コンポーネントとして、例えば、グラフィカルユーザーインターフェース、及び／又はユーザが実施例と相互作用するウェブブラウザを有するクライアント・コンピュータ、又はバックエンド・コンポーネント、ミドルウェア・コンポーネント、又はフロントエンド・コンポーネントの任意の組み合わせを含む分布コンピュータシステムで実施され得る。システムのコンポーネントは、ディジタルデータ通信の任意の形態、又は媒体、例えば、通信ネットワークによって相互接続され得る。通信ネットワークの実施例は、ローカルエリアネットワーク（「ＬＡＮ」）、及びワイドエリアネットワーク（「ＷＡＮ」）、例えば、インターネットを含み、有線ネットワーク、及び無線ネットワークの両方を含む。
【００６０】
コンピュータシステムは、クライアント、及びサーバを含み得る。クライアント、及びサーバは一般に互いに離れており、典型的には通信ネットワークを通して相互作用する。クライアントとサーバの関係は、各コンピュータで動作し、クライアント−サーバ関係を互いに有するコンピュータプログラムによって生じる。
【００６１】
以上、本発明の好ましい実施例について図示し記載したが、特許請求の範囲によって定められる本発明の範囲から逸脱することなしに種々の変形および変更がなし得ることは、当業者には明らかであろう。
【００６２】
付録Ａ
<?xml version="1.0" encoding="UTF-8" ?> 
<design xmlns="http://www.sonusnet.com/sce" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" id="ringback" type="callcontrol" version="V01.01.00R006">
<prolog>
<decls>
<decl expr="'http://10.6.35.63:8080'" id="webServerUrl"/>
<decl expr="'/ringback'" id="appName"/>
<decl expr="'ringback'" id="logLabel"/>
</decls>
</prolog>
<components>
<comp xsi:type="Start" id="start">
<extension>
<graphic xsi:type="anyType" x="17" y="10"/>
</extension>
<outputs/>
<exits>
<exit name="ringing" target="fetchPromptId"/>
</exits>
</comp>
<comp xsi:type="Action" id="fetchPromptId">
<extension>
<graphic xsi:type="anyType" x="230" y="25"/>
</extension>
<outputs>
<output expr="session.connections[evt.connectionid].remote" id="incallingnum"/>
<output expr="evt.connectionid" id="ingressid"/>
<output expr="session.connections[evt.connectionid].local" id="incallednum"/>
</outputs>
<exits>
<exit name="response" target="fetchmusic"/>
</exits>
<logbefore category="logLabel" msg="'Calling web server to get prompt id...'"/>
<invocation>
<uri targetexpr="webServerUrl+appName+'/dynapromptid.jsp'"/>
<parameters>
<param expr="incallednum" name="callednumber"/>
<param expr="incallingnum" name="callingnumber"/>
</parameters>
</invocation>
</comp>
<comp xsi:type="DialogFetch" id="fetchmusic" fetchid="ringbackdialogid">
<extension>
<graphic xsi:type="anyType" x="273" y="114"/>
</extension>
<outputs>
<output expr="evt.prompt" id="prompt"/>
<output expr="evt.url" id="callednum"/>
</outputs>
<exits>
<exit name="failure" target="fetchFailed"/>
<exit name="success" target="sendsig"/>
</exits>
<logbefore category="logLabel" msg="'Fetching prompt...'"/>
<connectionref ref="ingressid"/>
<invocation>
<uri targetexpr="webServerUrl+appName+'/playPrompt.do'"/>
<parameters>
<param expr="evt.prompt" name="prompt"/>
</parameters>
</invocation>
</comp>
<comp xsi:type="Log" id="fetchFailed" category="logLabel" msg="'Dialog fetch failed'">
<extension>
<graphic xsi:type="anyType" x="596" y="228"/>
</extension>
<outputs/>
<exits>
<exit name="next" target="endFetchFailed"/>
</exits>
</comp>
<comp xsi:type="Abort" id="endFetchFailed">
<extension>
<graphic xsi:type="anyType" x="577" y="349"/>
</extension>
<outputs/>
</comp>
<comp xsi:type="Signal" id="sendsig" hints="mediaid=ringbackdialogid" signal="progress">
<extension>
<graphic xsi:type="anyType" x="253" y="222"/>
</extension>
<outputs/>
<exits>
<exit name="next" target="playmusic"/>
</exits>
<connectionref ref="ingressid"/>
</comp>
<comp xsi:type="Dialog" id="playmusic" fetchid="ringbackdialogid">
<extension>
<graphic xsi:type="anyType" x="183" y="318"/>
</extension>
<outputs/>
<exits>
<exit name="started" target="egresscall"/>
</exits>
<logbefore category="logLabel" msg="'Playing prompt...'"/>
<connectionref ref="ingressid"/>
</comp>
<comp xsi:type="CreateCall" id="egresscall" dest="callednum">
<extension>
<graphic xsi:type="anyType" x="33" y="413"/>
</extension>
<outputs>
<output expr="evt.connectionid" id="failedid"/>
</outputs>
<exits>
<exit name="success" target="endmusic"/>
<exit name="failure" target="stopms"/>
</exits>
<logbefore category="logLabel" msg="'Creating call...'"/>
<connection ref="egressid"/>
</comp>
<comp xsi:type="DialogEnd" id="endmusic" dialogid="ringbackdialogid">
<extension>
<graphic xsi:type="anyType" x="317" y="408"/>
</extension>
<outputs/>
<exits>
<exit name="success" target="accept"/>
</exits>
<logbefore category="logLabel" msg="'End music...'"/>
</comp>
<comp xsi:type="Answer" id="accept">
<extension>
<graphic xsi:type="anyType" x="567" y="458"/>
</extension>
<outputs/>
<exits>
<exit name="success" target="connectparties"/>
</exits>
<logbefore category="logLabel" msg="'Answer ingress call...'"/>
<connectionref ref="ingressid"/>
</comp>
<comp xsi:type="Join" id="connectparties">
<extension>
<graphic xsi:type="anyType" x="526" y="544"/>
</extension>
<outputs/>
<exits>
<exit name="hangup" target="hangup"/>
</exits>
<logbefore category="logLabel" msg="'Join ingress and egress call legs...'"/>
<connectionref ref="ingressid"/>
<connectionref2 ref="egressid"/>
</comp>
<comp xsi:type="Decision" id="hangup">
<extension>
<graphic xsi:type="anyType" x="279" y="541"/>
</extension>
<inputs>
<input expr="evt.connectionid"/>
</inputs>
<outputs>
<output expr="evt.reason" id="reason"/>
</outputs>
<exits>
<exit name="done" target="egressdisconnect">
<cond>evt.connectionid == ingressid</cond>
</exit>
<exit name="otherwise" target="ingressdisconnect"/>
</exits>
</comp>
<comp xsi:type="Disconnect" id="egressdisconnect">
<extension>
<graphic xsi:type="anyType" x="144" y="724"/>
</extension>
<outputs/>
<exits>
<exit name="success" target="endringback"/>
</exits>
<logbefore category="logLabel" msg="'Disconnect egress...'"/>
<connectionref ref="egressid"/>
</comp>
<comp xsi:type="End" id="endringback">
<extension>
<graphic xsi:type="anyType" x="374" y="818"/>
</extension>
<outputs/>
<logbefore category="logLabel" msg="'Exiting...'"/>
</comp>
<comp xsi:type="Disconnect" id="ingressdisconnect">
<extension>
<graphic xsi:type="anyType" x="488" y="721"/>
</extension>
<outputs/>
<exits>
<exit name="success" target="endringback"/>
</exits>
<logbefore category="logLabel" msg="'Disconnect ingress...'"/>
<connectionref ref="ingressid"/>
</comp>
<comp xsi:type="DialogEnd" id="stopms" dialogid="ringbackdialogid">
<extension>
<graphic xsi:type="anyType" x="46" y="512"/>
</extension>
<outputs/>
<exits>
<exit name="success" target="stoppedms"/>
</exits>
</comp>
<comp xsi:type="Decision" id="stoppedms">
<extension>
<graphic xsi:type="anyType" x="24" y="629"/>
</extension>
<outputs/>
<exits>
<exit name="done" target="egressdisconnect">
<cond>failedid == ingressid</cond>
</exit>
<exit name="otherwise" target="ingressdisconnect"/>
</exits>
</comp>
</components>
<epilog/>
</design>
【００６３】
付録Ｂ
<?xml version="1.0" encoding="UTF-8"?>
<!--
Generated by Sonus Networks Service Creation Environment.
Script ID: ringback
GSCML Version: V01.01.00R006
-->
<ccxml xmlns="http://www.w3.org/2002/09/ccxml" version="1.0">
<script>
var ingressCall=new Object();
ingressCall.connId=null;
ingressCall.localNumber=null;
ingressCall.remoteNumber=null;
</script>
<var name="webServerUrl" expr="'http://10.6.35.63:8080'"/><!--Prolog Decl-->
<var name="appName" expr="'/ringback'"/><!--Prolog Decl-->
<var name="logLabel" expr="'ringback'"/><!--Prolog Decl-->
<var name="ringbackdialogid"/><!--Dialog Fetch ID: fetchmusic.ringbackdialogid-->
<var name="egressid"/><!--Connection ID: egresscall.egressid-->
<var name="incallingnum"/><!--Output: fetchPromptId.incallingnum-->
<var name="ingressid"/><!--Output: fetchPromptId.ingressid-->
<var name="incallednum"/><!--Output: fetchPromptId.incallednum-->
<var name="prompt"/><!--Output: fetchmusic.prompt-->
<var name="callednum"/><!--Output: fetchmusic.callednum-->
<var name="failedid"/><!--Output: egresscall.failedid-->
<var name="reason"/><!--Output: hangup.reason-->
<var name="currentstate" expr="'start'"/>
<eventprocessor statevariable="currentstate">
<transition state="start" event="connection.alerting" name="evt"><!--Exit "ringing" from component "start"-->
<assign name="currentstate" expr="'fetchPromptId'"/>
<!--Component "fetchPromptId", type="Action"-->
<assign name="incallingnum" expr="session.connections[evt.connectionid].remote"/>
<assign name="ingressid" expr="evt.connectionid"/>
<assign name="incallednum" expr="session.connections[evt.connectionid].local"/>
<script>
ingressCall.connId=evt.connectionid;
ingressCall.localNumber=evt.connection.local;
ingressCall.remoteNumber=evt.connection.remote;
</script>
<log label="logLabel" expr="'Calling web server to get prompt id...'"/>
<var name="callednumber" expr="incallednum"/> 
<var name="callingnumber" expr="incallingnum"/> 
<send target="webServerUrl+appName+'/dynapromptid.jsp'" targettype="'x-http'" data="'fetchPromptId.response'" delay="'0s'" namelist="callednumber callingnumber"/>
</transition>
<transition state="fetchPromptId" event="fetchPromptId.response" name="evt"><!--Exit "response" from component "fetchPromptId"-->
<assign name="currentstate" expr="'fetchmusic'"/>
<!--Component "fetchmusic", type="DialogFetch"-->
<assign name="prompt" expr="evt.prompt"/>
<assign name="callednum" expr="evt.url"/>
<log label="logLabel" expr="'Fetching prompt...'"/>
<dialogprepare type="'application/voicexml+xml'" dialogid="ringbackdialogid" connectionid="ingressid" src="webServerUrl+appName+'/playPrompt.do'+'?'+'prompt='+evt.prompt"/>
</transition>
<transition state="fetchmusic" event="error.dialog.notprepared" name="evt"><!--Exit "failure" from component "fetchmusic"-->
<!--Component "fetchFailed", type="Log"-->
<log label="logLabel" expr="'Dialog fetch failed'"/><!--Exit "next" from component "fetchFailed"-->
<!--Component "endFetchFailed" (recursive), type="Abort"-->
<exit/>
</transition>
<transition state="fetchmusic" event="dialog.prepared" name="evt"><!--Exit "success" from component "fetchmusic"-->
<!--Component "sendsig", type="Signal"-->
<sendsig connectionid="ingressid" type="'progress'" hints="mediaid=ringbackdialogid"/><!--Exit "next" from component "sendsig"-->
<assign name="currentstate" expr="'playmusic'"/>
<!--Component "playmusic" (recursive), type="Dialog"-->
<log label="logLabel" expr="'Playing prompt...'"/>
<dialogstart type="'application/voicexml+xml'" prepareddialogid="ringbackdialogid" connectionid="ingressid"/>
</transition>
<transition state="playmusic" event="dialog.started" name="evt"><!--Exit "started" from component "playmusic"-->
<assign name="currentstate" expr="'egresscall'"/>
<!--Component "egresscall", type="CreateCall"-->
<assign name="failedid" expr="evt.connectionid"/>
<log label="logLabel" expr="'Creating call...'"/>
<createcall dest="callednum" connectionid="egressid"/>
</transition>
<transition state="egresscall" event="connection.connected" name="evt"><!--Exit "success" from component "egresscall"-->
<assign name="currentstate" expr="'endmusic'"/>
<!--Component "endmusic", type="DialogEnd"-->
<log label="logLabel" expr="'End music...'"/>
<dialogterminate dialogid="ringbackdialogid"/>
</transition>
<transition state="endmusic" event="dialog.exit" name="evt"><!--Exit "success" from component "endmusic"-->
<assign name="currentstate" expr="'accept'"/>
<!--Component "accept", type="Answer"-->
<log label="logLabel" expr="'Answer ingress call...'"/>
<accept connectionid="ingressid"/>
</transition>
<transition state="accept" event="connection.connected" name="evt"><!--Exit "success" from component "accept"-->
<assign name="currentstate" expr="'connectparties'"/>
<!--Component "connectparties", type="Join"-->
<log label="logLabel" expr="'Join ingress and egress call legs...'"/>
<join id1="ingressid" id2="egressid"/>
</transition>
<transition state="connectparties" event="connection.disconnected" name="evt"><!--Exit "hangup" from component "connectparties"-->
<!--Component "hangup", type="Decision"-->
<assign name="reason" expr="evt.reason"/>
<if cond="evt.connectionid == ingressid"><!--Exit "done" from component "hangup"-->
<assign name="currentstate" expr="'egressdisconnect'"/>
<!--Component "egressdisconnect" (recursive), type="Disconnect"-->
<log label="logLabel" expr="'Disconnect egress...'"/>
<disconnect connectionid="egressid"/>
<else/><!--Exit "otherwise" from component "hangup"-->
<assign name="currentstate" expr="'ingressdisconnect'"/>
<!--Component "ingressdisconnect" (recursive), type="Disconnect"-->
<log label="logLabel" expr="'Disconnect ingress...'"/>
<disconnect connectionid="ingressid"/>
</if>
</transition>
<transition state="egressdisconnect" event="connection.disconnected" name="evt"><!--Exit "success" from component "egressdisconnect"-->
<!--Component "endringback", type="End"-->
<log label="logLabel" expr="'Exiting...'"/>
<exit/>
</transition>
<transition state="ingressdisconnect" event="connection.disconnected" name="evt"><!--Exit "success" from component "ingressdisconnect"-->
<!--Component "endringback", type="End"-->
<log label="logLabel" expr="'Exiting...'"/>
<exit/>
</transition>
<transition state="egresscall" event="connection.failed" name="evt"><!--Exit "failure" from component "egresscall"-->
<assign name="currentstate" expr="'stopms'"/>
<!--Component "stopms", type="DialogEnd"-->
<dialogterminate dialogid="ringbackdialogid"/>
</transition>
<transition state="stopms" event="dialog.exit" name="evt"><!--Exit "success" from component "stopms"-->
<!--Component "stoppedms", type="Decision"-->
<if cond="failedid == ingressid"><!--Exit "done" from component "stoppedms"-->
<assign name="currentstate" expr="'egressdisconnect'"/>
<!--Component "egressdisconnect" (recursive), type="Disconnect"-->
<log label="logLabel" expr="'Disconnect egress...'"/>
<disconnect connectionid="egressid"/>
<else/><!--Exit "otherwise" from component "stoppedms"-->
<assign name="currentstate" expr="'ingressdisconnect'"/>
<!--Component "ingressdisconnect" (recursive), type="Disconnect"-->
<log label="logLabel" expr="'Disconnect ingress...'"/>
<disconnect connectionid="ingressid"/>
</if>
</transition>
<transition event="error.*" name="evt">
<log label="'ringback'" expr="'Unhandled error event: '+evt.name+', current state='+currentstate+', reason='+evt.reason"/>
<exit/>
</transition>
</eventprocessor>
</ccxml>
【００６４】
付録Ｃ
<?xml version="1.0" encoding="UTF-8"?>
<%@ page language="java" import="java.util.*" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean"%>
<%@ taglib uri="/tags/jstl-core" prefix="c"%>
<%@ taglib uri="/tags/jstl-functions" prefix="fn"%>
<c:choose>
<c:when test="${!empty sessionScope.promptLoc}">
<c:set var="promptBase" value="${sessionScope.promptLoc}"/>
</c:when>
<c:otherwise>
<c:choose>
<c:when test="${fn:startsWith(initParam.promptURLRoot,＼"/＼")}">
<c:if test="${initParam.promptsRelative=='true'}">
<c:set var="promptBase" value="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}${initParam.promptURLRoot}"/>
</c:if>
<c:if test="${initParam.promptsRelative=='false'}">
<c:set var="promptBase" value="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${initParam.promptURLRoot}"/>
</c:if>
</c:when>
<c:otherwise>
<c:set var="promptBase" value="${initParam.promptURLRoot}"/>
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${!empty requestScope.modelbean}">
<c:set var="modelBean" value="${requestScope.modelbean}"/>
</c:when>
<c:otherwise>
<c:set var="modelBean" value="''"/>
</c:otherwise>
</c:choose>
<vxml xmlns="http://www.w3.org/2001/vxml" version="2.0">
<property name="inputmodes" value="dtmf"/>
<!--global dialog result variable-->
<var name="result_" expr="'false'"/>
<catch event="connection.disconnect.hangup">
<submit next="<%=response.encodeURL(request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/exit.do")%>" namelist=" result_"/>
</catch>
<!--prolog-->
<!--local declarations-->
<!--Outputs of all design elements-->
<!--Beginning of form/menu elements-->
<form id="music">
<block>
<prompt>
<audio src="<c:out value="${promptBase}"/>${param["prompt"]}"/></prompt>
<goto next="#End10"/>
</block>
</form>
<form id="End10">
<block>
<assign name="result_" expr="'true'"/>
<submit next="<%=response.encodeURL(request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/exit.do")%>" namelist=" result_"/>
</block>
</form>
</vxml>
【図面の簡単な説明】
【００６５】
【図１】テレフォニーサービスの生成、提供、及び実行に関連する装置を有する例示的なネットワークを示すブロック図である。
【図２】テレフォニーサービスの生成、提供、及び実行を示すフローチャートである。
【図３】テレフォニーサービスの実行を示す呼フロー図である。
【図４】サービス作成環境中のテレフォニーサービスの開発、アセンブリ、テスト、及び配備を示すプロセスフローである。
【図５】中間言語の呼制御エレメント、及びダイアログエレメントの例示的なＵＭＬモデルを示すブロック図である。
【図６】テレフォニーサービス生成に関連する例示的なグラフィカルユーザーインターフェースを示すブロック図である。
【図７】アプリケーションサーバのコンポーネントを示すブロック図である。
【図８】テレフォニーサービスの実行を示す他の呼フロー図である。
【図９】ＳＩＰアクセス層のコンポーネントを示すブロック図である。
【符号の説明】
【００６６】
１００    ネットワーク
１０１    パケットベースのネットワーク
１１０    アプリケーションサーバ
１１１    サービス作成環境（ＳＣＥ）
１２０    メディアサーバ
１３０    ルーティングサーバ
１４０，１５０    アクセスネットワーク
１４１，１５１    ゲートウェイ
１４５，１５５    ユーザ装置
１６５    ユーザ
４０１    ユーザ
４０５，４１５，４２５    データベース
【図１】
2008546325.tif 000003
【図２】
2008546325.tif 000004
【図３】
2008546325.tif 000005
【図４】
2008546325.tif 000006
【図５Ａ】
2008546325.tif 000007
【図５Ｂ】
2008546325.tif 000008
【図６Ａ】
2008546325.tif 000009
【図６Ｂ】
2008546325.tif 000010
【図６Ｃ】
2008546325.tif 000011
【図６Ｄ】
2008546325.tif 000012
【図７】
2008546325.tif 000013
【図８】
2008546325.tif 000014
【図９】
2008546325.tif 000015
【国際調査報告】
2008546325.tif 000016
2008546325.tif 000017
2008546325.tif 000018
2008546325.tif 000019
2008546325.tif 000020