(57)【要約】【課題】テレコムネットワークのＳＩＰ呼制御機能を、ＳＯＡＰプロトコルを用いてアクセスするＷｅｂアプリケーションを容易に作成するための、プログラム生成方法及びプログラムを提供する。【解決手段】ＳＯＡＰプロトコルを用いてＳＩＰ呼制御機能を利用するためのプログラムを生成するプログラム生成方法であって、ＳＯＡＰヘッダ生成部が、予め決められている認識情報を入力したコードをもとに、ＳＯＡＰヘッダに当該認識情報を格納するプログラムを生成するＳＯＡＰヘッダ生成ステップ（Ｆ２）と、ＳＯＡＰオペレーション生成部が、予め決められている実行する動作に関する情報を入力したコードをもとに、当該動作に応じたＡＰＩのＳＯＡＰオペレーションの呼び出しを行うプログラムを生成するＳＯＡＰオペレーション生成ステップ（Ｆ５）と、を含むことを特徴とするプログラム生成方法。【選択図】図３
2011049657.tif 000002
【特許請求の範囲】
【請求項１】
ＳＯＡＰプロトコルを用いてＳＩＰ呼制御機能を利用するためのプログラムを生成するプログラム生成方法であって、
ＳＯＡＰヘッダ生成部が、予め決められている認識情報を入力したコードをもとに、ＳＯＡＰヘッダに当該認識情報を格納するプログラムを生成するＳＯＡＰヘッダ生成ステップと、
ＳＯＡＰオペレーション生成部が、予め決められている実行する動作に関する情報を入力したコードをもとに、当該動作に応じたＡＰＩのＳＯＡＰオペレーションの呼び出しを行うプログラムを生成するＳＯＡＰオペレーション生成ステップと、
を含むことを特徴とするプログラム生成方法。
【請求項２】
前記予め決められている実行する動作に関する情報を入力したコードは、データベースに格納されているコードであることを特徴とする請求項１に記載のプログラム生成方法。
【請求項３】
前記予め決められている実行する動作に関する情報を入力したコードは、ＳＯＡＰリクエストに対するＳＯＡＰレスポンスと、呼の状態の変化とを同期させるコードであることを特徴とする請求項１または請求項２に記載のプログラム生成方法。
【請求項４】
請求項１ないし請求項３のいずれか１項に記載のプログラム生成方法を、コンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム生成方法及びプログラムに関する。
【背景技術】
【０００２】
テレコムネットワークのＳＩＰ（Session Initiation Protocol）の呼制御機能を、Ｗｅｂから利用することを可能にするプラットフォームとしては、ＳＤＰ（Service Delivery Platform）がある。
また、このＷｅｂ（アプリケーション）が、ＳＯＡＰ（Simple Object Access Protocol）を用いて、前記ＳＤＰにアクセスし、前記呼制御機能を利用する標準ＡＰＩ（Application Programming Interface）としては、Ｐａｒｌａｙ Ｘがある（非特許文献１参照）。そして、このＰａｒｌａｙ Ｘを用いたゲートウェイの開発が進められている（特許文献１〜３参照）。
【０００３】
さらに、ＳＤＰにアクセスするためには、ＳＤＰにアクセスするための認証を行うプログラムを、Ｗｅｂアプリケーションに組み込む必要がある。ＳＯＡＰでの認証は、ＷＳ−Ｓｅｃｕｒｉｔｙが用いられる（非特許文献２参照）。
このＰａｒｌａｙ Ｘ等を用いることによって、テレコムネットワークのＳＩＰの呼制御機能を利用する、Ｗｅｂアプリケーションを作成することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−２０４３５４号公報
【特許文献２】特開２００８−２１１５５８号公報
【特許文献３】特開２００９−０４９６４１号公報
【非特許文献】
【０００５】
【非特許文献１】OSA-Parlay X 3.0、ETSI OSA Parlay X、Parlay X 3.0 Specifications、[online]、[平成２１年７月２８日検索]、インターネット<URL:http://portal.etsi.org/docbox/TISPAN/Open/OSA/ParlayX30.html>
【非特許文献２】OASIS、OASIS Web Service Security (WSS) TC、Technical Work Produced by the Committee、OASIS Standard、[online]、[平成２１年７月２８日検索]、インターネット<URL:http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wss>
【発明の概要】
【発明が解決しようとする課題】
【０００６】
Ｐａｒｌａｙ ＸのＡＰＩは、呼の生成や切り替え、音声再生、ＤＴＭＦ（Dial Tone Multi Frequency）操作、課金情報アクセス等の、多くの機能を有しているが、Ｐａｒｌａｙ Ｘを用いて、Ｗｅｂアプリケーションを作成する際には、開発者にとって２つの問題に直面することになる。
【０００７】
第１の問題としては、開発者が、テレコムネットワーク特有の「呼」の概念を理解しておく必要がある点である。具体的に、例えば、Ｐａｒｌａｙ Ｘを用いて、Ｗｅｂサーバ側から２者通話発信（３ｒｄ ｐａｒｔｙ ｃａｌｌ）を行うアプリケーションを作成するためには、ＳＯＡＰを用いて、makeCallSesssion ＡＰＩを実行して呼を生成し、続けて第一の通話者をこの呼に参加させるaddCallParticipant ＡＰＩを実行し、更に続けて第二の通話者をこの呼に参加させるaddCallParticipant ＡＰＩを実行しなければならない。このようにＰａｒｌａｙ Ｘ  ＡＰＩは、電話網、テレコムネットワークの知識を前提とした呼のモデルから成っており、一般の開発者、特にＷｅｂ技術者にとっては馴染みが薄く、理解しがたいものとなっている。
【０００８】
第２の問題としては、Ｐａｒｌａｙ ＸのＡＰＩ（上記第１の問題で述べた３つのＡＰＩ）を実行するためのＳＯＡＰリクエストメッセージの中のＳＯＡＰヘッダ部には、ＳＤＰへの認証を行うためのログイン名・パスワードを加えておく必要がある点である。認証には、ＷＳ−Ｓｅｃｕｒｉｔｙが用いられる。一般にＳＯＡＰプログラミングにおいて、ＳＯＡＰボディを操作する実装は常に必要であり、その実装方法は多くの開発者・プログラマ・Ｗｅｂ技術者が知るところであるが、ＳＯＡＰヘッダを操作する実装を行う必要性が生じるケースは少なく、ヘッダの操作実装方法を知る開発者・プログラマは少ない。
【０００９】
そこで、本発明は、テレコムネットワークのＳＩＰ呼制御機能を、ＳＯＡＰプロトコルを用いてアクセスするＷｅｂアプリケーションを容易に作成するための、プログラム生成方法及びプログラムを提供することを課題とする。
【課題を解決するための手段】
【００１０】
前記課題を解決するための手段として、請求項１に係るプログラム生成方法は、ＳＯＡＰプロトコルを用いてＳＩＰ呼制御機能を利用するためのプログラムを生成するプログラム生成方法であって、ＳＯＡＰヘッダ生成部が、予め決められている認識情報を入力したコードをもとに、ＳＯＡＰヘッダに当該認識情報を格納するプログラムを生成するＳＯＡＰヘッダ生成ステップと、ＳＯＡＰオペレーション生成部が、予め決められている実行する動作に関する情報を入力したコードをもとに、当該動作に応じたＡＰＩのＳＯＡＰオペレーションの呼び出しを行うプログラムを生成するＳＯＡＰオペレーション生成ステップと、を含むことを特徴とする。
【００１１】
このＳＯＡＰヘッダ生成ステップによれば、ＳＯＡＰヘッダ生成部が、予め決められている認識情報を入力したコードをもとに、ＳＯＡＰヘッダに当該認識情報を格納するプログラムを生成する。このプログラムにより、必要な認証情報が、ＳＯＡＰヘッダに格納される。よって、プログラム開発者は、ＳＯＡＰヘッダの操作に関するコードを実装する必要がなくなる。
【００１２】
また、このＳＯＡＰオペレーション生成ステップによれば、ＳＯＡＰオペレーション生成部が、予め決められている実行する動作に関する情報を入力したコードをもとに、当該動作に応じたＡＰＩのＳＯＡＰオペレーションの呼び出しを行うプログラムを生成する。このプログラムにより、ＡＰＩのＳＯＡＰオペレーションの呼び出しを行う（実行する動作に応じたＡＰＩを呼び出すこと）ができる。よって、プログラマは、呼の概念等を詳細に理解していなくても、ＳＩＰ呼制御機能を、ＳＯＡＰプロトコルを用いてアクセスするＷｅｂアプリケーションを容易に作成することができる。
【００１３】
また、請求項２に係るプログラム生成方法は、前記予め決められている実行する動作に関する情報を入力したコードは、データベースに格納されているコードであることを特徴とする。
このような構成によれば、予め決められている実行する動作に関する情報を入力したコードが、データベースに格納されているコードであることによって、ＳＯＡＰオペレーション生成部がもとにするコードがデータベースに格納されていることから、プログラムを容易に作成することができる。
【００１４】
また、請求項３に係るプログラム生成方法は、前記予め決められている実行する動作に関する情報を入力したコードは、ＳＯＡＰリクエストに対するＳＯＡＰレスポンスと、呼の状態の変化とを同期させるコードであることを特徴とする。
このような構成によれば、予め決められている実行する動作に関する情報を入力したコードが、ＳＯＡＰリクエストに対するＳＯＡＰレスポンスと、呼の状態の変化とを同期させるコードであることによって、ＳＯＡＰオペレーション生成部により生成されるプログラムが、ＳＯＡＰリクエストに対するＳＯＡＰレスポンスと、呼の状態の変化とを同期させる機能を有することから、開発者が、レスポンスを受け取ったことが、呼制御側の処理完了を意味すると勘違いすることを防止することができる。
【００１５】
また、請求項４に係るプログラムは、請求項１ないし請求項３のいずれか１項に記載のプログラム生成方法を、コンピュータに実行させるためのプログラムである。
請求項１ないし請求項３のいずれか１項に記載のプログラム生成方法を、プログラムで実現している。
【発明の効果】
【００１６】
本発明によれば、テレコムネットワークのＳＩＰ呼制御機能を、ＳＯＡＰプロトコルを用いてアクセスするＷｅｂアプリケーションを容易に作成するための、プログラム生成方法及びプログラムを提供することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明を用いるシステムの全体構成図である。
【図２】ＳＤＫのソフトウェア構成を示す図である。
【図３】Ｌｏｗ−ｌｉｂｒａｒｙの動作フローを示す図である。
【図４】Ｌｏｗ−ｌｉｂｒａｒｙによる基本オブジェクトの生成を示す図である。
【図５】Ｌｏｗ−ｌｉｂｒａｒｙによるメッセージ再生機能を示す図である。
【図６】Ｌｏｗ−ｌｉｂｒａｒｙによるインタラクション機能を示す図である。
【図７】Ｌｏｗ−ｌｉｂｒａｒｙのモデルを示す図である。
【図８】Ｈｉｇｈ−ｌｉｂｒａｒｙの概要を示す図である。
【図９】Ｈｉｇｈ−ｌｉｂｒａｒｙのｓｗｉｔｃｈｔｏメソッドを示す図である。
【図１０】Ｉｎｔｅｒａｃｔｉｏｎ−ｌｉｂｒａｒｙを説明するための図である。
【図１１】Ｓｙｎｃ−ｌｉｂｒａｒｙを説明するための図である。
【発明を実施するための形態】
【００１８】
本発明の一実施形態について、図面を参照して説明する。
【００１９】
図１は、本発明を用いるシステムの全体構成図である。
図１中のＳＤＰ（ネットワークサービスプラットフォームとも呼ばれる）には、Ｐａｒｌａｙ Ｘのゲートウェイとして、ＳＩＰ機能をＳＯＡＰに変換する役割を担う変換手段（ＯＬＡＰＰ）と、ＷＳ−Ｓｅｃｕｒｉｔｙによる認証を担う実行制御とが含まれている。
テレコムネットワークには、ＳＩＰサーバとメディアサーバとが含まれ、ＳＩＰサーバには、ＳＩＰ端末が繋がっている。
ＳＯＡＰプロトコルを用いてＳＤＰの機能を利用するＷｅｂアプリケーションには、ＳＤＫ（Software Development Kit）が含まれている。また、Ｗｅｂアプリケーションは、任意のネットワークを介して、ＳＤＰに接続している。ＳＤＫは、このＷｅｂアプリケーションが動作するマシン（コンピュータ）にインストールされることで利用される。
このコンピュータには、ＣＰＵ（Central Processing Unit）と、メモリ（コンパイラ等が記憶されている）と、ネットワークインターフェイス等とが含まれている。
【００２０】
図２は、ＳＤＫのソフトウェア構成を示す図である。
ＳＤＫは、プログラミングスキルやテレコムの知識の乏しいエンドユーザ向けに、Ｐａｒｌａｙ Ｘの概念を引きずらず、代表的なサービスをパッケージとして提供するＨｉｇｈ−ｌｉｂｒａｒｙと、多少のプログラミングスキルやテレコムの知識を有するユーザ向けに、Ｐａｒｌａｙ Ｘ並みに細かく柔軟なテレコム機能の制御を可能にするＬｏｗ−ｌｉｂｒａｒｙとから成る。
【００２１】
このＬｏｗ−ｌｉｂｒａｒｙは、プログラム開発者に対して、Ｌｏｗ−ｌｉｂｒａｒｙ  ＡＰＩを提供する。Ｌｏｗ−ｌｉｂｒａｒｙは、（１）プログラマが書いたコードを元に、ＷＳ−Ｓｅｃｕｒｉｔｙの認証情報を、ＳＯＡＰヘッダに挿入（格納）するプログラムを生成するＳＯＡＰヘッダ生成部１と、（２）プログラマが書いたコードを元に、かつ、（１）で生成されたオブジェクトを参照して、Ｐａｒｌａｙ Ｘ  ＡＰＩのＳＯＡＰオペレーションの呼び出しを行うプログラムを生成するＳＯＡＰオペレーション生成部２とから成る。
【００２２】
プログラマが本ｌｉｂｒａｒｙを用いてコードを記述して、そのコードが（コンパイラによって）コンパイルされる際に、Ｌｏｗ−ｌｉｂｒａｒｙの機能部（ＳＯＡＰヘッダ生成部１及びＳＯＡＰオペレーション生成部２）が該当するプログラムを自動生成する。そのプログラムが実行されると、図１のＷｅｂアプリケーションとＰａｒｌａｙ Ｘ  ＡＰＩ（ＳＤＰ）との間で、ＳＯＡＰメッセージの送受信が行われる。
【００２３】
Ｌｏｗ−ｌｉｂｒａｒｙの動作（基本オブジェクトの生成）について、図３及び図４を参照して説明する。
まず、Ｅｎｔｒｙオブジェクト（エントリ）は、アプリケーションからＳＤＰのサービスを使用するための入り口となるもので、プログラマは、ＳＤＰのサービスを使用するためのユーザ名（ＩＤ）とパスワード（予め決められている認証情報）を引数として、初めにエントリを生成するよう以下の記述を行う（図３のＦ１、図４の（１）〜（２））。
＜予め決められている認識情報を入力したコード＞
Entry entry = new Entry(“USERID”, “PASSWORD”);
【００２４】
このコードがコンパイルされるとき、ＳＯＡＰヘッダ生成部１は、以下のＳＯＡＰヘッダ作成プログラムを生成する（図３のＦ２）。このとき、ＳＯＡＰヘッダ生成部１は、上記Ｅｎｔｒｙクラスの引数を、Ｘ２・Ｘ３に代入している。
すなわち、このＳＯＡＰヘッダ生成部１は、ＳＯＡＰヘッダに当該認識情報を格納するために予め作成しておいたテンプレートデータ（プログラム）内の予め決まっている場所（位置）に、必要な（認証）情報を代入するようになっている。
【００２５】
＜ＳＯＡＰヘッダに認識情報を格納するプログラム＞
//ハンドラリゾルバ
public class NwspfHandlerResolver implements・・・（Ｘ１）
HandlerResolver{
//リクエスタハンドラをチェーンに追加
public List<Handler> getHandlerChain(PortInfo arg0){
List<Handler> handlerChain = new LinkedList<Handler>();
handlerChain.add(new MyRequestorHandler());
return handlerChain;
}
}
//リクエスタハンドラ
public class MyRequestorHandler implements
SOAPHandler<SOAPMessageContext> {
private static final String XSD = 
"http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-wssecurity-secext-1.0.xsd";
//ハンドラメソッド
public boolean handleMessage(SOAPMessageContext
context) {
SOAPMessage message = context.getMessage();
try {
SOAPHeader header = message.getSOAPHeader();
if (header == null) {
SOAPEnvelope envelope = message.getSOAPPart().
getEnvelope();
header = envelope.addHeader();
SOAPFactory soapFactory = SOAPFactory.newInstance();
Name eN_Security = soapFactory.createName("Security",
"wsse", XSD);
SOAPHeaderElement hE_Security = header.
addHeaderElement(eN_Security);
Name eN_UsernameToken = soapFactory.createName(
"UsernameToken", "wsse", XSD);
SOAPElement e_UsernameToken = hE_Security.
addChildElement(eN_UsernameToken);
//ユーザ名のXML要素を設定
Name eN_Username = soapFactory.createName("Username",
"wsse", XSD);
SOAPElement e_Username = e_UsernameToken.
addChildElement(eN_Username);
e_Username.setTextContent(”USERID“);・・・（Ｘ２）
//ユーザ名のXML要素を設定
Name eN_Password = soapFactory.createName("Password",
"wsse", XSD);
SOAPElement e_ Password = e_ Password Token.
addChildElement(eN_ Password);
e_Username.setTextContent(“PASSWORD“);・・・（Ｘ３）
}
} catch (SOAPException se) {
throw new WebServiceException(se);
}
}
}
【００２６】
このプログラムにより、ＷＳ−Ｓｅｃｕｒｉｔｙの認証情報が、ＳＯＡＰヘッダに格納される。よって、プログラム開発者は、ＳＯＡＰヘッダの操作に関するコードを実装する必要がない。つまり、プログラマは、別途、ヘッダに関する操作を行わなくてもよい。
【００２７】
次に、プログラマは、エントリから、ｃｒｅａｔｅＣａｌｌメソッドを用いて、Ｃａｌｌオブジェクトを生成するコードを、以下のように記述する(図３のＦ３、図４の（２）〜（３）)。
Call call = entry.createCall();・・・（Ａ０）
【００２８】
また、話者を表すＰａｒｔｉｃｉｐａｎｔオブジェクトを生成するコードを、以下のように記述する。
Participant ua1 = new Participant("sip:ua1@ntt");
Participant ua2 = new Participant("sip:ua2@ntt");
【００２９】
そして、プログラマは、Ｃａｌｌに対して、addParticipantメソッドを呼び出し、そこにCallParticipantを複数参加させ、その参加者同士で会話（実行する動作）をすることを以下のように（予め決められている実行する動作に関する情報を）記述する(図３のＦ４、図４の（３）〜（５）)。
＜予め決められている実行する動作に関する情報を入力したコード＞
call.addParticipant(ua1);・・・（Ａ１）
call.addParticipant(ua2);・・・（Ａ２）
【００３０】
このコードがコンパイルされるとき、ＳＯＡＰオペレーション生成部２は、以下のプログラムを生成する（図３のＦ５）。このとき、ＳＯＡＰオペレーション生成部２は、ＳＯＡＰヘッダ生成部１が生成したクラス（Ｘ１）をＡ１０１に、Ａ１・Ａ２で指定されたua1・ua2（話者オブジェクト）をＡ１０２・Ａ１０３にそれぞれ代入している。また、変数CALLER_NAME、CHARGINFINFORMATION、MEDIAINFO、CHANGEMEDIANOTALLOWEDには、予めＳＯＡＰオペレーション生成部２において設定されている値が代入される。
すなわち、このＳＯＡＰオペレーション生成部２は、実行する動作（本実施形態では、会話）に応じたＡＰＩのＳＯＡＰオペレーションの呼び出しを行うために予め作成しておいたテンプレートデータ内の予め決まっている場所（位置）に、必要な情報（値）を代入するようになっている。
【００３１】
＜動作に応じたＡＰＩのＳＯＡＰオペレーションの呼び出しを行うプログラム＞
//3rd party callサービスを生成
org.csapi.wsdl.parlayx.third_party_call.v3_4.service
ThirdPartyCallService service = new org.csapi.wsdl.parlayx.
third_party_call.v3_4.service.ThirdPartyCallService();
//サービスにSOAPハンドラリゾルバを設定
service.setHandlerResolver(new NwspfHandlerResolver ());・・・（Ａ１０１）
//サービスからエンドポイントのポートを取得
org.csapi.wsdl.parlayx.third_party_call.v3_4.service.
ThirdPartyCall port = service.getThirdPartyCall();
//オペレーションの引数を作成
List<String> callParticipants = new ArrayList<String>();
callParticipants.add(ua1); ・・・（Ａ１０２）
callParticipants.add(ua2); ・・・（Ａ１０３）
String callingParticipantName = CALLER_NAME;
org.csapi.schema.parlayx.common.v3_1.ChargingInformation
charging = CHARGINFINFORMATION;
List<org.csapi.schema.parlayx.common.v3_1.MediaInfo>
mediaInfo = MEDIAINFO;
boolean changeMediaNotAllowed = CHANGEMEDIANOTALLOWED;
//Parlay X APIのmakeCallオペレーションを呼出
callSessionId = port.makeCallSession(callParticipants, callingParticipantName, charging, mediaInfo,        changeMediaNotAllowed); ・・・（Ａ１０４）
【００３２】
このプログラムにより、Ｐａｒｌａｙ Ｘ  ＡＰＩのＳＯＡＰオペレーションの呼び出しを行う（実行する動作に応じたＡＰＩを呼び出すこと）ができる。よって、プログラマは、Ｐａｒｌａｙ Ｘの詳細な（プログラム作成に関する）パラメータを気にすることなく、プログラムを作成することができる。つまり、テレコムネットワークのＳＩＰ呼制御機能を、ＳＯＡＰプロトコルを用いてアクセスするＷｅｂアプリケーションを容易に作成することができる。
【００３３】
上記生成されたプログラムが実行されると、ＯＬＡＰＰのＰａｒｌａｙ ＸのＡＰＩのmakeCall ＡＰＩが呼び出され、話者の間でのセッションが確立する。このとき、makeCallリクエストのＳＯＡＰヘッダには、上述したＳＯＡＰヘッダ作成プログラムにより、認証情報が格納されており、ＳＤＰにログインすることができる。
【００３４】
次に、話者１に対して、例えば、”http://hello.wav”という音声メッセージを再生（実行する動作）するためには、再生を行いたいＣａｌｌオブジェクトに対して、ｃｒｅａｔｅＰｌａｙｅｒメソッドを呼び出し、Ｐｌａｙｅｒオブジェクトを生成する。コードを、プログラマは以下のように記述する（図５参照）。
【００３５】
//再生するメッセージ
Message message = new AudioMessage("http://hello.wav");・・・（Ｂ１）
//Playerオブジェクトを生成
Player player = call.getPlayerMaker().createPlayer();
//UA1の端末へメッセージを再生
player.play(message, ua1);・・・（Ｂ２）
【００３６】
このコードがコンパイルされるとき、ＳＯＡＰオペレーション生成部２は、以下のプログラムを生成する。このとき、ＳＯＡＰオペレーション生成部２は、ＳＯＡＰヘッダ生成部１が生成したクラスをＢ１０１に、Ｂ２で指定されたua1をＢ１０２に、Ｂ１で指定されたhttp://hello.wavをＢ１０３に代入している。また、Ｂ１０４のcallSessionIDの値には、Ａ１０４の戻り値であるcallSessionIdを自動的に代入している。
【００３７】
//音声再生サービスを生成
org.csapi.wsdl.parlayx.audio_call.play_media.v3_2.
service.AudioCallPlayMediaService service = new 
org.csapi.wsdl.parlayx.audio_call.play_media.v3_2.
service.AudioCallPlayMediaService();
//サービスにSOAPハンドラリゾルバを設定
service.setHandlerResolver(new NwspfHandlerResolver)・・・（Ｂ１０１）
//サービスからエンドポイントのポートを取得
org.csapi.wsdl.parlayx.audio_call.play_media.v3_2.service.
AudioCallPlayMedia port = service.getAudioCallPlayMedia();
//オペレーションの引数を作成
List<String> callParticipants = new ArrayList<String>();
callParticipants.add(ua1); ・・・（Ｂ１０２）
String audioUrl = "http://hello.wav";・・・（Ｂ１０３）
org.csapi.schema.parlayx.common.v3_1.ChargingInformation
charging = CHARGINGINFORMATION;
//playAudioMessageオペレーション呼出
port.playAudioMessage(callSessionID, callParticipants, audioUrl, charging); ・・・（Ｂ１０４）
【００３８】
なお、ＳＯＡＰオペレーション生成部２は、上記Ｂ１のように、Ｍｅｓｓａｇｅオブジェクトの型が音声ファイル（Ａｕｄｉｏ Ｍｅｓｓａｇｅ）であれば、Ｐａｒｌａｙ Ｘ  ＡＰＩのplayAudioMessage ＡＰＩを呼び出すプログラムを生成するが、Ｍｅｓｓａｇｅオブジェクトの型がテキストファイルであれば、ＯＬＡＰＰのＰａｒｌａｙ Ｘ  ＡＰＩのplayTextMessage ＡＰＩを呼び出すプログラムを生成する。また、Ｍｅｓｓａｇｅオブジェクトの型が動画ファイルであれば、ＯＬＡＰＰのＰａｒｌａｙ Ｘ  ＡＰＩのplayVideoMessage ＡＰＩを呼び出すプログラムを生成する。
【００３９】
その他、話者に対して、ボタン操作を要求する、音声を録音する等、端末とのやりとり（実行する動作、Ｉｎｔｅｒａｃｔｉｏｎ）を行うためには、プログラマは、具体的に、例えば、下記コードを記述する（図６参照）。
【００４０】
//Interactionの結果をイベントで通知してもらうようにする
call.getNotifiers().startAll();
//ボタン操作の収集情報作成
Interaction digitInteraction = new DigitInteraction(1, 1, true);・・・（Ｃ１）
//Interactionを開始する
Message textMsg  = new TextMessage("よろしければ１を押して下さい。");・・（Ｃ２）
Interactor interactor = call.getInteractorMaker().createInteractor();
interactor.start(digitInteraction, textMsg); 
【００４１】
このコードがコンパイルされるとき、ＳＯＡＰオペレーション生成部２は、以下のプログラムを生成する。このとき、ＳＯＡＰオペレーション生成部２は、ＳＯＡＰヘッダ生成部１が生成したクラスを、Ｃ１０１に代入している。また、ＳＯＡＰオペレーション生成部２は、Ｃ１０２にはＳＯＡＰオペレーション生成部２が生成した任意の値を、Ｃ１０３とＣ１０４には予めＳＯＡＰオペレーション生成部２において設定されている値を、Ｃ１０５にはＣ２を、Ｃ１０６にはＣ１でプログラマが指定した引数の値をそれぞれ代入し、Ｃ５１には、Ｂ１０４でも用いられたＡ１０４の戻り値であるcallSessionIdを自動的に代入している。
【００４２】
org.csapi.wsdl.parlayx.call_notification.notification_manager.v3_1.service.CallNotificationManagerService service = new org.csapi.wsdl.parlayx.call_notification.notification_manager.v3_1.service.CallNotificationManagerService();
service.setHandlerResolver(new NwspfHandlerResolver());・・・（Ｃ１０１）
org.csapi.wsdl.parlayx.call_notification.notification_manager.v3_1.service.CallNotificationManager port = service.getCallNotificationManager();
org.csapi.schema.parlayx.common.v3_1.SimpleReference reference = new org.csapi.schema.parlayx.common.v3_1.SimpleReference();
reference.setCorrelator("correlatorID1");・・・（Ｃ１０２）
reference.setEndpoint("http://192.168.1.1:8080/proxy/soap/Transfer?nttss:sid=olapp_call_notification03");・・・（Ｃ１０３）
reference.setInterfaceName("AA");・・・（Ｃ１０４）
java.lang.String callSessionIdentifier = callSessionId;・・・（Ｃ５１）
port.startPlayAndCollectNotification(reference, callSessionIdentifier);
org.csapi.wsdl.parlayx.audio_call.capture_media.v3_1.service.AudioCallCaptureMediaService service = new org.csapi.wsdl.parlayx.audio_call.capture_media.v3_1.service.AudioCallCaptureMediaService();
service.setHandlerResolver(new NwspfHandlerResolver());・・・（Ｃ１０１）
org.csapi.wsdl.parlayx.audio_call.capture_media.v3_1.service.AudioCallCaptureMedia port = service.getAudioCallCaptureMedia();
// TODO initialize WS operation arguments here
java.lang.String callSessionIdentifier = callSessionId;
java.lang.String callParticipant = null;
org.csapi.schema.parlayx.audio_call.v3_2.PlayConfig playingConfiguration = new org.csapi.schema.parlayx.audio_call.v3_2.PlayConfig();
org.csapi.schema.parlayx.audio_call.v3_2.DigitConfig digitConfiguration = new org.csapi.schema.parlayx.audio_call.v3_2.DigitConfig();
playingConfiguration.setMessageFormat(AnnouncementFormat.TEXT_TO_SPEECH);
playingConfiguration.setTextString("よろしければ１を押して下さい。");・・・（Ｃ１０５）
playingConfiguration.setInterruptMedia(false); ・・・（Ｃ１０６）
digitConfiguration.setMaxDigits(1); ・・・（Ｃ１０６）
digitConfiguration.setMinDigits(1); ・・・（Ｃ１０６）
digitConfiguration.setInterruptMedia(false); ・・・（Ｃ１０６）
【００４３】
また、プログラマは、コールバック用関数notifyPlayAndCollectEventに関するコードを以下のように記述する。
public void notifyPlayAndCollectEvent(String correlator, String callParticipant, String mediaInteraction) {
Call call = NotifierHelper.getIdFromCorrelator(correlator);・・・（Ｃ２０１）
・・・
}
【００４４】
このコードがコンパイルされるとき、ＳＯＡＰオペレーション生成部２は、指定されたＣ２０１を解釈し、Ａ０のCallオブジェクトのインスタンスを取得する。
まとめとして、Ｌｏｗ−ｌｉｂｒａｒｙのモデルを図７に示す。
【００４５】
このようなプログラムの生成方法及びプログラムを用いることによって、電話網、テレコムネットワークの知識、呼の概念、Ｐａｒｌａｙ Ｘ  ＡＰＩモデルの習得等を必要とすることなく、テレコムの機能と連携するＷｅｂアプリケーションを開発することができ、アプリケーション開発の難易度が大きく低減される。
また、ＳＯＡＰヘッダを操作する実装を作成する必要がなくなり、アプリケーションを開発する開発者の負担が軽減し、プログラムの生産性が向上する。
【００４６】
Ｈｉｇｈ−ｌｉｂｒａｒｙについて、図８及び図９を参照して説明する。
まず、プログラマは、ＥｎｔｒｙオブジェクトからＵｓｅｒオブジェクトを生成する（図８の（１）、（２））。
User su1 = entry.createUser("sip:050xxx@example.net");
User su2 = entry.createUser("sip:050yyy@example.net");
【００４７】
次に、su1とsu2の間の通話を確立するために、プログラマは、
su1.connect(su2);
と記述する（図８の（３））。
【００４８】
このプログラムがコンパイルされるとき、コード生成部３（図２参照）は、このconnectが呼び出されたことを検知して、ＯＬＡＰＰのＰａｒｌａｙ ＸのmakeCallSession ＡＰＩ、addCallParticipant ("sip:050xxx@example.net") ＡＰＩ、addCallParticipant ("sip:050yyy@example.net") ＡＰＩを実行するプログラムを生成する。
【００４９】
また、su1とsu2の間の通話を切断させるときは、プログラマは、
su1.disconnect();
またはsu2.disconnect();
と記述する（図８の（４））。
【００５０】
この場合、コード生成部３は、このdisconnectが呼び出されたことを検知して、ＯＬＡＰＰのＰａｒｌａｙ ＸのdeleteCallParticipant ("sip:050xxx@example.net") ＡＰＩまたはdeleteCallParticipant ("sip:050yyy@example.net") ＡＰＩを実行するプログラムを生成する。
【００５１】
また、例えば、企業のサポート窓口等で、初めに電話に出たオペレータが、他の専門の担当者等へ電話を転送するようなとき等、通話中の相手を切り替えるときは、次のように記述する（図９参照）。
１     //  2者を呼び出して通話を開始させる
２     su1.connect(su2);
３     
４     //  転送先のユーザを作成
５     SurumeUser su3 = entry.createUser("sip:050zzz@example.net");
６
７     //  su2との通話を終了してsu3に転送する
８     su1.switchto(su3);
【００５２】
このプログラムがコンパイルされるとき、コード生成部３は、switchtoが呼び出されたことを検知して、ＯＬＡＰＰのＰａｒｌａｙ ＸのdeleteCallParticipant ("sip:050 yyy @example.net") ＡＰＩ、addCallParticipant ("sip:050xxx@example.net") ＡＰＩを実行するプログラムを生成する。
【００５３】
また、ユーザの端末に、メッセージを再生させるときは、次のように記述する。
１     //  2者を呼び出して通話を開始させる
２     su1.connect(su2);
３
４     // ・・・何らかの処理
５
６     //  su1に文章を読み上げた音声を流す
７     su1.playText("もう寝る時間");
８
９     //  su2にAudioファイルを再生する
１０   su2.play("http://hogehoge.com/file/byebye.wav");
１１
１２   //  su2に動画ファイルを再生する
１３   su2.play("http://hogehoge.com/file/sleep.mov");
【００５４】
このプログラムがコンパイルされるとき、コード生成部３は、playTextを検知すると、文字を読み上げた音声がsu1の端末に向けて再生される（６行目）。この際、コード生成部３は、playTextが呼び出されたことを検知して、ＯＬＡＰＰのＰａｒｌａｙ ＸのplayTextMessage ＡＰＩを実行するプログラムを生成する。
【００５５】
また、Ｕｓｅｒオブジェクトへのｐｌａｙメソッドを記述すると、音声ファイルや動画ファイルがsu1の端末に向けて再生される（９行目、１２行目）。この際、コード生成部３は、playが呼び出されたことを検知して、ＯＬＡＰＰのＰａｒｌａｙ ＸのplayAudioMessage ＡＰＩまたはplayVideoMessage ＡＰＩを実行するプログラムを生成する。
【００５６】
このように、Ｈｉｇｈ−ｌｉｂｒａｒｙを用いることによって、テレコムに馴染みのない開発者であっても、テレコム機能を利用するアプリケーションを容易に作成することができる。
【００５７】
なお、ＳＤＫは、Ｌｏｗ−ｌｉｂｒａｒｙ及びＨｉｇｈ−ｌｉｂｒａｒｙの他に、Ｉｎｔｅｒａｃｔｉｏｎ−ｌｉｂｒａｒｙ及び／またはＳｙｎｃ−ｌｉｂｒａｒｙを更に含む構成としてもよい（図２参照）。
【００５８】
Ｉｎｔｅｒａｃｔｉｏｎ−ｌｉｂｒａｒｙについて、図１０を参照して説明する。
プログラム実行時に、プログラム内で生成されたＣａｌｌオブジェクトの情報（インスタンス）が、Ｉｎｔｅｒａｃｔｉｏｎ−ｌｉｂｒａｒｙのデータベース部４（図２参照）に保管（格納）されるようになっている（図１０の（１））。
上述したＬｏｗ−ｌｉｂｒａｒｙを用いて、Ｉｎｔｅｒａｃｔｉｏｎを開始することで、ＯＬＡＰＰのＰａｒｌａｙ ＸのnotifyPlayAndCollectEvent ＡＰＩとstartPlayAndCollectNotification ＡＰＩとが実行される（図１０の（２））。
そして、ＳＩＰ端末側でボタン操作等が完了すると、ＯＬＡＰＰのＰａｒｌａｙ Ｘ  ＡＰＩにて規定されたnotifyPlayAndCollectEventメッセージが、ＳＯＡＰにより、Ｗｅｂアプリケーション側に送信（通知）されてくる。Ｊａｖａ（登録商標）言語では、notifyPlayAndCollectEventメッセージを受け取るプログラムは、notifyPlayAndCollectEventクラス内に記述される。
この中で、notifyPlayAndCollectEventメッセージの引数に含まれるCorrelator値から、ＣａｌｌのＩＤ（CallSessionId）を取得して（図１０の（３））、これをキーに、前記データベース部４からＣａｌｌオブジェクトを取得することで、通知を受けた後の動作をプログラム上に記述することができる（図１０の（４））。
【００５９】
このように、Ｉｎｔｅｒａｃｔｉｏｎ−ｌｉｂｒａｒｙのデータベース部４を用いることによって、プログラマが入力するコードについて、データベース部４に格納されているプログラムが記述されるようになっており、プログラムを容易に作成することができる。
【００６０】
次に、Ｓｙｎｃ−ｌｉｂｒａｒｙについて、図１１を参照して説明する。
このＳｙｎｃ−ｌｉｂｒａｒｙは、ＯＬＡＰＰにおける呼状態との自動同期機能部５を有する（図２参照）。つまり、ＳＯＡＰリクエストに対するレスポンスと、ＳＩＰ端末の呼の状態の変化とを同期させる機能を有している。
【００６１】
ＯＬＡＰＰ（Ｐａｒｌａｙ Ｘ）は、ＳＯＡＰ  ＡＰＩからのリクエストメッセージを受信すると、ＳＩＰの呼制御（ＳＩＰ  ＩＮＶＩＴＥの送信等）を開始するが、このとき、ＯＬＡＰＰは、ＳＩＰ呼制御が成功したかどうかに関わらず、ＳＯＡＰリクエストメッセージに対するレスポンスを返す。これは、例えば、ＳＩＰ  ＩＮＶＩＴＥの場合、端末が電話を取るまで何秒かかるか分からないため、ＳＩＰ呼制御側の処理完了を待ってから、ＳＯＡＰリクエストメッセージに対するレスポンスを返すと、ＳＯＡＰリクエストとＳＯＡＰレスポンスとの間の時間が長くなり、ＳＯＡＰリクエストの送信元で、タイムアウトが発生する可能性があるためである。しかし、開発者によっては、ＳＯＡＰレスポンスを受け取ったことが、呼制御側の処理完了を意味すると勘違いすることも多い。
【００６２】
そのため、図１１のように、プログラム上でＣａｌｌオブジェクト（図１１ではSynchronizedCallというオブジェクトを別途定義している）を生成し、これに対してaddParticipantを呼び出し、上記した方法でプログラムを生成し、そのプログラムが実行されるとき、自動同期機能部５は、ＯＬＡＰＰのaddCallParticipant ＡＰＩを呼び出すが、ＯＬＡＰＰのaddCallParticipantのレスポンスを受けた直後にプログラムに処理を戻すのではなく、ＯＬＡＰＰのgetCallInformation ＡＰＩをポーリングして呼び出し、呼の状態が変化したかどうかを確認して、変化したときにプログラムに処理を戻す（図１１の（Ａ））。
【００６３】
同様に、音声等を再生するｐｌａｙメソッドを記述し、上記した方法でプログラムを生成し、そのプログラムが実行されるとき、自動同期機能部５は、ＯＬＡＰＰのplayAudioMessage ＡＰＩを呼び出すが、ＯＬＡＰＰのplayAudioMessageのレスポンスを受けた直後にプログラムに処理を戻すのではなく、ＯＬＡＰＰのgetMessageStatus ＡＰＩをポーリングして呼び出し、呼の状態が変化したかどうかを確認して、変化したときにプログラムに処理を戻す。
【００６４】
このようにＳＯＡＰリクエストに対するレスポンスを、ＯＬＡＰＰが管理しているＳＩＰ呼状態の変化と同期させる（方法は、getMessageStatus等のＯＬＡＰＰの状態取得ＡＰＩを呼び出す）ことで、開発者が、ＳＯＡＰレスポンスを受け取ったことが、呼制御側の処理完了を意味すると勘違いすることを防止することができる。
【符号の説明】
【００６５】
１      ＳＯＡＰヘッダ生成部
２      ＳＯＡＰオペレーション生成部
３      コード生成部
４      データベース部
５      自動同期機能部
【図１】
2011049657.tif 000003
【図２】
2011049657.tif 000004
【図３】
2011049657.tif 000005
【図４】
2011049657.tif 000006
【図５】
2011049657.tif 000007
【図６】
2011049657.tif 000008
【図７】
2011049657.tif 000009
【図８】
2011049657.tif 000010
【図９】
2011049657.tif 000011
【図１０】
2011049657.tif 000012
【図１１】
2011049657.tif 000013