サポートされる機能
次のメッセージで、透過性がサポートされます。
• 初期 INVITE および関連応答
– INVITE 応答
– 180 応答
– 183 応答
– 200 応答
– 4XX、5XX、6XX 応答
• reINVITE および関連応答
• UPDATE メッセージ(UPDATE への応答に対して透過性はサポートされていません)
• INFO メッセージ(INFO への応答に対して透過性はサポートされていません)
• BYE メッセージ(BYE への応答に対する透過性はサポートされていません)
次のメッセージでは、透過性はサポートされません。
• ACK
• PRACK および関連応答
• Replaces を持つ INVITE および関連応答
• REFER と関連応答
通常、Cisco Unified CM は、次の情報(パラメータ、ヘッダー、およびコンテンツ本文)をローカルで処理します。これは、特定のコール レッグと関連しています。したがって、理解された SIP 情報はそこで使用され、他のコール レッグ(いずれにしても SIP でない場合もある)に渡されることはありません。これにより、Cisco Unified CM が、SIP と H.323、SIP と MGCP などのさまざまなプロトコル インターワーキングをサポートできます。Cisco Unified CM によって理解されていない SIP 情報は通常無視されます。
次の項では、Cisco Unified CM によって理解され使用された情報のことを、 既知 であると、Cisco Unified CM によって理解されず、使用されない情報のことを、 不明 であると表現します。
次の情報は透過的に通過できます。
• パラメータ
• 不明なヘッダー
• 不明なコンテンツ本文
既知のヘッダー
次に、既知のヘッダーのリストを示します。
• Accept
• Accept-Contact
• Accept-Resource-Priority
• Alert-Info
• Allow
• Allow-Events
• Also
• Authorization
• Bridge-Participant-ID
• Call-ID
• Call-Info
• CC-Diversion
• CC-Redirect
• Contact
• Content-Disposition
• Content-ID
• Content-Length
• Content-Type
• CSeq
• Date
• Diversion
• Event
• Expires
• From
• Geolocation
• Geolocation-Error
• Join
• Max-Forwards
• Min-Expires
• Min-SE
• MIME-Version
• P-Asserted-Identity
• P-Preferred-Identity
• Privacy
• Proxy-Authenticate
• Proxy-Authorization
• Proxy-Require
• RAck
• Reason
• Recv-Info
• Refer-To
• Referred-By
• Reject-Contact
• Remote-Party-ID
• Replaces
• Request-Disposition
• Requested-By
• Require
• Resource-Priority
• Retry-After
• RSeq
• RTP-RxStat
• RTP-TxStat
• Server
• Session
• Session-Expires
• SIP-ETag
• SIP-If-Match
• Subject
• Subscription-State
• Supported
• Target-Dialog
• To
• Unsupported
• User-Agent
• Via
• Warning
• WWW-Authenticate
• X-Cisco-EMCCInfo
• X-Cisco-FallbackID
• X-Cisco-ViPR-Ticket
既知のコンテンツ本文
• application/sdp
スクリプトで既知のヘッダーまたはコンテンツ本文を受け渡そうとすると、実行エラーがトリガーされます。
スクリプト作成者であれば、既知のデータが Cisco Unified CM の処理にかけられたり、Cisco Unified CM の処理と干渉したりすることなく受け渡される方法があることをすぐに理解することができます。実際、スクリプトは、既知のヘッダーの値を取得し、不明なヘッダーに格納することができます。コンテンツ本文についても、同じことが行えます。下に示す 181 透過性の例では、Reason ヘッダーでこれを行っています。この例は、Reason ヘッダーの値を取得し、それを X-Reason ヘッダーとして受け渡します。当然のことながら、相手側に X-Reason ヘッダーを使用して削除するスクリプトがなければ、このヘッダーはネットワークに送信されます。
いずれの場合も、既知のヘッダーまたはコンテンツ本文の透過性はサポートされておらず、SIP の透過性と正規化はこの目的のためのものではありません。SIP の透過性を使用して、既知のヘッダーまたはコンテンツ本文を受け渡す場合、その結果は保証されません。
特に、SDP の透過性はサポートされていません。Cisco Unified CM は、この場合、リージョン帯域幅ポリシーまたはコール アドミッション制御を適用できません。また必要となる可能性のあるメディア リソースを挿入することもできません。多数のコール フローにより、SDP の更新が発生するため、Cisco Unified CM を正しく実行できません。SDP で宣言した要素を正常に操作できる可能性はありますが、ネゴシエートされた要素の操作は初期コール セットアップよりも成功する可能性が低くなります。
181 透過性の例
透過性がない場合、Cisco Unified CM が発信トランク レッグで 181 を受信すると、Cisco Unified CM のネイティブ動作は、着信トランク レッグ上で 180 を送り返すことです。181 透過性を達成するには、着信 181(B サイドで受信)と予定発信 180(A サイドで送信)の両方にスクリプトが必要です。
181 は最初に PBX-B から受信されるので、まず次のことを行うことを検討します。
• Reason ヘッダーの値の取得
• Reason ヘッダーの値のパススルー:Reason ヘッダーは既知のヘッダーなので、スクリプトは、ヘッダー名 X-Reason を使用して値を受け渡すことにより、既知のヘッダーのチェックをバイパスします。
このパススルー データは、Cisco Unified CM によって自動的に、これから送信される発信メッセージとマージされます。前述のとおり、Cisco Unified CM は 180 をネイティブに送信します。このため、自動マージ機能により、X-Reason ヘッダーが発信 180 内に置かれます。
次に、次の内容を A サイドで行う必要があるかどうかを検討する必要があります。
• X-Reason ヘッダーの値の取得と、181 に関して何かを含んでいるかどうかの確認
• X-Reason ヘッダーの値を持つ Reason ヘッダーの追加
• X-Reason ヘッダーの削除
• 応答コードとフレーズの 181 Call is Being Forwarded への変換
これらの手順を、次のコールフロー図に示します。
B サイドと A サイドのスクリプトを次に示します。
B サイドのスクリプト
function B.inbound_181_INVITE(msg)
local pt = msg:getPassThrough()
local reason = msg:getHeader("Reason")
pt:addHeader("X-Reason", reason)
A サイドのスクリプト
function A.outbound_180_INVITE(msg)
local reason = msg:getHeader("X-Reason")
if string.find(reason, "cause=181")
msg:setResponseCode(181,"Call is being forwarded")
msg:addHeader("Reason", reason)
msg:removeHeader("X-Reason")
INFO 透過性の例
透過性がない場合、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
PCV および PAI ヘッダーのスクリプト パラメータ
P-Charging Vector の場合
P-Charging Vector ヘッダーのスクリプト パラメータは、モバイル関連情報を受け渡すための透過性を追加するように拡張されています。
リリース 8.6(1) よりも前は、Cisco Unified Communications Manager が P-Charging Vector を持つコールを受信した場合、Cisco Unified Communications Manager は、モバイルまたは IP Multimedia Subsystem(IMS)値なしの着信トランク レッグのコール情報を、そのサービス プロバイダーに送信していました。現在は、変更された PCV スクリプト パラメータを使用してより適切な透過性を得るため、Cisco Unified Communications Manager はモバイルまたは PSTN から送信された課金情報を抽出し(B サイドで受信)、その情報を変更せずに相手側のコール レッグに受け渡しします(A サイドで送信)。
スクリプト パラメータ
term-ioi:このパラメータでは、Call Manager から発信される発信 200 OK の P-Charging-Vector ヘッダーに term-ioi パラメータを、スクリプトで追加する必要があるかどうかを設定します。
P-Asserted Identity の場合
P-Asserted Identity ヘッダーのスクリプト パラメータは、Cisco Unified Communications Manager が、Cisco Unified Communications Manager から発信された発信コールに対する着信コールに存在する、未修正の PAI 情報を受け渡しできるように拡張されました。
スクリプト パラメータ
pai-passthru:このパラメータでは、発信コールの P-Asserted-Identity を、スクリプトで受け渡す必要があるかを設定します。
転送カウンタ
転送カウンタ スクリプトは、コール転送シナリオの転送カウンタ パラメータを処理します。転送カウンタ スクリプトは次の機能を提供します。
• Unified CM クラスタ内の転送なしの基本的なタンデム(トランク間)コールのパススルー転送カウンタ パラメータとして動作します。
• Unified CM クラスタ内で複数の転送を含むタンデム コールの転送カウンタ パラメータを処理します。
• 着信 INVITE メッセージに Diversion ヘッダーが 3 つ以上あり、さらに Unified CM クラスタ内に複数の転送がある場合、転送カウンタ パラメータを処理します。
例外
転送カウンタ スクリプトには次の例外がります。
• 転送カウンタ スクリプトはタンデム コールだけに適用されます。
• クラスタ内に複数の転送がある場合、転送カウンタ パラメータは 1 ずつ加算されます。
スクリプト
Diversion Counter Handling For Call Forward Scenarios. This script should be attached to both inbound and outbound trunk. This script provides the following functionalists:
1. Pass through counter parameter in case Basic Tandem call with NO Diversion within the cluster.
2. Handling of counter parameter for Tandem call with one or more Diversion within CUCM cluster
3. Handling of counter parameter for Tandem call when inbound INVITE has more than two Diversion headers and there is also one or more Diversion within CUCM cluster
1. This script is only applicable for Tandem (trunk-to-trunk) calls.
2. If there are multiple diversions within the cluster, the Diversion counter parameter will be increase just by 1.
function M.inbound_INVITE(msg)
if msg:isReInviteRequest()
-- Get the Diversion header. If no Diversion header then return.
local diversion = msg:getHeader("Diversion")
local pt = msg:getPassThrough()
pt:addHeader("X-Diversion", diversion)
function M.outbound_INVITE(msg)
-- This script is applicable only for initial INVITE.
if msg:isReInviteRequest()
-- Get Diversion header. If there is no Diversion header then return
local diversion = msg:getHeader("Diversion")
-- Get X-Diversion Header. If there was no X-Diversion header then return
local xDiversion = msg:getHeader("X-Diversion")
-- Get URI from Diversion header
local divString = msg:getUri("Diversion")
-- Parse URI and get DN and Host
local divuri = sipUtils.parseUri(divString)
lrn_user = divuri:getUser()
lrn_host = divuri:getHost()
-- Get URI from X-Diversion header
local xdivString = msg:getUri("X-Diversion")
-- Parse URI and get DN and Host
local xdivuri = sipUtils.parseUri(xdivString)
xlrn_user = xdivuri:getUser()
xlrn_host = xdivuri:getHost()
-- Get counter parameter value from inbound diversion (X-Diversion).
local counter = msg:getHeaderValueParameter("X-Diversion", "counter")
-- If new LRN is different from incoming LRN, that means there was a local
-- call forward on UCM, so increase the counter.
if not ( string.match(lrn_user, xlrn_user) and string.match(lrn_host, xlrn_host) )
-- If there is no counter parameter, then find out how many Diversion
-- headers are there. Set the counter to no. of Diversion Header.
-- If there is a counter value, just increase it by 1.
local xdiv = msg:getHeaderValues("X-Diversion")
msg:addHeaderValueParameter("Diversion","counter", counter)
-- As there is no local call forwarding, so pass through the counter
msg:addHeaderValueParameter("Diversion","counter", counter)
msg:removeHeader("X-Diversion")
メッセージの変換
クラスタ内でコール転送があり、着信 INVITE メッセージにカウンタ パラメータを持つ Diversion ヘッダーが含まれる場合、転送カウンタ スクリプトは、発信 INVITE メッセージのカウンタ パラメータを 1 だけ増やします。
元の着信メッセージ
INVITE sip:3002@10.10.10.53:5060 SIP/2.0^M
Via: SIP/2.0/TCP 10.10.10.51:5060;branch=z9hG4bK4b8a7eea6b41^M
From: <sip:1003@10.10.10.51>;tag=130169~d434b1d7-c1e3-44e7-a77e-abf211d2682e-26620367^M
To: <sip:3002@10.10.10.53>^M
Date: Fri, 04 Nov 2011 14:51:39 GMT^M
Call-ID: 7ef45500-eb31fbfb-3ec2-330a0a0a@10.10.10.51^M
Supported: timer,resource-priority,replaces^M
User-Agent: Cisco-CUCM8.6^M
Allow: INVITE, OPTIONS, INFO, BYE, CANCEL, ACK, PRACK, UPDATE, REFER, SUBSCRIBE, NOTIFY^M
Allow-Events: presence, kpml^M
Supported: X-cisco-srtp-fallback^M
Call-Info: <sip:10.10.10.51:5060>;method="NOTIFY;Event=telephone-event;Duration=500"^M
Cisco-Guid: 2129941760-0000065536-0000000148-0856295946^M
Diversion: <sip:1001@10.10.10.51>;reason=no-
answer;privacy=off;screen=yes;counter=2,<sip:1006@10.10.10.51>;reason=no-
answer;privacy=off;screen=yes^M
P-Asserted-Identity: <sip:1003@10.10.10.51>^M
Remote-Party-ID: <sip:1003@10.10.10.51>;party=calling;screen=yes;privacy=off^M
Contact: <sip:1003@10.10.10.51:5060;transport=tcp>^M
発信メッセージ
転送カウンタ スクリプトの実行後の発信メッセージに対する変更は、太字で示しています。
IINVITE sip:1005@10.10.10.51:5060 SIP/2.0^M
Via: SIP/2.0/TCP 10.10.10.53:5060;branch=z9hG4bK1d64062fa6f^M
From: <sip:1003@10.10.10.53>;tag=18448~94147210-61b5-4d32-a08d-5daf91ec321b-27003595^M
To: <sip:1005@10.10.10.51>^M
Date: Fri, 04 Nov 2011 14:51:44 GMT^M
Call-ID: 81ef4580-eb31fc00-e2-350a0a0a@10.10.10.53^M
Supported: timer,resource-priority,replaces^M
User-Agent: Cisco-CUCM8.6^M
Allow: INVITE, OPTIONS, INFO, BYE, CANCEL, ACK, PRACK, UPDATE, REFER, SUBSCRIBE, NOTIFY^M
Allow-Events: presence, kpml^M
Supported: X-cisco-srtp-fallback^M
Call-Info: <sip:10.10.10.53:5060>;method="NOTIFY;Event=telephone-event;Duration=500"^M
Cisco-Guid: 2179941760-0000065536-0000000121-0889850378^M
Diversion: <sip:3002@10.10.10.53>;reason=no-
answer;privacy=off;screen=yes;counter=3,<sip:1006@10.10.10.51>;reason=no-
answer;privacy=off;screen=yes^M
P-Asserted-Identity: <sip:1003@10.10.10.53>^M
Remote-Party-ID: <sip:1003@10.10.10.53>;party=calling;screen=yes;privacy=off^M
Contact: <sip:1003@10.10.10.53:5060;transport=tcp>^M