关于 service-omni-skills-based-routing-configure
此 Salesforce skill 为指定的活跃 Agent 用户配置 Omni-Channel 技能,按需创建技能及缺少的绑定。它使用 SkillUser 模型,重复运行时会复用现有配置,不删除既有分配。
主要功能
- 01创建或复用 Omni 技能
- 02将技能绑定到活跃 Agent
- 03先检测再写入,支持幂等运行
- 04按 Agent 报告部分失败
适用场景
- 01让指定 Agent 参与基于技能的路由
- 02为更多 Agent 添加技能而不重复绑定
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill service-omni-skills-based-routing-configure安装后在 Claude Code 中输入/service-omni-skills-based-routing-configure确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/api-notes.mdscripts/configure-and-report.shscripts/tests/_bootstrap.pytest_sbr_contracts.py详细介绍
service-omni-skills-based-routing-configure
让 Agent 可通过 Omni **基于技能的路由(SBR)**进行路由。可路由的 Agent 需要 Skill,以及用于将该技能分配给 Agent 所属用户的关联对象 SkillUser。SkillUser 是经典 Omni-Channel 模型,由“设置 > 技能 > 分配用户”写入,并在工作项需要技能时进行评估。此技能会为一组活跃 Agent 用户确保存在一个技能及对应分配,且操作具有幂等性。
ServiceResource 和 ServiceResourceSkill 是 Field Service 的技能模型。在纯 Service Cloud 组织中,无法写入或查询 ServiceResource.IsActive,因此新建的资源会保持非活跃状态,关联记录也会被拒绝。因此,此技能采用受支持且适用于相应许可证的 SkillUser 路径。
输入
bash scripts/configure-and-report.sh <org-alias> <skill_developer_name> [agent_members_csv] [skill_master_label]
org-alias(必需)。skill_developer_name(必需)。要确保存在并进行绑定的 OmniSkillDeveloperName(例如Omni_Demo_Voice)。agent_members_csv(可选)。要设为可通过技能路由的 Agent 列表,以逗号分隔;每个值可以是 Username(…@…)或 15/18 位 User Id(005…)。也可以通过AGENT_MEMBERS_CSV提供。省略时,技能会阻止执行(不会猜测要为哪些 Agent 分配技能)。skill_master_label(可选)。仅在必须创建技能时使用的 MasterLabel;默认采用 DeveloperName 的标题式大小写形式。
前提条件与安全性
- 目标组织已通过
sfCLI 验证身份,具有 Service Cloud 许可证,且sfCLI ≥ 2.139.6。 - 已启用 Omni-Channel 基本设置,并开启基于技能的路由(
service-omni-base-settings-configure)。 - 指定的 Agent 已存在且处于活跃状态(
service-omni-agent-users-create)。 - 适用三重
safe_to_write生产环境保护机制。
运行
configure-and-report.sh 分两个幂等阶段执行,每个阶段都会先检测再写入:
- Skill — 按 DeveloperName 查询
Skill。若已存在,则复用;若不存在,则通过 Metadata API 部署Skill组件,并重新查询其 Id。 - SkillUser — 查询该 Skill 与已解析用户对应的现有
SkillUser记录,然后仅通过 REST DML 创建缺失的(SkillId、UserId)绑定。并发情况下出现的DUPLICATE_VALUE会通过复用已有记录来协调处理。
行为
幂等且非破坏性。 复用现有技能和绑定;技能不会删除或重新分配任何非其创建的内容,因此重复运行会收敛,不会产生重复记录。仅解析活跃用户——非活跃用户无法接收路由的工作,因此会报告此情况,而不会静默地为其分配技能。
部分安全性。 如果部分绑定成功、部分失败,状态将为 partial,并在 blocking_issue 中列出各 Agent 的错误;成功的绑定会保留(每个关联记录都是一次独立写入)。
输出约定
单个 JSON 对象:status ∈ configured | reused | partial | blocked,skill({developer_name, id, state})、agents({username, user_id, skill_binding_id, skill_binding_state} 数组)、created_counts、reused_counts、manual_actions、blocking_issue。
reused— 技能和所有绑定均已存在。configured— 至少创建了一个组件,且现在所有请求的绑定均已存在。partial/blocked— 请参阅blocking_issue;若原因是缺少前提条件,manual_actions会列出所需的技能。
限制
- 每次调用处理一个技能;Agent 集合需要的每个技能都要单独运行。
- 不会编写
WorkSkillRouting规则或基于字段的技能条件——这需要使用另一个技能。 - 不会创建 Agent 用户、队列或状态配置。
SkillUser.SkillLevel保持平台默认值;如需设置明确的熟练度,必须自行派生并修改 DML 主体。
参考资料
| 文件 | 阅读时机 |
|---|---|
references/api-notes.md | 了解 Skill 元数据与 Skill sObject 的区别、SkillUser Agent 绑定模型及 SBR 基本设置前提条件 |
scripts/tests/test_sbr_contracts.py | 验证更改时——在此技能目录中运行 python3 scripts/tests/test_sbr_contracts.py |