如何在Freeswitch中获取SIP标头的值?

时间:2019-03-07 08:14:12

标签: sip freeswitch dialplan

我需要获取CALLED_DID标头的值并在Dialplan中执行一些操作,但是我不知道如何。

我尝试使用$ {sip_h_CALLED_DID},但它为空,因为标头名称前没有X-前缀。

还有其他方法可以从SIP标头中提取值吗?

请帮助我,我已经阅读了整个互联网,但是找不到答案。

INVITE sip:gw+zadarma-rbcrm@185.70.135.33:65000;transport=udp;gw=zadarma-rbcrm SIP/2.0
Record-Route: <sip:185.45.152.161;lr=on;ftag=as6a38207b>
Via: SIP/2.0/UDP 185.45.152.161;branch=z9hG4bK26d.6cf33cf5d2cdd6683e8de9503870f397.0
Via: SIP/2.0/UDP 185.45.152.148:5060;rport=5060;branch=z9hG4bK74d97ef6
Max-Forwards: 69
From: "+79630495339" <sip:+79630495339@sip.zadarma.com>;tag=as6a38207b
To: <sip:346127@185.45.152.161>
Contact: <sip:+79630495339@185.45.152.148:5060>
Call-ID: 401671d34e8247a9694c3da87c97fbbb@185.45.152.148:5060
CSeq: 102 INVITE
User-Agent: Zadarma Voip
Date: Thu, 07 Mar 2019 07:38:22 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces
CALLED_DID: 73433023519
Content-Type: application/sdp
Content-Length: 415
hostname: sipbalancer-1
cc_num: 346127
cc_counter: 1

2 个答案:

答案 0 :(得分:1)

Sip值不容易提取。 标头以X-前缀。其他都无效。

您可以重新编译mod_sofia-添加额外的标头阅读器:

concatenating 示例行11297。

添加此内容:

https://freeswitch.org/stash/projects/FS/repos/freeswitch/browse/src/mod/endpoints/mod_sofia/sofia.c

之间:

} else if (!strcasecmp(un->un_name, "CALLED_DID")) {
    switch_channel_set_variable(channel, "called_did", un->un_value);

并且:

} else if (!strcasecmp(un->un_name, "Geolocation")) {
    switch_channel_set_variable(channel, "sip_geolocation", un->un_value);

像这样在拨号计划中检索此标头:

} else if (!strcasecmp(un->un_name, "Geolocation-Error")) {`
    switch_channel_set_variable(channel, "sip_user_location", un->un_value);

答案 1 :(得分:0)

在阅读了大量材料后,我得出结论:

不修改源代码就无法读取没有X-前缀的自定义标头。

但这对我来说是不可接受的。