概要
このドキュメントでは、Cisco Call Manager(CCM)でSession Initiation Protocol(SIP)正規化スクリプトを使用する方法と、いくつかの基本的な例について説明します。
前提条件
要件
次の項目に関する知識があることが推奨されます。
- Cisco Unified Communications Manager(CUCM)バージョン8.x以降
- SIP プロトコル
- スクリプトの知識
使用するコンポーネント
このドキュメントの情報は、CCMバージョン11.5に基づくものです。
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、初期(デフォルト)設定の状態から起動しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
設定
CUCMのトランクへのスクリプトの適用
SIPトランクの場合は、スクリプトをSIPトランクに直接適用する必要があります。トランクではなくSIPプロファイルでスクリプトを使用しても機能しません。
次の手順に従う必要があります。
- [Device] > [Device Setting] > [SIP Normalization Script Configuration]に移動し、図に示すように新しいスクリプトを追加します。
2. [Device] > [Trunk]に移動します。
スクリプトを適用するトランクを選択し、その設定ページで、以前に作成したスクリプトを選択します。[Enable Trace] オプションを選択しると、図に示すように、Signal Distribution Layer(SDL)ログのスクリプトによって行われた変更が表示されます。変更を有効にするために、設定を[Apply Config]に続けてトランクをリセットして保存します。
SIP Phoneへのスクリプトの適用
SIP電話機の場合は、電話機のSIPプロファイルのスクリプトを使用する必要があります。
次の手順に従う必要があります。
- [Device] > [Device Setting] > [SIP Normalization Script]に移動し、[New Script]を追加します。
- [Device] > [Device Setting] > [SIP profile]に移動します。スクリプトを適用するSIPプロファイルを選択するか、標準SIPプロファイルをコピーして新しいプロファイルを作成します。
- [SIP Profile]の[Configuration]ページで、[Script]を選択し、続いて[Apply Config]を選択し、プロファイルをリセットします。
- [Device] > [Phone] の順に移動します。スクリプトを適用する電話機を選択し、作成した電話機でSIPプロファイルを変更して保存し、設定を適用し、電話機をリセットして変更を行います。
一般的なシナリオのスクリプトの作成
SIP正規化スクリプトを作成する方法の詳細な手順の主なソースは次のとおりです。SIP透過および正規化の開発者ガイド。
このガイドには、SIPメッセージ、セッション記述プロトコル(SDP)コンテンツ、およびその他の高度なAPIでの操作に使用できるさまざまな機能が含まれています。
基本的なスクリプトの例をいくつか示します。
ヘッダーの変更
ここでは、発信SIP INVITE/REINVITEメッセージのFrom Headerの匿名を置き換えます。
M = {}
function M.outbound_INVITE(msg)
-- Replacing the Anonymous from From Header
local from = msg:getHeader("From")
local newfrom = string.gsub(from, "anonymous" ,"1111")
msg:modifyHeader("From", newfrom)
end
return M
コード |
説明 |
M = {} |
メッセージコンテンツの初期化。MはSIPメッセージのすべての内容をここに取得します |
function M.outbound_INVITE(msg) |
アウトバウンド方向INVITE/REINVITEメッセージでM(SIPメッセージ)に適用されるLua関数。方向は常にCUCMの観点から決定され、着信か発信かが決まります。メッセージの種類は、INVITE、183、200など、異なる種類にすることができます。 詳細については、『SIP正規化のための開発者ガイド』の「概要」セクションを参照してください。 |
local from = msg:getHeader("From") |
Fromメッセージの内容をローカル変数形式で保存します |
getHeader |
CCMの正規化に使用できる関数の1つで、可変的なヘッダーの内容を取得します |
string.gsub |
文字列から特定のコンテンツを置換するためのLua関数 |
modifyHeader |
ここでも、ヘッダーの内容を変更するためにCCMで使用可能な機能があります |
ヘッダーの削除
ここでは、着信SIP INVITE/REINVITEメッセージからCisco-Guideヘッダーを削除します。
M = {}
function M.inbound_INVITE(msg)
msg:removeHeader("Cisco-Guid")
end
return M
ヘッダーの追加
ここでは、Allowヘッダーの内容にINFOを追加します。
これは、カンマの後に[Allow]の元のコンテンツに追加されます。
M = {}
function M.outbound_INVITE(msg)
msg:addHeader("Allow", "INFO")
end
return M
SDPコンテンツの操作
SIPメッセージからSDPコンテンツを変更するために使用できるAPIがあります。SDPを変更するには、SIP Messageオブジェクトによって提供されるgetSdp() APIを使用してLua SIP MessageオブジェクトからSDPコンテンツ本文を取得する必要があります。スクリプトは、SDPを操作するために、シスコのAPIを含む文字列ライブラリを使用できます。修正の際には、SIP Messageオブジェクトによって提供されるsetSdp(sdp)APIを使用してSIP MessageオブジェクトにSDPが書き戻されます。これらのAPIの詳細については、「SIPメッセージAPI」を参照してください。
local sdp = msg:getSdp()
-- modification of the SDP happens at this point
-- Update the SDP associated with the SIP message
msg: etSdp(sdp)
注:このコードは、G.722コーデックのa=行を、ドットなしのG722に変更します。
M = {}
function M.inbound_INVITE(msg)
local sdp = msg:getSdp()
if sdp
then
local g722_line = sdp:getLine("a=","G.722")
if g722_line
then
--Replace G.722 with G722. The dot is special and must be escaped using % when using gsub.
g722_line = g722_line:gsub("G%.722", "G722")
sdp = sdp:modifyLine("a=", "G.722", g722_line)
msg:setSdp(sdp)
end
end
end
return M
確認
ここでは、設定が正常に機能しているかどうかを確認します。
スクリプトを適用する際には、SDLログからスクリプトが機能するかどうかを確認するために[Trace Option]を有効にします。
トラブルシュート
ここでは、設定のトラブルシューティングに使用できる情報を示します。
スクリプトが期待どおりに動作しないかどうか、いくつかのチェックを次に示します。
- スクリプトが単独で実行されない場合(SDLログで正規化前/正規化後を探す)、おそらくデバイスに正しく適用されていないか、構文エラーがあります。
- 開発者ガイドからCUCM正規化関数を確認し、Luaについては、利用可能なコンパイラを使用して検証します。
- スクリプトが実行されても変更が行われない場合は、方向、メッセージタイプ、およびスクリプトで使用されるロジックを確認します。
関連情報