CommuniGate Pro
Version 5.1
アプリケーション
 
 
 
PBXApp

Real-Time Application モジュール

CommuniGate Pro のReal-Time Application モジュールによって提供されるインフラストラクチャを基礎にして、シグナルを処理するアプリケーションの設計とデプロイメントが可能です。
リアルタイムアプリケーションとはボイスコール(音声電話) を処理するアプリケーションをいい、 例えばボイスメール、自動転送、カンファレンシングなどのアプリケーションはいずれもリアルタ イムアプリケーションです。この種のアプリケーションにより"IP-PBX" 機能が実装され、その結 果、レガシーPBX (構内交換機) システムに代わる通信機能が提供されます。この機能は、イン ターネットスタンダードベースの通信機能です。

リアルタイムアプリケーションは、シグナルがいずれかのアカウントに送信されたときに起動され ます。また、特定のシグナルを明示的にリアルタイムアプリケーションに送り、この処理を介して リアルタイムアプリケーションが起動されるようにすることもできます。

CommuniGate Pro サーバーソフトウェアにはあらかじめリアルタイムアプリケーションがいくつか内 蔵されています。内蔵のリアルタイムアプリケーションは柔軟で、容易にカスタマイズが可能です。 一般的なケースでは、内蔵のリアルタイムアプリケーションで十分です。

このセクションでは、内蔵リアルタイムアプリケーションのカスタマイズについて説明します。ま た、リアルタイムアプリケーションはユーザーが作成することもでき、その方法についても解説します。

アプリケーション環境

リアルタイムアプリケーション環境は、次のファイル/ ディレクトリで構成されます。

リアルタイムアプリケーション環境は、複数の自然言語(話し言葉)をサポートしています。デフォ ルトの言語は英語です。英語以外の言語をサポートする場合、環境の中に「言語ディレクトリ」を作 成しなければなりません。言語ディレクトリの名前は、サポートする言語の名前です(french、 russian、japanese など)

言語ディレクトリには、通常のリアルタイムアプリケーション環境のファイルと同じファイルを格納 できます(つまり、特定の言語のアプリケーション環境を作成できます)。ただし、言語ディレクト リの中にさらに言語ディレクトリ(サブディレクトリ) を格納することはできません。

使用される言語は、リアルタイムアプリケーションのタスクを介して選択されます。デフォルト(英 語) 以外の言語が選択されている場合、アプリケーション上でリアルタイムアプリケーション環境の ファイルの読み取りが実行されると、選択されている言語の言語ディレクトリが使用されます。その 言語ディレクトリにファイルが見つからなかったときには、リアルタイムアプリケーション環境自体 からファイルが取り出されます(つまりデフォルトの言語ファイルが使用されます)。

CommuniGate Pro サーバーには、内蔵のリアルタイムアプリケーション環境が付属しています(「ス トック」リアルタイムアプリケーション環境とも呼びます)。この環境には、基本的なアプリケー ション( と、そのアプリケーションの動作に必要なファイル) が格納されており、また、再利用可能 なコードセクションファイルとメディアファイルも格納されています。

CommuniGate Pro システムにはそれぞれ、サーバーワイドアプリケーション環境があります。ダイナミッククラスタ の場合、アプリケーション環境は、サーバーワイドではなく、クラスタワイドアプリ ケーション環境です。サーバーワイドまたはダイナミッククラスタの( リアルタイム) アプリケー ション環境の設定や変更を行いたい場合、WebAdmin インターフェイスの[Domains] セクションを 開き、[PBX] リンクをクリックします。

また、CommuniGate Pro のドメイン にもそれぞれ、そのドメインのアプリケーション環境( ドメイン アプリケーション環境) があります。ドメインアプリケーション環境の設定や変更を行いたい場合、 WebAdmin インターフェイスの[Domains] セクションを開き、設定を行いたいドメインを選択しま す。その後、そのドメインの[Domain Settings] ページを開き、[PBX] リンクをクリックします。

クラスタワイドアプリケーション環境、または、共有ドメインのアプリケーション環境を変更した場 合、その変更は自動的にすべてのクラスタメンバーで有効になります。

上記のように、ドメインにはそれぞれ、そのドメイン独自のアプリケーション環境( ドメインアプリ ケーション環境) があります。つまり、ドメインアプリケーション環境はそれぞれ独立しているた め、ドメインが異なればアプリケーションの名前は同じでもかまいません。

アプリケーション環境のファイルでは、非ASCII 文字のキャラクタセットはUTF-8 キャラクタセッ トでなければなりません。


環境のファイルの階層

リアルタイムアプリケーションのタスクは、CommuniGate Pro のアカウントの「資格」で実行されま す。
アプリケーションから何らかの環境ファイル(環境で使用されるファイル) が要求され、選択されて いる言語がデフォルトの言語(英語) の場合、CommuniGate Pro サーバー上で、次の場所(ディレク トリ) に対して検索が実行されます。そのファイルが見つかれば、そのファイルが使われます。

現在、選択されている言語がデフォルト以外の言語の場合、まず上記の3 つの環境の中の言語ディレ クトリの中に、そのファイルがあるかどうかがチェックされます。どの環境にもファイルがなかった ときには、上記の3 つの環境の中がチェックされます。つまり、デフォルト以外の言語のファイル (特定の言語のアプリケーション環境) が作成されていなかった場合、デフォルトの言語(英語) の ファイルが使用されます。

リアルタイムアプリケーション環境は上記のような階層構造になっているため、アプリケーションの カスタマイズは容易です。例えば、全ドメインの全アカウントで同じアプリケーションを使用できる ように設定できます( この場合、ストック環境またはサーバーワイド環境を使用します)。また、ド メイン管理者は、そのドメインのドメイン環境のカスタマイズが可能です。カスタマイズするには、 そのドメイン環境にカスタムファイルをアップロードします。


環境の管理

WebAdmin インターフェイスにはリアルタイムアプリケーション環境エディタページが用意されてい ます。このページを使って、サーバーワイド( リアルタイムアプリケーション) 環境、クラスタワイ ド環境、ドメイン環境の管理が可能です。

サーバーワイド環境またはクラスタワイド環境の管理を行いたい場合、WebAdmin インターフェイス の[Domains] セクションを開き、[PBX] リンクをクリックします。ドメイン環境の管理を行うには、WebAdmin インターフェイスの[Domains] セクションの[Domain] ページを開き、その後、[PBX] リンクをクリックします。

環境エディタ(Environment Editor) ページには、その環境で「見える」ファイルがすべて一覧で表 示されます。ページには、この環境にユーザー( ドメイン管理者など) が直接アップロードしたファ イルのほか、デフォルトファイルも表示されます。デフォルトファイルはいずれも、この環境のファ イルのソース(供給元) である環境にアップロードされているファイルです。

 名前サイズ変更済み
Help.gif15525-Sep-04
デフォルトaddressbook.sppi514323-Sep-05
デフォルトvoicemail.sppr8K27-Feb-05
デフォルトfailure.wav10K27-Feb-05
...
デフォルトxfer.wav15K28-Sep-05
xonix.wav30K02-Oct-05

ページのファイルのうち、この環境に直接アップロードされたファイルには、左側の[Marker] 欄に チェックボックスが表示されます。また、デフォルトファイル、つまり、この環境のファイルのソー スである環境にアップロードされており、この環境で「見える」ファイルには、Marker] 欄に [default] というラベルが表示されています。

ページのファイル(環境ファイル) はいずれも、その名前をクリックしてダウンロードできます。

ファイルを環境にアップロードしたい場合、[Browse] ボタンをクリックし、ワークステーションで ファイルを選択した後、[Upload] ボタンをクリックします。

環境にアップロードされているファイルを削除したい場合、そのファイルのチェックボックスを選択 し、[Delete Marked] ボタンをクリックします。

I拡張子が.sppr または.sppi のファイルをアップロードしようとした場合、そのファイルには何ら かのCG/PL プログラムコードが格納されていると解釈されます。この場合、そのコードのコンパイ ルが実行されます。
コンパイルの際、コンパイラがエラーを検出したときには、ファイルはアップロードされません。た だし、そのファイルの内容がエディタページに表示され、エラーが発生した箇所に赤の<--ERROR--> マーカーが表示されます。

リアルタイム環境のファイルは、使用中は内部キャッシュに格納されています。いずれかの環境に ファイルをアップロードすると、その環境のキャッシュは自動的に消去されます。また、共有ドメイ ンの環境またはクラスタワイド環境の場合、その環境にファイルをアップロードすると、更新後の ファイルが全クラスタメンバーで自動的に有効になります。

複数のファイルを一度にアップロードしたい場合、TAR アーカイブ(拡張子が.tar のファイル) を使います。例えば、リアルタイムアプリケーションを作成し、そのアプリケーションをアップロー ドするときには、そのアプリケーションのTAR アーカイブ(.tar ファイル) を作成して環境に アップロードします。アップロード時には、そのアーカイブは自動的にアンパックされ、個々のファ イルが環境に保存されます。一つずつアップロードしたときと同じです。

エディタページには、その環境の言語ディレクトリもすべて表示されます([National Variants] パネ ル)。

言語
アラビア語
フランス語
ロシア語

新規のバリアント(言語ディレクトリ) を作成する場合、その言語の名前を入力し、[Create Language] ボタンをクリックします。

言語ディレクトリは、その名前をクリックすると開きます。ページには、その言語の名前が表示され ます。[UP] リンクをクリックすると、デフォルト言語ファイルのリストが表示されます。


アプリケーションモデル

リアルタイムアプリケーションは、タスクとして動作します。具体的には、リアルタイムアプリケー ションの起動の際、CommuniGate Pro サーバーによって新規のタスクが開始され、このタスクを介し て、そのアプリケーションのメインエントリコードセクション(entry Main) が実行されます。

リアルタイムアプリケーションのタスクは、非接続(disconnected) モードでの動作が可能です。ま た、ピア(peer) とのリアルタイムセッション(電話など) の一部として動作させることもできま す。ピアとは任意のリアルタイムエンティティをいい、例えば、SIP フォン、PSTN ゲートウエイ、 リモートのリアルタイムアプリケーション(SIP を介して通信を実行)、ローカルのリアルタイムア プリケーション(つまり他のタスク) はいずれもピアです。

ピアとタスクとの間でセッションが実行される場合、タスクの実行モードとしては状況によって次の 4 種類があります。

incoming
受信モード。受信セッション(電話用語ではコール/ 呼、SIP 用語ではINVITE 要求) がタスクに送られたが、タスクは、そのセッションをまだ受け取っていない状態。
provisioned
暫定応答(接続準備完了)モード。受信セッションがタスクに送られ、タスクは、そのセッションを まだ受け取っていないが、コーラー(発信側) に対して暫定応答が送信された状態。
connecting
接続中モード。タスクにより送信セッション(発信)が開始されたが、まだセッションが確立されて いない状態。
connected
接続完了モード。タスクで受信セッションが正常に受け取られた状態、または、タスクで送信セッ ションが確立された状態。
PBX Illustration

タスクは、ピアからシグナル を受信でき、またタスク自体からシグナルを送信することもできます。 シグナルを使ってカレントのセッションを終了させたり、セッションパラメータを更新したりできま す。ピアから送信されたシグナルの中には、リアルタイムアプリケーション環境で処理されるものも あります。これ以外のシグナルは、タスクに渡され処理されます。

リアルタイムアプリケーションのタスクには、メディアチャンネル(Media Channel) があります。 セッションが確立されると、メディアチャンネルがピアのメディアチャンネルと接続されます。

タスクでは、そのタスクのメディアチャンネルを使ってメディア(オーディオ、ビデオ) をピアに送 信できます。また、ピアから送られたメディアを保存することもできます。

タスクではまた、ピアで使用されているメディア(ピアのメディア) を別のメディアサービスに切り 替えることができます。例えば、ピアのメディアをミュージックオンホールド(保留音) (を提供す るサービス) などに切り替えることが可能です。ピアのメディアの切り替えが行われると、タスクの それまでのメディアチャンネルは使用できなくなります。ただし、タスクでは、シグナルをピアに送 信することでピアの制御が可能で、またピアからのシグナルの受信も可能です。その後、タスク側で 必要に応じて、以前のピアのメディアに再度、切り替えることができます。これで、タスクのメディ アチャンネル(以前のピアのメディアに使用されていたメディアチャンネル) も有効になります(下 記の図を参照)。

PBX Illustration

タスクのメディアチャンネルには、「カンバセーションスペース(会話空間)」があります。タスク は、カレントのピア以外のピアのメディアを、そのタスクのメディアチャンネルに接続できます。こ の処理により、カンバセーションスペース(カンファレンス) が作成されます。このスペースには、 タスクのカレントのピアと、ピアのメディアを介してタスクに接続されているピアが存在します。カ ンバセーションスペースに存在するいずれかのピアからメディアが送信された場合、そのメディアは 他のピアすべてにリレーされます。この場合の処理は、メディアのタイプに応じて、そのメディアの データミキシングアルゴリズムとパラメータを使って実行されます。

PBX Illustration

タスクにピアのメディアが接続されている場合、そのタスクから、そのタスクのピア(元々のピア) に加えて、接続されているピアに対して同時にメディアを送信できます。

コールトランスファー

リアルタイムアプリケーションのタスクを介して、コールトランスファー(通話中転送) 要求の自動 処理が可能です。

タスクでREFER 要求が受信( リモートクライアントまたは別のタスクから送信) された場合、その タスクでは、次のいずれかの処理が可能です。

REFER 要求の自動処理の場合(最初の処理)、タスクで新規のINVITE 要求が生成されます。続いて、 そのINVITE 要求がRefer-To: フィールド(ピアからのREFER 要求に格納) に指定されているアドレ ス(別のピア) に送信されます。INVITE 要求の生成中、タスクからピアにNOTIFY 要求が送信され、 このNOTIFY 要求を介して、コール処理の進行状況がピアに通知されます。

別のピアに対するINVITE 要求の処理が完了すると、タスクからカレントのピアにBYE 要求が送信さ れます(ただし、すでにカレントのピアからBYE 要求が受信されているときには、この処理は行わ れません)。これで、タスクのシグナルダイアログとメディアチャンネルが別のピアに切り替わりま す。

PBX Transfer Illustration

上記のようにREFER 要求によってINVITE 要求処理が開始されますが、この場合、タスクでINVITE 要求(別のピアに送信) の認証情報のチェックが可能です。アプリケーションプログラム(のタス ク) では、次の処理が可能です。

CommuniGate Pro にはコールトランスファー「補助」機能が用意されています。つまり、リアルタイ ムアプリケーションエンジンが搭載されており、このエンジンにより、INVITE シグナル(要求) の うちReplaces フィールドがあるINVITE シグナル(いずれかのピアから送信) が自動的に監視、検出 されます。ここで、Replaces フィールドに指定されているダイアログデータ(通話情報) が、いずれ かのタスクで確立されているアクティブダイアログデータと一致した場合、そのタスクにINVITE シ グナルが送られます。そのタスクでは、カレントのピアに対してBYE シグナルを送信します。同時 に、そのタスクのシグナルダイアログがINVITE シグナルのソース(ピア) に接続され、また、その タスクのメディアチャンネルが、そのINVITE シグナルに指定されているエンティティ(ピア) に切 り替わります(下図を参照)。
このコールトランスファー補助機能は自動的に実行され、タスクを実行しているアプリケーションプ ログラムには透過的です。

PBX Transfer Illustration

ブリッジドコール

リアルタイムアプリケーションの2 つのタスクを使ってメディアブリッジを作成できます。メディア ブリッジの生成後、2 つのタスクのピア(各タスクに接続されているピア) の間でメディアの交換が 可能になります。また、各タスクで、そのピアのシグナリング処理の制御が可能です。メディアブ リッジによるコール(呼) をブリッジドコールと呼んでいます。

メディアブリッジは次のようにして作成できます。

Bridge Start Illustration

タスクA とタスクB が「ブリッジ」で接続されている状態(ブリッジドコール) にある場合、どち らかのタスク(下の例ではタスクB) で、そのタスクのピアからre-INVITE シグナルを受信できま す。このre-INVITE シグナルに格納されているメディア識別情報を介して、そのタスクのメディアパ ラメータが変更されます(保留/ 再開の切り替え、別のメディアソースへの切り替えなど)。re- INVITE シグナルはリアルタイムアプリケーションエンジンによって自動的に処理され、したがって、 そのタスクのアプリケーションプログラムで処理を定義する必要はありません。

Bridge Update Illustration

タスクA とタスクB が「ブリッジ」で接続されている状態(ブリッジドコール) にある場合、どち らかのタスク(下の例ではタスクA) で、そのタスクのピアからコールトランスファー(REFER) シ グナルを受信できます。REFER シグナルの受信後、次のような処理が行われます。

Bridged REFER Illustration

タスクA とタスクB が「ブリッジ」で接続されている状態(ブリッジドコール) にある場合、一方 のタスク( ここではタスクA) で、コールトランスファー(Replaces フィールド付きのINVITE) シ グナルを受信できます( このシグナルは、Replaces フィールドの内容に応じてシグナル モジュールに よってタスクに送信されます)。受信後の処理は次の通りです。

また、タスクA とタスクB が「ブリッジ」で接続されている状態(ブリッジドコール) にある場合、 どちらかのタスク(下の例ではタスクA) でメディアブリッジを破棄できます。この場合の処理は次 の通りです。

Bridge Break Illustration

また、タスクA とタスクB が「ブリッジ」で接続されている状態(ブリッジドコール) にある場合、 一方のタスク(下の例ではタスクA) で、そのタスクのピアから切断(BYE) シグナルを受信できま す。このシグナルの受信により、タスクは終了します( タスクは、これ以外の各種の理由でも終了し ます)。この場合の処理は次の通りです。

Bridge Disconnect Illustration

場合によっては、リアルタイムアプリケーションエンジンにより、タスクのメディアチャンネルを 「メディアリレー」として使ってメディアブリッジが生成されることもあります。

B2BUA(バックツーバックユーザエージェント)

ブリッジドコール機能( メディアブリッジ) によりB2BUA (バックツーバックユーザエージェント) が実装されます。つまり、ブリッジされている2 つのリアルタイムタスクは「スマートプロキシ」と して機能します。一方、各タスクのピアは相互に接続されており直接、通信が可能です。また、この 状態でも各タスクと、各タスクのアプリケーションプログラムを使ってシグナリング処理を制御でき ます。


CG/PL アプリケーション

リアルタイムアプリケーションは、CG/PL 言語を使って作成できます。

受信コールの処理の際、タスクが生成されます。同時に、そのタスクのCG/PL アプリケーションプ ログラムのメインエントリ(entry Main) が実行されます。

リアルタイムアプリケーションでは、 外部宣言を使用できます。アプリケーションで外部宣言にコー ドセクション(プロシージャまたは関数) の名前を定義しておくと(キーワードexternal を使 用)、ファイル名が、そのコードセクションの名前で、かつ拡張子が.sppi のファイルがカレントの 環境から読み込まれます。この場合、そのファイルの中のプログラムコードには、外部宣言で指定し た名前のコードセクションが存在しなければなりません。また、コードセクションはプロシージャま たは関数でなければなりません。
そのファイル(.sppi) のプログラムコードには、外部宣言で呼び出すコードセクション以外のコー ドセクションも定義できます。

CG/PL 言語でリアルタイムアプリケーションを作成する場合、次の内蔵プロシージャ/ 関数を使用 できます。

入力

ReadInput(timeOut)
この関数では、外部タスクの通信データ、つまりピア上で入力されたDTMF 文字、ピアから送信さ れたシグナル、別のタスクやシステムから送信されたイベントを取得できます。イベントについて は、詳しくはCG/PL の「 イベント」のセクションを参照してください。
timeOutは数値で、ここには最大待機時間( タイムアウト、単位秒) を指定します。timeOut の値を 0 にしておくと、タイムアウトなしでデータやイベントがチェック・取得されます。
この関数の戻り値は次の通りです。
  • タスクのDTMF バッファの最初のDTMF 文字を格納した文字列。この文字は、タスクのDTMF バッファから削除されます。
  • 最初のイベント (キューで待機中の最初のイベント) を格納した辞書。このイベントは、タス クのイベントキューから削除されます。
  • 指定した待機時間( timeOut) 内にDTMF 文字またはイベントが取得されなかったときには NULL 値が返ります。

ピアとの接続が切断された場合、タスクはシステムから切断イベント(Disconnect Event)を受け取 ります(このイベントの辞書には、.sender 要素は格納されていません)

IsDisconnectEvent(input)
inputの値が切断イベント(Disconnect Event)の場合、この関数からTRUE 値が返ります。
//
// Sample: ReadInput()
//   Accept an incoming call (stop if it's not possible).
//   Play the PressPound media file.
//   Wait for any input for up to 5 seconds.
//   If the "pound" ("#") symbol was entered,
//     play the Good media file.
//   Otherwise,
//     play the Bad media file.
//   Stop.
//
entry Main is
  if AcceptCall() != null then stop; end if;
  PlayFile("PressPound");
  PlayFile(ReadInput(5) == "#" ? "Good" : "Bad");
end entry;

シグナル

RejectCall(responseCode)
このプロシージャでは、受信セッション(INVITE 要求) が存在する場合、その受信セッションの拒 否が可能です。タスクのモードは、incoming またはprovisioned のいずれかでなければなりま せん。
responseCode (数値) には400 から699 までのいずれかの数値を指定します。この数値が、コーラー にシグナル応答コードとして返却されます。401 を指定しておいた場合、要求がCommuniGate Pro サーバーの外部から送信された(
SIP プロトコル経由) 要求だったときには、SIP サーバーモジュー ルにより所定のフィールドが応答に追加されます。追加されたフィールドは、クライアント認証に利 用可能です。
タスクのモードはdisconnected に変更されます。
AcceptCall()
この関数を使って、受信セッションが存在する場合、その受信セッションを受け取る(処理する)こ とができます。タスクのモードは、incoming またはprovisioned のいずれかでなければなりま せん。
受信セッションの受け取りに成功した場合、この関数からNULL 値が返ります。同時に、タスクの モードがconnected に変更されます。
受信セッションの受け取りに失敗したときには、エラーコード文字列が返ります。また、タスクの モードがdisconnected に設定されます。
//
// Sample: AcceptCall()/RejectCall()
//   If the current local time is not between 8:00 and 17:00,
//     reject the call (with the 403 error code) and stop.
//   Otherwise,
//     accept the call (stop if it is not possible)
//     play the Welcome media file and stop.
//
entry Main is
  currentTime = TimeOfDay(GMTToLocal(GMTTime()));
  currentHour = currentTime / 3600;
  if currentHour < 8 or currentHour >= 17 then
    RejectCall(403); stop;
  end if;
  if AcceptCall() != null then stop; end if;
  PlayFile("Welcome");
end entry;
RedirectCall(newURI)
このプロシージャでは、受信セッションが存在する場合、その受信セッションのリダイレクトが可能 です。タスクのモードは、incoming またはprovisioned のいずれかでなければなりません。
newURIの値は、文字列または文字列の配列のいずれかでなければなりません。newURIで指定した URL に受信セッションがリダイレクトされます。タスクのモードは、disconnected に切り替わりま す。
ForkCall(newURI)
このプロシージャでは、受信セッションが存在する場合、その受信セッションのリダイレクト (フォーク)が可能です。タスクのモードは、incoming またはprovisioned のいずれかでなければなり ません。
newURIの値は、文字列または文字列の配列のいずれかでなければなりません。newURIで指定した URL に受信セッションがリダイレクトされます。カレントのタスクのモードは、そのまま維持され ます。したがって、その後、このコールの受け取り、拒否、暫定応答、リダイレクト、フォークが可 能です。
ProvisionCall(startMedia,reliably)
この関数を使用して、待機中の受信セッション要求が存在する場合、その要求に対して暫定応答を送 信できます。タスクのモードは、incoming またはprovisioned のいずれかでなければなりませ ん。
startMedia ( メディアチャンネル開始) の値がNULL 値でない(TRUE を指定した) 場合、タスクの メディアチャンネルが生成され、タスクのモードがprovisioned に設定されます。また、メディ アチャンネル処理(PlayFile など) を使って「呼び返し音(ring-back tone)」を生成できる状態に なります。
reliablyの値がNULL 値でない(TRUE を指定した) 場合、暫定応答の確認要求(SIP のPRACK) が送 信されます。その後、タスクは、確認要求の応答が返るまで待機状態を維持します。
暫定応答が正常に送信された場合、この関数からはNULL 値が返ります。暫定応答の送信に失敗し たときには、この関数からエラーコード文字列が返ります。
//
// Sample: RedirectCall()/ProvisionCall()
//   Provision the call (stop if it is not possible).
//   If the current local time is between 12:00 and 13:00,
//     fork the call to user1 in the same domain.
//   Play the "PleaseWait" media file.
//   If the current local time is not between 8:00 and 17:00,
//     redirect the call to user2 in the same domain, and stop.
//   Otherwise,
//   Accept the call (stop if it's not possible).
//   Play the Welcome media file, and stop.
//
entry Main is
  if ProvisionCall(true,true) != null then stop; end if;
  currentTime = TimeOfDay(GMTToLocal(GMTTime()));
  currentHour = currentTime / 3600;
  if currentHour >= 12 and currentHour <= 13 then
    ForkCall("sip:user1@" + MyDomain());
    stop;
  end if;
  PlayFile("PleaseWait");
  if currentHour < 8 or currentHour >= 17 then
    RedirectCall("sip:user2@" + MyDomain());
    stop;
  end if;
  if AcceptCall() != null then stop; end if;
  PlayFile("Welcome");
end entry;

注意: 何らかの理由で待機中の受信コールの処理がキャンセルされた場合、タスクには切断イベント (Disconnect Event) が送られます。この切断イベントがタスクで受信されると、タスクのモードが disconnected に切り替わります。

StartCall(destination)
この関数を使って、送信セッション(送信コール/ 発信) を開始できます。タスクのモードは、 disconnected でなければなりません。
sendURI の値は文字列でなければなりません。このパラメータには、セッション要求の送信先のURI を指定します。または、下記の要素を格納した辞書を指定します。
"" (キー名が空白の文字列の要素)
要求の送信先のURI。
From (オプション)
URI。要求のFrom フィールドに格納されます。
To (オプション)
an E-mail, URI, or field-data to use for the request To field. If not specified, the request URI is used.
Call-ID (オプション)
コールID を示す文字列。要求のCall-ID フィールドに格納されます。
Expires (オプション)
a number specifying the maximum calling (alerting) time (in seconds).
Subject (オプション)
request Subject string.
Remote-Party-Id (オプション)
リモートパーティID を示す辞書。この辞書は要求のRemote-Party-Id フィールドに格納されます。
Privacy (オプション)
a string to use for the request Privacy field.
Diversion (オプション)
an array to use for the request Diversion fields.
P-CGP-Private (オプション)
a string to use for the request P-CGP-Private field. This field can be used to pass arbitrary parameters between sending and receiving Tasks (on the same or different systems).
送信セッション(発信) の開始に失敗したときには、この関数からエラーコード文字列が返ります。
送信セッションが正常に開始されたときには、関数からNULL 値が返ります。その後、システムか らコールプログレス(進行状況) イベントがタスクに送られ、タスクで受信されます。この場合、ま ず暫定応答(provisional response) イベント(0 個以上) が、その後、最終応答(final response) イベ ント(1 つ) が受信されます。
送信セッションの確立に成功したときには、パラメータなしの最終応答が受信されます。送信セッ ションの確立に失敗したときには、パラメータが1 つ(エラーコード文字列) の最終応答が受信され ます。
IsCallProvisionEvent(input)
inputの値が暫定応答(provisional response) イベントだった場合、この関数からTRUE 値が返りま す。それ以外の場合、NULL 値が返ります。
IsCallCompletedEvent(input)
inputの値が最終応答(final response) イベントだった場合、この関数からTRUE 値が返ります。それ 以外の場合、NULL 値が返ります。タスクで、パラメータなしの最終応答イベントが受信された場 合、コールシグナリング処理が正常に完了したことを示します。一方、受信された最終応答イベント にパラメータ(エラーコード文字列) が存在した場合、コール処理が失敗したことを意味します。
CancelCall()
タスクに待機中の送信セッション(StartCall 関数によって開始された送信セッション) がある場合、 このプロシージャを使って、その送信セッションをキャンセルできます。キャンセルしたときには、 タスクでは最終応答イベントは受信されません。
Disconnect()
このプロシージャでは、アクティブのセッションを終了できます。タスクのモードは、disconnected に切り替わります。
//
// Sample: StartCall()/Disconnect()
//   Accept an incoming call (stop if it's not possible).
//   Remember the caller URI.
//   Play the CallBack media file.
//   Disconnect();
//   Call the caller back (stop if it's not possible).
//   Play the IamBack media file, and stop.
//
entry Main is
  if AcceptCall() != null then stop; end if;
  fromWhom = RemoteURI();
  PlayFile("CallBack");
  Disconnect();

  if StartCall(fromWhom) != null then stop; end if;

  loop
    input = ReadInput(3600);
  exitif not IsCallProvisionEvent(input);
    null;
  end loop;

  if not IsCallCompletedEvent(input) or else
     input.parameter != null then stop; end if;

  PlayFile("IamBack");
end entry;
IsConnected()
タスクのモードがconnected だった場合、この関数からTRUE 値が返ります。
IsHalfConnected()
タスクのモードがconnected またはprovisioned だった場合、この関数からTRUE 値が返ります。
PendingRequestData(fieldName)
この関数では、待機中の受信要求のデータ要素を取り出すことができます。
処理対象の要求がなかったときは、この関数からNULL 値が返ります。待機中の要求があった場合、 fieldName (文字列) に指定した要素(フィールド) に応じて、その要素の値が返ります。fieldName に指定できるフィールドは次の通りです。
Call-ID
要求のCall-ID ( コールID) の値が返ります。値は文字列です。
From, To, Remote-Party-Id
指定したフィールド(上記のいずれか)が要求に存在した場合、辞書が返ります。この辞書の要素は 次の通りです。
"" (キー名が空白の文字列の要素)
アドレス( username@domainの形式)。
@realName
アドレスの「表示名(実名)」の部分の文字列。
tag
URI の"tag" パラメータ。
@uri-params
他の各URI パラメータを格納した辞書。
上記の要素は、アドレス("")を除きすべてオプションです。
Route, Record-Route, Diversion, Via, Path, Supported, Require, Proxy-Require, Privacy
フィールドの値を格納した文字列(単一もしくは複数) の配列が返ります。フィールドの値が存在し なかった場合、NULL 値が返ります。
CSeq
CSeq フィールドの数値の部分の値(数値) が返ります。
Max-Forwards
CSeq フィールドの値(数値) が返ります。
User-Agent, Reason, Privacy, P-CGP-Private
フィールドの値を格納した文字列が返ります。フィールドが存在しなかった場合、NULL 値が返りま す。
Accept
配列が返ります。配列には2 つの文字列、つまり有効と認められたコンテントタイプを示す文字列と 有効と認められたコンテントサブタイプを示す文字列が格納されています。このフィールドが存在し なかった場合、NULL 値が返ります。
Foreign-Asserted-Identity
the function returns an array containing one dictionary for each request P-Asserted-Identity field. Each dictionary contains the same elements as the From field dictionary.
If no request is pending, the function returns a null-value.
SetForeignCredentials(authName,password)
このプロシージャでは、資格情報(正規の名前とパスワード) をできます。ここで指定した資格情報 が、このタスクを使って送信される送信要求に使用されます。authName (正規の名前) とpassword (パスワード) は文字列でなければなりません。そうでない場合、資格情報はリセットされます。
SetReferMode(mode)
タスクでは、REFER要求で開始されるINVITE要求の認証が可能ですが、このプロシージャを使っ て、その方法を指定できます。方法は、パラメータmode (文字列) に指定します。指定できる値 は、次のいずれかです。
self
タスクの起動元のアカウント(カレントのアカウント) の認証情報を使って、INVITE 要求が認証さ れます。
peer
タスクのピア(REFER 要求の送信元) の認証情報を使って、INVITE 要求が認証されます。
上記以外の値
REFER 要求の処理(認証) は行われません。
SetTransferReportMode(mode)
This function sets the function flag for call transfer reporting.
If the mode value is a null-value, no event is sent when a Task is transferred to a different peer.
Otherwise, the Task receives a special CallTransferred Event when it is tarnsferred to a different peer.
The function returns the previous value of this function flag.
When a new Task is created, its call transfer reporting is disabled (the function flag is set to a null-value).
IsCallTransferredEvent(input)
This function returns a true-value if the input value is a CallTransferred Event. Otherwise the function returns a null-value.
SetBridgeBreakMode(mode)
このプロシージャでは、別のタスクによってメディアブリッジが破壊された場合のタスクの応答処理 を指定できます。処理は、パラメータmode に指定します。mode の値は文字列でなければなりませ ん。
disconnect
この値を指定しておいた場合、BYE シグナルがタスクのピアに送られ、同時にタスクのモードが disconnectedに切り替わります。
keep
タスクにメディアチャンネルがなかった場合、メディアチャンネルが作成されます。そのメディア チャンネルにタスクのピアが接続されます。

ダイアログ

RemoteURI()
この関数からは、ピア( リモート) のURI (ダイアログのFrom/To アドレスから取得) を格納した 文字列が返ります。セッションが存在しない場合、この関数からはNULL 値が返ります。
LocalURI()
この関数からは、タスク( ローカル) のURI を格納した文字列が返ります。
IncomingRequestURI()
この関数は、待機中の受信INVITE 要求のURI を格納した文字列を返します。待機中の受信INVITE 要求がない場合、NULL 値が返ります。
RouteLocalURI(uri)
この関数では、URL を指定し、そのURI に格納されている電子メールアドレスをルート できます。 URI の解析に失敗した場合、またはアドレスをルートできなかった場合、もしくはルート先が非ロー カルアドレス(つまり、別のシステムでホストされているアドレス) だったときには、この関数から NULL 値が返ります。それ以外の場合、この関数からはCommuniGate Pro ユーザーの電子メールアド レス(URI のアドレスのルート先のアドレス) が返ります。
この関数では、フォワーダエイリアスなどを含め、CommuniGate Pro のルーティングメソッドでサ ポートされているアドレスもすべて正常に処理されます。
RemoteIPAddress()
この関数は、セッション確立要求の受信元または送信先のIP アドレス( リモートIP アドレス) が返 ります。
RemoteAuthentication()
セッション開始要求が認証されなかった場合、この関数からはNULL 値が返ります。認証に成功し た場合、認証済みのユーザーの電子メールアドレスが返ります。

DTMF

タスクにはそれぞれDTMF バッファ文字列があります。DTMF 文字がINFO 要求を使って受信された 場合、またはメディアパケットの形で受信( メディアチャンネル経由) された場合、その文字が DTMF バッファ文字列に追加されます。

DTMF()
この関数は、DTMF バッファのカレントの内容を格納した文字列を返します。ただし、DTMF バッ ファの内容は変更されないため、この関数は通常、使用する必要はありません。代わりに関数 ReadInput() を使用します。
ClearDTMF()
このプロシージャを使ってDTMF バッファを空にできます。
SetInterruptOnDTMF(arg)
This function sets a flag controlling media playing interrupts with received DTMF symbols.
If the arg value specifies the new flag value: if this value is a null-value, received DTMF symbols will not interrupt media playing, otherwise received DTMF symbols will interrupt media playing.
When a Task is created, this flag value is set to a true-value.
The function returns the previous value of this flag.
SendDTMF(symbol)
この関数を使用して、DTMF 文字をピアに送信できます。symbol の値は、単一のDTMF 文字です。 この文字がピアに送信されます。
DTMF 文字の送信に成功した場合、この関数からはNULL 値が返ります。失敗したときにはエラー コードを格納した文字列が返ります。
//
// Sample: ReadInput()/SendDTMF()
//   Accept an incoming call (stop if it's not possible).
//   Wait for an input for 10 seconds. If no input - stop.
//   If a digit is entered
//      play that digit, and send it back.
//      (using "0" ... "9" files)
//   If a star ("*") is entered,
//     wait for a digit (for 3 seconds)
//     and play the digit number square (2 digits)
//   If a pound ("#") is entered or the Peer
//     has disconnected, or any Event was sent, stop.
//
entry Main is
  if AcceptCall() != null then stop; end if;
  loop
    input = ReadInput(10);
	if input == "*" then
	  input = ReadInput(3);
	  if IsString(input) and input != "#" then
	    input = "*" + input;
	  end if;
	end if;
  exitif not IsString(input) or input == "#";
    if Substring(input,0,1) != "*" then
	  PlayFile(input);
	  void(SendDTMF(input));
	else
	  input = Number(Substring(input,1,1);
	  product = input *  input;
	  PlayFile(String(product/10));
	  PlayFile(String(product%10));
	end if;
  end loop;
end entry;

メディア

PlayFile(fileName)
このプロシージャを使って、アプリケーション環境からファイルを取り出し、そのファイルを実行 (再生) できます。文字列パラメータfileNameには、そのファイルのファイル名を指定します。指定したファイルにファイル拡張子がなかった場合、サポートされている拡張子が自動的に追加されます。
ファイルは、サポートされているフォーマットのいずれかで、またメディアデータが格納されていな ければなりません。
セッションが終了した場合、DTMF バッファが空でない場合、このタスクのイベントがキューされて いる場合、ファイルは実行されないか、処理が中断されます。
PlayFileInLoop(fileName,msec)
このプロシージャは、PlayFile プロシージャと基本的には同じです。パラメータmsec の値は、数 値でなければなりません。
このプロシージャでは、fileNameに指定したファイルをmsecで指定した時間の長さ( ミリ秒) だけ 再生できます。ファイルのメディア再生時間長がmsecで指定した時間長より短い場合、ファイルは 繰り返し再生されます。msecに負の値を指定しておくと、時間の制限なしにファイルが繰り返し再 生されます。
セッションが終了した場合、DTMF バッファが空でない場合、このタスクのイベントがキューされて いる場合、ファイルは実行されないか、処理が中断されます。
Play(waveData)
このプロシージャでは、waveDataにデータブロック(波形データ) を指定し、そのデータブロック を再生できます。データブロックのデータ( メディアデータ) のフォーマットは、サポートされてい るフォーマットのいずれかでなければなりません。
セッションが終了した場合、DTMF バッファが空でない場合、このタスクのイベントがキューされて いる場合、ファイルは実行されないか、処理が中断されます。
PlayInLoop(waveData,msec)
このプロシージャは、基本的にはPlay プロシージャと同じです。ただし、メディアデータをループ で再生できます。このループ処理は、PlayFileInLoop プロシージャの場合と同じです。
Record(timeLimit)
この関数を使って、受信音声データを記録できます。timeLimitは正の数値でなければなりません。 timeLimitには最大記録時間長(秒) を指定します。セッションが終了した場合、DTMF バッファが 空でない場合、このタスクのイベントがキューされている場合、ファイルは実行されないか、処理が中断されます。
受信音声データの記録に失敗したときにはNULL 値が返ります。成功したときには、記録されたサ ウンドを格納したデータブロック(WAV フォーマット) が返ります。
SetLocalHold(flag)
This procedure sets the current call "on Hold" (if the flag is a true-value), or releases the call from hold (if the flag is a null-value).
This procedure can be used only when the Task is in the connected mode, and the Task peer media is not bridged.
ReleaseMediaChannel()
This procedure releases the Task Media Channel (releasing the associated system resources).
This procedure can be used only when the Task is in the disconnected mode, or when the Task peer media is bridged.
//
// Sample: Record()/PlayFile()/Play()
//   Accept an incoming call (stop if it's not possible).
//   Play the GreetingIs file.
//   Read the current prompt from
//      the MyGreeting.wav file in the Personal Site.
//   Loop playing the greeting.
//      if "1" is entered, rewrite the prompt file and quit
//      if "2" is entered, play "Beep" and record the prompt.
//
entry Main is
  if AcceptCall() != null then stop; end if;
  PlayFile("GreetingIs");
  prompt = ReadSiteFile("MyGreeting.wav");
  loop
    if IsData(prompt) then Play(prompt); end if;
    input = ReadInput(10);
  exitif not IsString(input) or else input == "#";
    if input == "1" then
	  if WriteSiteFile("MyGreeting.wav",prompt) then
	    PlayFile("Goodbye"); stop;
	  end if;
	  PlayFile("Failure");
	elif input == "2" then
	  PlayFile("Beep");
	  prompt = Record(30);
	else
	  PlayFile("InvalidEntry");
	end if;
  end loop;
  PlayFile("GoodBye");
end entry;

Bridges and Mixers

StartBridge(taskRef)
この関数では、タスクを指定し、そのタスクに特殊イベントStartBridgeを送ることができます。こ のイベントの送信により、そのタスクで、このタスクのピアのメディアが使用されるようになります(2 つのタスクの間にメディアブリッジが構築されます)。
taskRefの値はタスクハンドルでなければなりません。ここで指定したタスクハンドルのタスクに要 求( イベント) が送信されます。指定したタスクで、このタスクのピアノメディアが使用されるよう になった場合、この関数からNULL 値が返ります。処理に失敗した場合、エラーコード文字列が返 ります。
この関数が実行されると、このタスク(カレントのタスク) は待機状態に入ります。その後、指定し たタスクで、特殊イベントStartBridgeが受信されます。
IsStartBridgeEvent(input)
inputの値が特殊イベントStartBridgeだった場合、この関数からTRUE 値が返ります。そうでなかっ たときには、NULL 値が返ります。
RejectBridge(input,errorCode)
この関数を使って、StartBridge要求( イベント) を拒否できます。パラメータinputには、拒否する StartBridgeイベントを指定します。
この関数が実行されると、指定したStartBridge要求を送信したタスクのStartBridge 関数は、待機状 態から抜けます。また、StartBridge 関数からはエラーコード文字列が返ります。
AcceptBridge(input)
この関数を使って、送信されてきたStartBridgeイベントを受け付け、そのStartBridgeイベントの送 信元のタスクとの間でメディアブリッジを生成できます。inputの値は、送信されてきたStartBridge イベントでなければなりません。このStartBridgeイベントが受け取られます。
メディアブリッジの生成に成功した場合、この関数からNULL 値が返ります。失敗したときには、 エラーコード文字列が返ります。
この関数が実行されると、StartBridge要求の送信元のタスクのStartBridge 関数は、待機状態から抜 けます。メディアブリッジの生成に成功すると、そのStartBridge 関数からNULL 値が返ります。失 敗したときには、StartBridge 関数からはエラーコード文字列が返ります。

2 つのタスクの間にメディアブリッジが正常に構築されると、各タスクのピアのメディアが相互に接 続されます。また、どちらのタスクでも、メディアチャンネルがピアから切断されます。その結果、 メディアチャンネル処理(PlayFile、Record など) は不可能になります。メディアブリッジがア クティブの場合、タスクではStartBridge、AcceptBridge、AttachMixer の各関数は使用でき ません。

BreakBridge()
このプロシージャを使って、メディアブリッジ(StartBridge 関数とAcceptBridge 関数で構築) を削 除(破棄) できます。メディアブリッジが削除されると、メディアチャンネルとピアのメディアが接 続されます。この関数を実行すると、「ブリッジ」で接続されているタスクに特殊イベント BreakBridgeが送られます。
IsBreakBridgeEvent(input)
inputの値がBreakBridgeイベントだった場合、この関数からTRUE 値が返ります。そうでない場合、 NULL 値が返ります。BreakBridgeイベントの受信側のタスクでは、BreakBridge() プロシージャを使 用する必要はありません。BreakBridgeイベントが送信された段階でメディアブリッジは削除されま す。

メディアブリッジがアクティブの状態のときに、タスク側で、そのタスクのピアとの接続を切断した 場合、タスクのピアによりタスクとの接続が切断された場合、タスクの動作が停止した場合(通常の 停止またはエラーの発生による停止)、そのメディアブリッジは自動的に削除されます。

//
// Sample: StartBridge()/AcceptBridge()/BreakBridge()
//   Accept an incoming call (stop if it's not possible).
//   Create a new Task to run the Caller code,
//     and send it an Event with the URI to dial.
//   Play the PleaseWait media file.
//   Wait for a StartBridge Event from the Caller Task.
//   Accept it and loop till the user disconnects.
//
//   The Caller code:
//   Receive a URI to call as an Event from the parent Task
//   Connect to the URI and play the YouGotACall media file
//   StartBridge with the parent, loop till the user disconnects
//
entry Caller forward;
procedure ControlBridge() forward;

entry Main is
  if AcceptCall() != null then stop; end if;

  callerTask = spawn Caller;
  if callerTask == null or else
     SendEvent(callerTask,"dial","sip:internal@partner.dom") != null then
	PlayFile("Failure");
	stop;
  end if;

  PlayFile("PleaseWait");
  input = ReadInput(30);
  if not IsStartBridgeEvent(input) or else
     AcceptBridge(input) != null then
	PlayFile("Failure");
	stop;
  end if;

  // we have established a bridge
  ControlBridge();
  PlayFile("GoodBye");
end entry;

//
// Caller Task code
//
entry Caller is
  // wait for a "dial" event from the main task
  input = ReadInput(30);
  if input == null or input.what != "dial" then stop; end if;

  mainTask = input.sender;

  // Calling the URI specified as the Event parameter
  // If connection failed, send an Event back to the
  //  main task and quit 
  resultCode = StartCall(startEvent.parameter);
  if resultCode != null then
    void(SendEvent(mainTask,"result",resultCode));
	stop;
  end if;

  // wait for any Event other than provisional ones
  loop
    input = ReadInput(3600);
  exitif not IsCallProvisionEvent(input);
  end loop;

  // the parent has sent us "stop" - then we'll die immediately
  if IsDictionary(input) and then input.what == "stop" then stop; end if;
  
  if not IsCallCompletedEvent(input) or else input.parameter != null then
    void(SendEvent(mainTask,"result","generic error"));
	stop;
  end if;

  if StartBridge(mainTask) != null then
	PlayFile("Failure");
	stop;
  end if;

  // we have established a bridge
  ControlBridge();
  PlayFile("GoodBye");
end entry;

//
// Controlling the peer signaling:
// while the media is bridged:
//	exit if the peer hangs up, dials "#"
//  or if the bridge is removed
//  
procedure ControlBridge() is
  loop
    input = ReadInput(3600);
  exitif IsBreakBridgeEvent(input) or else 
          IsDisconnectEvent(input) or else input == "#";
  end loop;
  void(BreakBridge());
end procedure;
AttachMixer(input)
この関数では、StartBridge 要求を送信してきたタスクのピアのメディアを取得し、このタスク(カレ ントのタスク) に、そのメディアを接続できます。inputの値は、このタスクに送られたStartBridge イベントでなければなりません。
別のタスク(StartBridge 要求の送信元) のピアのメディアが、このタスクのメディアチャンネルに正 常に接続された場合、この関数からNULL 値が返ります。失敗したときにはエラーコード文字列が 返ります。
この関数が実行されると、StartBridge要求の送信元のタスクのStartBridge 関数は、待機状態から抜 けます。また、この関数により、別のタスクのピアのメディアが正常に接続されたときには、その StartBridge 関数からNULL 値が返ります。失敗したときには、StartBridge 関数からエラーコード文字 列が返ります。
DetachMixer(taskRef)
この関数を使って、このタスクのメディアチャンネルに接続されている別のタスクのメディアを分離 できます。taskRefの値には、別のタスク(そのピアのメディアが、このタスクに接続されているタ スク) のタスクハンドルを指定します。
taskRefで指定した別のタスクのピアのメディアが、このタスクのメディアチャンネルに接続されて おり、かつ、そのピアのメディアが指定した別のタスクに再接続された( メディアが、このタスクと 分離された) 場合、この関数からNULL 値が返ります。
指定したタスクにはBreakBridge イベントが送信され、メディアブリッジが削除されます。別のタス クのピアのメディアの分離に失敗した場合、この関数からエラーコード文字列が返ります。
taskRefの値としてはNULL 値を指定できます。NULL 値を指定した場合、このタスクのメディア チャンネルに接続されているメディア(他のタスクのピアのメディア) がすべて分離されます。
MixerAttached()
この関数からは、他のタスクのうち、そのピアのメディアが、このタスクのメディアチャンネルに接 続されているタスクのタスクハンドルが配列で返ります。このタスクのメディアチャンネルに他のタ スクのピアのメディアが1 つも接続されていなかったときには、この関数からNULL 値が返ります。
MuteMixer(taskRef,flag)
This procedure tells the Task Media Channel if it should ignore input from the specified Task.
The taskRef value should be a task handle. This Task should have its peer media attached to the current Task Media Channel.
The taskRef value can be a null-value, in this case the current Task peer media is controlled.
The flag value specifies the operation: if the flag is a true-value, the peer media is ignored, otherwise the Media Channel starts to process media from the peer.

タスクのメディアチャンネルに別のタスクのピアのメディアが接続されている場合、メディアはすべ て、そのタスクの単一のカンバセーションスペース(会話空間、カンファレンススペースとも呼びま す) に置かれます。

このタスクのメディアチャンネルに別のタスクのピアのメディアが接続されているときには、このタ スクでは関数StartBridge または関数AcceptBridge は使用できません。

注意: 場合によっては、システムによって関数AcceptBridge の処理が強制的に関数Attach- Mixer の処理に変更されることがあります。例えば、タスクのメディアチャンネルに対して初めて、 別のタスクのピアのメディアが接続される場合、関数AcceptBridge ではなく関数AttachMixer が使用されます。このケースでは、そのタスク(別のタスクのメディアが1 つだけ接続されているタ スク)で関数BreakBridge を使ってメディアブリッジを削除できます。

タスクのメディアチャンネルに別のタスクのピアのメディアが接続されているときに、そのタスク で、そのタスクのピアとの接続を切断した場合、そのタスクのピアによりタスクとの接続が切断され た場合、そのタスクの動作が停止した場合(通常の停止またはエラーの発生による停止)、そのタス クに接続されている別のタスクのピアのメディアはすべて自動的にシステムによって接続解除されま す。

StartBridgedCall(destination,event)
This function works as the StartCall function, but the event value should be StartBridge Event send to this Task by an ingress Task. The Task initiates a call using the media descriptor from the Event data (describing the ingress Task peer media).
Provisional responses are delivered as Events to the current Task, and they are sent to the ingress Task (see below).
If the call is successful, a Media Bridge between the Tasks is built, the current Task receives a final response Event, and the StartBridge operation in the ingress Task completes successfully.
If the call fails, the current Task receives a final response Event, but no Event is sent to the ingress Task. The current Task can either try a new StartBridgedCall operation, or it can use AcceptBridge/AttachMixer/RejectBridge operations to process the received StartBridge Event.
SetBridgedProvision(newMode)
This function controls processing of the provision response Events relayed to the current Tasks when it is performing the StartBridge operation.
If the newMode value is a true-value (this is the default value), the relayed provision responses are relayed to the peer, using the ProvisionCall function with the reliably parameter set to a null-value.
If the newMode value is the "reliably" string, the relayed provision responses are relayed to the peer, using the ProvisionCall function with the reliably parameter set to a true-value.
If the newMode value is a null-value, the relayed provision responses are ignored.
If the Task is not in the incoming or provisioned mode, the relayed provision responses are ignored.
The function returns the old option value.

Call Transfer

TransferSupported()
This function returns a true-value if the peer supports Transfer operations, otherwise the function returns a null-value.
TransferCall(destination)
This function attempts "blind transfer". The Task should be in the connected mode.
The destination value should be a string containing the URI or an E-mail address to transfer the call to.
If the call transfer fails, the function returns an error code string.
If the call transfer succeeds, the function returns a null-value.
When the operation is completed, the Task stays in the connected mode, unless the peer has disconnected explictily (by sending the BYE request).
StartTransfer(taskRef)
This function sends a special StartTransfer Event to the specified Task asking it to connect Task peers directly.
The taskRef value should be a task handle. It specifies the Task to send the request to.
This function returns a null-value if the specified Task successfully connected the peers. Otherwise, the function returns an error code string.
The current Task should be in the connected mode.
The current Task is placed into the waiting state, and the target Task receives a special StartTransfer Event.
IsStartTransferEvent(input)
This function returns a true-value if the input value is a StartTransfer Event. Otherwise the function returns a null-value.
RejectTransfer(input,errorCode)
This function rejects the StartTransfer request.
The input parameter value should be a StartTransfer Event to reject.
The errorCode parameter value should be a string.
The StartTransfer function in the Task that has sent this StartTransfer Event exits the waiting state and it returns an error code string.
AcceptTransfer(input)
This function connects the current Task peer with the peer of the Task that has sent it the StartTransfer Event.
The input value should be the StartTransfer Event to accept.
This function returns a null-value if the peers have been successfully connected. Otherwise, the function returns an error code string.
The StartBridge function in the Task that has sent this StartTransfer Event exits the waiting state. That function returns a null-value if the peers have been connected, otherwise, it returns an error code string.

If the peers have been connected, both Tasks stay in the connected mode, unless their peers explicitly send the disconnect Signals. The Tasks should either quit or they should use the Disconnect procedure to fully disconnect from their peers.

Info Requests

Applications can receive and send INFO requests.

Certain INFO requests (such as DTMF event requests) are processed automatically and this section does not apply to them.

INFO request data is presented as a dictionary, with the following elements:

Content-Type
This mandatory string element contains the request body Content-Type (such as application).
Content-Subtype
This optional string element contains the request body Content-Type subtype.
"" (empty key)
This optional string element contains the request body content.
SendCallInfo(params)
This function sends an INFO request to the Task peer. The Task should be in the connected mode.
The params value should be a dictionary containing the INFO request data.
If the operation fails, the function returns an error code string.
If the operation succeeds, the function returns a null-value.

When an INFO request is sent to a Task, the Task receives a special CallInfo Event. The Event parameter element contains a dictionary - the INFO request data.

IsCallInfoEvent(input)
This function returns a true-value if the input value is a CallInfo Event. Otherwise the function returns a null-value.

サポートされているメディアフォーマット

オーディオファイルのフォーマットとしては、次のフォーマットがサポートされています。

WAV (データはRIFF タグで始まります) 
単一のデータチャンクが格納されているファイルで、データチャンクはPCM 8 ビットまたは16 ビッ トデータで構成されます。
au (データは.snd タグで始まります)
PCM 8 ビットまたは16 ビットデータ、もしくは8 ビットmu-Law データが格納されたファイルです。

CommuniGate® Pro Guide. Copyright © 1998-2007, Stalker Software, Inc.