1

信頼できるアプリケーション エンドポイントでは、外部プレゼンス プロバイダーに基づいてユーザーの状態を公開する必要があり、それを行うことができます (後で外部ソースが「アイドル」になったときにそれらをクリアすることは別の問題です)。

問題は、ユーザー A の新しい状態を公開すると、そのユーザー自身の Lync クライアントには反映されず、他の全員が更新を取得することです。

現時点では、次のコード スニペットを使用して公開しています。

    user.Endpoint.LocalOwnerPresence.BeginPublishPresence(
        user.categories,
        arBeginPublishPresence =>
        {
            try
            {
                user.Endpoint.PresenceServices.EndUpdatePresenceState(arBeginPublishPresence);
                logger.log("Published presence for {0} with state {1}.", user.SipUserUri, newState.Availability);
            }
            catch (RealTimeException ex)
            {
                logger.log("Failed publishing presence for {0}. {1}", user.SipUserUri, ex);
            }
        },
        null);

user.categories の場所:

            PresenceCategoryWithMetaData stateWithMetaDataForPersonal = new PresenceCategoryWithMetaData(++instanceId, 400, newState);
            PresenceCategoryWithMetaData stateWithMetaDataForWorkgroup = new PresenceCategoryWithMetaData(instanceId, 300, newState);
            PresenceCategoryWithMetaData stateWithMetaDataForColleagues = new PresenceCategoryWithMetaData(instanceId, 200, newState);
            PresenceCategoryWithMetaData stateWithMetaDataForExternal = new PresenceCategoryWithMetaData(instanceId, 100, newState);
            PresenceCategoryWithMetaData stateWithMetaDataForAll = new PresenceCategoryWithMetaData(instanceId, 0, newState);
            if (instanceId >= Int64.MaxValue)
            {
                instanceId = 1;
            }

            stateWithMetaDataForPersonal.ExpiryPolicy = expirypolicy;
            stateWithMetaDataForWorkgroup.ExpiryPolicy = expirypolicy;
            stateWithMetaDataForColleagues.ExpiryPolicy = expirypolicy;
            stateWithMetaDataForExternal.ExpiryPolicy = expirypolicy;
            stateWithMetaDataForAll.ExpiryPolicy = expirypolicy;

            stateWithMetaDataForPersonal.Expires = timeout;
            stateWithMetaDataForWorkgroup.Expires = timeout;
            stateWithMetaDataForColleagues.Expires = timeout;
            stateWithMetaDataForExternal.Expires = timeout;
            stateWithMetaDataForAll.Expires = timeout;

            user.categories =
                new List<PresenceCategoryWithMetaData>()
                        {
                            stateWithMetaDataForPersonal,
                            stateWithMetaDataForWorkgroup,
                            stateWithMetaDataForColleagues,
                            stateWithMetaDataForExternal,
                            stateWithMetaDataForAll
                        };

カテゴリはプレゼンス状態をじゅうたん爆撃していますが、私はそれが間違っていることを知っています. これはあり得ません... ぐちゃぐちゃ。

私は C#、.NET、および UCMA に不慣れで、1 か月前まで触れたことがありませんでした。

4

1 に答える 1

0

これは私にとって正しい行動のようです。Lync は、ユーザーがサインインしているすべてのエンドポイントのプレゼンスを集約して、単一のプレゼンス状態を提供します。たとえば、ユーザーが自分の PC で Lync にサインインし、プレゼンスが "退席中" に設定されていて、モバイル クライアントでもプレゼンスが "利用可能" に設定されている場合、すべてのユーザーには "利用可能" の集約されたプレゼンスが表示されます。彼はエンドポイントの 1 つで到達できるためです。ただし、彼の Lync クライアントは引き続き「離席中」です。

ですから、あなたにも同じことが起こっていると思います。UCMA アプリは、プレゼンスを公開するもう 1 つのエンドポイントです。「利用可能」のプレゼンスを公開している可能性がありますが、UMCA アプリのエンドポイントからのプレゼンスであるため、Lync クライアントなど、サインインしている他のエンドポイントには影響しません。ただし、他のすべてのユーザーには、集約されたプレゼンス状態が表示されます。

これは、私がコードで証明した何よりも知識に基づいた推測です。SDK を通じてスカウトを行いましたが、他のエンドポイントの存在を「オーバーライド」する方法がわかりません (実際、それを行うことは間違った動作のように強く感じます)。

于 2012-04-19T21:25:34.297 に答える