@salesforce/afv-skills 1.46.0 → 1.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/agentforce-observe/SKILL.md +32 -4
- package/skills/agentforce-observe/references/ahm-alerts.md +719 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/SKILL.md +275 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/README.md +32 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/SetCommentValue.cls +75 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/SetCommentValue.cls-meta.xml +5 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/interview-answers.json +13 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/copy.json +10 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/create.json +20 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/update.json +16 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/references/conventions-and-payload-rules.md +273 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/references/generate-and-wire.md +236 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/references/reference-example-set-comment-value.md +132 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/references/smoke-and-verify.md +211 -0
- package/skills/dx-devops-project-manage/SKILL.md +197 -0
- package/skills/dx-devops-project-manage/examples/common-workflows.md +197 -0
- package/skills/dx-devops-project-manage/references/cli-commands.md +295 -0
- package/skills/dx-devops-project-manage/scripts/create-project.sh +48 -0
- package/skills/dx-devops-project-manage/scripts/list-projects.sh +51 -0
- package/skills/dx-devops-project-manage/scripts/update-project.sh +96 -0
- package/skills/education-cloud-academic-calendar-generate/SKILL.md +225 -0
- package/skills/education-cloud-academic-calendar-generate/examples/quarter-calendar.json +47 -0
- package/skills/education-cloud-academic-calendar-generate/examples/sample-output.md +57 -0
- package/skills/education-cloud-academic-calendar-generate/examples/semester-calendar.json +54 -0
- package/skills/education-cloud-academic-calendar-generate/references/calendar-systems.md +127 -0
- package/skills/education-cloud-academic-calendar-generate/references/date-validation.md +222 -0
- package/skills/education-cloud-academic-calendar-generate/references/foundation_prerequisites.md +40 -0
- package/skills/education-cloud-academic-calendar-generate/scripts/validate_calendar_dates.py +143 -0
- package/skills/education-cloud-course-catalog-migrate/SKILL.md +321 -0
- package/skills/education-cloud-course-catalog-migrate/references/gotchas-detail.md +16 -0
- package/skills/education-cloud-course-catalog-migrate/references/gotchas.md +16 -0
- package/skills/education-cloud-course-catalog-migrate/references/large-catalog-handling.md +42 -0
- package/skills/education-cloud-course-catalog-migrate/scripts/batch_courses.py +36 -0
- package/skills/education-cloud-course-catalog-migrate/scripts/detect_linked_courses.py +51 -0
- package/skills/education-cloud-course-catalog-migrate/scripts/detect_modality_variants.py +48 -0
- package/skills/education-cloud-course-catalog-migrate/scripts/resolve_api_version.py +43 -0
- package/skills/education-cloud-course-catalog-migrate/scripts/split_course_code.py +39 -0
- package/skills/education-cloud-course-catalog-migrate/scripts/validate_completeness.py +54 -0
- package/skills/education-cloud-domain-configure/SKILL.md +234 -0
- package/skills/education-cloud-domain-configure/references/dependent-features.md +198 -0
- package/skills/education-cloud-domain-configure/references/domain-features/academic-operations.md +386 -0
- package/skills/education-cloud-domain-configure/references/domain-features/alumni-relations.md +155 -0
- package/skills/education-cloud-domain-configure/references/domain-features/cross-domain-dependencies.md +18 -0
- package/skills/education-cloud-domain-configure/references/domain-features/industriessettings-toggle-reference.md +43 -0
- package/skills/education-cloud-domain-configure/references/domain-features/mentoring.md +198 -0
- package/skills/education-cloud-domain-configure/references/domain-features/recruitment-admissions.md +315 -0
- package/skills/education-cloud-domain-configure/references/domain-features/student-management.md +155 -0
- package/skills/education-cloud-domain-configure/references/domain-features/student-success.md +249 -0
- package/skills/education-cloud-domain-configure/references/domain-features.md +27 -0
- package/skills/education-cloud-domain-configure/references/gotchas-extended.md +23 -0
- package/skills/education-cloud-domain-configure/references/toggle-write-path.md +67 -0
- package/skills/education-cloud-domain-configure/scripts/check_license_provisioned.py +62 -0
- package/skills/education-cloud-domain-configure/scripts/check_org_edition.py +44 -0
- package/skills/education-cloud-domain-configure/scripts/check_permission_assigned.py +39 -0
- package/skills/education-cloud-multi-campus-configure/SKILL.md +7 -0
- package/skills/education-cloud-multi-campus-configure/references/foundation_prerequisites.md +1 -2
- package/skills/education-cloud-student-recruitment-agent-configure/SKILL.md +177 -0
- package/skills/education-cloud-student-recruitment-agent-configure/references/agent-and-subagents.md +151 -0
- package/skills/education-cloud-student-recruitment-agent-configure/references/customer-narration.md +34 -0
- package/skills/education-cloud-student-recruitment-agent-configure/references/execution-model.md +54 -0
- package/skills/education-cloud-student-recruitment-agent-configure/references/flows.md +82 -0
- package/skills/education-cloud-student-recruitment-agent-configure/references/grounding.md +199 -0
- package/skills/education-cloud-student-recruitment-agent-configure/references/permissions.md +183 -0
- package/skills/education-cloud-student-recruitment-agent-configure/references/platform-enablement.md +82 -0
- package/skills/education-cloud-student-recruitment-agent-configure/references/prerequisites.md +158 -0
- package/skills/education-cloud-student-recruitment-agent-configure/references/routing.md +141 -0
- package/skills/experience-cms-brand-apply/SKILL.md +5 -5
- package/skills/experience-cms-brand-create/SKILL.md +2 -2
- package/skills/experience-cms-content-generate/SKILL.md +1 -0
- package/skills/experience-cms-content-render/SKILL.md +173 -0
- package/skills/experience-cms-content-render/assets/angular/DetailPage.component.ts +25 -0
- package/skills/experience-cms-content-render/assets/angular/MediaRenderer.component.ts +133 -0
- package/skills/experience-cms-content-render/assets/angular/TypeList.component.ts +38 -0
- package/skills/experience-cms-content-render/assets/angular/TypeRenderer.component.ts +90 -0
- package/skills/experience-cms-content-render/assets/angular/cms-content.component.ts +248 -0
- package/skills/experience-cms-content-render/assets/angular/cms-item.service.ts +100 -0
- package/skills/experience-cms-content-render/assets/react/DetailPage.tsx +20 -0
- package/skills/experience-cms-content-render/assets/react/MediaRenderer.tsx +129 -0
- package/skills/experience-cms-content-render/assets/react/TypeList.tsx +40 -0
- package/skills/experience-cms-content-render/assets/react/TypeRenderer.tsx +64 -0
- package/skills/experience-cms-content-render/assets/react/heuristicRenderer.tsx +310 -0
- package/skills/experience-cms-content-render/assets/react/useCmsItem.ts +129 -0
- package/skills/experience-cms-content-render/assets/shared/cmsContentType.ts +49 -0
- package/skills/experience-cms-content-render/assets/shared/cmsCore.types.ts +96 -0
- package/skills/experience-cms-content-render/assets/shared/externalRefs.ts +55 -0
- package/skills/experience-cms-content-render/references/bulk-loading.md +60 -0
- package/skills/experience-cms-content-render/references/codegen-guardrails.md +111 -0
- package/skills/experience-cms-content-render/references/detail-pages.md +87 -0
- package/skills/experience-cms-content-render/references/embed-recipes.md +127 -0
- package/skills/experience-cms-content-render/references/failure-modes.md +96 -0
- package/skills/experience-cms-content-render/references/heuristic-render-rules.md +131 -0
- package/skills/experience-cms-content-render/references/init-scaffold.md +122 -0
- package/skills/experience-cms-content-render/references/interaction-model.md +173 -0
- package/skills/experience-cms-content-render/references/package-api.md +106 -0
- package/skills/experience-cms-content-render/references/schema-sync.md +114 -0
- package/skills/experience-cms-content-render/references/styling-scopes.md +65 -0
- package/skills/experience-cms-content-render/references/verify.md +49 -0
- package/skills/experience-cms-content-type-generate/SKILL.md +2 -2
- package/skills/experience-content-media-stock-image-search/SKILL.md +5 -4
- package/skills/experience-search-coordinate/SKILL.md +198 -0
- package/skills/experience-search-coordinate/assets/search-payload-template.json +25 -0
- package/skills/experience-search-coordinate/references/content-route.md +313 -0
- package/skills/experience-search-coordinate/references/content-type-discovery.md +57 -0
- package/skills/experience-search-coordinate/references/media-route.md +172 -0
- package/skills/experience-search-coordinate/references/scope-resolution.md +14 -0
- package/skills/experience-ui-bundle-localize/SKILL.md +1 -1
- package/skills/experience-ui-bundle-localize/references/i18n-setup.md +5 -3
- package/skills/experience-ui-bundle-project-generate/SKILL.md +18 -14
- package/skills/experience-ui-bundle-project-generate/references/angular-project-generate.md +22 -0
- package/skills/experience-ui-bundle-project-generate/references/react-project-generate.md +20 -0
- package/skills/experience-ui-bundle-salesforce-data-access/SKILL.md +58 -54
- package/skills/experience-ui-bundle-salesforce-data-access/references/caching.md +6 -0
- package/skills/experience-ui-bundle-salesforce-data-access/references/graphiti-cli.md +2 -2
- package/skills/experience-ui-bundle-salesforce-data-access/references/migration.md +6 -0
- package/skills/experience-ui-bundle-salesforce-data-access/references/rest-and-integration.md +2 -1
- package/skills/experience-ui-bundle-salesforce-data-access/references/sdk-api.md +6 -0
- package/skills/experience-ui-bundle-site-generate/SKILL.md +59 -8
- package/skills/experience-ui-bundle-site-generate/references/configure-metadata-digital-experience.md +8 -3
- package/skills/experience-ui-bundle-site-generate/references/configure-metadata-language-settings.md +120 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/SKILL.md +336 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/orchestration-flow.md +143 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-application-flexipage-mapping.md +127 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-deploy-commands.md +116 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-lifesci-metadata-deploy.md +111 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-overview.md +312 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-profile-layout-assignments.md +171 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-state-tracking.md +64 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-trigger-handlers.md +122 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-4-user-provisioning-overview.md +335 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-4-user-provisioning-user-provisioning-details.md +140 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-execution-state-and-recovery.md +196 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-metadata-cache-generation.md +155 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-overview.md +307 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-visit-creation-data.md +211 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/state-machine-and-changes.md +108 -0
- package/skills/life-sciences-kam-coordinate/SKILL.md +241 -0
- package/skills/life-sciences-kam-coordinate/references/orchestration-flow.md +152 -0
- package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-application-flexipage-mapping.md +79 -0
- package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-deploy-commands.md +131 -0
- package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-kam-config-records.md +85 -0
- package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-lifesci-metadata-deploy.md +112 -0
- package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-overview.md +202 -0
- package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-profile-layout-assignments.md +67 -0
- package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-state-tracking.md +65 -0
- package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-trigger-handlers.md +123 -0
- package/skills/life-sciences-kam-coordinate/references/stage-4-participant-role-and-sprint.md +89 -0
- package/skills/life-sciences-kam-coordinate/references/stage-5-data-and-plan-templates-overview.md +337 -0
- package/skills/life-sciences-kam-coordinate/references/stage-5-data-creation-data.md +248 -0
- package/skills/life-sciences-kam-coordinate/references/stage-6-ipad-validation-script.md +35 -0
- package/skills/life-sciences-kam-coordinate/references/stage-6-metadata-cache-generation.md +155 -0
- package/skills/life-sciences-kam-coordinate/references/stage-6-user-provisioning-details.md +146 -0
- package/skills/life-sciences-kam-coordinate/references/stage-6-user-provisioning-overview.md +89 -0
- package/skills/life-sciences-kam-coordinate/references/state-machine-and-changes.md +114 -0
- package/skills/life-sciences-prerequisites-validate/SKILL.md +138 -0
- package/skills/life-sciences-prerequisites-validate/references/checks-org-settings.md +190 -0
- package/skills/life-sciences-prerequisites-validate/references/checks-user-and-package.md +211 -0
- package/skills/life-sciences-territory-configure/SKILL.md +217 -0
- package/skills/life-sciences-territory-configure/references/territory-metadata.md +262 -0
- package/skills/platform-dsar-policy-manage/SKILL.md +272 -0
- package/skills/platform-dsar-policy-manage/references/configure.md +106 -0
- package/skills/platform-dsar-policy-manage/references/export-and-history.md +123 -0
- package/skills/platform-dsar-policy-manage/references/gap-analysis-guide.md +150 -0
- package/skills/platform-dsar-policy-manage/references/gap-scan.md +129 -0
- package/skills/platform-dsar-policy-manage/references/headless-sor.md +59 -0
- package/skills/platform-dsar-policy-manage/references/report-format.md +59 -0
- package/skills/platform-dsar-policy-manage/scripts/tests/__init__.py +0 -0
- package/skills/platform-dsar-policy-manage/scripts/tests/test_validate_policy_tree.py +76 -0
- package/skills/platform-dsar-policy-manage/scripts/validate-policy-tree.py +130 -0
- package/skills/platform-salesforce-connect-adapter-generate/SKILL.md +359 -0
- package/skills/platform-salesforce-connect-adapter-generate/references/official-examples.md +69 -0
- package/skills/platform-salesforce-connect-adapter-generate/references/scenarios.md +187 -0
- package/skills/service-agentforce-channel-configure/SKILL.md +33 -28
- package/skills/service-agentforce-human-escalation-configure/SKILL.md +205 -0
- package/skills/service-agentforce-human-escalation-configure/assets/escalation-thresholds.instructions.md +37 -0
- package/skills/service-agentforce-human-escalation-configure/assets/force-app/main/default/flows/Human_Escalation_Outbound_Flow.flow-meta.xml +173 -0
- package/skills/service-agentforce-human-escalation-configure/assets/package.xml +8 -0
- package/skills/service-agentforce-human-escalation-configure/assets/sfdx-project.json +5 -0
- package/skills/service-agentforce-human-escalation-configure/references/classifier-contracts.md +103 -0
- package/skills/service-agentforce-human-escalation-configure/references/escalation-mechanism.md +63 -0
- package/skills/service-agentforce-human-escalation-configure/references/failure-policy.md +44 -0
- package/skills/service-agentforce-human-escalation-configure/references/nga-escalation.md +57 -0
- package/skills/service-agentforce-human-escalation-configure/references/runtime-verification.md +72 -0
- package/skills/service-agentforce-human-escalation-configure/scripts/classify-agent-active.mjs +49 -0
- package/skills/service-agentforce-human-escalation-configure/scripts/classify-nga-escalation.mjs +166 -0
- package/skills/service-agentforce-human-escalation-configure/scripts/extract-outbound-route.mjs +67 -0
- package/skills/service-agentforce-human-escalation-configure/scripts/patch-escalation-surfaces.mjs +131 -0
- package/skills/service-agentforce-human-escalation-configure/scripts/tests/__init__.py +0 -0
- package/skills/service-agentforce-human-escalation-configure/scripts/tests/_bootstrap.py +249 -0
- package/skills/service-agentforce-human-escalation-configure/scripts/tests/test_escalation_contracts.py +899 -0
- package/skills/service-agentforce-human-escalation-configure/scripts/verify-and-configure.sh +705 -0
- package/skills/service-agentforce-human-escalation-configure/scripts/verify-escalation-config.mjs +89 -0
- package/skills/service-de-channel-routing-configure/SKILL.md +13 -5
- package/skills/service-de-channel-routing-configure/scripts/tests/test_skill_contract.py +25 -0
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +23 -10
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +63 -48
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/scripts/verify-child-verdict.mjs +6 -2
- package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +20 -27
- package/skills/service-native-voice-recording-transcription-configure/SKILL.md +47 -27
- package/skills/service-native-voice-recording-transcription-configure/references/thunderbird-voice-settings.md +13 -9
- package/skills/service-native-voice-recording-transcription-configure/scripts/enable-recording-transcription.sh +104 -45
- package/skills/service-omni-agent-users-create/SKILL.md +96 -0
- package/skills/service-omni-agent-users-create/assets/create-users.apex.template +80 -0
- package/skills/service-omni-agent-users-create/references/apex-patterns.md +135 -0
- package/skills/service-omni-agent-users-create/references/apex-template-notes.md +40 -0
- package/skills/service-omni-agent-users-create/scripts/detect-and-create.sh +206 -0
- package/skills/service-omni-agent-users-create/scripts/detect-existing.sh +122 -0
- package/skills/service-omni-agent-users-create/scripts/run-create.sh +298 -0
- package/skills/service-omni-agent-users-create/scripts/tests/test_user_create_security.py +171 -0
- package/skills/service-omni-agent-work-sharing-configure/SKILL.md +78 -0
- package/skills/service-omni-agent-work-sharing-configure/references/api-notes.md +31 -0
- package/skills/service-omni-agent-work-sharing-configure/scripts/configure-and-report.sh +186 -0
- package/skills/service-omni-agent-work-sharing-configure/scripts/tests/_bootstrap.py +120 -0
- package/skills/service-omni-agent-work-sharing-configure/scripts/tests/test_agent_work_sharing_contracts.py +93 -0
- package/skills/service-omni-base-settings-configure/SKILL.md +77 -0
- package/skills/service-omni-base-settings-configure/assets/force-app/main/default/settings/OmniChannel.settings-meta.xml +8 -0
- package/skills/service-omni-base-settings-configure/assets/package.xml +8 -0
- package/skills/service-omni-base-settings-configure/assets/sfdx-project.json +12 -0
- package/skills/service-omni-base-settings-configure/references/api-notes.md +121 -0
- package/skills/service-omni-base-settings-configure/scripts/configure-and-report.sh +164 -0
- package/skills/service-omni-base-settings-configure/scripts/detect-existing.sh +69 -0
- package/skills/service-omni-channel-setup-coordinate/SKILL.md +168 -0
- package/skills/service-omni-channel-setup-coordinate/examples/output-templates.md +161 -0
- package/skills/service-omni-channel-setup-coordinate/references/gap-catalog.md +99 -0
- package/skills/service-omni-channel-setup-coordinate/scripts/integration-driver.sh +1542 -0
- package/skills/service-omni-channel-setup-coordinate/scripts/tests/__init__.py +0 -0
- package/skills/service-omni-channel-setup-coordinate/scripts/tests/_bootstrap.py +223 -0
- package/skills/service-omni-channel-setup-coordinate/scripts/tests/test_omni_contracts.py +804 -0
- package/skills/service-omni-command-center-analyze/SKILL.md +84 -0
- package/skills/service-omni-command-center-analyze/references/api-notes.md +54 -0
- package/skills/service-omni-command-center-analyze/scripts/analyze.sh +198 -0
- package/skills/service-omni-command-center-analyze/scripts/tests/_bootstrap.py +115 -0
- package/skills/service-omni-command-center-analyze/scripts/tests/test_command_center_analyze_contracts.py +165 -0
- package/skills/service-omni-permission-set-assign/SKILL.md +88 -0
- package/skills/service-omni-permission-set-assign/assets/package.xml +8 -0
- package/skills/service-omni-permission-set-assign/references/api-notes.md +143 -0
- package/skills/service-omni-permission-set-assign/scripts/verify-and-assign.sh +397 -0
- package/skills/service-omni-presence-status-deploy/SKILL.md +87 -0
- package/skills/service-omni-presence-status-deploy/assets/package.xml +12 -0
- package/skills/service-omni-presence-status-deploy/references/api-notes.md +115 -0
- package/skills/service-omni-presence-status-deploy/scripts/deploy-and-report.sh +422 -0
- package/skills/service-omni-presence-user-config-deploy/SKILL.md +80 -0
- package/skills/service-omni-presence-user-config-deploy/references/api-notes.md +60 -0
- package/skills/service-omni-presence-user-config-deploy/scripts/deploy-and-report.sh +261 -0
- package/skills/service-omni-presence-user-config-deploy/scripts/tests/_bootstrap.py +106 -0
- package/skills/service-omni-presence-user-config-deploy/scripts/tests/test_presence_user_config_contracts.py +142 -0
- package/skills/service-omni-queue-deploy/SKILL.md +91 -0
- package/skills/service-omni-queue-deploy/references/api-notes.md +140 -0
- package/skills/service-omni-queue-deploy/scripts/verify-and-align.sh +470 -0
- package/skills/service-omni-queue-members-assign/SKILL.md +93 -0
- package/skills/service-omni-queue-members-assign/references/api-notes.md +144 -0
- package/skills/service-omni-queue-members-assign/scripts/tests/_bootstrap.py +67 -0
- package/skills/service-omni-queue-members-assign/scripts/tests/test_queue_members_contracts.py +73 -0
- package/skills/service-omni-queue-members-assign/scripts/verify-and-bind.sh +362 -0
- package/skills/service-omni-queue-routing-config-deploy/SKILL.md +101 -0
- package/skills/service-omni-queue-routing-config-deploy/references/api-notes.md +127 -0
- package/skills/service-omni-queue-routing-config-deploy/scripts/tests/_bootstrap.py +90 -0
- package/skills/service-omni-queue-routing-config-deploy/scripts/tests/test_queue_routing_config_contracts.py +70 -0
- package/skills/service-omni-queue-routing-config-deploy/scripts/upsert-and-report.sh +538 -0
- package/skills/service-omni-routing-flow-deploy/SKILL.md +111 -0
- package/skills/service-omni-routing-flow-deploy/assets/force-app/main/default/flows/Omni_Route_Case_Trigger.SkillsBased.flow-meta.xml +94 -0
- package/skills/service-omni-routing-flow-deploy/assets/force-app/main/default/flows/Omni_Route_Case_Trigger.flow-meta.xml +88 -0
- package/skills/service-omni-routing-flow-deploy/assets/force-app/main/default/flows/Omni_Route_Cases.flow-meta.xml +144 -0
- package/skills/service-omni-routing-flow-deploy/assets/force-app/main/default/flows/Omni_Route_VoiceCall_Trigger.SkillsBased.flow-meta.xml +94 -0
- package/skills/service-omni-routing-flow-deploy/assets/force-app/main/default/flows/Omni_Route_VoiceCall_Trigger.flow-meta.xml +88 -0
- package/skills/service-omni-routing-flow-deploy/assets/force-app/main/default/flows/Omni_Route_VoiceCalls.flow-meta.xml +144 -0
- package/skills/service-omni-routing-flow-deploy/assets/package.xml +11 -0
- package/skills/service-omni-routing-flow-deploy/assets/sfdx-project.json +11 -0
- package/skills/service-omni-routing-flow-deploy/references/api-notes.md +265 -0
- package/skills/service-omni-routing-flow-deploy/scripts/deploy-and-report.sh +684 -0
- package/skills/service-omni-service-channel-configure/SKILL.md +83 -0
- package/skills/service-omni-service-channel-configure/assets/force-app/main/default/serviceChannels/Cases.serviceChannel-meta.xml +9 -0
- package/skills/service-omni-service-channel-configure/assets/force-app/main/default/serviceChannels/Incidents.serviceChannel-meta.xml +9 -0
- package/skills/service-omni-service-channel-configure/assets/force-app/main/default/serviceChannels/MessagingSessions.serviceChannel-meta.xml +9 -0
- package/skills/service-omni-service-channel-configure/assets/force-app/main/default/serviceChannels/VoiceCalls.serviceChannel-meta.xml +9 -0
- package/skills/service-omni-service-channel-configure/assets/package.xml +11 -0
- package/skills/service-omni-service-channel-configure/assets/sfdx-project.json +12 -0
- package/skills/service-omni-service-channel-configure/references/api-notes.md +84 -0
- package/skills/service-omni-service-channel-configure/scripts/deploy-and-report.sh +383 -0
- package/skills/service-omni-sidebar-configure/SKILL.md +77 -0
- package/skills/service-omni-sidebar-configure/references/api-notes.md +51 -0
- package/skills/service-omni-sidebar-configure/scripts/enable-and-report.sh +315 -0
- package/skills/service-omni-sidebar-configure/scripts/tests/_bootstrap.py +142 -0
- package/skills/service-omni-sidebar-configure/scripts/tests/test_sidebar_contracts.py +139 -0
- package/skills/service-omni-skills-based-routing-configure/SKILL.md +81 -0
- package/skills/service-omni-skills-based-routing-configure/references/api-notes.md +50 -0
- package/skills/service-omni-skills-based-routing-configure/scripts/configure-and-report.sh +270 -0
- package/skills/service-omni-skills-based-routing-configure/scripts/tests/_bootstrap.py +120 -0
- package/skills/service-omni-skills-based-routing-configure/scripts/tests/test_sbr_contracts.py +129 -0
- package/skills/service-omni-supervisor-config-deploy/SKILL.md +97 -0
- package/skills/service-omni-supervisor-config-deploy/assets/force-app/main/default/omniSupervisorConfigs/Omni_Supervisor.omniSupervisorConfig-meta.xml +9 -0
- package/skills/service-omni-supervisor-config-deploy/assets/package.xml +8 -0
- package/skills/service-omni-supervisor-config-deploy/assets/sfdx-project.json +12 -0
- package/skills/service-omni-supervisor-config-deploy/references/api-notes.md +205 -0
- package/skills/service-omni-supervisor-config-deploy/scripts/deploy-and-report.sh +586 -0
- package/skills/service-omni-supervisor-config-deploy/scripts/tests/_bootstrap.py +153 -0
- package/skills/service-omni-supervisor-config-deploy/scripts/tests/test_supervisor_config_contracts.py +116 -0
- package/skills/service-omni-supervisor-permset-assign/SKILL.md +88 -0
- package/skills/service-omni-supervisor-permset-assign/references/api-notes.md +48 -0
- package/skills/service-omni-supervisor-permset-assign/scripts/verify-and-assign.sh +316 -0
- package/skills/service-omni-supervisor-surface-deploy/SKILL.md +85 -0
- package/skills/service-omni-supervisor-surface-deploy/references/api-notes.md +47 -0
- package/skills/service-omni-supervisor-surface-deploy/scripts/deploy-and-report.sh +216 -0
- package/skills/service-omni-supervisor-surface-deploy/scripts/tests/_bootstrap.py +95 -0
- package/skills/service-omni-supervisor-surface-deploy/scripts/tests/test_supervisor_surface_contracts.py +154 -0
- package/skills/service-omni-supervisor-users-create/SKILL.md +92 -0
- package/skills/service-omni-supervisor-users-create/assets/create-supervisors.apex.template +72 -0
- package/skills/service-omni-supervisor-users-create/references/apex-patterns.md +73 -0
- package/skills/service-omni-supervisor-users-create/references/apex-template-notes.md +41 -0
- package/skills/service-omni-supervisor-users-create/scripts/detect-and-create.sh +197 -0
- package/skills/service-omni-supervisor-users-create/scripts/detect-existing.sh +112 -0
- package/skills/service-omni-supervisor-users-create/scripts/run-create.sh +296 -0
- package/skills/service-omni-work-skill-routing-configure/SKILL.md +80 -0
- package/skills/service-omni-work-skill-routing-configure/references/api-notes.md +67 -0
- package/skills/service-omni-work-skill-routing-configure/scripts/configure-and-report.sh +262 -0
- package/skills/service-omni-work-skill-routing-configure/scripts/tests/_bootstrap.py +121 -0
- package/skills/service-omni-work-skill-routing-configure/scripts/tests/test_work_skill_routing_contracts.py +161 -0
|
@@ -8,6 +8,7 @@ metadata:
|
|
|
8
8
|
minApiVersion: "67.0"
|
|
9
9
|
relatedSkills:
|
|
10
10
|
- "agentforce-generate"
|
|
11
|
+
- "service-agentforce-human-escalation-configure"
|
|
11
12
|
- "service-digital-engagement-channel-configure"
|
|
12
13
|
- "service-digital-engagement-deployment-configure"
|
|
13
14
|
- "service-email-to-case-configure"
|
|
@@ -17,6 +18,9 @@ metadata:
|
|
|
17
18
|
semver: ">=3.8"
|
|
18
19
|
- tool: ["sf"]
|
|
19
20
|
semver: ">=2.0.0"
|
|
21
|
+
accessCheck:
|
|
22
|
+
- type: "license"
|
|
23
|
+
value: "Agentforce"
|
|
20
24
|
---
|
|
21
25
|
|
|
22
26
|
# service-agentforce-channel-configure: Wire an Agentforce agent to a channel
|
|
@@ -32,14 +36,13 @@ This skill is generic — it works for any Agentforce agent, not just the Help A
|
|
|
32
36
|
- Branch A (Enhanced Chat / Enhanced Messaging): deploying `sessionHandlerType=AgentforceServiceAgent` + `sessionHandlerQueue` on an existing MessagingChannel, then binding `SessionHandlerId` via Data API PATCH
|
|
33
37
|
- Branch B (Voice): assumes the phone number and `PstnVoice` MessagingChannel already exist (provisioned by the caller, e.g. `service-helpagent-coordinate`), then creating an inbound RoutingFlow (`routingType: Copilot`) that routes to the agent with the queue as fallback
|
|
34
38
|
- Branch C (Email-to-Case): inbound routing via direct case-owner assignment or an Omni-Channel RoutingFlow, plus deploying a `BotEmailDefinition` (Email Configuration) that links the agent to Service Email and binding it to the routing address
|
|
35
|
-
- Optional outbound escalation:
|
|
39
|
+
- Optional outbound escalation: delegating the verified agent-to-human handoff contract to `service-agentforce-human-escalation-configure`
|
|
36
40
|
|
|
37
41
|
**Out of scope:**
|
|
38
42
|
- Creating the agent — use `agentforce-generate` or `service-helpagent-coordinate`
|
|
39
43
|
- Creating the MessagingChannel — use `service-digital-engagement-channel-configure`
|
|
40
44
|
- Creating the Embedded Service Deployment — use `service-digital-engagement-deployment-configure`
|
|
41
45
|
- Creating the Voice or Email-to-Case channel infrastructure
|
|
42
|
-
- Outbound escalation RoutingFlow creation — surface the gap if one is needed and doesn't exist
|
|
43
46
|
|
|
44
47
|
---
|
|
45
48
|
|
|
@@ -56,6 +59,21 @@ This skill is generic — it works for any Agentforce agent, not just the Help A
|
|
|
56
59
|
|
|
57
60
|
Steps are sequential. Read `references/channel-types.md` first to confirm the routing branch before proceeding.
|
|
58
61
|
|
|
62
|
+
### Phase 0 — Production write-guard (mandatory, before any write)
|
|
63
|
+
|
|
64
|
+
This skill performs **metadata/data writes** (MessagingChannel edits, RoutingFlow deploys, agent republish). Before any write, classify the target org and refuse real production:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
sf data query --target-org $ORG --json \
|
|
68
|
+
--query "SELECT Id, IsSandbox, TrialExpirationDate, OrganizationType FROM Organization LIMIT 1"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
- `safe_to_write` is **true** only when `IsSandbox=true`, OR `TrialExpirationDate` is non-null (trial/CDO), OR `OrganizationType` is `Developer Edition` / `Base Edition`.
|
|
72
|
+
- If `safe_to_write` is false, **stop** — state plainly that this is a real production customer org and escalation/channel wiring will not be applied. Do not proceed to any write phase.
|
|
73
|
+
- If `safe_to_write` is true, show the write plan (which MessagingChannel/RoutingFlow/agent will change) and get explicit user confirmation of the target org before continuing.
|
|
74
|
+
|
|
75
|
+
Never bypass this gate — a mistaken production write here reroutes live customer traffic.
|
|
76
|
+
|
|
59
77
|
### Phase 1 — Verify agent and resolve queue
|
|
60
78
|
|
|
61
79
|
1. **Confirm the agent exists and has an active version:**
|
|
@@ -70,6 +88,8 @@ Steps are sequential. Read `references/channel-types.md` first to confirm the ro
|
|
|
70
88
|
```
|
|
71
89
|
Stop with a clear message if the definition is not found or no version has `Status = Active`.
|
|
72
90
|
|
|
91
|
+
> **Branch A caveat — an Active BotVersion is necessary but NOT sufficient to bind as `sessionHandlerAsa`.** The platform only accepts an agent that is provisioned/connected as a *deployable Agentforce Service Agent* (typically an `ExternalCopilot`). Binding an agent that is merely Active fails the Phase 2 deploy with `Only active Agentforce Service Agents are supported for a Messaging Channel`. Confirm bindability read-only before writing: if any MessagingChannel on the org already uses `sessionHandlerType=AgentforceServiceAgent`, retrieve it (`sf project retrieve start --metadata "MessagingChannel:{EXISTING}" --target-org $ORG`) and read its `<sessionHandlerAsa>` — that set is the org's provably-bindable ASAs. If the chosen agent is not a provisioned ASA and no bindable ASA exists, stop and report `BLOCKED`: *provide an agent that is provisioned as an Agentforce Service Agent.*
|
|
92
|
+
|
|
73
93
|
2. **Resolve the fallback queue and routing configuration** — follow `references/queue-resolution.md`:
|
|
74
94
|
- Determine SobjectType from the channel type (see `references/channel-types.md`)
|
|
75
95
|
- Query existing compatible queues; present via `AskUserQuestion` or create new
|
|
@@ -94,7 +114,7 @@ Full detection queries, exact `AskUserQuestion` block, deferred-flow rules per b
|
|
|
94
114
|
|
|
95
115
|
No RoutingFlow required. Deploy the MessagingChannel with `sessionHandlerType` + `sessionHandlerQueue` only, then bind the bot via a Data API PATCH. `sessionHandlerAsa` is not accepted by the Metadata API at v67 — the deploy silently drops it and `SessionHandlerId` stays null unless you run the PATCH. The bot must be Active before the PATCH ("Only active Agentforce Service Agents are supported" otherwise).
|
|
96
116
|
|
|
97
|
-
|
|
117
|
+
Run all five steps in order. Perform retrieve and edit in the **current SFDX project**, so the deploy reads the edited `.messagingChannel-meta.xml` from `force-app`; do not use a temporary directory.
|
|
98
118
|
|
|
99
119
|
1. **Retrieve the current MessagingChannel metadata** into the working-directory project:
|
|
100
120
|
```bash
|
|
@@ -116,6 +136,7 @@ All five steps below are mandatory and must run in order — do **not** skip the
|
|
|
116
136
|
--metadata "MessagingChannel:{CHANNEL_DEVELOPER_NAME}" \
|
|
117
137
|
--target-org $ORG
|
|
118
138
|
```
|
|
139
|
+
If the deploy fails with `Only active Agentforce Service Agents are supported for a Messaging Channel`, the agent is not a bindable ASA on this org (see the Phase 1 caveat). Do **not** retry with the same agent — the channel is left unchanged (the failed deploy is atomic). Report `BLOCKED` with the remediation: bind an agent already provisioned as an Agentforce Service Agent, or provision this one, then re-run.
|
|
119
140
|
|
|
120
141
|
4. **Bind the bot via Data API PATCH:**
|
|
121
142
|
```bash
|
|
@@ -148,11 +169,11 @@ No agent file changes — no republish needed. Proceed to Phase 3 (optional).
|
|
|
148
169
|
|
|
149
170
|
#### Branch B — Voice
|
|
150
171
|
|
|
151
|
-
|
|
172
|
+
Wire the `PstnVoice` MessagingChannel through an inbound `Copilot` RoutingFlow, with the queue as fallback, and add the required `modality voice:` block before republishing the agent.
|
|
152
173
|
|
|
153
174
|
Follow `references/channel-branch-voice.md` end to end. Highlights:
|
|
154
175
|
|
|
155
|
-
- Step 0 — reuse an existing `PstnVoice` MessagingChannel or have `service-helpagent-coordinate` provision one first
|
|
176
|
+
- Step 0 — reuse an existing `PstnVoice` MessagingChannel or have `service-helpagent-coordinate` provision one first using that skill's Voice channel reference; abort if the org uses a partner telephony provider (see `references/channel-types.md`).
|
|
156
177
|
- Steps 1–3 — write and deploy the inbound RoutingFlow using the template in `references/routing-flow.md`, verifying `ActiveVersionId` is non-null.
|
|
157
178
|
- Step 4 — deploy a `MessagingChannel` metadata file for `{CHANNEL_DEVELOPER_NAME}` with `sessionHandlerType=Flow`, `sessionHandlerFlow={FLOW_DEVELOPER_NAME}`, `sessionHandlerQueue={QUEUE_DEVELOPER_NAME}`. Without this the flow is never executed and calls hang up. Verify `SessionHandlerId` starts with `300`.
|
|
158
179
|
- Step 5 — append the platform-default `modality voice:` block (voice_id `UgBBYS2sOqTuMpoF3BR0`, "Mark", en_US) to the `.agent` file if missing; do not ask the user. Republish per `references/agent-wiring.md`.
|
|
@@ -163,7 +184,7 @@ Proceed to Phase 3 (optional).
|
|
|
163
184
|
|
|
164
185
|
#### Branch C — Email-to-Case
|
|
165
186
|
|
|
166
|
-
|
|
187
|
+
Let the user choose direct case-owner assignment or an Omni-Channel `Copilot` RoutingFlow. This branch requires API v68.0+, a `connection service_email:` surface, and a BotEmailDefinition.
|
|
167
188
|
|
|
168
189
|
Follow `references/channel-branch-email.md` end to end. Load-bearing gotchas (full walkthrough in that file):
|
|
169
190
|
|
|
@@ -178,29 +199,15 @@ Branch C is complete once the routing-address binding is verified. Proceed to Ph
|
|
|
178
199
|
|
|
179
200
|
### Phase 3 — Outbound escalation (optional)
|
|
180
201
|
|
|
202
|
+
> **Authoritative owner:** full agent-to-human escalation is owned by **`service-agentforce-human-escalation-configure`**. This includes the escalation topic, planner coupling, staffed human queue, outbound flow, failure-threshold directives, republish, and deterministic verification.
|
|
203
|
+
|
|
181
204
|
After inbound routing is confirmed, ask the user:
|
|
182
205
|
|
|
183
206
|
> *"Inbound routing is now set up — the channel will route to [agent name]. Do you also want to configure outbound escalation so the agent can hand off to a human when requested?"*
|
|
184
207
|
|
|
185
|
-
If yes
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
2. **Determine the outbound flow name** from the channel type (see naming table in `references/routing-flow.md` Part 2).
|
|
190
|
-
|
|
191
|
-
3. **Check if an active outbound flow already exists:**
|
|
192
|
-
```bash
|
|
193
|
-
sf data query --target-org $ORG --json \
|
|
194
|
-
--query "SELECT ApiName, ActiveVersionId FROM FlowDefinitionView WHERE ApiName='{OUTBOUND_FLOW_DEVELOPER_NAME}' AND ProcessType='RoutingFlow'"
|
|
195
|
-
```
|
|
196
|
-
- Row exists with non-null `ActiveVersionId` → reuse it; skip to step 4.
|
|
197
|
-
- Row missing or `ActiveVersionId` null → create the flow using the QueueBased template in `references/routing-flow.md` Part 2, substituting `ESCALATION_QUEUE_DEVELOPER_NAME` for `QUEUE_DEVELOPER_NAME`. Deploy and verify `ActiveVersionId` is non-null before continuing.
|
|
198
|
-
|
|
199
|
-
4. **Add the connection block** to the agent's `.agent` file and republish — follow `references/agent-wiring.md`. The connection key depends on channel type:
|
|
200
|
-
- **Enhanced Chat (EmbeddedMessaging)** → `connection customer_web_client:`
|
|
201
|
-
- **Enhanced Messaging (3rd-party)** → `connection messaging:`
|
|
202
|
-
- **Voice** → `connection telephony:`
|
|
203
|
-
- **Email-to-Case** → `connection service_email:`
|
|
208
|
+
If yes, delegate to `service-agentforce-human-escalation-configure`. Pass the resolved agent,
|
|
209
|
+
channel type, context object, and fallback queue as known inputs. Do not duplicate that skill's
|
|
210
|
+
write or verification steps here.
|
|
204
211
|
|
|
205
212
|
---
|
|
206
213
|
|
|
@@ -255,9 +262,7 @@ If yes:
|
|
|
255
262
|
- [ ] Inbound routing set on the same routing address: `caseOwner`+`caseOwnerType` or `routingFlow`+`fallbackQueue`, with `casePriority` present
|
|
256
263
|
|
|
257
264
|
### Optional Phase 3 — Outbound escalation
|
|
258
|
-
- [ ]
|
|
259
|
-
- [ ] `outboundRouteName` and `outboundRouteType` present in the correct `<plannerSurfaces>` entry of the deployed bundle
|
|
260
|
-
- [ ] Agent status is Active after republish
|
|
265
|
+
- [ ] `service-agentforce-human-escalation-configure` returned `CONFIGURED` or `ALREADY-CONFIGURED`
|
|
261
266
|
|
|
262
267
|
---
|
|
263
268
|
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: service-agentforce-human-escalation-configure
|
|
3
|
+
description: "Use to configure and verify Agentforce agent-to-human escalation, including human handoff, a staffed fallback queue, and failure-threshold directives. Triggers: configure agent escalation, escalate to a human agent, agent handoff to a queue, configure a human escalation queue, set an Agentforce fallback handoff. Do not use to create an agent or configure inbound channel routing; use service-agentforce-channel-configure for inbound routing."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
6
|
+
domains: ["Service", "Agentforce"]
|
|
7
|
+
minApiVersion: "67.0"
|
|
8
|
+
relatedSkills:
|
|
9
|
+
- "agentforce-generate"
|
|
10
|
+
- "service-agentforce-channel-configure"
|
|
11
|
+
- "service-digital-engagement-channel-configure"
|
|
12
|
+
- "service-itsm-agentic-setup-agentforce-coordinate"
|
|
13
|
+
cliTools:
|
|
14
|
+
- tool: ["jq"]
|
|
15
|
+
semver: ">=1.6"
|
|
16
|
+
- tool: ["node"]
|
|
17
|
+
semver: ">=18.0.0"
|
|
18
|
+
- tool: ["python3"]
|
|
19
|
+
semver: ">=3.8"
|
|
20
|
+
- tool: ["sf"]
|
|
21
|
+
semver: ">=2.0.0"
|
|
22
|
+
accessCheck:
|
|
23
|
+
- type: "license"
|
|
24
|
+
value: "Agentforce"
|
|
25
|
+
allowed-tools: Bash Read Write AskUserQuestion
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
# Configure Agentforce Agent → Human Escalation
|
|
29
|
+
|
|
30
|
+
Wire an Agentforce agent so it can hand a conversation off to a human agent through an Omni-Channel queue. This skill configures and verifies the escalation surfaces, then reports a single machine-readable JSON verdict. It is **idempotent** per developer name and **refuses to write to production orgs**. It runs standalone or as a stage in a larger setup flow (after the agent is created and active).
|
|
31
|
+
|
|
32
|
+
The agent, queue, outbound flow name, routed context object, service channel, and failure thresholds are all inputs, so the same skill serves any scenario (IT employee support, customer messaging, etc.) — the caller supplies the scenario-specific identifiers.
|
|
33
|
+
|
|
34
|
+
This skill is the **authoritative owner of agent-to-human (outbound) escalation**. `service-agentforce-channel-configure` may wire a basic outbound flow + `connection` block in the same pass as inbound channel setup, but it delegates full escalation configuration and verification here.
|
|
35
|
+
|
|
36
|
+
## The honest boundary — what is deterministic vs. directive vs. runtime
|
|
37
|
+
|
|
38
|
+
Escalation in Agentforce is assembled from surfaces with different verifiability:
|
|
39
|
+
|
|
40
|
+
- **Deterministic** (this skill writes and/or round-trip verifies via the Metadata/Data API): `canEscalate=true` on the escalation topic (`GenAiPlugin`); `outboundRouteConfigs` on the agent's Messaging planner surface (`GenAiPlannerBundle`), where the SAME block couples `outboundRouteName` to `outboundRouteType=OmniChannelFlow` on a Messaging-class surface; a QueueBased outbound `RoutingFlow` with a non-null `ActiveVersionId`; a human queue with a `QueueSobject` for the context object, its `QueueRoutingConfig` bound to the queue, and **at least one active human member** (a queue with zero members can never route an escalation to a human, so it never reaches `CONFIGURED`); and the agent Active after republish.
|
|
41
|
+
- **Directive / native policy** (authored as Agent Script instructions, **not** a metadata counter): the default **two consecutive failures** threshold plus per-topic overrides (e.g. **password reset = one failure**). There is no metadata field that counts failed turns — the threshold is instruction text, verified by an ADK eval rubric, not a runtime read. See [references/failure-policy.md](references/failure-policy.md).
|
|
42
|
+
- **Runtime / manual only**: the actual conversational trigger, `AgentWork` creation, and same-session context preservation. These cannot be driven headlessly — they are a documented manual test + eval rubric. See [references/runtime-verification.md](references/runtime-verification.md).
|
|
43
|
+
|
|
44
|
+
## Authoring models — classic vs next-gen (NGA)
|
|
45
|
+
|
|
46
|
+
Salesforce exposes two Agentforce authoring models, and Phase 1b auto-detects which the org supports from its metadata types. The routing infrastructure (queue, `QueueSobject`, members, `QueueRoutingConfig`, outbound `RoutingFlow`) is **identical in both**; only the agent-side escalation surface differs.
|
|
47
|
+
|
|
48
|
+
- **classic** — org exposes `GenAiPlugin` + `GenAiPlannerBundle`. The agent surface is `canEscalate` (topic) + `outboundRouteConfigs` (planner Messaging surface). This surface is authored in Phase 4 (hand-edited, or via the optional `AUTHOR_SURFACES=1` pass) and round-trip verified in Phase 7.
|
|
49
|
+
- **nga** — org exposes `AiAuthoringBundle` (Agent Script) and **no** `GenAiPlannerBundle`. There is no `outboundRouteConfigs` metadata; the agent surface is a reachable `@utils.escalate` action (Service agents) or a create-record action (Employee agents, which cannot use `@utils.escalate`), and the queue routing is carried entirely by the deterministic routing half. This skill **verifies** that surface from the retrieved bundle and delegates its **authoring** to `agentforce-generate`.
|
|
50
|
+
- **none** — neither surface is exposed → the skill fails closed before any write.
|
|
51
|
+
|
|
52
|
+
Detection can be pinned with `AUTHORING_MODEL_OVERRIDE=classic|nga` when both coexist. Full rules, the Service-vs-Employee split, and the NGA verdict set live in [references/nga-escalation.md](references/nga-escalation.md).
|
|
53
|
+
|
|
54
|
+
## Scope
|
|
55
|
+
|
|
56
|
+
- **In scope**: enabling the escalation topic (`canEscalate`); wiring `outboundRouteConfigs` on the `GenAiPlannerBundle` Messaging surface; deploying the bundled QueueBased outbound `RoutingFlow`; create-or-adopt of the human queue (`QueueSobject` for the context object) and its `QueueRoutingConfig`; authoring the failure-threshold directives; republish + reactivate; and a deterministic config round-trip verdict. Idempotent re-run.
|
|
57
|
+
- **Out of scope**: creating/activating the agent; inbound channel transport (`sessionHandlerAsa` on the `MessagingChannel`) and the agent's outbound `connection` block (owned by `service-agentforce-channel-configure`); provisioning the messaging channel itself (`service-digital-engagement-channel-configure`); broader Omni-Channel routing infrastructure; standalone queue provisioning outside an escalation context; and any production-org write.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Inputs
|
|
62
|
+
|
|
63
|
+
| Input | Positional | Env | Default |
|
|
64
|
+
|---|---|---|---|
|
|
65
|
+
| Org alias | 1 (required) | — | — |
|
|
66
|
+
| Agent developer name | 2 | `AGENT_DEVELOPER_NAME` | `Support_Agent` |
|
|
67
|
+
| Queue developer name | 3 | `QUEUE_DEVELOPER_NAME` | `Human_Support_Queue` |
|
|
68
|
+
| Escalation topic API name | 4 | `ESCALATION_TOPIC_API_NAME` | (unset — surface unverified) |
|
|
69
|
+
| Planner bundle API name | 5 | `PLANNER_BUNDLE_API_NAME` | (unset — surface unverified) |
|
|
70
|
+
| Outbound flow developer name | — | `FLOW_DEVELOPER_NAME` | `Human_Escalation_Outbound_Flow` |
|
|
71
|
+
| Outbound flow label | — | `FLOW_LABEL` | flow name with `_` → space |
|
|
72
|
+
| Context object (routed sObject) | — | `CONTEXT_OBJECT` | `MessagingSession` |
|
|
73
|
+
| Service channel dev name / label | — | `SERVICE_CHANNEL_DEV_NAME` / `SERVICE_CHANNEL_LABEL` | `sfdc_livemessage` / `Messaging` |
|
|
74
|
+
| Human members to add if empty | — | `QUEUE_MEMBER_USERNAMES` | (unset) |
|
|
75
|
+
| Failure threshold (consecutive failed attempts before hand-off) | — | `DEFAULT_FAILURE_THRESHOLD` | `2` |
|
|
76
|
+
| Threshold directive authored (out-of-band flag) | — | `THRESHOLD_AUTHORED` | `0` |
|
|
77
|
+
|
|
78
|
+
For a non-`MessagingSession` context object (e.g. `Case`, `VoiceCall`), pass the matching `SERVICE_CHANNEL_DEV_NAME` / `SERVICE_CHANNEL_LABEL`.
|
|
79
|
+
|
|
80
|
+
## Preconditions
|
|
81
|
+
|
|
82
|
+
1. **`sf` CLI installed and authenticated** to the target org (`sf org display -o <alias>` shows Connected). All calls use `--target-org <alias>`.
|
|
83
|
+
2. **`node` ≥ 18** and **`jq`** on PATH (the deterministic classifiers and JSON assembly).
|
|
84
|
+
3. **The agent exists and its latest `BotVersion` is Active.** This skill fails closed if not.
|
|
85
|
+
4. **For `MessagingSession` handoff, an active `MessagingChannel` exists.** This skill fails closed if none is found. Other context objects use a different transport and are not gated on `MessagingChannel`.
|
|
86
|
+
5. **Sandbox / trial CDO / Developer Edition org.** The skill refuses to configure escalation on a real production customer org.
|
|
87
|
+
|
|
88
|
+
If a precondition fails, `sf` surfaces the raw error — do not fabricate state; surface it and stop.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Workflow
|
|
93
|
+
|
|
94
|
+
### Phase 0 — Production write-guard (mandatory, first write-gate)
|
|
95
|
+
|
|
96
|
+
Before any write, the orchestrator queries `Organization` (`IsSandbox`, `TrialExpirationDate`, `OrganizationType`) and computes `safe_to_write`. If the org is a real production customer org, the skill emits `status: "BLOCKED"` and stops. This is enforced in `scripts/verify-and-configure.sh` — never bypass it.
|
|
97
|
+
|
|
98
|
+
### Phase 1 — Preconditions (read-only, fail closed)
|
|
99
|
+
|
|
100
|
+
1. **Agent Active** — SOQL `BotDefinition` (+ latest `BotVersion`), classified deterministically by [scripts/classify-agent-active.mjs](scripts/classify-agent-active.mjs). Not found or inactive → block with the activation click-path.
|
|
101
|
+
2. **Transport channel present** — for `MessagingSession`, SOQL `MessagingChannel WHERE IsActive=true`; zero rows → block with a pointer to `service-digital-engagement-channel-configure`.
|
|
102
|
+
|
|
103
|
+
### Phase 2 — Human queue (create-or-adopt) + members
|
|
104
|
+
|
|
105
|
+
Resolve the queue by DeveloperName. If missing, deploy a `Queue` (canonical Metadata API element order: `doesSendEmailToMembers`, `name`, `queueSobject`) with a `QueueSobject` for `CONTEXT_OBJECT`. For an adopted queue missing the binding, add the context object additively via the Data API. Create the `QueueRoutingConfig` if absent and bind it to the queue (`Group.QueueRoutingConfigId`), re-querying to confirm the bind persisted.
|
|
106
|
+
|
|
107
|
+
**Members (human routability):** the queue must have at least one active human member — otherwise the escalation routes to an empty queue. The skill counts `GroupMember` rows that resolve to an active `User`. If there are none and you pass `QUEUE_MEMBER_USERNAMES` (comma-separated usernames), it validates each against the username grammar up front, resolves the active `User`, and POSTs the `GroupMember`; it then re-counts. If the queue still has zero active human members the verdict is `INCOMPLETE` with `queueHasActiveDirectUserMember` in `missing` (an active direct user is necessary — not sufficient — for human routability; full Omni permission-set + presence-status eligibility is proven only at runtime). When there is no eligible member, the skill also skips QueueRoutingConfig binding and outbound-flow activation, so it never wires an empty queue. Use an approved Omni provisioning workflow when richer member reconciliation is required.
|
|
108
|
+
|
|
109
|
+
### Phase 3 — Outbound QueueBased RoutingFlow
|
|
110
|
+
|
|
111
|
+
Deploy the bundled outbound flow template [assets/force-app/main/default/flows/Human_Escalation_Outbound_Flow.flow-meta.xml](assets/force-app/main/default/flows/Human_Escalation_Outbound_Flow.flow-meta.xml), substituting the flow name/label, queue DeveloperName, and service-channel tokens. The flow looks the queue up by DeveloperName at runtime (portable, no hardcoded Id). After deploy, `FlowDefinitionView.ActiveVersionId` must be non-null.
|
|
112
|
+
|
|
113
|
+
### Phase 4 — Escalation topic + planner outbound route (doc-driven edits)
|
|
114
|
+
|
|
115
|
+
These two edits require per-org topic/bundle discovery, so they are authored explicitly (retrieve → edit → deploy), then verified by the orchestrator when you pass the topic/bundle API names. Follow [references/escalation-mechanism.md](references/escalation-mechanism.md):
|
|
116
|
+
|
|
117
|
+
1. Retrieve the escalation topic (`GenAiPlugin`), set `<canEscalate>true</canEscalate>`, deploy.
|
|
118
|
+
2. Retrieve the agent's `GenAiPlannerBundle`, add `outboundRouteConfigs` (`escalationMessage`, `outboundRouteName=<FLOW_DEVELOPER_NAME>`, `outboundRouteType=OmniChannelFlow`) on the Messaging planner surface, deploy. The verifier couples name + type inside the SAME block on a Messaging-class surface (via [scripts/extract-outbound-route.mjs](scripts/extract-outbound-route.mjs)) — a bundle with the right name and an `OmniChannelFlow` type in unrelated blocks will not pass.
|
|
119
|
+
|
|
120
|
+
### Phase 5 — Failure-threshold directives (native policy)
|
|
121
|
+
|
|
122
|
+
The failure threshold and any per-topic overrides are **directives, not enforced counters** — there is no metadata field that counts failed turns (see [references/failure-policy.md](references/failure-policy.md)). The orchestrator does **not** write these into the agent; it only renders `DEFAULT_FAILURE_THRESHOLD` (default `2`) into the local directive template [assets/escalation-thresholds.instructions.md](assets/escalation-thresholds.instructions.md) — pass e.g. `DEFAULT_FAILURE_THRESHOLD=3` for a three-attempt scenario — and reports that value under `threshold.default_failures` (with `threshold.directive_rendered`) as verdict evidence. Authoring the rendered directive into the agent's Agent Script is a manual/out-of-band step; set `THRESHOLD_AUTHORED=1` on the verifier run to record `threshold.authored=true`. The directive is eval-verified, never a headless runtime read, so it never blocks the deterministic verdict.
|
|
123
|
+
|
|
124
|
+
### Phase 6 — Republish + reactivate
|
|
125
|
+
|
|
126
|
+
After the Phase 4/5 edits, republish and reactivate the agent so they take effect. These are **manual operator commands** for the hand-edited path; the orchestrator itself only publishes/deactivates/reactivates the agent inside the optional `AUTHOR_SURFACES=1` pass (see "Running it"):
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
sf agent validate authoring-bundle --api-name "$AGENT_DN" --target-org "$ORG" --json
|
|
130
|
+
sf agent publish authoring-bundle --api-name "$AGENT_DN" --target-org "$ORG" --json
|
|
131
|
+
sf agent activate --api-name "$AGENT_DN" --target-org "$ORG"
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Phase 7 — Deterministic verification (single JSON verdict)
|
|
135
|
+
|
|
136
|
+
The orchestrator round-trips every deterministic surface, assembles an evidence object, and classifies it with [scripts/verify-escalation-config.mjs](scripts/verify-escalation-config.mjs) into one of three states so a missing escalation policy can never masquerade as fully configured:
|
|
137
|
+
|
|
138
|
+
- `CONFIGURED` — all deterministic surfaces satisfied **and** the failure-threshold directive is authored.
|
|
139
|
+
- `ROUTING_CONFIGURED_POLICY_PENDING` — routing and the agent escalation surface are verified, but the failure-threshold directive (`thresholdAuthored`) is not yet confirmed. Author it (`AUTHOR_SURFACES=1` / `THRESHOLD_AUTHORED=1`) and re-run to reach `CONFIGURED`.
|
|
140
|
+
- `INCOMPLETE` — one or more deterministic surfaces are missing (see `missing[]`).
|
|
141
|
+
|
|
142
|
+
Note the NGA escalation-surface detection ([scripts/classify-nga-escalation.mjs](scripts/classify-nga-escalation.mjs)) is an **advisory preflight** — it matches for a reachable `@utils.escalate` / create-record action in the authoring bundle but does not prove runtime reachability from the topic. Treat a passing NGA surface check as a strong signal, not end-to-end runtime proof; confirm the live handoff with the Phase 8 runtime step.
|
|
143
|
+
|
|
144
|
+
### Phase 8 — Runtime / manual proof (out of headless scope)
|
|
145
|
+
|
|
146
|
+
Confirm the conversational trigger, `AgentWork` creation, and same-session context preservation with a live conversation — see [references/runtime-verification.md](references/runtime-verification.md).
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Running it
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
bash scripts/verify-and-configure.sh <org-alias> \
|
|
154
|
+
[<agent-developer-name>] [<queue-developer-name>] \
|
|
155
|
+
[<escalation-topic-api-name>] [<planner-bundle-api-name>]
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
- Positionals 2–5 also read from env (see the Inputs table). Further scenario inputs are env-only: `FLOW_DEVELOPER_NAME`, `FLOW_LABEL`, `CONTEXT_OBJECT`, `SERVICE_CHANNEL_DEV_NAME`, `SERVICE_CHANNEL_LABEL`, `QUEUE_MEMBER_USERNAMES`.
|
|
159
|
+
- `PLAN_ONLY=1` previews (read-only) and stops before any write.
|
|
160
|
+
- `THRESHOLD_AUTHORED=1` marks the directive policy as authored for the verdict.
|
|
161
|
+
- `AUTHOR_SURFACES=1` (optional, run mode) — deterministically author the two doc-driven surfaces instead of hand-editing XML, following the Agentforce lifecycle in `agentforce-generate/references/known-issues.md` (Issue 18): **publish** (regenerate the compiled bundle) → **retrieve** the `GenAiPlugin` topic + `GenAiPlannerBundle` in **metadata format** (`--target-metadata-dir … --unzip`) → **deactivate** the agent (deploys fail while it is active) → apply a schema-aware, XSD-ordered, loss-less, idempotent patch (`scripts/patch-escalation-surfaces.mjs`) that sets `canEscalate=true` (after `aiPluginUtterances`, before `description`) and inserts `outboundRouteConfigs` (`outboundRouteType=OmniChannelFlow`, **before `<surface>`** on a Messaging-class planner surface, targeting the outbound flow) → **deploy** with `--metadata-dir` → **activate** (fail-closed; the agent is never left inactive silently) → **re-read the latest `BotVersion`** so the verdict reflects the freshly-authored version. It requires the topic and/or bundle API names, runs only after the membership gate (never wires an empty queue), and **refuses** (blocks) rather than guess if it cannot find a safe, XSD-ordered patch point. Omit it to keep the skill verify-only.
|
|
162
|
+
- The `canEscalate` and `outboundRouteConfigs` surfaces are verified only when you pass `<escalation-topic-api-name>` / `<planner-bundle-api-name>` (they are authored via the doc-driven edits in Phase 4).
|
|
163
|
+
|
|
164
|
+
**Typical two-pass flow**: run once to stand up the queue + outbound flow and preconditions; perform the Phase 4/5/6 doc-driven edits; then re-run with the topic + bundle API names and `THRESHOLD_AUTHORED=1` to reach `CONFIGURED`.
|
|
165
|
+
|
|
166
|
+
## Output contract
|
|
167
|
+
|
|
168
|
+
A single JSON object to stdout:
|
|
169
|
+
|
|
170
|
+
```json
|
|
171
|
+
{
|
|
172
|
+
"skill": "service-agentforce-human-escalation-configure",
|
|
173
|
+
"status": "CONFIGURED",
|
|
174
|
+
"agent": { "developer_name": "Support_Agent", "active": true },
|
|
175
|
+
"queue": { "developer_name": "Human_Support_Queue", "id": "00G...", "active_direct_user_member_count": 1 },
|
|
176
|
+
"outbound_flow": { "api_name": "Human_Escalation_Outbound_Flow", "active_version_id": "301..." },
|
|
177
|
+
"escalation_topic": "Escalate_To_Human",
|
|
178
|
+
"planner_bundle": "Support_Agent",
|
|
179
|
+
"config_verification": {
|
|
180
|
+
"verdict": "CONFIGURED",
|
|
181
|
+
"deterministicPass": true,
|
|
182
|
+
"directivePass": true,
|
|
183
|
+
"checks": [],
|
|
184
|
+
"missing": []
|
|
185
|
+
},
|
|
186
|
+
"next_steps": [],
|
|
187
|
+
"manual_actions": [],
|
|
188
|
+
"blocking_issue": null
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
- `status`: `CONFIGURED` (all deterministic surfaces satisfied), `INCOMPLETE` (some `config_verification.missing`), or `BLOCKED` (bad input / auth / production / precondition; exit 1).
|
|
193
|
+
- Re-running an already-configured org is a no-op that returns `CONFIGURED` (idempotent).
|
|
194
|
+
|
|
195
|
+
## Idempotency
|
|
196
|
+
|
|
197
|
+
Existing queue, `QueueSobject`, `QueueRoutingConfig`, queue members, and an already-active outbound flow are reused, not recreated (members are only added when the queue has zero active members and `QUEUE_MEMBER_USERNAMES` is supplied; already-present members are left untouched). The doc-driven edits (`canEscalate`, `outboundRouteConfigs`) are set-if-absent. A second run against a fully configured org performs no writes and returns `CONFIGURED`.
|
|
198
|
+
|
|
199
|
+
## Verification
|
|
200
|
+
|
|
201
|
+
Run the bundled escalation contract tests after changing this skill or its scripts:
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
python3 scripts/tests/test_escalation_contracts.py
|
|
205
|
+
```
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Agent Script failure-threshold directive snippet (NGA / Agent Script authoring model).
|
|
3
|
+
|
|
4
|
+
This is a TEMPLATE of directive text, NOT an enforced runtime counter. It is injected
|
|
5
|
+
into the agent's topic/system instructions so the planner escalates consistently.
|
|
6
|
+
Salesforce Agentforce does not expose a metadata field that counts failed turns; the
|
|
7
|
+
threshold is expressed as instruction text and verified by an ADK eval rubric plus a
|
|
8
|
+
documented manual conversation test — never by a deterministic metadata read.
|
|
9
|
+
|
|
10
|
+
Substitute the tokens below when authoring:
|
|
11
|
+
__DEFAULT_FAILURES__ default consecutive-failure threshold (recommended: 2)
|
|
12
|
+
__OVERRIDE_TOPIC_LABEL__ label of a topic that needs a tighter threshold (e.g. "Password Reset")
|
|
13
|
+
__ESCALATION_MESSAGE__ customer-facing handoff line
|
|
14
|
+
-->
|
|
15
|
+
|
|
16
|
+
# Escalation policy (agent directives)
|
|
17
|
+
|
|
18
|
+
Add the following to the agent's global/system instructions:
|
|
19
|
+
|
|
20
|
+
- When you cannot resolve the user's request after __DEFAULT_FAILURES__ consecutive
|
|
21
|
+
failed attempts on the same request, escalate to a human agent instead of continuing
|
|
22
|
+
to retry.
|
|
23
|
+
- Treat "failed attempt" as: you asked a clarifying question and still could not act, a
|
|
24
|
+
tool/action returned an error, or the user states your answer did not resolve the
|
|
25
|
+
issue.
|
|
26
|
+
- On escalation, tell the user: "__ESCALATION_MESSAGE__" and then invoke the human
|
|
27
|
+
handoff (the escalation topic is enabled to transfer to the human queue).
|
|
28
|
+
- Do not disclose internal error details, stack traces, or system identifiers when
|
|
29
|
+
escalating.
|
|
30
|
+
|
|
31
|
+
# Per-topic override
|
|
32
|
+
|
|
33
|
+
Add the following to the __OVERRIDE_TOPIC_LABEL__ topic instructions (tighter threshold):
|
|
34
|
+
|
|
35
|
+
- For __OVERRIDE_TOPIC_LABEL__ requests, escalate to a human after a SINGLE failed attempt.
|
|
36
|
+
Time-sensitive requests (for example password/credential problems) should not be
|
|
37
|
+
retried repeatedly.
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<Flow xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
3
|
+
<actionCalls>
|
|
4
|
+
<name>Check_Availability</name>
|
|
5
|
+
<label>Check Availability for Routing</label>
|
|
6
|
+
<locationX>0</locationX>
|
|
7
|
+
<locationY>0</locationY>
|
|
8
|
+
<actionName>checkAvailabilityForRouting</actionName>
|
|
9
|
+
<actionType>checkAvailabilityForRouting</actionType>
|
|
10
|
+
<connector>
|
|
11
|
+
<targetReference>Are_Reps_Available</targetReference>
|
|
12
|
+
</connector>
|
|
13
|
+
<flowTransactionModel>CurrentTransaction</flowTransactionModel>
|
|
14
|
+
<inputParameters>
|
|
15
|
+
<name>serviceChannelId</name>
|
|
16
|
+
<value>
|
|
17
|
+
<setupReference>__SERVICE_CHANNEL_DEV_NAME__</setupReference>
|
|
18
|
+
<setupReferenceType>ServiceChannel</setupReferenceType>
|
|
19
|
+
</value>
|
|
20
|
+
</inputParameters>
|
|
21
|
+
<inputParameters>
|
|
22
|
+
<name>serviceChannelLabel</name>
|
|
23
|
+
<value><stringValue>__SERVICE_CHANNEL_LABEL__</stringValue></value>
|
|
24
|
+
</inputParameters>
|
|
25
|
+
<inputParameters>
|
|
26
|
+
<name>serviceChannelDevName</name>
|
|
27
|
+
<value><stringValue>__SERVICE_CHANNEL_DEV_NAME__</stringValue></value>
|
|
28
|
+
</inputParameters>
|
|
29
|
+
<inputParameters>
|
|
30
|
+
<name>routingType</name>
|
|
31
|
+
<value><stringValue>QueueBased</stringValue></value>
|
|
32
|
+
</inputParameters>
|
|
33
|
+
<inputParameters>
|
|
34
|
+
<name>queueId</name>
|
|
35
|
+
<value><elementReference>Lookup_Queue_by_Name.Id</elementReference></value>
|
|
36
|
+
</inputParameters>
|
|
37
|
+
<inputParameters>
|
|
38
|
+
<name>isQueueVariable</name>
|
|
39
|
+
<value><booleanValue>true</booleanValue></value>
|
|
40
|
+
</inputParameters>
|
|
41
|
+
<inputParameters>
|
|
42
|
+
<name>selectedOutputs</name>
|
|
43
|
+
<value><stringValue>GET_AVAILABILITY</stringValue></value>
|
|
44
|
+
</inputParameters>
|
|
45
|
+
<nameSegment>checkAvailabilityForRouting</nameSegment>
|
|
46
|
+
<outputParameters>
|
|
47
|
+
<assignToReference>onlineAgentsCount</assignToReference>
|
|
48
|
+
<name>onlineAgentsCount</name>
|
|
49
|
+
</outputParameters>
|
|
50
|
+
<versionString>2.0.0</versionString>
|
|
51
|
+
</actionCalls>
|
|
52
|
+
<actionCalls>
|
|
53
|
+
<name>Route_to_Queue</name>
|
|
54
|
+
<label>Route to Queue</label>
|
|
55
|
+
<locationX>0</locationX>
|
|
56
|
+
<locationY>0</locationY>
|
|
57
|
+
<actionName>routeWork</actionName>
|
|
58
|
+
<actionType>routeWork</actionType>
|
|
59
|
+
<flowTransactionModel>CurrentTransaction</flowTransactionModel>
|
|
60
|
+
<inputParameters>
|
|
61
|
+
<name>recordId</name>
|
|
62
|
+
<value><elementReference>recordId</elementReference></value>
|
|
63
|
+
</inputParameters>
|
|
64
|
+
<inputParameters>
|
|
65
|
+
<name>serviceChannelLabel</name>
|
|
66
|
+
<value><stringValue>__SERVICE_CHANNEL_LABEL__</stringValue></value>
|
|
67
|
+
</inputParameters>
|
|
68
|
+
<inputParameters>
|
|
69
|
+
<name>serviceChannelDevName</name>
|
|
70
|
+
<value><stringValue>__SERVICE_CHANNEL_DEV_NAME__</stringValue></value>
|
|
71
|
+
</inputParameters>
|
|
72
|
+
<inputParameters>
|
|
73
|
+
<name>routingType</name>
|
|
74
|
+
<value><stringValue>QueueBased</stringValue></value>
|
|
75
|
+
</inputParameters>
|
|
76
|
+
<inputParameters>
|
|
77
|
+
<name>serviceChannelId</name>
|
|
78
|
+
<value>
|
|
79
|
+
<setupReference>__SERVICE_CHANNEL_DEV_NAME__</setupReference>
|
|
80
|
+
<setupReferenceType>ServiceChannel</setupReferenceType>
|
|
81
|
+
</value>
|
|
82
|
+
</inputParameters>
|
|
83
|
+
<inputParameters>
|
|
84
|
+
<name>queueId</name>
|
|
85
|
+
<value><elementReference>Lookup_Queue_by_Name.Id</elementReference></value>
|
|
86
|
+
</inputParameters>
|
|
87
|
+
<inputParameters>
|
|
88
|
+
<name>isQueueVariable</name>
|
|
89
|
+
<value><booleanValue>true</booleanValue></value>
|
|
90
|
+
</inputParameters>
|
|
91
|
+
<nameSegment>routeWork</nameSegment>
|
|
92
|
+
<versionString>2.0.0</versionString>
|
|
93
|
+
</actionCalls>
|
|
94
|
+
<apiVersion>67.0</apiVersion>
|
|
95
|
+
<areMetricsLoggedToDataCloud>false</areMetricsLoggedToDataCloud>
|
|
96
|
+
<decisions>
|
|
97
|
+
<name>Are_Reps_Available</name>
|
|
98
|
+
<label>Are Reps Available?</label>
|
|
99
|
+
<locationX>0</locationX>
|
|
100
|
+
<locationY>0</locationY>
|
|
101
|
+
<defaultConnectorLabel>No</defaultConnectorLabel>
|
|
102
|
+
<rules>
|
|
103
|
+
<name>Reps_Available</name>
|
|
104
|
+
<conditionLogic>and</conditionLogic>
|
|
105
|
+
<conditions>
|
|
106
|
+
<leftValueReference>onlineAgentsCount</leftValueReference>
|
|
107
|
+
<operator>GreaterThan</operator>
|
|
108
|
+
<rightValue><numberValue>0.0</numberValue></rightValue>
|
|
109
|
+
</conditions>
|
|
110
|
+
<connector><targetReference>Route_to_Queue</targetReference></connector>
|
|
111
|
+
<label>Yes</label>
|
|
112
|
+
</rules>
|
|
113
|
+
</decisions>
|
|
114
|
+
<environments>Default</environments>
|
|
115
|
+
<interviewLabel>__FLOW_DEVELOPER_NAME__ {!$Flow.CurrentDateTime}</interviewLabel>
|
|
116
|
+
<label>__FLOW_LABEL__</label>
|
|
117
|
+
<processMetadataValues>
|
|
118
|
+
<name>BuilderType</name>
|
|
119
|
+
<value><stringValue>LightningFlowBuilder</stringValue></value>
|
|
120
|
+
</processMetadataValues>
|
|
121
|
+
<processMetadataValues>
|
|
122
|
+
<name>CanvasMode</name>
|
|
123
|
+
<value><stringValue>AUTO_LAYOUT_CANVAS</stringValue></value>
|
|
124
|
+
</processMetadataValues>
|
|
125
|
+
<processMetadataValues>
|
|
126
|
+
<name>OriginBuilderType</name>
|
|
127
|
+
<value><stringValue>LightningFlowBuilder</stringValue></value>
|
|
128
|
+
</processMetadataValues>
|
|
129
|
+
<processType>RoutingFlow</processType>
|
|
130
|
+
<recordLookups>
|
|
131
|
+
<name>Lookup_Queue_by_Name</name>
|
|
132
|
+
<label>Lookup Queue by Name</label>
|
|
133
|
+
<locationX>0</locationX>
|
|
134
|
+
<locationY>0</locationY>
|
|
135
|
+
<assignNullValuesIfNoRecordsFound>false</assignNullValuesIfNoRecordsFound>
|
|
136
|
+
<connector><targetReference>Check_Availability</targetReference></connector>
|
|
137
|
+
<filterLogic>and</filterLogic>
|
|
138
|
+
<filters>
|
|
139
|
+
<field>DeveloperName</field>
|
|
140
|
+
<operator>EqualTo</operator>
|
|
141
|
+
<value><stringValue>__QUEUE_DEVELOPER_NAME__</stringValue></value>
|
|
142
|
+
</filters>
|
|
143
|
+
<filters>
|
|
144
|
+
<field>Type</field>
|
|
145
|
+
<operator>EqualTo</operator>
|
|
146
|
+
<value><stringValue>Queue</stringValue></value>
|
|
147
|
+
</filters>
|
|
148
|
+
<getFirstRecordOnly>true</getFirstRecordOnly>
|
|
149
|
+
<object>Group</object>
|
|
150
|
+
<storeOutputAutomatically>true</storeOutputAutomatically>
|
|
151
|
+
</recordLookups>
|
|
152
|
+
<start>
|
|
153
|
+
<locationX>0</locationX>
|
|
154
|
+
<locationY>0</locationY>
|
|
155
|
+
<connector><targetReference>Lookup_Queue_by_Name</targetReference></connector>
|
|
156
|
+
</start>
|
|
157
|
+
<status>Active</status>
|
|
158
|
+
<variables>
|
|
159
|
+
<name>onlineAgentsCount</name>
|
|
160
|
+
<dataType>Number</dataType>
|
|
161
|
+
<isCollection>false</isCollection>
|
|
162
|
+
<isInput>false</isInput>
|
|
163
|
+
<isOutput>false</isOutput>
|
|
164
|
+
<scale>0</scale>
|
|
165
|
+
</variables>
|
|
166
|
+
<variables>
|
|
167
|
+
<name>recordId</name>
|
|
168
|
+
<dataType>String</dataType>
|
|
169
|
+
<isCollection>false</isCollection>
|
|
170
|
+
<isInput>true</isInput>
|
|
171
|
+
<isOutput>false</isOutput>
|
|
172
|
+
</variables>
|
|
173
|
+
</Flow>
|