我目前正在编写一个可信的UCMA 5.0应用程序,它将改变不同用户的存在。
发布UserEndpoint的状态时,您可以发布多种不同类型的状态,例如: UserState:可用,忙碌,离线,... PhoneState:用户当前正在通话或会议中 还有一些包括EndpointState / MachineState。
所以我可以使用以下代码设置用户忙:
// ... init collaboration platform (trusted application) and create the UserEndpoint
var presenceCategs = new PresenceCategory[]
{
PresenceState.UserBusy,
new Note("Will be back in 10 minutes"),
PresenceState.EndpointAway
};
_userEndpoint.LocalOwnerPresence.BeginPublishPresence(presenceCategs, PublishPresenceCompleted, true);
// ...
private void PublishPresenceCompleted(IAsyncResult ar)
{
_userEndpoint.LocalOwnerPresence.EndPublishPresence(ar);
Console.WriteLine("Publish Presence Complete");
}
代码有效,但问题是我不确定何时/如何正确使用EndpointState。 我发现的关于EndpointState / MachineState的唯一文档对我没有帮助:
EndpointState
来自此特定端点的端点所有者的可用性。
https://msdn.microsoft.com/en-us/library/dn466019(v=office.16).aspx
到目前为止,在更改或省略EndpointState时我无法观察到任何不同或奇怪的行为(例如,当UserOnline时为PresenceState.EndpointAway
)
所以我的主要问题是:
var presenceCategs = new PresenceCategory[]
{
PresenceState.UserBusy,
};
_userEndpoint.LocalOwnerPresence.BeginPublishPresence(presenceCategs, PublishPresenceCompleted, true);
我发现存在是SfB中一个非常令人困惑的话题。据我了解,每个SIP端点都可以拥有自己的OWN状态。
因此存在多个存在状态PER“用户”层。每个注册的SIP端点都有自己的状态“状态”,用户的联系卡具有自己的状态,每个日历事件都有自己的状态。还有“聚合”存在状态,我认为是所有存在状态的总和,这是任何人在任何时候都看到的。
鉴于那时你指向的页面说:
EndpointState此特定端点的端点所有者的可用性。
表示您将当前SIP端点(在您的情况下为UserEndpoint的)存在仅设置为忙碌。因此,只要您的UserEndpoint处于活动状态,用户忙碌的“状态”将持续,并且由于该用户不会更改状态而登录的任何其他SIP端点也将持续。
UserState端点所有者的可用性首选项。
因此,如果您设置用户状态,则不会仅为您的SIP端点设置状态,但会强制任何其他已登录的用户端点也更改为该状态。因此,只要您或您在用户实例中记录的另一个实例更改了状态,就会持续存在状态。
你使用哪一个取决于你想要做什么。
如果要设置用户状态而不是让UserEndpoint实例死亡,则UserState选项很好。因此它只能设置用户存在的长度。
当您将UserEndpoint保持一段时间时,可以使用EndpointState,除非您是唯一可用于服务用户调用的在线实例,否则您不会将用户的整体状态设置为“忙碌”。实际上,您只是在宣传您的终端“在线状态”,而不是整体上的用户存在。