关于 service-omni-work-skill-routing-configure
用于配置 Salesforce Omni WorkSkillRouting 规则的技能,面向按工作记录字段将工作路由到具备所需技能的 Agent。它会合并现有映射并通过 Metadata API 部署,避免无法读取现有元数据时静默覆盖规则。
主要功能
- 01按记录字段值映射所需 Skill
- 02保留并合并现有规则属性
- 03支持幂等重跑与单项映射更新
- 04通过 Metadata API 部署规则
- 05检查 Skill 前置条件和安全写入限制
适用场景
- 01按 Case 来源将工作分配给相应技能
- 02为 MessagingSession 等实体配置技能映射
- 03向已有路由规则追加字段映射
- 04处理组织不支持 WorkSkillRouting 的情况
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill service-omni-work-skill-routing-configure安装后在 Claude Code 中输入/service-omni-work-skill-routing-configure确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/api-notes.mdscripts/configure-and-report.shscripts/tests/_bootstrap.pytest_work_skill_routing_contracts.py详细介绍
service-omni-work-skill-routing-configure
编写一条 Omni WorkSkillRouting 规则,根据工作记录中的字段值将工作路由给 Agent,而不只是依据 Agent 恰好具备的技能。service-omni-skills-based-routing-configure 会使 Agent 可参与路由(Skill + ServiceResource + ServiceResourceSkill),而此技能则根据工作项的某个字段决定需要哪项技能——例如,“当 Case.Origin = Phone 时,需要 Voice 技能”。该规则是一个通过 Metadata API 部署的 WorkSkillRouting 记录(包含一个头部和一个 workSkillRoutingAttributes 映射)。它会在引用的 Skill 已存在后运行,并属于由 service-omni-channel-setup-coordinate 协调的同一条路由配置流程。
输入
bash scripts/configure-and-report.sh <org-alias> <related_entity> <field> <skill> <value> [rule_master_label]
org-alias(必填)。related_entity(必填)。规则适用的 sObject(例如Case、MessagingSession、LiveChatTranscript、Lead、VoiceCall)。field(必填)。属性评估的字段(例如Case.Origin或Origin)。部署前会为未限定的标准字段加上相关实体前缀,因此Origin会变成Case.Origin,以免被误认为自定义字段元数据名称。skill(必填)。字段匹配时所需的 OmniSkillDeveloperName(例如Voice)。value(必填)。映射到该技能的字段值(例如Phone)。仅支持纯文本值;不支持 XML 保留字符。rule_master_label(可选)。规则的 MasterLabel;默认为<related_entity> Skill Routing。
环境变量覆盖项:RULE_DEVELOPER_NAME(规则的 fullName,默认为相关实体名称——每个实体一条规则)、IS_ACTIVE(默认为 true)、SKILL_LEVEL(0–10)、SKILL_PRIORITY(0–10,额外技能的移除顺序)、IS_ADDITIONAL_SKILL(true/false)。
前置条件与安全
- 目标组织已通过
sfCLI 进行身份验证,并具有 Service Cloud 许可证;sfCLI ≥ 2.139.6。 - 已启用 Omni-Channel 基本设置,并开启基于技能的路由(
service-omni-base-settings-configure)。 - 引用的
Skill已存在(service-omni-skills-based-routing-configure)。 - 适用三重
safe_to_write生产环境防护。
运行
- safe_to_write — 查询
Organization;拒绝向真实生产组织写入。 - Skill 前置条件 — 按 DeveloperName 查询
Skill;若不存在,则阻止操作并指向service-omni-skills-based-routing-configure。 - 合并 — 通过 Tooling API 读取现有的
WorkSkillRouting.Metadata,保留无关属性,并仅替换或追加所请求的(field, value)映射。若无法确定读取结果,则阻止写入;WSR_REPLACE=1是明确允许破坏性替换的例外开关。 - 部署 — 按 XSD/字母顺序生成合并后的
WorkSkillRouting记录,并通过 Metadata API 部署(异步部署并轮询,直到进入终态)。 - 分类 — 读取
files[].state(Created/Changed/Unchanged),并报告为created/updated/reused。
行为
幂等且安全合并。 WorkSkillRouting 对每个相关实体只允许一条规则,因此规则的 fullName 默认为实体名称。重复运行相同映射时会报告 reused;新增映射会合并到现有属性列表中;更改相同的字段/值映射时,只会更新对应条目。如果无法读取现有元数据,此技能绝不会悄悄替换现有规则。
优雅降级。 并非每个组织都会配置 WorkSkillRouting(部分试用版/CDO 不支持)。如果部署失败并返回 INVALID_TYPE / "not available" / "WorkSkillRouting" 形式的错误,则会报告为 blocked,并清楚说明限制,同时指向基本设置——此技能会提示该限制,而不会直接崩溃。
输出约定
单个 JSON 对象:status ∈ created | updated | reused | blocked(计划模式下另含 action_needed),rule({developer_name, master_label, related_entity, is_active, state}),attribute({field, skill, value, skill_level, skill_priority, is_additional_skill}),merge({merged_from_existing, attribute_count, preserved_count}),deploy_id,manual_actions,blocking_issue。
限制
- 每次调用只映射一个字段→技能,每个相关实体只对应一条规则。在同一条规则上安全地累积多个调用的属性。
- 不会创建 Skill、ServiceResources、Agent 用户、队列或状态配置。
- 字段/值的正确性由平台在部署时验证;无效字段或值会导致部署失败,状态显示为
blocked。
参考资料
| 文件 | 何时阅读 |
|---|---|
references/api-notes.md | 了解 WorkSkillRouting 元数据结构、XSD 元素顺序、每个实体仅允许一条规则的限制、属性字段及优雅降级触发条件 |
scripts/tests/test_work_skill_routing_contracts.py | 验证更改时阅读——在此技能目录中运行 python3 scripts/tests/test_work_skill_routing_contracts.py |