MachineState / EndpointState的目的是什么?

时间:2018-09-05 13:32:25

标签: c# skype-for-business ucma

我目前正在编写一个受信任的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时(例如PresenceState.EndpointAway在UserOnline时),我还没有观察到任何不同或奇怪的行为

所以我的主要问题是:

  • EndpointState的目的是什么? 信息可用于S4B?

  • 如何正确设置EndpointState?确实需要在更新 UserState还是可以吗?

        var presenceCategs = new PresenceCategory[]
             {
                    PresenceState.UserBusy,
             };
        _userEndpoint.LocalOwnerPresence.BeginPublishPresence(presenceCategs, PublishPresenceCompleted, true);
    
  • 更改EndpointState时适用哪些“规则” /公约?

1 个答案:

答案 0 :(得分:1)

我发现在SfB中,在线状态是一个非常令人困惑的话题。据我了解,每个SIP端点都可以拥有其OWN状态。

因此存在状态“ PER”的多层。每个注册的SIP端点都有自己的状态“状态”,用户的联系卡拥有自己的状态,每个日历事件都有自己的状态。我相信还有一个“聚合”状态,即所有其他状态在任何时候都可以看到的所有状态的总和。

鉴于此,您指向的页面将显示:

  

EndpointState端点所有者的可用性   特定端点。

表示您正在将当前SIP端点(在您的情况下为UserEndpoint)设置为忙。因此,只要您的UserEndpoint处于活动状态,用户忙碌的“状态”就会持续,并且因为该用户而登录的任何其他SIP端点也不会更改状态。

  

UserState端点所有者的可用性首选项。

因此,如果您设置用户状态,则不仅设置SIP端点的状态,还将强制其他登录用户端点也更改为该状态。因此,状态状态将持续到您或您在用户实例中登录的另一个实例更改状态。

您使用哪一个取决于您要尝试执行的操作。

如果要设置用户状态而不是让UserEndpoint实例死亡,则UserState选项是好的。因此,它只能存在于设置用户状态的过程中。

当您将UserEndpoint保持一段时间并且您不会使用户的整体状态变为“忙”时,可以使用EndpointState,除非您是唯一可以为用户呼叫服务的状态实例。因此,有效的做法是,您只是在向端点宣传“状态”,而不是向用户整体显示状态。