0404.请求头和通道变量

由 jafucong 发布

添加请求标头

您可以通过将字符串sip_h_添加到任何通道变量的前缀来向出站 SIP 呼叫添加任意标头,例如:

<action application="set" data="sip_h_X-Answer=42"/>
<action application="bridge" data="sofia/mydomain.com/1000@example.com"/>

请注意,对于 BYE 请求,您需要在通道变量上使用前缀sip_bye_h_

虽然不是必需的,但您应该在标头前加上“X-”以避免与其他 SIP 堆栈的互操作性问题。
所有入站 SIP 呼叫都会将任何 X- 标头安装到本地变量中。
这意味着您可以轻松地将任何 X-header 从一个 FreeSWITCH 实例桥接到另一个实例。
要访问上面第二个框的标题,请使用通道变量 ${sip_h_X-Answer}
重要的是要注意语法 ${sip_h_custom-header}不能用于检索任何不以 X- 开头的自定义标头。
这是因为 Sofia 只读取并放入以 X- 开头的自定义标头变量。

添加响应标头

可以设置三种类型的响应头前缀:

响应头
sip_rh_

临时响应标头
sip_ph_

Bye响应头
sip_bye_h_

每个前缀将专门为其给定类型的请求添加标头

没有“全局”响应标头前缀将来所有响应消息添加标头。

例如:

<action application="set" data="sip_rh_X-Reason=Destination Number Not in Footprint"/><font></font>
<action application="set" data="sip_bye_h_X-Accounting=Some Accounting Data"/>

SIP 消息如下:

INVITE sip:19099099099@1.2.3.4 SIP/2.0
Via: SIP/2.0/UDP 5.6.7.8:5080;rport;branch=z9hG4bKyg61X9v3gUD4g
Max-Forwards: 69
From: "DJB" <sip:2132132132@5.6.7.8>;tag=XQKQ322vQF5gK
To: <sip:19099099099@1.2.3.4>
Call-ID: b6c776f6-47ed-1230-0085-000f1f659e58
CSeq: 30776798 INVITE
Contact: <sip:mod_sofia@5.6.7.8:5080>
User-Agent: FreeSWITCH-mod_sofia/1.2.0-rc2+git~20120713T162602Z~0afd7318bd+unclean~20120713T184029Z
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, UPDATE, INFO, REGISTER, REFER, NOTIFY
Supported: timer, precondition, path, replaces
Allow-Events: talk, hold, conference, refer
Content-Type: application/sdp
Content-Disposition: session
Content-Length: 229
P-Charge-Info: <sip:2132132132@5.6.7.8>;npi=0;noa=3
X-FS-Support: update_display,send_info.
Remote-Party-ID: "DJB" <sip:2132132132@5.6.7.8>;party=calling;screen=yes;privacy=off

剥离单个 SIP 标头

有时 SIP 提供商会添加额外的标头信息。大多数时候,他们这样做是为了自己使用(跟踪呼叫)。但是这些额外的信息会导致很多问题。

在某些情况下,我们将此呼叫直接桥接到第三方系统时呼叫被丢弃,因为第三方系统不接受此标头,因此我们必须剥离那些 SIP 标头。

<action application="unset" data="sip_h_X-voipnow-did"/>
<action application="unset" data="sip_h_X-voipnow-extension"/>

剥离所有自定义 SIP 标头

如果您希望剥离所有自定义标头,同时仅保留拨号方案中定义的标头:

<action application="set" data="sip_copy_custom_headers=false"/><font></font>
<action application="set" data="sip_h_X-myCustomHeader=${sip_h_X-myCustomHeader}"/><font></font>

附加通道变量

还可以设置其他变量来影响 sofia 处理呼叫的方式。

例如,可以通过设置sip_exclude_contact变量来过滤联系人。例子:

<anti-action application="set" data="sip_exclude_contact=${network_addr}"/>

或者,您可以通过设置sip_auth_usernamesip_auth_password变量对拨出呼叫执行 SIP Digest 授权,以避免使用网关进行身份验证。例子:

<action application="bridge" data="[sip_auth_username=secretusername,sip_auth_password=secretpassword]sofia/external/00123456789@sip.example.com"/>

更改 SIP 联系人用户 FreeSWITCH 通常使用 mod_sofia@ ip:port作为内部 SIP 联系人。要将其更改为 foo@ ip:port,有一个变量 sip_contact_user

{sip_contact_user=foo}sofia/my_profile/1234@192.168.0.1;transport=tcp

暂无评论

发表评论