@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
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
# API notes — Flow (v66) + Actions REST invocation
|
|
2
|
+
|
|
3
|
+
## Two flow variants shipped by this skill
|
|
4
|
+
|
|
5
|
+
This skill ships **two** Flow assets under `assets/force-app/main/default/flows/`. They solve two different problems and are verified two different ways — do not conflate them.
|
|
6
|
+
|
|
7
|
+
| Asset | processType | Verified by | Routes real work? | Purpose |
|
|
8
|
+
|---|---|---|---|---|
|
|
9
|
+
| `Omni_Route_Cases` | `AutoLaunchedFlow` | Actions REST `dryRun` invoke | **No** (dry-run gate) | Proves headless CLI invocability — "can the platform/CLI execute a routing flow without a real work item?" |
|
|
10
|
+
| `Omni_Route_Case_Trigger` | `AutoLaunchedFlow` + record trigger (`RecordAfterSave`, Case Create) | Record DML → PendingServiceRouting / AgentWork query | **Yes** | Production routing — fires on real Case insert, calls `routeWork`, hands the Case to Omni-Channel for distribution |
|
|
11
|
+
|
|
12
|
+
The autolaunched variant answers *"is flow invocation wired up?"* in one HTTP call with no side effects. The record-triggered variant answers *"do real Cases actually reach an agent?"* — which can only be proven by inserting a Case and observing the routing side effects. Both are legitimate parts of the AFCC contract: the smoke test de-risks the CLI/headless path; the trigger closes the "basic happy-path omni flow which routes work item to given queue" gap.
|
|
13
|
+
|
|
14
|
+
**Why the trigger flow is `AutoLaunchedFlow` with a `<start>` record trigger, not a separate processType:** Salesforce implements record-triggered flows as `AutoLaunchedFlow` process type plus a `<start>` block carrying `<object>`, `<recordTriggerType>`, and `<triggerType>RecordAfterSave</triggerType>`. There is no distinct `RecordAfterSave` processType value — the trigger semantics live entirely in `<start>`. This is why the processType matrix below lists record-triggered rows: same processType, different `<start>` shape.
|
|
15
|
+
|
|
16
|
+
### Verifying the record-triggered variant (no Actions REST — use record DML)
|
|
17
|
+
|
|
18
|
+
The trigger flow is **not** invocable via Actions REST (record-triggered flows aren't exposed as custom actions). Verify it by exercising the trigger and observing side effects:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# 1. baseline
|
|
22
|
+
PSR0=$(sf data query -o "$ORG" -q "SELECT COUNT(Id) c FROM PendingServiceRouting" --json | jq -r '.result.records[0].c')
|
|
23
|
+
AW0=$(sf data query -o "$ORG" -q "SELECT COUNT(Id) c FROM AgentWork" --json | jq -r '.result.records[0].c')
|
|
24
|
+
|
|
25
|
+
# 2. insert a Case (fires the trigger)
|
|
26
|
+
CASE=$(sf data create record -o "$ORG" --sobject Case \
|
|
27
|
+
--values "Subject='Omni trigger verify' Status='New' Origin='Email'" --json | jq -r '.result.id')
|
|
28
|
+
|
|
29
|
+
# 3. re-query — PSR should be +1 for this Case; AgentWork +1 if an agent is online
|
|
30
|
+
sf data query -o "$ORG" -q "SELECT WorkItemId, IsReadyForRouting, RoutingType, QueueId FROM PendingServiceRouting WHERE WorkItemId='$CASE'" --json | jq -c '.result.records[]'
|
|
31
|
+
|
|
32
|
+
# 4. cleanup
|
|
33
|
+
sf data delete record -o "$ORG" --sobject Case --record-id "$CASE"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Success signals: `PendingServiceRouting 0 → 1` with `IsReadyForRouting=true, RoutingType=QueueBased`, and `AgentWork +1` in `Assigned` status against the target queue when an agent is online with a Case-capable presence status. `AgentWork` does not increment when no agent is online — the PSR row alone (`IsReadyForRouting=true`) is sufficient proof the flow routed correctly; agent assignment is a separate Omni-distribution concern.
|
|
37
|
+
|
|
38
|
+
### Token resolution (record-triggered variant portability)
|
|
39
|
+
|
|
40
|
+
`Omni_Route_Case_Trigger` carries **tokenized** org-specific IDs so the asset is portable across the 15K-org migration fleet — hardcoding IDs would break every org but the one it was authored against. Tokens and how to resolve them by DeveloperName at deploy time:
|
|
41
|
+
|
|
42
|
+
| Token | Resolve from | Query |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| `__SERVICE_CHANNEL_ID__` | ServiceChannel (Case) | `SELECT Id FROM ServiceChannel WHERE RelatedEntity='Case'` |
|
|
45
|
+
| `__SERVICE_CHANNEL_DEVNAME__` | ServiceChannel | `SELECT DeveloperName FROM ServiceChannel WHERE RelatedEntity='Case'` |
|
|
46
|
+
| `__SERVICE_CHANNEL_LABEL__` | ServiceChannel | `SELECT MasterLabel FROM ServiceChannel WHERE RelatedEntity='Case'` |
|
|
47
|
+
| `__QUEUE_ID__` | Group (Queue) | `SELECT Id FROM Group WHERE Type='Queue' AND DeveloperName='<QueueDN>'` |
|
|
48
|
+
| `__ROUTING_CONFIG_ID__` | QueueRoutingConfig | `SELECT Id FROM QueueRoutingConfig WHERE DeveloperName='<ConfigDN>'` |
|
|
49
|
+
|
|
50
|
+
Resolve each token against the target org, `sd`/`sed`-substitute into a materialized copy of the asset, then deploy the resolved copy. Never commit the resolved copy — the committed asset stays tokenized.
|
|
51
|
+
|
|
52
|
+
## Flow XML skeleton (autolaunched)
|
|
53
|
+
|
|
54
|
+
Minimum shape a Flow XML must have to be deployable AND invocable via Actions REST:
|
|
55
|
+
|
|
56
|
+
```xml
|
|
57
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
58
|
+
<Flow xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
59
|
+
<apiVersion>66.0</apiVersion>
|
|
60
|
+
<label>Omni Route Cases</label>
|
|
61
|
+
<processType>AutoLaunchedFlow</processType>
|
|
62
|
+
<status>Active</status>
|
|
63
|
+
<start>
|
|
64
|
+
<locationX>50</locationX>
|
|
65
|
+
<locationY>0</locationY>
|
|
66
|
+
<connector>
|
|
67
|
+
<targetReference>Some_Element</targetReference>
|
|
68
|
+
</connector>
|
|
69
|
+
</start>
|
|
70
|
+
<variables>
|
|
71
|
+
<name>dryRun</name>
|
|
72
|
+
<dataType>Boolean</dataType>
|
|
73
|
+
<isInput>true</isInput>
|
|
74
|
+
<isOutput>false</isOutput>
|
|
75
|
+
</variables>
|
|
76
|
+
<variables>
|
|
77
|
+
<name>dryRunOk</name>
|
|
78
|
+
<dataType>Boolean</dataType>
|
|
79
|
+
<isInput>false</isInput>
|
|
80
|
+
<isOutput>true</isOutput>
|
|
81
|
+
</variables>
|
|
82
|
+
...
|
|
83
|
+
</Flow>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Required for CLI invocation:**
|
|
87
|
+
|
|
88
|
+
| Element | Required | Notes |
|
|
89
|
+
|---|---|---|
|
|
90
|
+
| `<processType>AutoLaunchedFlow</processType>` | yes | Screen/record-triggered/event-triggered flows are NOT exposed as custom actions |
|
|
91
|
+
| `<status>Active</status>` | yes | Draft/Obsolete flows deploy but return 404 from Actions REST |
|
|
92
|
+
| `<label>` | yes | Display label; ≤ 80 chars |
|
|
93
|
+
| At least one `<start>` connector + one downstream element | yes | Empty flows fail schema validation |
|
|
94
|
+
| Boolean input `dryRun` + Boolean output `dryRunOk` | for this skill's smoke test | The invocation posts `{"inputs":[{"dryRun":true}]}` and expects `outputValues.dryRunOk=true` |
|
|
95
|
+
|
|
96
|
+
**processType matrix** — which flow types support which invocation paths:
|
|
97
|
+
|
|
98
|
+
| processType | Deploy via Metadata API | Invoke via Actions REST | Invoke via `sf apex run` (`Flow.Interview.<Name>`) | Invoke via record DML |
|
|
99
|
+
|---|---|---|---|---|
|
|
100
|
+
| `AutoLaunchedFlow` | yes | **yes** | yes | no |
|
|
101
|
+
| `Flow` (screen flow) | yes | no | no | no (needs Lightning/Experience runtime) |
|
|
102
|
+
| `AutoLaunchedFlowFromAnywhere` | yes | yes | yes | no |
|
|
103
|
+
| `RecordAfterSave` / `RecordBeforeSave` (record-triggered — `Omni_Route_Case_Trigger`) | yes | no | no | **yes** (trigger via `sf data create record` / `sf data update record`) |
|
|
104
|
+
| `RoutingFlow` (Omni routing type) | yes | limited | limited | no (platform invokes when work item enters queue) |
|
|
105
|
+
| `CustomEvent` (platform-event-triggered) | yes | no | no | **yes** (publish via `sf data create record --sobject <Event__e>`) |
|
|
106
|
+
|
|
107
|
+
For Omni routing specifically, the recommended shape is `AutoLaunchedFlow` (this skill's asset) — it can be invoked both by the platform (when registered on a Queue's Routing Configuration) AND by the CLI for smoke testing. `RoutingFlow` processType is more restrictive.
|
|
108
|
+
|
|
109
|
+
**`RoutingFlow` rejects `<runInMode>`:** if you author a flow of type `RoutingFlow` (rather than the `AutoLaunchedFlow` this skill ships), a `<runInMode>SystemModeWithoutSharing</runInMode>` element fails the deploy with "Because the flow is of type RoutingFlow, it can't be configured to always run in system context." Drop `<runInMode>` entirely from `RoutingFlow`-type flows.
|
|
110
|
+
|
|
111
|
+
## `routeWork` routing targets
|
|
112
|
+
|
|
113
|
+
The `routeWork` action accepts several mutually exclusive target types; set exactly one pair and let `routingType` select which applies:
|
|
114
|
+
|
|
115
|
+
| Target inputs | Routes to |
|
|
116
|
+
|---|---|
|
|
117
|
+
| `queueId` / `queueLabel` | a queue (most common) |
|
|
118
|
+
| `agentId` / `agentLabel` | a specific agent |
|
|
119
|
+
| `botId` / `botLabel` | an Einstein / Service Agent bot |
|
|
120
|
+
| `copilotId` / `copilotLabel` | a Copilot |
|
|
121
|
+
| `agentforceEmployeeAgentId` / `agentforceEmployeeAgentLabel` | an Agentforce Employee Agent (the escalation handoff target) |
|
|
122
|
+
| `digitalWorkerId` / `digitalWorkerLabel` | an Agentforce Orchestrator |
|
|
123
|
+
| `externalConversationBotId` / `externalConversationBotLabel` | an external conversation bot |
|
|
124
|
+
|
|
125
|
+
## Actions REST API endpoint
|
|
126
|
+
|
|
127
|
+
```http
|
|
128
|
+
POST /services/data/v<API>/actions/custom/flow/<FlowDeveloperName>
|
|
129
|
+
Content-Type: application/json
|
|
130
|
+
Authorization: Bearer <access_token>
|
|
131
|
+
|
|
132
|
+
{
|
|
133
|
+
"inputs": [
|
|
134
|
+
{ "dryRun": true }
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**Success response** (HTTP 200):
|
|
140
|
+
|
|
141
|
+
```json
|
|
142
|
+
[
|
|
143
|
+
{
|
|
144
|
+
"actionName": "Omni_Route_Cases",
|
|
145
|
+
"errors": null,
|
|
146
|
+
"isSuccess": true,
|
|
147
|
+
"outputValues": {
|
|
148
|
+
"dryRunOk": true,
|
|
149
|
+
"routed": false
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
]
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Note: response is always a JSON **array**, even for a single-input call. `outputValues` contains every Flow variable marked `isOutput=true`.
|
|
156
|
+
|
|
157
|
+
**Failure responses:**
|
|
158
|
+
|
|
159
|
+
| HTTP | Body | Meaning | Fix |
|
|
160
|
+
|---|---|---|---|
|
|
161
|
+
| 200 | `[{"isSuccess": false, "errors": [{"message": "..."}]}]` | Flow ran but failed a decision/action | Read `.errors[0].message`; usually a variable-type mismatch or a missing prereq for the non-dry-run branch |
|
|
162
|
+
| 404 | `[{"errorCode":"NOT_FOUND","message":"The requested resource does not exist"}]` | Flow DeveloperName not found OR flow is Draft/Obsolete | Confirm the Flow exists and `<status>Active</status>` |
|
|
163
|
+
| 400 | `[{"errorCode":"INVALID_TYPE","message":"..."}]` | `<processType>` is not AutoLaunched (typically `Flow` for screen flows) | Rewrite the flow as autolaunched, or skip invocation for this flow type |
|
|
164
|
+
| 401 | `INVALID_SESSION_ID` | Session expired | Re-authenticate: `sf org login web --alias <alias>` |
|
|
165
|
+
| 403 | `INSUFFICIENT_ACCESS` | User running the CLI lacks "Run Flows" permission | Grant Run Flows permission, or run as admin |
|
|
166
|
+
|
|
167
|
+
## SF CLI invocation patterns
|
|
168
|
+
|
|
169
|
+
### Path 1 — `sf api request rest` (preferred; language-agnostic, structured JSON)
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
sf api request rest \
|
|
173
|
+
--method POST \
|
|
174
|
+
--target-org <alias> \
|
|
175
|
+
--body '{"inputs":[{"dryRun":true}]}' \
|
|
176
|
+
/services/data/v66.0/actions/custom/flow/Omni_Route_Cases
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Body must be valid JSON. The path is passed as a positional arg (no `--url` flag on recent `sf` versions — the last positional is the path).
|
|
180
|
+
|
|
181
|
+
**Parsing pitfall — beta warning on stdout:** as of `sf` CLI v2.139+, `sf api request rest` prints a `Warning: This command is currently in beta. ...` line to **stdout** (not stderr) before the JSON body. Naive `jq` parsing chokes on it. Strip everything up to the first `[` or `{`:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
raw=$(sf api request rest --method POST --target-org "$ORG" --body "$BODY" "$PATH_")
|
|
185
|
+
json=$(printf '%s' "$raw" | awk '/^[[{]/,0')
|
|
186
|
+
echo "$json" | jq -r '.[0].outputValues.dryRunOk'
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
This skill's deploy-and-report.sh does exactly this. If Salesforce ever removes the beta warning, the `awk` filter is a no-op — safe forward.
|
|
190
|
+
|
|
191
|
+
### Path 2 — `sf apex run` (when Apex context is needed)
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
cat > /tmp/invoke.apex <<'EOF'
|
|
195
|
+
Map<String, Object> params = new Map<String, Object>{ 'dryRun' => true };
|
|
196
|
+
Flow.Interview.Omni_Route_Cases flow = new Flow.Interview.Omni_Route_Cases(params);
|
|
197
|
+
flow.start();
|
|
198
|
+
System.debug('OUT: dryRunOk=' + flow.getVariableValue('dryRunOk'));
|
|
199
|
+
EOF
|
|
200
|
+
sf apex run -f /tmp/invoke.apex -o <alias>
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Returns unstructured `System.debug` output; parse with a regex if scripting. Requires no additional metadata beyond the Flow itself.
|
|
204
|
+
|
|
205
|
+
### Path 3 — `sf flow test run` (only if FlowTest metadata is shipped)
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
sf flow test run --flow-api-name Omni_Route_Cases --target-org <alias>
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
Requires a `FlowTest:<TestName>` metadata component that carries assertions. Heavier deploy surface; not used by this skill's smoke test.
|
|
212
|
+
|
|
213
|
+
## Deploy semantics
|
|
214
|
+
|
|
215
|
+
Metadata API deploy of `Flow:<DN>` returns per-file state:
|
|
216
|
+
|
|
217
|
+
- `Created` — new Flow record (first deploy or new DeveloperName)
|
|
218
|
+
- `Changed` — Flow existed, deploy created a new version
|
|
219
|
+
- `Unchanged` — Flow existed AND deploy determined no new version was needed
|
|
220
|
+
|
|
221
|
+
**Flow-specific quirk: `Changed` on identical redeploy is normal.** Unlike `ServicePresenceStatus`, `Queue`, `ServiceChannel`, and other static metadata types, Flows are not byte-idempotent through the Metadata API. Flow versioning treats every deploy as a potential new version — even when the deployed XML is byte-identical to the currently-Active version, the response is typically `Changed` and a new inactive version number is bumped internally. A first deploy returns `Created`; a second identical deploy returns `Changed` with a new deploy Id.
|
|
222
|
+
|
|
223
|
+
**Implication for the coordinator:** treat `Changed` for Flow components as "successfully redeployed" rather than "operator modified the flow." The skill's `status: "updated"` on second run does not necessarily mean anything semantically changed. If the coordinator needs true operator-modification detection, compare the `<label>`, `<processType>`, `<status>`, and top-level `<variables>` block between deploys.
|
|
224
|
+
|
|
225
|
+
**Workaround for strict idempotency:** deploy with `<status>Draft</status>` and only activate on first deploy — subsequent deploys of identical Draft XML often return `Unchanged`. But this breaks the CLI-invocability contract (Active required for Actions REST), so this skill doesn't take that path.
|
|
226
|
+
|
|
227
|
+
**XML element ordering does NOT affect deploy success** — Salesforce parses and re-serializes canonically. Elements in any order deploy the same.
|
|
228
|
+
|
|
229
|
+
**Whitespace/indentation does NOT affect deploy success** — normalized before parsing.
|
|
230
|
+
|
|
231
|
+
**Deploying a Flow with `<status>Draft</status>` does NOT overwrite the Active version** — the existing Active version stays live. This is why our post-verify retrieves and asserts Active: a Draft deploy that "succeeds" skills the org in a state where the CLI invocation still hits the previous Active version, giving misleading test results.
|
|
232
|
+
|
|
233
|
+
## Common deploy failures + translations
|
|
234
|
+
|
|
235
|
+
| Salesforce error | Skill translation | Fix |
|
|
236
|
+
|---|---|---|
|
|
237
|
+
| `INVALID_TYPE: Flow` | Flow metadata not enabled | Rare; usually indicates an org edition without Flow Builder. Escalate. |
|
|
238
|
+
| `The apiVersion X is not valid for this API version` | Flow XML `<apiVersion>` > org's API | Lower the Flow's `<apiVersion>` to ≤ the org's current version |
|
|
239
|
+
| `Invalid element name` / `was not expected` | Schema mismatch | Check element ordering and spelling against v66 Metadata API docs; some elements are strictly ordered |
|
|
240
|
+
| `INSUFFICIENT_ACCESS_OR_READONLY` | User lacks Metadata API deploy permissions | Re-auth as System Administrator, or grant Manage Flows + Deploy From Metadata API |
|
|
241
|
+
| `The version of the flow you're trying to activate isn't the latest version` | Someone deployed a newer draft in parallel | Retrieve the newer version, merge, redeploy |
|
|
242
|
+
| `You can't deploy flow XXX because it references field YYY` | Flow references a field that doesn't exist on the org | Deploy the field first, or edit the flow to remove the reference |
|
|
243
|
+
|
|
244
|
+
## Retrieve semantics
|
|
245
|
+
|
|
246
|
+
`sf project retrieve start --metadata "Flow:<DN>"` returns one XML file. Typically completes in ~2–5s (much faster than the presence-status ~4m 51s retrieve because Flow metadata is a single file, not a packaged set).
|
|
247
|
+
|
|
248
|
+
**Retrieved XML may not byte-match deployed XML** — Salesforce serializes flow elements in canonical order, which may differ from what you deployed. Grep for `<status>Active</status>` (structural) rather than diffing whole files.
|
|
249
|
+
|
|
250
|
+
## Standard vs custom flows
|
|
251
|
+
|
|
252
|
+
Orgs on Service Cloud typically ship with these standard Omni routing flows out of the box:
|
|
253
|
+
|
|
254
|
+
- `Standard_Omni_Routing_Flow` (if Omni-Channel is enabled)
|
|
255
|
+
- Various `Case_*` demo flows depending on Sales Cloud starter templates
|
|
256
|
+
|
|
257
|
+
Our `Omni_Route_Cases` is a custom addition — it won't collide, but it also won't be invoked by the platform automatically. To wire it into a queue's routing, register it via `service-omni-queue-routing-config-deploy` with `routing_flow_developer_name=Omni_Route_Cases`.
|
|
258
|
+
|
|
259
|
+
**Naming convention rule:** never use a Flow DeveloperName that starts with `Standard_` — reserved by Salesforce. Our skill uses `Omni_Route_<sObject>` prefix to stay clear of the standard namespace.
|
|
260
|
+
|
|
261
|
+
## Notes on API version selection
|
|
262
|
+
|
|
263
|
+
The Actions REST endpoint accepts any recent API version (`v58.0`+ has been stable for autolaunched flow invocation). The deploy script uses `sf org display --json | jq -r '.result.apiVersion'` to pick the org's current API version at runtime rather than hardcoding — this way a v70+ org gets v70 endpoints without a redeploy of the skill.
|
|
264
|
+
|
|
265
|
+
If the org's reported `apiVersion` is malformed (rare), the script falls back to `66.0` (the Flow XML's declared version).
|