SIP パススルー API
Cisco Unified CM は、SIP コール処理の点では Business to Business User Application(B2BUA; ビジネス ツー ビジネス ユーザ アプリケーション)です。パススルー オブジェクトが、情報のコール レッグからコール レッグへの受け渡しを可能にする一連の API を提供します。
次の SIP パススルー API が使用できます。
•
「addHeader」
•
「addHeaderValueParameter」
•
「addHeaderUriParameter」
•
「addRequestUriParameter」
•
「addContentBody」
addHeader
addHeader(header-name, header-value)
このメソッドは、ヘッダーの文字列名と値を受け取り、その情報をトリガーされた発信メッセージに含めるためにパススルー オブジェクトに追加します。
例
透過性がなければ、Cisco Unified CM は着信 x-nt-corr-id ヘッダーを知らないため、これを無視します。その結果、これは着信 INVITE から削除され、発信 INVITE には含まれなくなります。
このヘッダーのパススルーを有効にするには、このヘッダーをスクリプトの先頭にある allowHeaders テーブルに含める必要があります。さらに、メッセージ処理の中でパススルー オブジェクトに明示的に追加する必要があります。
スクリプト
M.allowHeaders = {"x-nt-corr-id"}
function M.inbound_INVITE(msg)
local ntcorrid = msg:getHeader("x-nt-corr-id")
pt = msg:getPassThrough()
pt:addHeader("x-nt-corr-id", ntcorrid)
着信メッセージ
INVITE sip:1234@10.10.10.1 SIP/2.0
x-nt-corr-id: 000002bf0f15140a0a@000075447daf-a561119
発信メッセージ
INVITE sip:1234@10.10.10.2 SIP/2.0
x-nt-corr-id: 000002bf0f15140a0a@000075447daf-a561119
addHeaderValueParameter
addHeaderValueParameter(header-name, parameter-name [,parameter-value])
このメソッドは、ヘッダーの名前、パラメータ名、およびパラメータ値を受け取り、その情報をトリガーされた発信メッセージに含めるためにパススルー オブジェクトに追加します。
ヘッダー名とパラメータ名は、必須引数です。parameter-value は、省略可能です。
(注) デフォルトでは、スクリプトのロジックとは関係なく Contact ヘッダー値パラメータが渡されます。ただし、次の場合は例外で、コールレッグ固有と見なされ、Cisco Unified CM で適切に生成されます。
- audio
- video
例
透過性がなければ、Cisco Unified CM は、 From ヘッダー内の着信 x-tag を知らないため、これを無視します。その結果、これは着信 INVITE から削除され、発信 INVITE には含まれなくなります。
このヘッダー パラメータのパススルーを有効にするには、メッセージ処理の中でこれを明示的にパススルー オブジェクトに追加する必要があります。
スクリプト
function M.inbound_INVITE(msg)
local xtag = msg:getHeaderValueParameter("From", "x-tag")
pt = msg:getPassThrough()
pt:addHeaderValueParameter("From", "x-tag", xtag)
着信メッセージ
INVITE sip:1234@10.10.10.1 SIP/2.0
From: <sip:1000@10.10.10.58>;tag=0988bf47-df77-4cb4;x-tag=42
発信メッセージ
INVITE sip:1234@10.10.10.2 SIP/2.0
From: <sip:1000@10.10.10.1>;tag=abcd;x-tag=42
addHeaderUriParameter
addHeaderUriParameter(header-name, parameter-name [,parameter-value])
このメソッドは、ヘッダーの名前、URI パラメータ名、およびパラメータ値を受け取り、その情報をトリガーされた発信メッセージに含めるためにパススルー オブジェクトに追加します。
ヘッダー名とパラメータ名は、必須引数です。パラメータの値は、省略可能です。
透過性がなければ、Cisco Unified CM は、Contact ヘッダー URI 内の着信 cca-id パラメータを知らないため、これを無視します。その結果、これは着信 INVITE から削除され、発信 INVITE には含まれなくなります。
このヘッダー URI パラメータのパススルーを有効にするには、メッセージ処理の中でこれを明示的にパススルー オブジェクトに追加する必要があります。
(注) この例では、パラメータは、発信メッセージ内で異なる名前を取ります(つまり、発信メッセージ内の発信 cca-id と、着信メッセージ内の cca-id )。
スクリプト
function M.inbound_INVITE(msg)
local occaid = msg:getHeaderUriParameter("Contact", "cca-id")
pt = msg:getPassThrough()
pt:addHeaderUriParameter("Contact", "originating-cca-id", occaid)
着信メッセージ
INVITE sip:1234@10.10.10.1 SIP/2.0
Contact: <sip:1000@10.10.10.58;cca-id=LSC.dsn.mil>
発信メッセージ
INVITE sip:1234@10.10.10.2 SIP/2.0
Contact: <sip:1000@10.10.10.1;originating-cca-id=LSC.dsn.mil>
addRequestUriParameter
addRequestUriParameter(parameter-name [,parameter-value])
このメソッドは、URI パラメータ名とパラメータ値を受け取り、その情報をトリガーされた発信メッセージに含めるためにパススルー オブジェクトに追加します。
パラメータ名は、必須引数です。パラメータの値は、省略可能です。
(注) デフォルトでは、スクリプトのロジックとは関係なく初期 INVITE 内の要求 URI パラメータが渡されます。ただし、次の場合は例外で、コールレッグ固有と見なされ、CUCM で適切に生成されます。
- phone-context
- trunk-context
- tgrp
- user
例:着信レッグが、パラメータを生成してから、発信要求 URI 内に格納するために受け渡します。
スクリプト
function M.inbound_INVITE(msg)
pt = msg:getPassThrough()
pt:addRequestUriParameter("from-network", "service-provider")
着信メッセージ
INVITE sip:1234@10.10.10.1 SIP/2.0
発信メッセージ
INVITE sip:1234@10.10.10.2;from-network=service-provider SIP/2.0
addContentBody
addContentBody(content-type, content-body [,content-disposition [,content-encoding ,[content-language]]])
このメソッドは、content-type、content-body、content-disposition、content-encoding、および content-language を受け取り、その情報をトリガーされた発信メッセージに含めるためにパススルー オブジェクトに追加します。
content-type と content-body は、必須引数です。content-disposition、content-encoding、および content-language は、省略可能なパラメータです。これらの値のいずれかが空または nil に指定された場合、ヘッダーがコンテンツの一部として含められることはなくなります。
透過性がなければ、Cisco Unified CM は着信 INFO メッセージとコンテンツ本文を無視します。透過性を使用した場合、Cisco Unified CM は Nortel PBX によって送信された独自コンテンツ本文を抽出し、コンテンツ本文から DTMF の数字を抽出して、新しい dtmf-relay コンテンツ本文を作成し、それを受け渡します。
スクリプト
function M.inbound_INFO(msg)
local body = msg:getContentBody("application/vnd.nortelnetworks.digits")
local digits = string.match(body, "d=(%d+)")
pt = msg:getPassThrough()
body = string.format("Signal=%d\r\nDuration=100\r\n", digits)
pt:addContentBody("application/dtmf-relay", body)
着信メッセージ
INFO sip: 1000@10.10.10.1 SIP/2.0
Via: SIP/2.0/UDP 10.10.10.57:5060
From: <sip:1234@10.10.10.57>;tag=d3f423d
To: <sip:1000@10.10.10.1>;tag=8942
Call-ID: 312352@10.10.10.57
Content-Type: application/vnd.nortelnetworks.digits
発信メッセージ
INFO sip: 1000@10.10.10.58 SIP/2.0
Via: SIP/2.0/UDP 10.10.10.1:5060
From: <sip:1234@10.10.10.1>;tag=ef45ad
To: <sip:1000@10.10.10.58>;tag=1234567
Call-ID: 475623@10.10.10.1
Content-Type: application/dtmf-relay