添加请求标头
您可以通过将字符串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_username
和sip_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
- 分类: FreeSWITCH FreeSWITCH学习 呼叫中心
- 标签: FreeSWITCH