我需要获得CALLED_DID
标头的值,并在拨号方案中做一些动作,但我不知道如何。
我尝试使用$ {sip_h_CALLED_DID},但它是空的,因为在标题名称之前没有X-
前缀。
是否有任何其他方法从SIP标头中提取值?
请帮帮我,我已经在互联网上阅读但找不到答案。
INVITE sip:[email protected]: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:[email protected]>;tag=as6a38207b
To: <sip:[email protected]>
Contact: <sip:[email protected]:5060>
Call-ID: [email protected]: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
不能轻易提取SIP值。使用X-前缀标题。其他任何东西都是无效的。
你可以重新编译mod_sofia - 添加一个额外的标题阅读器:
https://freeswitch.org/stash/projects/FS/repos/freeswitch/browse/src/mod/endpoints/mod_sofia/sofia.c
示例行11297。
添加这个:
} 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);
并在拨号方案中检索此标头,如下所示:
<action application="log" data="DEBUG Called Did -> ${called_did}"/>
在阅读了大量材料后,我得出结论:
如果不修改源代码,则无法读取没有X-
前缀的自定义标头。
但在我的情况下,这是不可接受的方式。