1

私は大規模な機関の IS 部門で働いています。私たちの電話を処理する Lync サーバーは別の部門によって処理されており、それらの協力を必要とするソリューションは実行できません。これにより、Lync サーバー、SEFAUtil などから実行される追加の特権を必要とするソリューションが除外されます。

私の個人用の Lync 2013 クライアントには、卓上電話を別の番号に転送できる、忌まわしい GUI メニューがあります。そのため、理論的には可能であることを私は知っています。

自分の個人的な資格情報でログインする (大量の SDK がインストールされた) powershell コードがあります。私が入手したブログでは、スクリプトが任意の 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("x@x.com", "domain\johno", "youllNeverGuess", $null, $null)) 
}

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

間違ったパスワードを入力すると、barfs するという点で、これは機能しているようです。

SDK 内から、callfowarding を特定の番号に設定することは可能ですか? Microsoft の恐ろしいドキュメントは、スクリプトがイベント ハンドラーを介してキャッチした着信を転送する方法を示しています。つまり、スクリプトはポーリング ループで実行する必要があり、転送するアカウントのリストを反復処理することはできませんでした。GUI クライアントから、電話を番号に転送するように設定すると、マシンの電源を切っても転送が継続するため、半永久的に何かがサーバーに送信されます。Lync SDK は同じことを実現できますか?

Lync 2010 は非推奨ですが、それに基づくソリューションがあれば幸いです。Powershell が推奨されますが、VB または C# のコードがある場合は、それも問題ありません。銀の大皿にすべてを盛り付ける必要はありません。作業するための手がかりがいくつかあるだけです。

4

1 に答える 1

4

ルーティング情報を Lync サーバーに公開する必要があります。これには、とりわけ、同時呼び出しと転送の設定が含まれています。

.Net ソリューションの作成に問題がない場合は、次のことを試してください。

Lync サーバーに対してプログラムする必要があり、昇格された特権を取得できない場合は、UCMA を使用してUserEndpoint. Lync サーバーのアドレスとログインの詳細を知っているのでUserEndpoint、他の部門の協力なしで を作成して認証できます。

例 (私のものではありません): Createing UCMA Applications with a UserApplication instance .

エンドポイントのセットアップが完了すると、基本的に家から解放されます。プレゼンスを公開する機能により、ルーティング設定を公開できます。Lync の場合、「プレゼンス」は、可用性、ルーティング、連絡先の詳細、カスタムの場所などのすべてを含むコンテナーです。

で、 MSDNUserEndpointを購読します。LocalOwnerPresence.PresenceNotificationReceived

エンドポイントでサインインすると、このイベントが発生し、現在の設定が提供されます。イベント引数LocalPresentityNotificationEventArgsでコレクションを取得し、名前がAllCategoriesの を探します。このデータを使用してコンテナーの新しいインスタンスを作成します。ルーティング コンテナは のクラスです。PresenceCategoryWithMetaData"routing"RoutingMicrosoft.Rtc.Internal.Collaboration.RoutingMicrosoft.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...
    }
}

ルーティング コンテナーを受信しない場合は、新しいインスタンスを作成できます。ただし、新しいインスタンスを公開すると、現在の設定を更新できるのではなく、現在のすべてのルーティング設定が上書きされることに注意してください。

クラスではRouting、次のプロパティに書き込むことができます。

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

最後に、新しいルーティング設定を公開します。

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

GetClient()Lync SDKのメソッドを使用して現在の Lync インスタンスを取得することで、プレゼンスを公開することもできます。ただし、これを使用してルーティング設定を公開できるかどうかはわかりません。試してみることもできますが、Lync をいじっているときに、文書化されていない多くのオプションを見つけました。次の 2 つのリソースを見てください。

How to: Publish enhanced presence informationSelf.BeginPublishContactInformation

于 2014-06-05T13:41:41.070 に答える