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