统一路由中的分配方法

适用于:Dynamics 365 Contact Center—嵌入、Dynamics 365 Contact Center—独立 和 Dynamics 365 Customer Service

使用分配方法确定如何分配工作项。 您可以使用现成的分配方法,也可以通过配置优先级规则和分配规则集来构建自定义分配规则。

自动分配的工作原理

统一路由中的自动分配过程根据配置的分配规则将传入的工作项与最适合的客户服务代表(服务代表或代表)进行匹配。 此连续过程由多个分配周期组成。

每个周期都会选取最未分配的工作项,并尝试将每个工作项与相应的代表匹配。 由于不可用或未找到匹配技能而未分配给代表的工作项将路由回队列。 下一个分配周期将涉及优先级最高的项,这些项包括新的工作项。

如果找不到工作项的合格代表,则分配周期会不断重试,以分配适用于通道的顶级项目。

有关详细信息,请参阅管理队列的最佳做法

统一路由如何确定工作项的优先级

统一路由优先处理单个队列内和跨队列的工作。 队列中的优先级可以是以下类型:

  • 先进先出是默认的优先级逻辑,适用于没有优先级规则的开箱即用分配方法和自定义分配方法
  • 可以使用自定义分配方法定义的自定义优先级。

队列中最早的对话或工作项将被优先分配。 对于异步消息传递渠道(例如持续聊天、WhatsApp 和 Facebook),根据上次交互时间确定最早的对话。 例如,客户周一在 WhatsApp 上与你联系。 这个问题在周二得到解决,但谈话仍然开放。 然后,对话进入 等待状态。 同一客户在周四下午再次光临,带着一个新问题。 自周四早上起,其他客户一直在排队等候。 仅在处理完等待的客户之后,才优先处理返回的客户。

对于记录队列,第一出分配方法基于记录的路由时间,即创建关联的实时工作项的时间。 查看更多信息请访问 统一路由如何影响被路由记录的队列项和实时工作项

如果要根据聊天创建时间确定分配的优先级,可以使用自定义优先顺序规则。

当服务代表订阅多个队列时,可以使用队列的 “队列优先级 ”字段来确定跨队列的工作优先级。 与优先级较低的队列相比,优先级较高的队列中的工作会优先分配。 队列也可以被赋予相同的优先级。 在这种情况下:

  • 如果它们具有默认的先进先出顺序,则将优先处理这些队列中所有最早的项目。
  • 如果队列具有自定义优先级规则,则队列将根据队列名称的字母顺序排序,以确定最高优先级的工作。

如果基于现用分配方法和自定义优先顺序规则配置了队列,则首先优先使用现用分配方法的队列,然后根据自定义优先顺序规则排列队列。

例如,让我们看一下具有以下四个队列的设置,所有队列的优先级都定义为 1:

  • VIP 支持和高级支持:默认先进先出优先级
  • 订单支持和发票查询:自定义优先级规则

订阅所有四个队列的代表将会从 VIP 支持和高级支持队列中接收最早的项目。 如果这两个队列中没有适合该代表的工作项,则先分配发票查询队列中的工作项,然后分配订单支持队列中的工作项。

备注

我们建议您为具有自定义优先级规则的队列分配不同的队列优先级。 即使队列具有相同的优先级规则集,它们也被视为不同的。

分配方法的类型

开箱即用的分配方法将在以下各节中进行说明。

最高容量

系统将工作项分配给具有最高可用容量的服务代表。 选定的代表具有在分类阶段确定的技能,以及与工作流中允许的状态之一匹配的状态。 如果具有相同容量的多个代表可用,则根据循环顺序分配工作项。

如果要使用基于技能的路由,可以使用“完全匹配”和“最接近匹配”选项。

  • 如果您将工作流程中的默认技能匹配算法设置为完全匹配,则系统将使用完全技能匹配、允许的工作流程状态、产能要求筛选代表,并按可用产能对筛选出的代表进行排序。

  • 如果将工作流中的默认技能匹配算法设置为最接近匹配,则系统将根据工作流程允许的状态和产能要求筛选代表。 然后,系统按最接近的匹配项和可用产能对筛选出的代表进行排序。 了解更多信息,请参阅最接近匹配

如果您需要在代表之间公平分配工作,您应该考虑采用轮转分配策略。

备注

当您修改评分模型时,具有该评分模型技能的正在进行的对话或打开的工作项将继续具有现有评分。 有时,此操作可能会导致没有与分配条件匹配的代表。

高级轮循机制

系统将工作项分配给与技能、状态和产能条件相匹配的代表。 初始顺序基于用户被添加到队列中的时间。 然后,订单根据分配进行更新。 类似于在最高产能方法中分配工作项的方式,工作项在轮询分配中会按优先级排序,如统一路由如何确定工作项的优先级所述。

循环分配的顺序是按队列来维护的。 某些代表可以是多个队列的一部分。 因此,根据队列中代表的最后一个分配时间戳,可能会为代表分配连续或同时的但来自不同队列的工作项。

在某些情况下,多个代表符合工作项要求。 如果在按值排列时出现平局(例如可用容量相同),系统会使用轮循机制来分配工作项。 系统根据上一次任务分配的最早时间来排序。

例如,Lesa、Alicia 和 Alan 三位代表可以使用咖啡退款技能,一次最多可以处理三个聊天。 他们上一次的分配时间戳分别是上午 10:30、上午 10:35 和上午 10:37。 关于咖啡退款的工作项于上午 10:40 到达队列。 将顺序设置为“基于用户配置可用容量”后,上午 10:40 的所有代表都具有相同的可用容量,即每个代表 2 个。 为了打破代表之间的僵局,系统会使用轮循算法。 因此,传入聊天将被分配给 Lesa,因为她的上次分配时间上午 10:30 是最早时间。 上午 10:45 以后,如果有另一个咖啡退款工作项目进入,系统会将其分配给 Alicia。 此操作还使用轮循机制分配。 艾丽西娅和艾伦都有 2 个可用容量。 艾丽西娅被首先分配,因为她上一次的任务是在上午10:35。

最不活跃

系统会将工作项分配给语音和消息队列中所有代表中最不活跃且与所需技能、状态和能力相匹配的代表。

分配方法使用工作流中配置的“自上次为语音或消息对话释放产能以来的时间”和阻止处于总结状态的产能设置来确定最空闲的代表并将下一个传入呼叫传递给他们。

让我们看看它是如何工作的,并带有以下示例。

方案 1

Oscar Ward 和 Victoria Burke 是两位具有相同技能的服务代表。 Oscar 负责 Members Messaging 队列,而 Victoria 负责 Members MessagingReturns Voice 队列。

  • 与 Oscar 的对话次数: 1 次聊天
  • 与 Victoria 的对话次数:1 次通话和 1 次聊天

下午 1:00,一个新的聊天对话到达。

由于 Oscar 的并发对话数少于 Victoria,因此新聊天将分配给 Oscar。

方案 2

Maya 和 Hailey 是两位具有相同技能的服务代表。 Maya 处理 Orders Messaging 队列,而 Hailey 处理 Orders MessagingDelivery Voice 队列。

假设 Hailey 正在同时进行通话和聊天,而 Maya 正在参与两个聊天对话。

Maya 在下午 1:55 完成其中一次聊天,Hailey 在下午 2:00 完成聊天。 下午 2:05 收到一条新的聊天消息。

  • 与 Hailey 的对话次数:1 次
  • 与 Maya 的对话次数:1 次聊天

由于 Maya 和 Hailey 具有相同的并发分配,因此最不活跃任务分配策略会考虑语音和消息队列的最后一次容量释放时间。

与 Hailey 相比,Maya 被确定为最不活跃,因此,新聊天被分配给 Maya。

路由到活动状态最少的代表分配策略有助于在代表之间平衡分配工作项,并提高代表效率和客户满意度。

您还可以构建 自定义报告 来跟踪代表的 “Last Capacity Release time” 并了解代表之间的分配分配。 有关代表的上次产能释放时间的数据可在“msdyn_agentchannelstate” Dataverse 实体中找到。

重要

最小活动分配方法仅适用于语音和消息通道,并且是在创建语音或消息队列时的默认选择。

此功能用于帮助客户服务经理或主管提高其团队的绩效并提高客户满意度。 此功能不适用于(也不应该用于)作出会影响员工或员工团体的雇佣的决定,包括薪酬、奖励、资历或其他权利。 客户对使用 Dynamics 365、此功能以及任何关联的功能或服务时遵守所有适用法律全权负责,包括与访问员工个人的分析信息以及监视、记录和存储与最终用户的通信相关的法律。 另外还包括充分通知最终用户他们与代表之间的通信可能会根据适用法律的规定受到监视、记录或存储,并在对最终用户使用此功能前获取他们的同意。 另外还建议客户建立机制来通知代表他们与最终用户之间的通信可能会受到监视、记录或存储。

新建

您还可以创建自定义分配方法来满足您的业务需要。 系统允许您创建和使用自己的规则集和规则,以配置优先级、严重性和容量,从而选择需要将工作项路由到的队列。 您可以创建以下规则集:

  • 优先级规则集:您可以定义代表可以承担更多工作时向其分配工作项的顺序。
  • 分配规则集:表示一组用于选择代表和使用排序选项对匹配的代表进行排序的条件。

重要

  • 虽然可以创建自定义分配方法,但我们建议使用现用的分配方法或选择条件,这些方法是可靠且经过验证的大多数用例。
  • 必须在自定义分配方法中配置状态、容量和技能匹配规则,因为为工作流定义的默认设置不在自定义分配方法中使用。
  • 开箱即用的分配策略不考虑代表工作时间。 您必须在规则定义中使用“is_working”运算符来编写自定义分配方法。

分配周期

分配周期是根据分配规则对工作项、工作项的选择以及将它们分配给最适合的代表的优先级排序。 统一传递可优化组织中多个队列的分配周期,以获得最佳性能。

分配周期从以下其中一个触发器开始:

  • 队列中的新工作项到达。
  • 对代表状态进行更改。
  • 对代表产能的更新:如果在运行时更新了产能,则产能更改会触发分配。 如果手动更新容量,则更改不会触发分配。
  • 向队列中添加代表。
  • 工作项的记录类型每五分钟定期触发一次。

优先级规则集如何工作

优先级规则集是优先级规则的已排序列表。 每个优先级规则代表队列中的一个优先级桶。 在优先级规则中,您可以指定一组条件和排序属性。 在评估过程中,优先级规则将按照它们列出的顺序运行。 对于第一个优先级规则,队列中与其条件匹配的工作项将被放入同一个优先级桶。 在优先级桶中,将按照优先级规则中指定的顺序对项目进行进一步排序。 第二个规则将在队列中的其余项目上运行,来识别下一个优先级桶,并按排序依据属性对桶进行排序,直到所有规则全部完成评估。

每个队列只能创建一个优先级规则集。

例如,考虑如以下屏幕截图中所示的具有四个规则的优先级规则集。

优先级划分应用场景的屏幕截图。

  • 在任何分配周期中,都会运行此优先级划分规则集,规则集中的规则将按它们列出的顺序运行。

  • 第一个规则“高优先级和优先”将查找队列中关联案例优先级为“高”且案例类别为“优先”的所有工作项。 系统将创建包含这些工作项的最高优先级桶,并按照排序依据属性中指定的“先进先出”方式对它们进行排序。 要从队列中分配的第一个工作项将是此组中最先添加的项。

  • 下一个优先级类别是案例类别为“高级”的工作项。 上述规则将具有高级案例类别和高优先级的工作项置于顶部分组中。 此规则仅考虑具有高优先级的其他工作项。 在这种情况下,排序依据属性也是“先进先出”。

  • 下一个优先级存储桶包括尚未分类的高优先级案例的工作项。 系统按首次响应时间字段对工作项进行升序排序。 也就是说,最早需要第一个响应的工作项优先排列。

关于优先级划分规则的一些要点如下:

  • 每个队列只能创建一个优先级规则集。
  • 优先级划分规则在每个分配周期运行。 如果您更改了工作项的任何属性,如案例的优先级,将在下一个分配周期考虑该更改。
  • 默认情况下,队列按“先进先出”方式排序。 如果您未创建优先级划分规则,将首先分配最早的工作项。
  • 在正常情况下,当有足够数量的代表可以处理工作项时,处理时间仅为几秒钟。 将按优先级顺序为代表分配工作项。 有时,工作项堆积起来,因为符合条件的代表较少。 如果某个代表在处理期间可用,则系统会根据优先级顺序提供下一个工作项。 此策略可能导致人们认为最高优先级的项目没有被分配。 当系统尝试分配最高优先级项时,会出现这种情况,但它们仍保留在队列中。
  • 系统将与任何优先顺序规则集不匹配的工作项放入最低优先级的存储桶中,并按先进先出的顺序对它们进行排序。
  • 针对相关性工作项跳过优先级规则,此类工作项将优先于队列中的其他工作项进行分配。 在 代表亲和力中了解有关亲和力的更多信息。

动态优先顺序的工作原理(预览版)

[本部分是预发行文档,可能会更改。]

动态优先顺序是一种 AI 主导的方法,基于以下方法提高对话(仅限语音和实时聊天)的优先级:

  • 增加等待时间:当客户等待更长时间时,优先级会升级。
  • 聊天传输:当会话在队列之间移动时,优先级提升。

了解更多信息,请参阅 如何使用 AI 支持的剧本配置对话编排

优先级分数系统

优先级分数属性的工作原理如下:

  • 保持会话动态增加的优先级值。
  • 累积添加增量值以维护正在运行的优先级分数。
  • 可以使用分类规则设置初始或基本优先级分数。
  • 优先级递增逻辑是通过对话编排指南中的提示模板进行编写的。
  • 任何启用了优先级升级的队列都不应配置任何自定义优先顺序规则。
  • 优先级分数范围为 0 到 100,000。
  • 最短等待时间间隔为 30 秒。
  • 平局:当优先级分数相等时,采用先进先出(FIFO)原则。

场景:等待时间升级

此方案根据客户在队列中等待的时间自动增加会话的优先级。

触发事件:对话正在队列中等待。

工作原理

  1. 当会话进入队列时,执行手册将评估配置的条件。
  2. 根据匹配的上下文变量值,系统会在指定的时间间隔内增加优先级分数。
  3. 系统首先向代表提供优先级更高的对话,而不是优先级较低的对话。

Example:

客户细分 优先级增加 时间间隔
VIP 客户 20 每 30 秒
黄金层客户 15 每 30 秒
所有其他客户 5 每 30 秒

场景:队列转移升级

当会话传输到特定队列时,此方案会增加会话优先级。

触发事件:对话将传输到队列。

工作原理

  1. 将对话转移到该任务清单正在执行的队列时,优先级会立即提升。
  2. 优先级增加是基于配置的条件的一次性调整。
  3. 传输的对话会根据业务规则获得适当的关注。

示例:优先级升级

客户细分 优先级增加
VIP 客户 50
升级转移 30
所有其他传输 10

示例:优先级更新

客户细分 优先级提升
VIP 客户 5
升级转接 3
所有其他转移 1

基于等待时间的优先级场景

剧本

根据会话等待时间每增加 30 秒,将遵循以下优先级逻辑。

客户细分 优先级提升
钻石 10
9
Yellow 8
所有其他 1

运行时时间线

下表显示动态优先级如何向属于不同服务层级的客户 A、B、C 和 D 分配优先级(位于同一队列中)。

时间 队列状态 优先级分数 备注
T=0 A 进入 A=0 客户 A 到达(黄色等级)
T=10 B 输入 A=0、B=0 客户 B (黄色层) 到达
T=20 C 进入 A=0、B=0、C=0 客户 C (黄金会员)到达
T=30 D 进入 A=8、B=0、C=0、D=0 A 获得 +8 的提升,D(钻石)现身
T=31 有代表可用 A=8 已提供服务 分配 A (最高分数)
T=61 代表可用 B=8、C=9、D=10 D 接下来执行 (最高分)

主要结果:

  • 尽管队列中有优先级更高的对话,但会话“A”并未被忽略。 其长时间的等待时间被考虑为优先级。
  • 即使对话“C”和“D”属于更高的层级,它们也没有被推送到顶部。 他们根据他们的等级获得了更高的提升,但仍然保持公平竞争。

与现有功能集成

功能 集成行为
自定义优先顺序规则 动态优先级手册不适用于配置了自定义优先级规则的队列。 在激活提升优先级或更新 playbooks 之前,请删除队列中的任何自定义优先级规则。
跨队列优先级管理 支持将优先级分数作为主要排序条件
FIFO 队列 更新优先级分数操作可用于将优先级设置为队列中的默认值,以执行严格的 FIFO 行为
分类规则 可以设置初始或基本优先级分数

分配规则集如何工作

分配规则集是分配规则的已排序列表。 每个分配规则代表一组条件,用于确定要选择的代表,以及用于对匹配的代表进行排序的排序字段。 在运行时,首先评估优先级最高的分配规则。 代表根据规则中指定的条件进行匹配。 如果存在多个匹配代表,则按顺序字段对它们进行排序,并且为最高代表分配了工作。 如果没有匹配的代表,则将评估规则集中的下一个分配规则。 此方法逐渐放宽赋值约束。 系统首先应用最严格的标准,然后减少条件以找到最佳代表。 如果没有找到匹配代表,工作项将保留在队列中。

在分配规则中,系统用户属性与工作项的要求匹配。 选择静态匹配时,条件将基于系统用户实体属性和静态值形成。 选择动态匹配时,左侧的条件基于系统用户根实体,右侧的条件基于对话根实体。 您可以在对话根实体上向下钻取到两个级别以形成规则条件。 具有动态匹配和静态匹配的分配规则如下所示。

具有动态匹配和静态匹配条件的分配规则的屏幕截图。

分配规则的组成部分

分配规则包含以下项:

  • 顺序:指定在规则集中评估分配规则的顺序。 优先级较低的规则首先运行。 如果任何规则匹配用户,则不再评估下一组规则。

  • 名称:唯一的规则名称。

  • 条件:用于评估的表达式,以便将用户与传入工作的属性进行匹配。 条件包括三个部分:

    • 用户属性:可用于将用户与传入工作进行比较的用户属性。 用户属性可以是下列属性之一:
      • 在系统用户表上选择属性。
      • 在线状态:由统一路由服务根据用户工作负荷和手动选择进行维护。
      • 产能:由统一路由服务根据用户工作负荷和人工选择进行维护。
      • 用户技能:表示与用户关联的可用于执行基于技能的分配的技能。
      • 日历计划:用户服务计划日历中表示的用户的计划。
      • 机器人属性:仅当将代理配置为用户并且想要对其执行一些比较时,才能使用。
    • 运算符:定义用户属性和传入工作项属性之间的比较关系。

    备注

    自定义分配中不支持定义字段级安全性的属性。

    统一路由将筛选出属性特定的运算符供您选择。 可用于属性类型的一些特殊运算符如下。

    属性类型 操作员 定义
    在线状态 等于、不等于、包含数据、不包含数据 使用运算符以查找与在工作项中指定的当前状态相匹配的代表。
    容量 等于、不等于、包含数据、不包含数据 使用运算符以比较代表是否有足够的产能来处理指定项。
    注意:系统在自定义任务分配中隐式执行产能配置文件检查,但对于基于单位的产能检查,您需要指定条件。
    用户技能 完全匹配 使用操作员查找具有传入工作项所需的全部技能的代表。
    用户技能 自定义匹配 利用运算符在基于工作项的所选查找属性下,查找技能能在运行时匹配的代表。
    日历日程安排 正在工作 使用此运算符以查找正在按照其服务计划日历工作的代表。 自动分配仅考虑代表日历计划,不考虑为队列定义的操作时间。
    • :将用户属性与此值进行比较来查找合适的代表。 此值可以是静态的,如“Address 1: County equals "USA"”。 此值也可以是动态的,您可以动态地将用户属性与工作项上的值进行比较。 在动态值中,您可以选择工作项或相关记录上的任何属性。 例如,以下条件查找用户,这些用户的国家/地区与个案中关联客户的国家/地区一致。

      动态匹配示例的屏幕截图。

      对于一些运算符,值不是必需的。 它们可以是条件,例如“包含数据”、“不包含数据”和“日历计划:正在工作”。

      对于用户技能,值为操作员预定义。 详细信息请参阅设置基于技能的路由

  • 排序依据:如果多个代表符合某个规则中的条件,您可以使用“排序依据”子句查找最适合的代表。 您可以指定以下排序依据子句:

    • 排序属性

      • 最低活跃:仅适用于语音和消息队列。 工作项将被路由到与所需技能、状态和容量匹配的最不活跃的代表。 有关详细信息,请参阅分配方法的类型部分。
      • 轮循机制
      • 基于单位的可用容量
      • 基于配置文件的可用容量
      • 精通度
      • 技能计数
    • 用户属性:这些属性在系统用户实体上定义。

屏幕截图中的以下场景说明了分配规则的一个示例。

示例分配方法。

第一个条件指定了“用户技能”,在这些技能上操作符是完全匹配的。 然后对用户属性进行评估。 不同的用户属性通过运算符和属性值指定,例如在线状态属性应等于“Available”或“Busy”。 在运算符的右侧,您可以指定要与属性匹配的值。 这些值可以是“静态”的,如“presence status equals Available or Busy”。 如果指定“dynamic”,则根据指定的表达式在运行时匹配条件。 例如,可以指定“首选客户类型等于 Conversation.Contact.Membership 级别”。 然后,系统将每个代表的“首选客户类型”与客户的聊天计算成员身份级别匹配。

动态匹配可以减少必须为可能值的每个排列和组合编写和维护多个静态规则的工作量。

向代表重复提供工作项的限制

代表可以接受或拒绝通过自动分配获得的工作项。 拒绝允许通知超时都被视为拒绝工作任务。 如果代表通过任一方法拒绝工作项,则在下次尝试分配时,他们对该工作项的优先级会降低。 在以下场景中,对于同一工作项,可以最多三次或在指定的限制内重新考虑代表:

  • 代表对拒绝的对话具有独特的资格,并满足容量和存在要求。
  • 所有其他符合条件的代表都拒绝。

如果代表三次拒绝同一工作项或达到配置的限制,则不再考虑将代表用于该特定工作项的自动分配。 然后,系统会尝试将被拒绝的工作项分配给队列中的其他符合条件的代表。 代表仍然可以手动选取工作项。

例如,代表 Serena Davis 两次拒绝了客户 Ana Bowman 的聊天请求,并且在第三次尝试中任务分配通知超时。 系统将其视为三次拒绝,自动分配不会再次提供相同的聊天给塞雷娜·戴维斯。 但系统将 Ana Bowman 的聊天提供给其他符合条件的代表。 此外,除了 Ana Bowman 拒绝的聊天外,还会考虑向 Serena Davis 分配其他传入对话。

备注

如果所有匹配代表因代表性可用性较低而拒绝工作项目,或者工作需要特定的技能和熟练程度,则工作将保留在队列中。 同样,如果 100 名代表拒绝特定工作项,则自动分配不会在进一步的工作周期中考虑工作项。 主管可以手动分配它,或者其他代表,包括那些先前拒绝的代表,都可以接手它。

您可以根据组织要求将默认的三次拒绝限制更新为一到五次。 此限制适用于组织内的所有渠道。

您可以按如下方式进行 OData 调用,来检查您的组织的限制。

<org-url>/api/data/v9.0/msdyn_omnichannelconfigurations?$select=msdyn_number_of_declines_allowed

如果 OData 调用返回 null 值,则表示拒绝限制设置为默认值 3。

可以按如下方式更新 OData 调用以修改限制。

var data = { "msdyn_number_of_declines_allowed": 3 } // update the record Xrm.WebApi.updateRecord("msdyn_omnichannelconfiguration", "d4d91600-6f21-467b-81fe-6757a2791fa1", data).then( function success(result) { console.log("Omnichannel Configuration updated"); // perform operations on record update }, function (error) { console.log(error.message); // handle error conditions } );

配置分配方法和规则
关于统一传递的常见问题解答
对话诊断
创建工作流
创建队列
为记录设置统一传递
为统一路由设置基于技能的路由