Lync里面的一个非常重要的功能就是呼叫转移了,具体的设置方法就是如下。用户设置一个号码,然后其它人呼叫该用户的Lync号码的时候,无论该用户的Lync是在线还是离线,呼叫永远都是转移到用户设置在这里的号码。即便Lync客户端离线了,呼叫也可以转移出去,这样就一个呼叫都不会漏了。

image

 

到这里觉得都没有问题,结果在测试的时候,你会发现这样的转移是不成功的。为什么?我们首先来看看呼叫的流程

 

image

 

手机用户呼叫021-88881002,经过网关转变成为标准的E.164格式进入Lync,然后Lync用户设置了把呼叫转移到自己的手机18687654321,我们先看看网关上收到的数据包。

 

INVITE sip:18687654321@192.168.1.198;user=phone SIP/2.0
FROM: <sip:18912345678;phone-context=enterprise@lync2010.ucdemo.net;user=phone>;epid=6F3B6CC71C;tag=4d1a2de
TO: <sip:18687654321@192.168.1.198;user=phone>
CSEQ: 4 INVITE
CALL-ID: 348720d8-329b-45fb-a91c-605866583850
MAX-FORWARDS: 70
VIA: SIP/2.0/TCP 192.168.1.62:50044;branch=z9hG4bKeffed08c
CONTACT: <sip:Lync2010.ucdemo.net:5068;transport=Tcp;maddr=192.168.1.62;ms-opaque=55308d269ad5bea4>
CONTENT-LENGTH: 338
SUPPORTED: 100rel
USER-AGENT: RTCC/4.0.0.0 MediationServer
CONTENT-TYPE: application/sdp
ALLOW: ACK
Allow: CANCEL,BYE,INVITE,PRACK,UPDATE
 
v=0
o=- 5 1 IN IP4 192.168.1.62
s=session
c=IN IP4 192.168.1.62
b=CT:1000
t=0 0
m=audio 49226 RTP/AVP 97 101 13 0 8
c=IN IP4 192.168.1.62
a=rtcp:49227
a=label:Audio
a=sendrecv
a=rtpmap:97 RED/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=rtpmap:13 CN/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=ptime:20
 

 

发现一个问题没有?里面没有任何的关于021-88881002的信息,我们可以这么理解,呼叫达到了Lync之后,Lync重新发起了一路对18687654321的呼叫,而呼叫的主叫则不是Lync用户,而是原本呼入的手机号码18912345678。这样的逻辑却是也对,因为18687654321上面应该显示出主叫是18912345678。但是很遗憾的是,我们国内很多地方的E1线路有一个非常严格的规定,要通过这条E1中继线路发出呼叫,主叫方的号码必须是你所拥有的DID号码段内的号码。所以这样的呼叫是无法通过E1呼出去的。

 

解决问题的思路就是,针对Lync发起的这路呼叫,我们需要把主叫号码修改为Lync用户的号码,这样的呼叫才能顺利地进入运营商的网络。而在这样的情况下,18687654321上面显示的主叫号码则是自己的座机号码,有点怪,是不是?不过习惯就好。

 

要解决这个问题需要网关和Lync双方共同完成。

第一步:首先需要Lync送出来的SIP invite带着原始的Lync用户信息,

第二步:网关根据这个信息进行相关信息的修改,然后再进行落地。

 

第一步的做法:

在中介服务器上修改:\Program Files\Microsoft Lync Server 2010\Mediation Server\MediationServerSvc.exe.config文件,填入如下的内容,其中192.168.1.198是网关的IP地址。

 

<?xml version=”1.0″ encoding=”utf-8″?>
<configuration>
<appSettings>
<add key=”192.168.1.198.ReferredBySupported” value=”true”/>
</appSettings>
<runtime>
<generatePublisherEvidence enabled=”false”/>
</runtime>
</configuration>

 

image

 

然后重新启动中介服务。

 

我们在抓一个包看看,

INVITE sip:18687654321@192.168.1.198;user=phone SIP/2.0
FROM: <sip:18912345678;phone-context=enterprise@lync2010.ucdemo.net;user=phone>;epid=9B06D4BE71;tag=6f47a78d83
TO: <sip:18687654321@192.168.1.198;user=phone>
CSEQ: 7 INVITE
CALL-ID: ec6fb552-1a09-436c-8141-451b1e52dc5a
MAX-FORWARDS: 70
VIA: SIP/2.0/TCP 192.168.1.62:50603;branch=z9hG4bKb8a9fab
CONTACT: <sip:Lync2010.ucdemo.net:5068;transport=Tcp;maddr=192.168.1.62;ms-opaque=6d5c4f1bb489ae4e>
CONTENT-LENGTH: 338
REFERRED-BY: <tel:+862188881002>
SUPPORTED: 100rel
USER-AGENT: RTCC/4.0.0.0 MediationServer
CONTENT-TYPE: application/sdp
ALLOW: ACK
Allow: CANCEL,BYE,INVITE,PRACK,UPDATE
 
v=0
o=- 4 1 IN IP4 192.168.1.62
s=session
c=IN IP4 192.168.1.62
b=CT:1000
t=0 0
m=audio 53782 RTP/AVP 97 101 13 0 8
c=IN IP4 192.168.1.62
a=rtcp:53783
a=label:Audio
a=sendrecv
a=rtpmap:97 RED/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=rtpmap:13 CN/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=ptime:20
 
 

我们会看到,前面的主叫和被叫都没有什么变化,但是里面却多了一行,REFERRED-BY: <tel:+862188881002> ,那接下来的工作就简单很多了,让网关完成这个转换过程就可以顺利的把呼叫送出去了。在网关上要完成这个动作比较简单,基本的思路就是取出REFERRED-BY然后替换Calling Number。