SIPプロトコルでは、多くの場合、互換性のためにフィールドを変更し、電話交換機間で接続するときに特定のタスクを解決する必要があります。 単純なSIPフィールドを削除するか、あるSIPフィールドから別のSIPフィールドに値を転送するか、より複雑な操作を行うことができます。
AudioCodes SBC機器でこれをどのように行うことができますか(そして、SBCで、非常に若いモデルでも絶対に)。 変換の実行方法を説明する前に、まず用語を扱います。
INVITEを例として取り上げます。
INVITE sip:84951234567@10.11.12.13:5060; transport = udp SIP / 2.0
経由:SIP / 2.0 / UDP 10.11.12.13:5060;branch=z9hG4bK-2342-1C21439
宛先:<sip:84951234567@sip.sp.com; user = phone>
From: "Ivanov" <sip:4957654321@sip.sp.com; user = phone>; tag = 26814-XM-09a664f9-77e583465
許可:更新、参照、情報
呼び出しID:26814-TO-09a664f8-0a52daf11@sip.sp.com
連絡先:<sip:12/13/11/10:5060>
コンテンツタイプ:アプリケーション/ sdp
CSeq:157771616 INVITE
履歴情報:<sip:4952345678@20.21.22.23?理由=フォワード>
最大転送:29
ユーザーエージェント:GW_SIP
コンテンツの長さ:258
v = 0
o = cp10 139660536057 139660536057 IN IP4 12/13/11/10
s = SIPコール
c = IN IP4 12/13/11/10
t = 0 0
m =オーディオ31854 RTP / AVP 8 0 18
b = AS:80
a = rtpmap:8 PCMA / 8000/1
a = rtpmap:0 PCMU / 8000/1
a = rtpmap:18 G729 / 8000/1
a = fmtp:18
annexb =いいえ
a = ptime:20
a = sendrecv
たとえば、Fromフィールドを使用します。
From: "Ivanov" <sip:4957654321@sip.sp.com; user = phone>; tag = 26814-XM-09a664f9-77e583465
ここに:
差出人-タイトル
「Ivanov」-ヘッダーパラメーターの表示名
sip:4957654321@sip.sp.com-SIP URL
4957654321-SIP URLのユーザー部分
Sip.sp.com-SIP URLのURL部分
タグ:ヘッダーパラメーター
AudioCodesは多くのフィールドを認識しており、それらをパラメーターとSIP URLに解析できます。 しかし、SIP標準によれば、どこにも記述されていないヘッダーを追加できるため、すべてではなくビジネスを理解しています。 この場合、正規表現のみがこのヘッダーの解析に役立ちます。 AudioCodesが知っているヘッダーと知らないヘッダーの詳細については、ドキュメント「SIPメッセージ操作クイックリファレンスガイド」を参照してください。 私たちのサイトへのリンクには一定レベルのアクセスが必要なので、ここにリンクを公開しません。このリンクはいつでも停止する可能性があるため、一般には公開しません。 突然誰かがこのドキュメントを必要とするなら、書いてください、私は間違いなくそれを共有します。
操作ルールを作成する場合、次のルールパラメーターがあります。
操作インデックス-ルール番号。 ルールは順番に処理されます。
操作セットID-特定の方向に適用するルールのセット。
メッセージタイプ-操作する予定のメッセージのタイプ。 単に招待することも、招待への回答をinvite.response.200にするか、register = register.response.2xxへの2xx応答にすることもできます。 類推によってなど。 別途、メッセージreINVIE-reinvite.requestを強調表示できます。
条件-このルールが満たされる条件と満たされない条件。 ここに、header.from.url.user == '4957654321'の簡単な例を示します。 これは、差出人フィールドのSIP URLのユーザー部分が4957654321であることを意味します。== 、! =、> =、<=、>、<、Contains 、! Contains、exists 、! Exists、suffix、prefix、len>記号も使用できます、len <、len ==、regex。 正規表現を除くすべての文字は、orまたはandを使用してリストできます。
Action Subject-変更する予定のタイトル(またはtitleパラメーター)。 例:header.history-info
アクション値は、追加/削除/変更/プレフィックスの追加/サフィックスの追加/サフィックスの削除/プレフィックスの削除を実行する予定です。
アクションサブジェクトは、アクションサブジェクトで[削除]が指定されていない場合に挿入する予定のものです。 ここでは構文が非常に重要です。
a。 別のヘッダーから値を挿入する場合は、ヘッダーを指定するだけです。 例:header.from.url.user
b。 内部変数を使用する場合は、内部変数のみが示されます。 例:param.message.address.dst.address(メッセージが送信されるIPアドレス)
c。 正規表現を使用して選択したパーツを使用する場合、$記号は正規表現のパーツ番号を示します。 例:$ 2
d。 特定の値を単純に挿入する場合は、一重引用符で示されます。 たとえば、「Vsem Privet!」
e。 これらの値を組み合わせる場合は、+記号を使用してこれを行います。 例:header.from.url.user + $ 2 + 'vsem Privet!'。
正規表現の例を挙げましょう。 私が直面するかなり一般的なタスクは、リダイレクトされた番号の場合(上記の例のように)、history-infoフィールドからFromフィールドに番号を転送する必要があることです。 つまり、タスクは次のとおりです。
1. [差出人]フィールドに移動します
2.履歴情報フィールドを削除します。
どうやって
AudioCodesはHistory-infoフィールドを解析しないため、正規表現を使用して数値を選択することしかできません。 ヘッダーから数値を選択するために正規表現を作成します。
履歴情報:<sip:4952345678@20.21.22.23?理由=フォワード>
ヘッダーの名前に関係なく、割り当てが必要です。 そのような正規表現の例は
^(<sip :)(。*)(@)(。*)
必要な数は、この正規表現の2番目のパラメーターになります。 つまり、$ 2の値を挿入する必要があります。
そのような式の例:
操作セットID:1
メッセージタイプ:招待
条件:header.history-info regex ^(<sip :)(。*)(@)(。*)
アクションサブジェクト:header.from.url.user
アクションタイプ:変更
アクション値:$ 2
さらに、Histroty-infoフィールドを削除する必要があるため、同じ操作セットID内に別のルールを作成する必要があります
操作セットID:1
メッセージタイプ:招待
条件:header.history-infoが存在する
アクションサブジェクト:header.history-info
アクションタイプ:削除
次に、このセットIDを対応するIPグループのアウトバウンドルールとして適用するだけです。 その後、出力で次の形式のメッセージを受け取ります。
INVITE sip:84951234567@10.11.12.13:5060; transport = udp SIP / 2.0
経由:SIP / 2.0 / UDP 10.11.12.13:5060;branch=z9hG4bK-2342-1C21439
宛先:<sip:84951234567@sip.sp.com; user = phone>
From: "Ivanov" <sip:4952345678@sip.sp.com; user = phone>; tag = 26814-XM-09a664f9-77e583465
許可:更新、参照、情報
呼び出しID:26814-TO-09a664f8-0a52daf11@sip.sp.com
連絡先:<sip:12/13/11/10:5060>
コンテンツタイプ:アプリケーション/ sdp
CSeq:157771616 INVITE
最大転送:29
ユーザーエージェント:GW_SIP
コンテンツの長さ:258
v = 0
o = cp10 139660536057 139660536057 IN IP4 12/13/11/10
s = SIPコール
c = IN IP4 12/13/11/10
t = 0 0
m =オーディオ31854 RTP / AVP 8 0 18
b = AS:80
a = rtpmap:8 PCMA / 8000/1
a = rtpmap:0 PCMU / 8000/1
a = rtpmap:18 G729 / 8000/1
a = fmtp:18
annexb =いいえ
a = ptime:20
a = sendrecv
多くの場合、問題は、たとえばリモートIPアドレスなど、SIPメッセージに含まれていない変数を使用することです。 この場合、次のような内部変数を使用する必要があります
Param.message.address.dst.address-SIPメッセージの送信先のリモートIPアドレス。
すべての内部変数は、以前に参照したドキュメントに記載されています。
パラメータを変数に保存した後、あるSIPメッセージから別のSIPメッセージにパラメータを転送することもできます。 この記事ではこれらの例を検討しません。
別に、このルールはSBCオプションだけでなくAudioCodes音声ゲートウェイにも適用できることに注意してください。ただし、ルールは招待メッセージに対してのみ機能するという制限があります。 これを行うには、必要なManipulation SetIDを作成し、それぞれGWOutboundManipulationSetおよびGWInboundManipulationSetパラメーターを使用して着信または発信ルールとして適用する必要もあります。