如何获取 RingCentral 呼叫队列成员可用性?

How to get RingCentral Call Queue Members Availability?

如何获取在线帐户门户中显示的每个队列的队列成员的呼叫队列可用性?我特别想要每个队列 "Members Availability" 下的 UI 中显示的 AvailableBusyUnavailable 状态。

我发现了一些可以列出队列和队列成员的调用队列 API,但它们提供成员可用性,如 UI。

调用队列 API:

下图来自article on Call Queue - User Availability and Call Handling

以上是在正确的轨道上。队列成员列表可用后,您可以查询每个用户的队列可用性。

Note: A user's queue availability as presented below is the same for all queues they are present on so to do a presentation by queue, this information needs to be combined with their queue membership list. This can be retrieved from the queue or user perspective:

To manage individual queue availability, add/remove the user from the queues of interest which can be done using the Edit Call Queue Members API.

对于这两个步骤,查询获取用户状态 API。下面提供了一个示例。

获取用户状态API:

示例请求和响应如下所示:

要求:

GET /restapi/v1.0/account/{accountId}/extension/{extensionId}/presence

回复:

HTTP 200 OK

{
  "uri": "https://platform.ringcentral.com/restapi/v1.0/account/403228676008/extension/403228676008/presence",
   "extension":    {
      "uri": "https://platform.ringcentral.com/restapi/v1.0/account/403228676008/extension/403228676008",
      "id": 403228676008,
      "extensionNumber": "101"
   },
   "presenceStatus": "Available",
   "telephonyStatus": "NoCall",
   "userStatus": "Available",
   "dndStatus": "TakeAllCalls",
   "allowSeeMyPresence": true,
   "ringOnMonitoredCall": false,
   "pickUpCallsOnHold": true
}

使用以下方法获取用户的队列可用性:

1) 用户队列设置

用户的免打扰dndStatus 属性用于表示用户是否接听电话,包括呼叫队列。用户可以将他们的 dndStatus 设置为以下四个值之一,其中 "Department" 是呼叫队列的另一个名称:

  • DoNotAcceptAnyCalls
  • DoNotAcceptDepartmentCalls
  • TakeAllCalls
  • TakeDepartmentCallsOnly

大致可以映射为:

  • 队列呼叫不可用:DoNotAcceptAnyCallsDoNotAcceptDepartmentCalls
  • 可用于队列调用:TakeAllCallsTakeDepartmentCallsOnly

2) 用户总体可用性

下一步是检查 presenceStatus 属性,这是一个具有以下值的枚举字符串:OfflineBusyAvailableOffline 映射到 UI 中的 Unavailable。这是个人呼叫和队列呼叫的总体可用性。

3) 队列成员可用性

要创建队列成员可用性,请像下面的伪代码一样组合上面的两个属性。

我在下面添加了一个额外的 "Available" 条件,该条件完全不需要,但对解释很有用:

member_availability = 
  user.dndStatus == "DoNotAcceptAnyCalls"        ? "Unavailable" :
  user.dndStatus == "DoNotAcceptDepartmentCalls" ? "Unavailable" :
  user.presenceStatus == "Offline"               ? "Unavailable" :
  user.presenceStatus == "Busy"                  ? "Busy" :
  user.presenceStatus == "Available"             ? "Available" : "Available"

这为用户提供了他们所在的所有队列的可用性,因此需要将其映射到队列成员列表或用户的队列列表。

示例代码

这是我编写的一些 Ruby 包装器代码,可以更轻松地在此处更新用户的队列状态:

RingCentral Ruby SDK extension_presence.rb