关于 service-omni-queue-routing-config-deploy
这是一个 Salesforce 技能,通过 Data API 创建或更新 Omni-Channel 的 `QueueRoutingConfig`。它会保留未指定的设置,并在再次查询组织后验证结果,可安全重复运行。
主要功能
- 01创建或更新路由配置
- 02支持 MostAvailable 和 LeastActive
- 03设置容量、优先级和推送超时
- 04配置溢出接收用户
- 05重新查询并验证写入值
- 06更新时保留未指定设置
适用场景
- 01设置 Omni-Channel 队列的路由方式
- 02更新容量设置并保留其他值
- 03将溢出工作转给活跃用户
- 04检查 API 写入后的配置
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill service-omni-queue-routing-config-deploy安装后在 Claude Code 中输入/service-omni-queue-routing-config-deploy确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/api-notes.mdscripts/upsert-and-report.shscripts/tests/_bootstrap.pytest_queue_routing_config_contracts.py详细介绍
service-omni-queue-routing-config-deploy
通过 Data API 创建或更新 QueueRoutingConfig。此记录用于告知 Omni-Channel 如何将工作分配给队列中的 Agent:路由模型(MostAvailable 用于类似轮询的分配,LeastActive 用于负载均衡)、每项工作占用的容量(CapacityWeight 或 CapacityPercentage)、推送超时时间以及路由优先级。它是 Omni 路由 Queue 的前置条件——service-omni-queue-deploy 会将队列绑定到此技能返回的配置 Id。技能通过 DeveloperName 检测记录,因此会 POST 新记录,或 PATCH 现有记录以使其保持一致,并且可以安全地重复运行。
输入
bash scripts/upsert-and-report.sh <org-alias> [routing-model] [developer-name] [master-label] [capacity-weight] [routing-priority] [overflow-assignee] [push-timeout]
# Case_Routing_Config, preserve model / create MostAvailable:
bash scripts/upsert-and-report.sh myorg
# align the Case QRC to LeastActive:
bash scripts/upsert-and-report.sh myorg LeastActive
# Voice_Routing_Config (coordinator path):
QRC_ROUTING_TARGET=VoiceCall bash scripts/upsert-and-report.sh myorg
# set a fallback/overflow assignee (route overflow work to a supervisor):
[email protected] bash scripts/upsert-and-report.sh myorg
# Voice uses 100% capacity and a 30-second push timeout:
QRC_ROUTING_TARGET=VoiceCall QRC_CAPACITY_PERCENTAGE=100 QRC_PUSH_TIMEOUT=30 bash scripts/upsert-and-report.sh myorg MostAvailable
org-alias(必填)。routing-model(可选,或使用ROUTING_MODEL_INPUT)—MostAvailable|LeastActive。省略时:保留现有记录的模型;新建记录时使用MostAvailable。提供时:创建记录时写入该值,并使现有记录与之保持一致。developer-name/master-label/capacity-weight(1..100)/routing-priority(≥1)— 位于 routing-model 之后的定位参数,或通过QRC_DEVELOPER_NAME/QRC_MASTER_LABEL/QRC_CAPACITY_WEIGHT/QRC_ROUTING_PRIORITY设置。仅创建新记录时,标签、权重5和优先级1才是默认值;省略时保留现有记录的值。QRC_CAPACITY_PERCENTAGE(可选,0..100)— 使用百分比容量,而非权重。不能与显式提供的容量权重同时使用;切换模式时会清除旧的对应字段。overflow-assignee(可选的第 7 个定位参数,或使用QRC_OVERFLOW_ASSIGNEE)— 所有队列成员都不可用时接收工作的备用 User(Username 或005Id)(OverflowAssigneeId)。写入前会解析为一个处于活动状态的 User Id;省略时会保留现有记录的溢出分配对象,新建记录则不设置。push-timeout(可选的第 8 个定位参数,或使用QRC_PUSH_TIMEOUT,0..3600 秒)— Omni 等待 Agent 接受推送工作的时长。省略时保留现有值。QRC_ROUTING_TARGET(环境变量)—Case | VoiceCall | Incident | MessagingSession;用于选择规范命名默认值。service-omni-channel-setup-coordinate会针对每个目标设置此变量。
前置条件和安全性
- 目标组织已通过
sfCLI(My Domain URL)完成身份验证,具有 Service Cloud 许可证,且sfCLI 版本 ≥ 2.139.6。 - 已启用 Omni-Channel 基本设置(
service-omni-base-settings-configure)——否则无法写入QueueRoutingConfig(INVALID_TYPE)。 - 适用三重
safe_to_write生产环境防护措施。
运行
upsert-and-report.sh 会执行检测 → upsert → 验证:
- 查询
QueueRoutingConfig WHERE DeveloperName = '<target-derived-or-explicit>',并捕获现有 Id 和字段值。 - 将其与请求值或规范值进行比较。
- 如果记录不存在,则 POST 新记录;如果所有字段均已匹配,则不执行任何操作(
reused);如果有字段不匹配,则 PATCH。 - 重新查询以确认最终状态;如果重新查询结果显示不匹配,则阻止操作。
行为
基于目标命名。 未指定名称时,DeveloperName 会根据路由目标生成(Case_Routing_Config、Voice_Routing_Config 等),因此重复运行和协调器会指向同一条记录,而不是创建重复记录。
优先保留,避免不必要的变更。 对于现有记录,未提供的路由模型、标签、路由优先级、容量模式/值、溢出指派对象、推送超时和基于属性的标志都会保留。默认值(MostAvailable、基于目标生成的标签、权重 5、优先级 1、非基于属性)仅适用于全新记录。容量只能使用一种模式;显式地从权重切换为百分比或从百分比切回权重时,会清除旧的对应字段,避免记录中存在相互冲突的容量设置。
回退/溢出路由。 在 QueueBased 模型中,“回退”指队列的溢出指派对象——当没有队列成员可用时接收工作项的 User(而不是让工作项无限期地留在队列中)。Agent 是否可用由 Omni 异步决定,无法在路由流中观察,因此此设置应属于 QueueRoutingConfig,而不是流程。提供 overflow-assignee 时,该技能会将其解析为活跃的 User(若用户未知或未激活,则阻止操作,因为溢出到未激活用户会导致工作被悄然搁置),写入 OverflowAssigneeId,并验证该值能否往返读取。
回读报告。 所有报告的字段值都会在写入后从 org 重新查询(values_source: "requeried"),而不是照抄输入值——201/204 仅表示写入已被接受。该技能绝不会删除 QueueRoutingConfig(队列、Agent 和工作技能可能引用其 Id)——始终通过 PATCH 使记录符合目标设置。
输出约定
返回一个 JSON 对象,其中 status ∈ created | reused | updated | blocked,并包含 routing_target、developer_name、id、master_label、routing_model、routing_priority、capacity_mode、capacity_weight、capacity_percentage、is_attribute_based、push_timeout、overflow_assignee_id、overflow_assignee_requested、values_source、before 快照、manual_actions 和 blocking_issue。
created— 不存在记录;POST 成功。reused— 记录已存在且所有字段均匹配;不执行任何操作。updated— 记录已存在,但有字段不匹配;PATCH 成功。blocked— 前置条件未满足(未启用 Omni、生产 org、写入后不匹配,或overflow-assignee未能解析为唯一的活跃 User)。
before.existed 记录开始时是否存在匹配的记录(若存在,还会记录其先前的 capacity_weight/routing_model);对于所有非 blocked 状态,都会填入 id;仅当状态为 blocked 时,blocking_issue 才不为 null。
限制
- 基于属性的路由(
IsAttributeBased=true)不在范围内——它还需要额外的属性架构。 - v66 仅支持
MostAvailable和LeastActive。 - v66 已弃用按渠道加权容量(参见
service-omni-service-channel-configure);每个 Agent 的容量总量在其他位置配置。
参考资料
| 文件 | 阅读时机 |
|---|---|
references/api-notes.md | 遇到意外错误或需要自定义字段时——了解 QueueRoutingConfig 架构、RoutingModel 语义,以及 CapacityWeight 与 Agent 容量的交互方式 |
scripts/tests/test_queue_routing_config_contracts.py | 验证变更时——从此技能目录运行 python3 scripts/tests/test_queue_routing_config_contracts.py |