是否可以通过 Lync SDK(2013 或其他版本)设置呼叫转移?

2023-12-15

我在一家大型机构的信息系统部门工作。处理我们电话的Lync服务器是由另一个部门处理的,任何需要他们合作的解决方案都是不可行的。这排除了任何需要额外权限、从 Lync 服务器、SEFAUtil 等运行的解决方案。

我的个人 Lync 2013 客户端有一些令人讨厌的 GUI 菜单,我可以在其中将我的桌面电话转发到另一个号码。因此我知道理论上这是可能的。

我有 powershell 代码(安装了大量 SDK)将使用我自己的个人凭据登录。我从中获取的博客允许脚本发送一些任意的 IM 消息(对我来说不是很有用)。它看起来像这样:

if (-not (Get-Module -Name Microsoft.Lync.Model)) {     
    try {       
        Import-Module -Name (Join-Path -Path ${env:ProgramFiles} -ChildPath "Microsoft Office\Office15\LyncSDK\Assemblies\Desktop\Microsoft.Lync.Model.dll")
-ErrorAction Stop   
    }
    catch {
        Write-Warning "Microsoft.Lync.Model not available, download and install the Lync 2013 SDK http://www.microsoft.com/en-us/download/details.aspx?id=36824"        break   
    }
}

$client = [Microsoft.Lync.Model.LyncClient]::GetClient()

if ($client.State -ne [Microsoft.Lync.Model.ClientState]::SignedIn) {
    $client.EndSignIn(
        $client.BeginSignIn("[email protected]", "domain\johno", "youllNeverGuess", $null, $null)) 
}

if ($Client.State -eq "SignedIn") {
    Write-Host "DEBUG: We managed to sign in!" }
}

这似乎有效,因为如果我提供错误的密码,它就会呕吐。

在 SDK 中,是否可以将呼叫转移设置为特定号码?微软可怕的文档演示了如何转发脚本通过事件处理程序捕获的传入呼叫,这意味着它必须在轮询循环中运行......而且我不能只是迭代要转发的帐户列表。在 GUI 客户端中,如果您将手机设置为转发到某个号码,即使您关闭机器电源,它也会保留,因此它会向半永久性的服务器发送一些内容。 Lync SDK 可以实现同样的功能吗?

尽管 Lync 2010 已被弃用,但我对基于此的解决方案感到满意。 Powershell 是首选,但如果您有 VB 或 C# 代码,也可以。我不需要把所有的事情都放在银盘上,只需要一些可以使用的线索。


您需要将路由信息发布到 Lync 服务器。其中包含您的同时响铃和转发设置等。

如果您可以创建 .Net 解决方案,请尝试以下操作:

当您需要针对 Lync 服务器进行编程并且无法获得任何提升的权限时,请尝试使用 UCMA 并创建一个UserEndpoint。由于您知道 Lync 服务器地址并拥有登录详细信息,因此您可以创建并验证UserEndpoint无需其他部门的配合。

示例(不是我的):使用 UserApplication 实例创建 UCMA 应用程序.

设置好端点后,您基本上就可以在家了。通过发布状态的功能,您可以发布路由设置。对于 Lync,“状态”是一个容器,其中包含可用性、路由、联系详细信息、自定义位置等所有内容。

On your UserEndpoint, 订阅LocalOwnerPresence.PresenceNotificationReceived MSDN.

使用端点登录后,此事件将触发并为您提供当前设置。在事件参数中LocalPresentityNotificationEventArgs,抓住AllCategories集合,并寻找PresenceCategoryWithMetaData与名字"routing"。创建一个新实例Routing包含此数据的容器。 路由容器是类Microsoft.Rtc.Internal.Collaboration.Routing in Microsoft.Rtc.Collaboration.dll.

private void OnLocalPresenceNotificationReceived(
    object sender, 
    LocalPresentityNotificationEventArgs e) 
{
    var container = (from c in e.AllCategories
                     where string.Equals(c.Name, "routing", StringComparison.OrdinalIgnoreCase)
                     orderby c.PublishTime descending
                     select c).FirstOrDefault();

    if (container != null)
    {
        var routing = new Microsoft.Rtc.Internal.Collaboration.Routing(container);

        // You can access the routing data here...
    }
}

如果您没有收到任何路由容器,您可以创建一个新实例。但请注意,发布新实例将覆盖您当前的所有路由设置,而不是允许您更新当前设置。

In the Routing类您可以写入以下属性:

routing.CallForwardToTargetsEnabled = true;
routing.CallForwardTo.Clear();
routing.CallForwardTo.Add("sip or tel number");
routing.UserOnlyWaitTime = TimeSpan.FromSeconds(...);

最后,发布新的路由设置:

endpoint.LocalOwnerPresence.PublishPresenceAsync(new PresenceCategory[] { 
    routing 
});

还可以通过使用以下命令获取当前的 Lync 实例来发布状态:GetClient()Lync SDK 中的方法。但我不确定这是否可以用于发布路由设置。不过,您可以尝试一下,我在使用 Lync 时发现了许多未记录的选项。查看以下两个资源:

How to: Publish enhanced presence information and Self.BeginPublishContactInformation

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以通过 Lync SDK(2013 或其他版本)设置呼叫转移? 的相关文章

随机推荐