Прав си, като казваш, че Lync разклонява повикванията. Ако даден потребител има няколко крайни точки, Lync ще разклони повикването към всяка крайна точка и в замяна всяка крайна точка ще върне отговора на звънене.
Можете да създадете MSPL
скрипт за улавяне на 180 отговора. Тъй като MSPL е без състояние, ще изисква поддържащо приложение (a ServerApplication
), което проверява дали отговор 180 вече е изпратен за текущото повикване и блокира последващи отговори на позвъняване. Въз основа на предположението, че за всички заявки заглавката CallID
ще бъде идентична, тогава можете да решите кои отговори да изпратите и кои не.
Един прост MSPL би бил нещо като:
<lc:applicationManifest
lc:appUri="http://www.contoso.com/DefaultRoutingScript"
xmlns:lc="http://schemas.microsoft.com/lcs/2006/05">
<lc:responseFilter reasonCodes="1XX" />
<lc:proxyByDefault action="true" />
<lc:splScript><![CDATA[
if (sipResponse && sipResponse.StatusCode == 180)
{
Dispatch("OnResponse");
}
]]></lc:splScript>
</lc:applicationManifest>
След това във вашето сървърно приложение обработвате събитието OnResponse
, представям си нещо подобно:
public void OnResponse(object sender, ResponseReceivedEventArgs e)
{
if (e.Response.StatusCode == 180)
{
var callIdHeader = e.Response.AllHeaders.FindFirst(Header.StandardHeaderType.CallID);
if (callIdHeader != null)
{
var callId = callIdHeader.Value;
if (ShouldSendRingingResponse(callId))
{
e.ClientTransaction.ServerTransaction.SendResponse(e.Response);
}
}
}
}
public bool ShouldSendRingingResponse(string callId) { .... }
След това можете да създадете някаква логика във функцията ShouldSendRingingResponse
, за да видите дали да изпратите отговора 180 или не.
Обърнете внимание, че не съм тествал това, това е само основна схема за това как бих се опитал да се справя със ситуацията.
person
Willem
schedule
02.12.2014