@salesforce/afv-skills 1.65.0 → 1.65.1
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/field-service-data-capture-form-deployer-configure/SKILL.md +2 -23
- package/skills/field-service-data-capture-form-designer-configure/SKILL.md +3 -13
- package/skills/field-service-mobile-branding-configure/SKILL.md +3 -17
- package/skills/field-service-objective-designer-configure/SKILL.md +379 -72
- package/skills/field-service-prework-brief-deployer-configure/SKILL.md +537 -10
- package/skills/field-service-scheduling-policy-designer-query/SKILL.md +1093 -65
- package/skills/field-service-sobject-create-configure/SKILL.md +213 -13
- package/skills/field-service-voice-to-form-configure/SKILL.md +11 -40
- package/skills/field-service-work-rule-designer-configure/SKILL.md +95 -121
- package/skills/agentforce-gpt-email-generation-configure/SKILL.md +0 -312
- package/skills/agentforce-wizard-ui-forecasting-analytics-components-configure/SKILL.md +0 -64
- package/skills/agentforce-wizard-ui-sales-einstein-components-configure/SKILL.md +0 -46
- package/skills/automation-company-profile-info-query/SKILL.md +0 -51
- package/skills/automation-digital-wallet-configure/SKILL.md +0 -689
- package/skills/automation-flow-coordinate/SKILL.md +0 -95
- package/skills/automation-flow-coordinate/references/elements/action-call/action-call.md +0 -1569
- package/skills/automation-flow-coordinate/references/elements/action-call/conversation-messaging.md +0 -96
- package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-sms-message.json +0 -23
- package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-to-journey-no-fields.json +0 -31
- package/skills/automation-flow-coordinate/references/elements/action-call/send-to-journey.md +0 -179
- package/skills/automation-flow-coordinate/references/elements/exit-rule/examples/event-email-link-click.json +0 -13
- package/skills/automation-flow-coordinate/references/elements/exit-rule/exit-rule.md +0 -83
- package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/examples/forward-to-bot-or-agent.json +0 -69
- package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/forward-to-bot-or-agent.md +0 -274
- package/skills/automation-flow-coordinate/references/elements/start/audience-common.md +0 -192
- package/skills/automation-flow-coordinate/references/elements/start/automation-event-triggered.md +0 -130
- package/skills/automation-flow-coordinate/references/elements/start/data-cloud-data-change-triggered.md +0 -92
- package/skills/automation-flow-coordinate/references/elements/start/form-submission-triggered.md +0 -88
- package/skills/automation-flow-coordinate/references/elements/start/segment-triggered.md +0 -152
- package/skills/automation-flow-coordinate/references/elements/start/start.md +0 -539
- package/skills/automation-flow-coordinate/references/elements/subflow/subflow.md +0 -152
- package/skills/automation-flow-coordinate/references/elements/wait/wait.md +0 -497
- package/skills/automation-flow-coordinate/references/recipes/author/author.md +0 -868
- package/skills/automation-flow-coordinate/references/recipes/summarize/element-generic.md +0 -300
- package/skills/automation-flow-coordinate/references/recipes/summarize/reference-resolution.md +0 -292
- package/skills/automation-flow-coordinate/references/recipes/summarize/summarize.md +0 -323
- package/skills/automation-flow-coordinate/references/recipes/testing/examples/debug-output-template.md +0 -109
- package/skills/automation-flow-coordinate/references/recipes/testing/shape.md +0 -219
- package/skills/automation-flow-coordinate/references/recipes/testing/shared-stages/intent-analyzer.md +0 -180
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/debug.md +0 -175
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/promote.md +0 -255
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/save-debug.md +0 -212
- package/skills/automation-flow-coordinate/references/resources/variable/variable.md +0 -171
- package/skills/automation-flow-coordinate/references/shared/anti-patterns.md +0 -786
- package/skills/automation-flow-coordinate/references/shared/end/end.md +0 -267
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/README.md +0 -69
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/predictions.jsonl +0 -80
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/prompts.jsonl +0 -116
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/flow-type-resolver.md +0 -321
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/taxonomy.json +0 -320
- package/skills/automation-flow-coordinate/references/shared/server-functions.md +0 -597
- package/skills/automotive-cloud-appraisal-management-settings-configure/SKILL.md +0 -69
- package/skills/automotive-cloud-dealer-essentials-configure/SKILL.md +0 -78
- package/skills/automotive-cloud-ground-agent-data-pipelines-configure/SKILL.md +0 -373
- package/skills/automotive-cloud-ground-mfg-agent-data-pipelines-configure/SKILL.md +0 -273
- package/skills/automotive-cloud-mfg-agent-data-pipelines-configure/SKILL.md +0 -259
- package/skills/automotive-cloud-mfg-sales-concierge-agent-create/SKILL.md +0 -369
- package/skills/automotive-cloud-mfg-sales-concierge-foundation-configure/SKILL.md +0 -542
- package/skills/automotive-cloud-mfg-sales-concierge-foundation-coordinate/SKILL.md +0 -159
- package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-agent-create/SKILL.md +0 -349
- package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-configure/SKILL.md +0 -505
- package/skills/automotive-cloud-sales-concierge-agent-create/SKILL.md +0 -380
- package/skills/automotive-cloud-sales-concierge-foundation-configure/SKILL.md +0 -567
- package/skills/automotive-cloud-sales-concierge-foundation-coordinate/SKILL.md +0 -159
- package/skills/automotive-cloud-sales-concierge-orchestrator-agent-create/SKILL.md +0 -360
- package/skills/automotive-cloud-sales-concierge-orchestrator-configure/SKILL.md +0 -539
- package/skills/automotive-cloud-sales-concierge-search-grounding-configure/SKILL.md +0 -358
- package/skills/commerce-b2b-merchant-quote-configure/SKILL.md +0 -602
- package/skills/commerce-b2b-store-configure/SKILL.md +0 -251
- package/skills/commerce-credit-memo-create/SKILL.md +0 -139
- package/skills/commerce-delivery-business-hours-configure/SKILL.md +0 -277
- package/skills/commerce-delivery-estimation-apply/SKILL.md +0 -155
- package/skills/commerce-delivery-estimation-configure/SKILL.md +0 -377
- package/skills/commerce-delivery-routing-specs-integrate/SKILL.md +0 -174
- package/skills/commerce-estimate-bopis-query/SKILL.md +0 -279
- package/skills/commerce-estimate-delivery-date-query/SKILL.md +0 -349
- package/skills/commerce-fees-apply/SKILL.md +0 -227
- package/skills/commerce-fulfillment-routing-analyze/SKILL.md +0 -200
- package/skills/commerce-guest-buyer-create/SKILL.md +0 -173
- package/skills/commerce-location-bopis-configure/SKILL.md +0 -378
- package/skills/commerce-location-business-hours-configure/SKILL.md +0 -235
- package/skills/commerce-location-delivery-processing-time-configure/SKILL.md +0 -309
- package/skills/commerce-location-graph-integrate/SKILL.md +0 -131
- package/skills/commerce-location-shipping-carrier-method-configure/SKILL.md +0 -755
- package/skills/commerce-location-temporary-operating-hours-configure/SKILL.md +0 -331
- package/skills/commerce-merchant-buyer-groups-configure/SKILL.md +0 -579
- package/skills/commerce-merchant-buyer-user-onboarding-create/SKILL.md +0 -626
- package/skills/commerce-merchant-catalog-configure/SKILL.md +0 -614
- package/skills/commerce-merchant-extension-provider-configure/SKILL.md +0 -368
- package/skills/commerce-merchant-insights-account-health-churn-analyze/SKILL.md +0 -118
- package/skills/commerce-merchant-insights-inventory-returns-analyze/SKILL.md +0 -65
- package/skills/commerce-merchant-insights-order-shopper-get/SKILL.md +0 -90
- package/skills/commerce-merchant-insights-product-performance-analyze/SKILL.md +0 -72
- package/skills/commerce-merchant-insights-query/SKILL.md +0 -279
- package/skills/commerce-merchant-storefront-guest-access-configure/SKILL.md +0 -656
- package/skills/commerce-order-summary-change-apply/SKILL.md +0 -375
- package/skills/commerce-product-details-get/SKILL.md +0 -363
- package/skills/commerce-product-search/SKILL.md +0 -563
- package/skills/commerce-react-storefront-create/SKILL.md +0 -350
- package/skills/commerce-return-order-summary-create/SKILL.md +0 -513
- package/skills/commerce-search-relevance-analyze/SKILL.md +0 -757
- package/skills/commerce-temporary-processing-time-override-create/SKILL.md +0 -274
- package/skills/communications-initial-setup-configure/SKILL.md +0 -630
- package/skills/communications-multisite-configure/SKILL.md +0 -571
- package/skills/communications-revenue-cloud-settings-configure/SKILL.md +0 -74
- package/skills/communications-smb-fiber-catalog-create/SKILL.md +0 -413
- package/skills/communications-tmf-integrate/SKILL.md +0 -1368
- package/skills/consumer-goods-visit-activity-act4-questions-assign/SKILL.md +0 -448
- package/skills/consumer-goods-visit-activity-act5-standard-create/SKILL.md +0 -269
- package/skills/consumer-goods-visit-activity-act6-assortment-configure/SKILL.md +0 -271
- package/skills/consumer-goods-visit-activity-act7-account-scoping-create/SKILL.md +0 -382
- package/skills/consumer-goods-visit-activity-act8-plan-attach-create/SKILL.md +0 -373
- package/skills/consumer-goods-visit-activity-act9-proof-validate/SKILL.md +0 -389
- package/skills/consumer-goods-visit-and-activity-act1-specification-create/SKILL.md +0 -338
- package/skills/consumer-goods-visit-and-activity-act2-template-create/SKILL.md +0 -547
- package/skills/consumer-goods-visit-and-activity-act3-definition-create/SKILL.md +0 -346
- package/skills/consumer-goods-visit-and-activity-configure/SKILL.md +0 -1110
- package/skills/crm-analytics-adoption-insights-configure/SKILL.md +0 -224
- package/skills/crm-analytics-custom-report-type-lightning-configure/SKILL.md +0 -418
- package/skills/crm-analytics-dashboards-configure/SKILL.md +0 -731
- package/skills/crm-analytics-operational-analytics-metadata-bridge-migrate/SKILL.md +0 -233
- package/skills/crm-analytics-report-notifications-ui-configure/SKILL.md +0 -184
- package/skills/crm-analytics-sharing-inheritance-coverage-analyze/SKILL.md +0 -167
- package/skills/crm-analytics-sonic-getting-started-configure/SKILL.md +0 -55
- package/skills/crm-analytics-tableau-next-app-deploy/SKILL.md +0 -1350
- package/skills/crm-analytics-tableau-next-c360-basemodel-validate/SKILL.md +0 -1862
- package/skills/crm-analytics-tableau-next-datacloud-validate/SKILL.md +0 -83
- package/skills/crm-analytics-tableau-next-provisioning-validate/SKILL.md +0 -81
- package/skills/data360-activation-create/SKILL.md +0 -104
- package/skills/data360-activation-external-platform-get/SKILL.md +0 -49
- package/skills/data360-activation-target-create/SKILL.md +0 -93
- package/skills/data360-activation-v2-create/SKILL.md +0 -456
- package/skills/data360-audience-dmo-get/SKILL.md +0 -38
- package/skills/data360-calculated-affinity-create/SKILL.md +0 -82
- package/skills/data360-calculated-insight-create/SKILL.md +0 -148
- package/skills/data360-catalog-metadata-create/SKILL.md +0 -183
- package/skills/data360-code-extension-create/SKILL.md +0 -115
- package/skills/data360-communication-capping-create/SKILL.md +0 -227
- package/skills/data360-connection-create/SKILL.md +0 -491
- package/skills/data360-content-lens-create/SKILL.md +0 -181
- package/skills/data360-data-action-create/SKILL.md +0 -126
- package/skills/data360-data-action-target-create/SKILL.md +0 -181
- package/skills/data360-data-clean-room-create/SKILL.md +0 -238
- package/skills/data360-data-governance-create/SKILL.md +0 -746
- package/skills/data360-data-graph-create/SKILL.md +0 -82
- package/skills/data360-data-harmonized-model-object-reference-create/SKILL.md +0 -38
- package/skills/data360-data-lake-object-create/SKILL.md +0 -207
- package/skills/data360-data-model-object-catalog-get/SKILL.md +0 -49
- package/skills/data360-data-model-object-create/SKILL.md +0 -128
- package/skills/data360-data-model-object-mapping-create/SKILL.md +0 -106
- package/skills/data360-data-space-create/SKILL.md +0 -161
- package/skills/data360-data-streams-create/SKILL.md +0 -324
- package/skills/data360-engagement-signal-get/SKILL.md +0 -38
- package/skills/data360-experiment-create/SKILL.md +0 -82
- package/skills/data360-goal-based-campaign-create/SKILL.md +0 -192
- package/skills/data360-harmonization-process-history-get/SKILL.md +0 -38
- package/skills/data360-harmonized-unstructured-dmo-create/SKILL.md +0 -84
- package/skills/data360-identity-resolution-create/SKILL.md +0 -115
- package/skills/data360-intelligent-document-processing-create/SKILL.md +0 -148
- package/skills/data360-knowledge-graph-construction-create/SKILL.md +0 -93
- package/skills/data360-knowledge-graph-create/SKILL.md +0 -216
- package/skills/data360-knowledge-space-mcp-configure/SKILL.md +0 -475
- package/skills/data360-machine-learning-mcp-configure/SKILL.md +0 -697
- package/skills/data360-multi-org-mcp-configure/SKILL.md +0 -117
- package/skills/data360-secondary-index-mcp-configure/SKILL.md +0 -126
- package/skills/data360-segment-mcp-configure/SKILL.md +0 -159
- package/skills/data360-semantic-calculated-dimension-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-calculated-measurement-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-data-object-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-dimension-mcp-configure/SKILL.md +0 -38
- package/skills/data360-semantic-engine-mcp-configure/SKILL.md +0 -62
- package/skills/data360-semantic-measurement-mcp-configure/SKILL.md +0 -38
- package/skills/data360-semantic-metric-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-model-mcp-configure/SKILL.md +0 -115
- package/skills/data360-standard-mapping-mcp-configure/SKILL.md +0 -38
- package/skills/data360-tenant-lifecycle-mcp-configure/SKILL.md +0 -73
- package/skills/experience-afv-query/SKILL.md +0 -234
- package/skills/experience-agentforce-vibes-in-react-configure/SKILL.md +0 -63
- package/skills/experience-apex-components-configure/SKILL.md +0 -69
- package/skills/experience-apex-pages-configure/SKILL.md +0 -107
- package/skills/experience-app-home-configure/SKILL.md +0 -76
- package/skills/experience-aura-lightning-out-access-configure/SKILL.md +0 -58
- package/skills/experience-briefcase-configure/SKILL.md +0 -287
- package/skills/experience-community-flexi-page-list-create/SKILL.md +0 -74
- package/skills/experience-community-template-definition-list-query/SKILL.md +0 -48
- package/skills/experience-community-theme-definition-list-query/SKILL.md +0 -38
- package/skills/experience-content-assets-configure/SKILL.md +0 -86
- package/skills/experience-custom-domain-create/SKILL.md +0 -727
- package/skills/experience-defer-rendering-workspace-page-setup-configure/SKILL.md +0 -41
- package/skills/experience-field-service-app-builder-configure/SKILL.md +0 -187
- package/skills/experience-flow-category-configure/SKILL.md +0 -117
- package/skills/experience-formula-configure/SKILL.md +0 -358
- package/skills/experience-global-actions-configure/SKILL.md +0 -69
- package/skills/experience-global-publisher-layouts-configure/SKILL.md +0 -79
- package/skills/experience-instrumentation-configure/SKILL.md +0 -64
- package/skills/experience-lex-engagement-configure/SKILL.md +0 -50
- package/skills/experience-lightning-bolt-open/SKILL.md +0 -12
- package/skills/experience-lightning-out-configure/SKILL.md +0 -129
- package/skills/experience-lightning-preview-configure/SKILL.md +0 -67
- package/skills/experience-lightning-types-query/SKILL.md +0 -98
- package/skills/experience-malware-scan-configure/SKILL.md +0 -71
- package/skills/experience-my-salesforce-configure/SKILL.md +0 -126
- package/skills/experience-navigation-menus-configure/SKILL.md +0 -235
- package/skills/experience-notification-types-configure/SKILL.md +0 -206
- package/skills/experience-notifications-configure/SKILL.md +0 -75
- package/skills/experience-record-discovery-query/SKILL.md +0 -227
- package/skills/experience-regenerate-previews-open/SKILL.md +0 -94
- package/skills/experience-sales-cloud-mab-configure/SKILL.md +0 -254
- package/skills/experience-schema-builder-open/SKILL.md +0 -38
- package/skills/experience-simple-record-home-configure/SKILL.md +0 -110
- package/skills/experience-static-resources-configure/SKILL.md +0 -74
- package/skills/field-service-setup-coordinate/SKILL.md +0 -62
- package/skills/field-service-work-plan-configure/SKILL.md +0 -253
- package/skills/fsc-actionable-segmentation-settings-configure/SKILL.md +0 -180
- package/skills/fsc-digital-origination-bre-decision-matrix-foundation-create/SKILL.md +0 -196
- package/skills/fsc-digital-origination-bre-disclosures-consent-configure/SKILL.md +0 -106
- package/skills/fsc-digital-origination-bre-document-upload-configure/SKILL.md +0 -96
- package/skills/fsc-digital-origination-bre-permissions-assign/SKILL.md +0 -111
- package/skills/fsc-digital-origination-bre-setup-coordinate/SKILL.md +0 -250
- package/skills/fsc-digital-origination-bre-stp-eligibility-configure/SKILL.md +0 -122
- package/skills/fsc-digital-origination-coordinate/SKILL.md +0 -653
- package/skills/fsc-digital-origination-demo-run/SKILL.md +0 -225
- package/skills/fsc-digital-origination-execution-guardrails-validate/SKILL.md +0 -112
- package/skills/fsc-digital-origination-initial-setup-configure/SKILL.md +0 -396
- package/skills/fsc-digital-origination-pricing-setup-coordinate/SKILL.md +0 -336
- package/skills/fsc-digital-origination-pricing-setup-data-foundation-create/SKILL.md +0 -208
- package/skills/fsc-digital-origination-pricing-setup-procedure-create/SKILL.md +0 -375
- package/skills/fsc-digital-origination-product-setup-act1-permissions-assign/SKILL.md +0 -83
- package/skills/fsc-digital-origination-product-setup-coordinate/SKILL.md +0 -248
- package/skills/fsc-digital-origination-sample-data-create/SKILL.md +0 -206
- package/skills/fsc-document-checklist-settings-configure/SKILL.md +0 -57
- package/skills/fsc-flexible-hierarchy-configure/SKILL.md +0 -148
- package/skills/fsc-flexible-hierarchy-foundation-configure/SKILL.md +0 -1430
- package/skills/fsc-flexible-hierarchy-graph-config-create/SKILL.md +0 -471
- package/skills/fsc-flexible-hierarchy-rule-based-graph-deploy/SKILL.md +0 -429
- package/skills/fsc-pricing-product-configurator-configure/SKILL.md +0 -150
- package/skills/fsc-pricing-salesforce-omnistudio-switch/SKILL.md +0 -123
- package/skills/fsc-product-act2-catalog-categories-create/SKILL.md +0 -82
- package/skills/fsc-product-act3-attributes-create/SKILL.md +0 -249
- package/skills/fsc-product-act4-classification-assignment-create/SKILL.md +0 -196
- package/skills/fsc-product-act5-considerations-get/SKILL.md +0 -44
- package/skills/fsc-stage-management-apex-flow-deploy/SKILL.md +0 -384
- package/skills/fsc-stage-management-compliant-data-sharing-configure/SKILL.md +0 -144
- package/skills/fsc-stage-management-decision-matrices-create/SKILL.md +0 -107
- package/skills/fsc-stage-management-definition-assignments-create/SKILL.md +0 -189
- package/skills/fsc-stage-management-definition-create/SKILL.md +0 -108
- package/skills/fsc-stage-management-permissions-assign/SKILL.md +0 -143
- package/skills/fsc-stage-management-transitions-configure/SKILL.md +0 -139
- package/skills/health-cloud-appt-booking-config-configure/SKILL.md +0 -135
- package/skills/health-cloud-appt-booking-url-config-configure/SKILL.md +0 -134
- package/skills/health-cloud-care-provider-affl-role-config-configure/SKILL.md +0 -136
- package/skills/health-cloud-care-provider-search-config-configure/SKILL.md +0 -134
- package/skills/health-cloud-care-requests-create/SKILL.md +0 -178
- package/skills/health-cloud-initial-configure/SKILL.md +0 -511
- package/skills/health-cloud-patient-appointment-scheduling-configure/SKILL.md +0 -1374
- package/skills/health-cloud-provider-search-settings-configure/SKILL.md +0 -924
- package/skills/health-cloud-referral-management-coordinate/SKILL.md +0 -513
- package/skills/health-cloud-timeline-configure/SKILL.md +0 -622
- package/skills/health-cloud-virtual-visit-config-configure/SKILL.md +0 -135
- package/skills/industries-account-score-settings-query/SKILL.md +0 -78
- package/skills/industries-actionable-list-data-sources-dmo-configure/SKILL.md +0 -177
- package/skills/industries-ad-product-availability-search/SKILL.md +0 -399
- package/skills/industries-advanced-account-forecast-settings-configure/SKILL.md +0 -628
- package/skills/industries-advanced-therapy-management-settings-configure/SKILL.md +0 -73
- package/skills/industries-atm-settings-starter-configure/SKILL.md +0 -76
- package/skills/industries-batch-document-ai-configure/SKILL.md +0 -196
- package/skills/industries-behavioral-health-app-settings-configure/SKILL.md +0 -71
- package/skills/industries-branch-management-settings-configure/SKILL.md +0 -89
- package/skills/industries-bre-decision-table-access-configure/SKILL.md +0 -367
- package/skills/industries-brokerage-settings-configure/SKILL.md +0 -41
- package/skills/industries-calendar-sync-settings-configure/SKILL.md +0 -89
- package/skills/industries-care-request-settings-configure/SKILL.md +0 -218
- package/skills/industries-case-management-intelligence-settings-configure/SKILL.md +0 -54
- package/skills/industries-catalog-process-attributes-products-configure/SKILL.md +0 -380
- package/skills/industries-catalog-process-fulfillment-configure/SKILL.md +0 -216
- package/skills/industries-catalog-process-intake-configure/SKILL.md +0 -219
- package/skills/industries-catalog-process-knowledge-configure/SKILL.md +0 -153
- package/skills/industries-catalog-process-preprocessor-configure/SKILL.md +0 -168
- package/skills/industries-cds-general-settings-configure/SKILL.md +0 -69
- package/skills/industries-claim-financial-settings-configure/SKILL.md +0 -169
- package/skills/industries-clinical-data-model-settings-configure/SKILL.md +0 -136
- package/skills/industries-clinical-data-model-settings-starter-configure/SKILL.md +0 -105
- package/skills/industries-collection-plan-settings-configure/SKILL.md +0 -132
- package/skills/industries-comms-service-console-settings-configure/SKILL.md +0 -159
- package/skills/industries-compliance-configure/SKILL.md +0 -102
- package/skills/industries-compliance-document-extraction-setup-configure/SKILL.md +0 -76
- package/skills/industries-contact-center-app-layout-configure/SKILL.md +0 -88
- package/skills/industries-contact-center-components-configure/SKILL.md +0 -96
- package/skills/industries-contact-center-path-knowledge-configure/SKILL.md +0 -95
- package/skills/industries-contact-center-user-access-assign/SKILL.md +0 -96
- package/skills/industries-course-waitlist-config-configure/SKILL.md +0 -162
- package/skills/industries-crisis-center-settings-configure/SKILL.md +0 -84
- package/skills/industries-custom-object-settings-configure/SKILL.md +0 -94
- package/skills/industries-data-cloud-integration-configure/SKILL.md +0 -88
- package/skills/industries-data-space-feature-mappings-configure/SKILL.md +0 -245
- package/skills/industries-decision-matrix-builder-configure/SKILL.md +0 -78
- package/skills/industries-decision-table-hbase-configure/SKILL.md +0 -87
- package/skills/industries-decision-table-version-configure/SKILL.md +0 -74
- package/skills/industries-decision-tables-builder-configure/SKILL.md +0 -253
- package/skills/industries-decision-tables-configure/SKILL.md +0 -439
- package/skills/industries-energy-utilities-configure/SKILL.md +0 -251
- package/skills/industries-eu-cloud-multisite-configure/SKILL.md +0 -1008
- package/skills/industries-eu-new-connections-configure/SKILL.md +0 -30
- package/skills/industries-explainability-msg-template-configure/SKILL.md +0 -135
- package/skills/industries-expression-set-message-token-configure/SKILL.md +0 -135
- package/skills/industries-field-service-settings-configure/SKILL.md +0 -82
- package/skills/industries-form-framework-settings-configure/SKILL.md +0 -30
- package/skills/industries-fsc-ai-settings-configure/SKILL.md +0 -57
- package/skills/industries-fsc-association-engine-settings-configure/SKILL.md +0 -172
- package/skills/industries-fsc-b2b-settings-configure/SKILL.md +0 -61
- package/skills/industries-fsc-insurance-settings-configure/SKILL.md +0 -58
- package/skills/industries-fsc-visa-fulfillment-setup-configure/SKILL.md +0 -103
- package/skills/industries-fsc-wealth-agent-settings-configure/SKILL.md +0 -117
- package/skills/industries-fsc-wealth-settings-configure/SKILL.md +0 -99
- package/skills/industries-fundraising-gift-entry-settings-configure/SKILL.md +0 -120
- package/skills/industries-fundraising-rfm-configure/SKILL.md +0 -128
- package/skills/industries-fundraising-settings-configure/SKILL.md +0 -145
- package/skills/industries-fundraising-source-code-gen-configure/SKILL.md +0 -299
- package/skills/industries-google-maps-api-key-settings-configure/SKILL.md +0 -87
- package/skills/industries-grantmaking-intelligence-settings-open/SKILL.md +0 -58
- package/skills/industries-hc-score-category-settings-configure/SKILL.md +0 -167
- package/skills/industries-health-engagement-settings-configure/SKILL.md +0 -218
- package/skills/industries-home-health-agentforce-setup-configure/SKILL.md +0 -131
- package/skills/industries-home-health-bundling-policy-create/SKILL.md +0 -50
- package/skills/industries-home-health-entity-labels-configure/SKILL.md +0 -29
- package/skills/industries-home-health-fsl-package-deploy/SKILL.md +0 -71
- package/skills/industries-home-health-fsl-settings-validate/SKILL.md +0 -27
- package/skills/industries-home-health-guided-setup-care-and-skill-get/SKILL.md +0 -80
- package/skills/industries-home-health-guided-setup-configure/SKILL.md +0 -836
- package/skills/industries-home-health-guided-setup-enable-org-fsl-get/SKILL.md +0 -55
- package/skills/industries-home-health-guided-setup-get-org-ready-get/SKILL.md +0 -61
- package/skills/industries-home-health-licenses-assign/SKILL.md +0 -27
- package/skills/industries-home-health-operating-hours-create/SKILL.md +0 -40
- package/skills/industries-home-health-scheduling-policy-create/SKILL.md +0 -41
- package/skills/industries-home-health-service-objective-create/SKILL.md +0 -22
- package/skills/industries-home-health-skills-create/SKILL.md +0 -31
- package/skills/industries-home-health-users-create/SKILL.md +0 -29
- package/skills/industries-icm-act3-toggles-configure/SKILL.md +0 -198
- package/skills/industries-icm-act5-genai-suggested-assessments-configure/SKILL.md +0 -361
- package/skills/industries-icm-act6-mcg-integration-configure/SKILL.md +0 -550
- package/skills/industries-integrated-care-management-configure/SKILL.md +0 -168
- package/skills/industries-object-enablement-configure/SKILL.md +0 -86
- package/skills/industries-tpm-system-processing-service-configure/SKILL.md +0 -64
- package/skills/integration-apex-settings-configure/SKILL.md +0 -61
- package/skills/marketing-e360-email-archiving-configure/SKILL.md +0 -73
- package/skills/platform-custom-permissions-configure/SKILL.md +0 -687
- package/skills/platform-label-workbench-import-create/SKILL.md +0 -67
- package/skills/platform-privacy-agent-settings-configure/SKILL.md +0 -752
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: industries-catalog-process-intake-configure
|
|
3
|
-
description: "Use this skill when users want to cHILD of the create-unified-catalog-service-process orchestrator — one configuration pass over a service process that ALREADY EXISTS. Trigger when users mention configure, unified, catalog, service, process, intake, automation, connect, api, service-automation-connect-api."
|
|
4
|
-
metadata:
|
|
5
|
-
version: "1.0"
|
|
6
|
-
accessCheck: "IndustriesEpc.orgHasUnifiedCatalog"
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Managing Configure Unified Catalog Service Process Intake
|
|
10
|
-
|
|
11
|
-
## When to Use This Skill
|
|
12
|
-
|
|
13
|
-
CHILD of the create-unified-catalog-service-process orchestrator — one configuration pass over a service process that ALREADY EXISTS. Run standalone against an existing process (supply its catalogItemId), or as the phase that orchestrator routes to; for a NEW end-to-end process start at create-unified-catalog-service-process, which asks the creation fork FIRST.
|
|
14
|
-
Use this when an admin wants to add or swap the intake form (request form) on a service process — e.g. "generate a Flow intake form for my order-replacement process" or "attach my existing OmniScript to this service process". DONE when a Flow or OmniScript surface is bound to the process and reads back on the verify GET with the anchor still intact. Org-gated on Unified Catalog. Two user decisions drive the branch — surface type (Flow / OmniScript) and mode (generate-new / attach-existing) — both enforced in preconditions and choice_points; step mechanics and the DETACH TRAP are in agent_guidance and step assertions.
|
|
15
|
-
|
|
16
|
-
## Critical Constraints
|
|
17
|
-
|
|
18
|
-
**Preconditions:**
|
|
19
|
-
|
|
20
|
-
- Org must have Unified Catalog enabled.
|
|
21
|
-
(check: `Unified Product Catalog enabled`)
|
|
22
|
-
- HARD CONSTRAINT — the service process must ALREADY EXIST and its catalogItemId (== productId) must be known before this workflow runs. The first step (resolve-catalog-item) GETs the item to confirm it exists and is usedFor=ServiceProcess before any write; a 404 there means the id is wrong or the process was never created — the process must be created first, then re-run here with its catalogItemId.
|
|
23
|
-
(check: `process_exists_with_known_catalog_item_id`)
|
|
24
|
-
- HARD CONSTRAINT — a service process should have its intake ATTRIBUTES saved before a surface is generated. generate-intake-form-flow builds the surface FROM the process's saved attributes; generating against a process with no attributes yields an empty form, and a malformed attribute can make generation fail. Confirm the process has its attributes (GET the item and check sections[] is non-empty) before choosing generate-new. If generation fails on a malformed attribute, the fix is on the process's attribute definitions, not in this workflow. Attach-existing is unaffected by this — it binds a pre-built surface.
|
|
25
|
-
(check: `attributes_saved_before_generate`)
|
|
26
|
-
- HARD CONSTRAINT — the SURFACE TYPE (Flow vs OmniScript) MUST be elicited from the user, never defaulted. It changes which generate endpoint / list endpoint is used and the `type` sent when binding. Do NOT assume Flow.
|
|
27
|
-
(check: `user_has_chosen_surface_type`)
|
|
28
|
-
- HARD CONSTRAINT — the MODE (generate a new surface vs attach an existing one) MUST be elicited from the user, never defaulted. Generate-new mints a fresh surface from the saved attributes; attach-existing binds a surface the org already has. Ask which one.
|
|
29
|
-
(check: `user_has_chosen_intake_mode`)
|
|
30
|
-
- HARD CONSTRAINT — GENERATE-NEW is supported for Flow ONLY. An OmniScript intake surface can only be ATTACHED from an OmniScript that already exists in the org (attach-existing); there is no supported generate-new-OmniScript path in this workflow (getting OmniScript generation working requires changes in the OmniScript Builder and the Unified Catalog headless design-time experience, out of scope here). If the user chose surface-type Omniscript, the mode MUST be attach-existing — do NOT attempt to generate an OmniScript.
|
|
31
|
-
(check: `omniscript_is_attach_existing_only`)
|
|
32
|
-
- HARD CONSTRAINT (attach-existing only) — the surface to attach MUST be a real id taken from the matching list step (list-screen-flows for Flow, list-omniscript-records for OmniScript) for THIS org. Never guess or hand-construct a Flow/OmniScript id. List the eligible surfaces, let the user pick one, and bind that exact id as intakeForm.intakeFormId.
|
|
33
|
-
(check: `attached_surface_is_a_real_listed_id`)
|
|
34
|
-
- HARD CONSTRAINT (every branch — the bind runs in generate-new AND attach-existing) — binding via patchCatalogItemGet with operationType:"Update" is a FULL overwrite: it MUST re-send the item's identity fields (targetObject, name, usedFor, isActive). Omitting targetObject CLEARS the anchor (it reads back absent on the next GET, NOT reset to a default) even after it was set at create time. The bind PATCH always carries these four fields; the verify GET confirms the anchor is unchanged.
|
|
35
|
-
(check: `bind_patch_resends_anchor_identity_fields`)
|
|
36
|
-
- HARD CONSTRAINT — if the process ALREADY HAS a surface bound (resolve-catalog-item returned a non-empty intakeForm.intakeFormId), binding a new one REPLACES it: the old surface is unbound (and, for a just-generated surface, the previous one is left orphaned in the org). This is a destructive swap of a live request form. CONFIRM with the user before binding — show the currently-bound surface (existing_intake_form_surface / existing_intake_form_type) and ask whether to replace it. If the item has no surface bound, this is a first attach and no confirmation is needed. This applies to EVERY branch, because the replacement always happens at bind-existing-surface (which runs in both generate-new and attach-existing), never at the generate step: a generate call on an already-bound item does NOT overwrite the binding on its own — it mints an orphan surface and leaves the old binding in place; only the follow-up bind performs the swap, which is exactly why the confirmation gates the bind, in whichever mode reached it.
|
|
37
|
-
(check: `replace_existing_surface_confirmed`)
|
|
38
|
-
|
|
39
|
-
**Operational rules:**
|
|
40
|
-
|
|
41
|
-
- MUST-DO CONTRACT (read before executing — each rule is enforced by the named precondition/step; do NOT skip because the detail is further down):
|
|
42
|
-
1. CONFIRM the process exists first — run resolve-catalog-item (GET) and capture its
|
|
43
|
-
identity fields (name, usedFor, isActive, targetObject) and current intakeForm.id.
|
|
44
|
-
A 404 means the catalogItemId is wrong; do NOT proceed.
|
|
45
|
-
[precondition: process_exists_with_known_catalog_item_id]
|
|
46
|
-
2. ELICIT BOTH decisions up front: surface type (Flow / OmniScript) and mode
|
|
47
|
-
(generate-new / attach-existing). Never default either.
|
|
48
|
-
[preconditions: user_has_chosen_surface_type, user_has_chosen_intake_mode]
|
|
49
|
-
3. GENERATE-NEW (FLOW ONLY): call generate-intake-form-flow with the process's productId
|
|
50
|
-
(== catalogItemId) to mint a Flow (type=Flow) FROM the saved attributes; it returns the
|
|
51
|
-
id but does NOT reliably attach it — you MUST then run bind-existing-surface with the
|
|
52
|
-
returned id to attach it. Confirm the process has attributes first. OmniScript has NO
|
|
53
|
-
generate-new path — use attach-existing for OmniScript.
|
|
54
|
-
[preconditions: attributes_saved_before_generate, omniscript_is_attach_existing_only]
|
|
55
|
-
4. ATTACH-EXISTING: list via the matching step (list-screen-flows — the UIAPI GraphQL
|
|
56
|
-
FlowRecord query the UI itself uses — for Flow; list-omniscript-records for
|
|
57
|
-
OmniScript), present the COMPLETE set as numbered text, let the user type their pick,
|
|
58
|
-
then bind that exact id via bind-existing-surface. For a Flow, bind the
|
|
59
|
-
node.FlowDefinition.value (300-prefix definition id), NOT the 2aF version-view id.
|
|
60
|
-
[precondition: attached_surface_is_a_real_listed_id]
|
|
61
|
-
5. The bind PATCH is a FULL overwrite — ALWAYS re-send targetObject + name + usedFor +
|
|
62
|
-
isActive, and carry the existing intakeForm.id forward, or the anchor is CLEARED
|
|
63
|
-
(reads back absent, not reset to a default) and/or a previously attached surface detaches.
|
|
64
|
-
[precondition: bind_patch_resends_anchor_identity_fields]
|
|
65
|
-
6. IF a surface is ALREADY BOUND (resolve-catalog-item.existing_intake_form_surface is
|
|
66
|
-
non-empty), binding replaces it — the old surface is unbound (generate-new also leaves
|
|
67
|
-
the freshly minted one orphaned until bind swaps it). This is a destructive swap of a
|
|
68
|
-
live request form: show the user the currently-bound surface and CONFIRM before binding.
|
|
69
|
-
First attach (no surface bound) needs no confirmation.
|
|
70
|
-
[precondition: replace_existing_surface_confirmed]
|
|
71
|
-
7. VERIFY: GET the item and confirm intakeForm.intakeFormId + intakeForm.type are the
|
|
72
|
-
chosen surface AND targetObject is unchanged. [step: verify-intake]
|
|
73
|
-
- ASK MODALITY: use a structured picker for the two small bounded choices (surface type, mode). For the attach-existing surface list (Flows / OmniScripts), which is unbounded, list the COMPLETE set as numbered text (name, apiName/uniqueName, id) and let the user type their selection; PRESENT smartly — match a named target locally, list a small set in full, and narrow a large one (typed name or a recent top slice) rather than dumping every row. The Flow list is a paged GraphQL query (first:2000 + pageInfo.hasNextPage/endCursor) — page through to completeness before asking.
|
|
74
|
-
TIMING: ask surface type + mode up front (they select the branch), then run only the steps that apply to the chosen branch (the rest are guarded by applies_when).
|
|
75
|
-
BRANCHES (2 modes × N surface types — exactly one surface-source path runs, then a common bind):
|
|
76
|
-
- generate-new (FLOW ONLY): call generate-intake-form-flow to MINT the Flow (it returns the
|
|
77
|
-
id but does not reliably attach). OmniScript has no generate-new path.
|
|
78
|
-
- attach-existing: call the surface-specific lister and let the user pick. Flow ->
|
|
79
|
-
list-screen-flows; OmniScript -> list-omniscript-records.
|
|
80
|
-
Both modes then converge on bind-existing-surface (the single attach step, runs in every branch) with the surface id + type, and end with verify-intake. EXTENDING to a new surface type (e.g. a future LWC form): add it to choice_points[surface-type].options, add its own generator + lister steps (each guarded by applies_when on the new surface-type value), and ensure bind-existing-surface.surfaceType accepts the new wire value. No change to the mode logic, the anchor handling, or verify.
|
|
81
|
-
|
|
82
|
-
## Verification Checklist
|
|
83
|
-
|
|
84
|
-
After every write operation, confirm the effect by re-reading state:
|
|
85
|
-
|
|
86
|
-
- After `resolve-catalog-item`, `generate-intake-form-flow`, `bind-existing-surface`: call `verify-intake` (`GET /connect/service-automation/catalog/catalog-item/{catalogItemId}`)
|
|
87
|
-
|
|
88
|
-
## Operations Reference
|
|
89
|
-
|
|
90
|
-
Operations grouped by purpose. Use these as the building blocks for the workflows above.
|
|
91
|
-
|
|
92
|
-
### Summary
|
|
93
|
-
|
|
94
|
-
| Operation | Purpose | Status | Call | Depends on |
|
|
95
|
-
|-----------|---------|--------|------|------------|
|
|
96
|
-
| `resolve-catalog-item` | read | implemented | `GET /connect/service-automation/catalog/catalog-item/{catalogItemId}` | — |
|
|
97
|
-
| `generate-intake-form-flow` | write | implemented | `POST /connect/service-automation/intake-form/generate-intake-form` | `resolve-catalog-item` |
|
|
98
|
-
| `list-screen-flows` | read | implemented | `queryScreenFlows` | `resolve-catalog-item` |
|
|
99
|
-
| `list-omniscript-records` | read | proposed | `GET /headless/invoke/platform/service-process-wizard-setup/get-omniscript-records` | `resolve-catalog-item` |
|
|
100
|
-
| `bind-existing-surface` | write | implemented | `PATCH /connect/service-automation/catalog/catalog-item/{catalogItemId}` | `resolve-catalog-item`, `generate-intake-form-flow`, `list-screen-flows`, `list-omniscript-records` |
|
|
101
|
-
| `verify-intake` | verify | implemented | `GET /connect/service-automation/catalog/catalog-item/{catalogItemId}` | `resolve-catalog-item`, `generate-intake-form-flow`, `bind-existing-surface` |
|
|
102
|
-
|
|
103
|
-
### Dependency graph
|
|
104
|
-
|
|
105
|
-
```mermaid
|
|
106
|
-
graph TD
|
|
107
|
-
resolve_catalog_item["resolve-catalog-item (read)"]
|
|
108
|
-
generate_intake_form_flow["generate-intake-form-flow (write)"]
|
|
109
|
-
list_screen_flows["list-screen-flows (read)"]
|
|
110
|
-
list_omniscript_records["list-omniscript-records (read)"]
|
|
111
|
-
bind_existing_surface["bind-existing-surface (write)"]
|
|
112
|
-
verify_intake["verify-intake (verify)"]
|
|
113
|
-
resolve_catalog_item --> generate_intake_form_flow
|
|
114
|
-
resolve_catalog_item --> list_screen_flows
|
|
115
|
-
resolve_catalog_item --> list_omniscript_records
|
|
116
|
-
resolve_catalog_item --> bind_existing_surface
|
|
117
|
-
generate_intake_form_flow --> bind_existing_surface
|
|
118
|
-
list_screen_flows --> bind_existing_surface
|
|
119
|
-
list_omniscript_records --> bind_existing_surface
|
|
120
|
-
resolve_catalog_item --> verify_intake
|
|
121
|
-
generate_intake_form_flow --> verify_intake
|
|
122
|
-
bind_existing_surface --> verify_intake
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### Read operations
|
|
126
|
-
|
|
127
|
-
#### `resolve-catalog-item`
|
|
128
|
-
|
|
129
|
-
CONFIRM + CAPTURE — GET the existing service process to prove it exists and to capture the identity fields the later bind must re-send. Fails fast (404) if the catalogItemId is wrong or the process was never created. Capture name, usedFor, isActive, targetObject (the anchor) and the current intakeForm.id (the container minted at create time) — the bind step carries these forward to avoid the DETACH TRAP.
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
**Call:** `GET /connect/service-automation/catalog/catalog-item/{catalogItemId}` — status: `implemented`
|
|
133
|
-
|
|
134
|
-
**Inputs:**
|
|
135
|
-
|
|
136
|
-
- `catalogItemId` *(`String`)* — The catalogItemId (== productId) of the EXISTING service process. If the user does not have it, the process must be created first before this workflow can run.
|
|
137
|
-
|
|
138
|
-
#### `list-screen-flows`
|
|
139
|
-
|
|
140
|
-
ATTACH-EXISTING, FLOW — list the org's active Screen Flows via UIAPI GraphQL: FlowRecord filtered to FlowType=="Screen" AND ProgressStatus=="InProgress" (InProgress is the active-version state). Present the COMPLETE set as numbered text (Name, FlowRecord_ApiName, and the bindable definition id) and let the user type their pick; page via pageInfo.endCursor (first:2000 + hasNextPage) — PRESENT smartly: if the user already NAMED the target, match it in the fetched set and show only the matches; if the set is small (≤ ~25) list it all as numbered text; if it is large, do NOT dump every row — show the most-recently-modified top slice (or ask a narrowing keyword) and invite the user to type a name to search (the full set is already fetched, so the local match stays exact). TARGETED LOOKUP: when the user has already NAMED the flow, add a label predicate to the where filter — {FlowLabel: {like: "%<name>%"}}, AND-combined with the FlowType/ProgressStatus filters above — to fetch just the matches in ONE call instead of paging the whole list; fall back to the full paged listing only when no name was given or the filtered query returns nothing. The list is org-specific — take it from this call, never a fixed list. ID TO BIND: the node.Id here is the FlowRecord (version-view) id (2aF… prefix). The id the catalog-item bind wants as intakeForm.intakeFormId is the FLOW DEFINITION id (300… prefix) — the same shape the generate path returns. Read it from node.FlowDefinition.value; for org-authored flows it is populated (a 300-prefixed FlowDefinition id). Managed-package standard flows show FlowDefinition==null and are generally not offered as custom intake surfaces; prefer flows with a non-null FlowDefinition.value.
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
**Call:** `queryScreenFlows` — status: `implemented`
|
|
144
|
-
|
|
145
|
-
**Depends on:** `resolve-catalog-item`
|
|
146
|
-
|
|
147
|
-
#### `list-omniscript-records`
|
|
148
|
-
|
|
149
|
-
ATTACH-EXISTING, OMNISCRIPT — list the OmniScripts selectable as a service-process intake surface. Present the COMPLETE set as numbered text (name, uniqueName, type/subType, id) and let the user type their pick; PRESENT smartly — match a named target locally, list a small set in full, and narrow a large one (typed name or a recent top slice) rather than dumping every row. TARGETED LOOKUP: this controller returns the full active set with NO server-side name filter, so when the user has already NAMED the OmniScript, match it by name/uniqueName in the returned array and offer just those rows rather than making the user scroll the whole list. The chosen record's id becomes intakeForm.intakeFormId on the bind.
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
**Call:** `GET /headless/invoke/platform/service-process-wizard-setup/get-omniscript-records` — status: `proposed`
|
|
153
|
-
|
|
154
|
-
**Depends on:** `resolve-catalog-item`
|
|
155
|
-
|
|
156
|
-
### Write operations
|
|
157
|
-
|
|
158
|
-
#### `generate-intake-form-flow`
|
|
159
|
-
|
|
160
|
-
GENERATE-NEW, FLOW — mint a new Screen Flow request form from the process's saved attributes. Sends {name, description, productId, type:"Flow"}; the server builds the Flow from the item's sections/attributes and returns 201 with the new Flow definition id (300-prefix). ATTACH IS NOT GUARANTEED BY GENERATE: the mint call does NOT reliably leave the Flow bound to the item — a follow-up bind PATCH (see bind-existing-surface) is required, passing the returned 300-prefix id as intakeForm.intakeFormId with type:"Flow" and re-sending the anchor identity fields (DETACH TRAP). Requires the process to already have its attributes saved (see the attributes_saved_before_generate precondition). PRODUCT-COLLECTION PRECONDITION: if the process uses a product collection, that collection must already sit on its own dedicated ProductRequestSection layout page BEFORE generating (see configure-unified-catalog-service-process-attributes-and-product-collection) — a collection left on the attribute section or in the unplaced bucket generates a Flow with NO product-selection screen.
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
**Call:** `POST /connect/service-automation/intake-form/generate-intake-form` — status: `implemented`
|
|
164
|
-
|
|
165
|
-
**Inputs:**
|
|
166
|
-
|
|
167
|
-
- `productId` *(`String`)* — The catalogItemId (== productId) of the process to generate the Flow for.
|
|
168
|
-
- `name` *(`String`)* — Human-readable name for the generated intake Flow (the request-form label). Elicit it; do not default silently.
|
|
169
|
-
|
|
170
|
-
- `description` *(`String`)* — Description of the intake Flow. The Generate Intake Form UI marks this REQUIRED (Form Title + Description are both mandatory in the wizard) — elicit it, do not send empty.
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
**Depends on:** `resolve-catalog-item`
|
|
174
|
-
|
|
175
|
-
**Rollback:** Generate only MINTS the Flow; if bind-existing-surface has since attached it, detach via patchCatalogItemGet with intakeForm operationType semantics (see bind-existing-surface — re-send the anchor identity fields); the intake-form resource has no DELETE. If bind has not run, the minted Flow is orphaned metadata. Either way the Flow metadata itself is cleaned up through Flow tooling, not this API.
|
|
176
|
-
|
|
177
|
-
#### `bind-existing-surface`
|
|
178
|
-
|
|
179
|
-
BIND — attach a Flow/OmniScript surface to the process via patchCatalogItemGet, sending intakeForm:{id:<existing container id>, intakeFormId:<surface id>, operationType:"Update", type:<Flow|Omniscript>}. This is the SINGLE attach mechanism for ALL branches: in generate-new it binds the surface the generate step just minted (generate does NOT auto-attach); in attach-existing it binds the surface the user picked from a list. DETACH TRAP: operationType:"Update" is a FULL overwrite — this PATCH MUST also re-send the item's identity fields (targetObject, name, usedFor, isActive), sourced from resolve-catalog-item. Omitting targetObject CLEARS the anchor (it reads back absent, not reset to a default); omitting name/usedFor clears them too. Carry resolve-catalog-item.intake_form_id forward as intakeForm.id when the item already has a container (it does, if create provisioned one); omit it only if resolve-catalog-item returned no intakeForm.id. REPLACE GUARD: if resolve-catalog-item.existing_intake_form_surface is non-empty, this bind REPLACES the currently-bound surface — confirm the swap with the user first [precondition: replace_existing_surface_confirmed].
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
**Call:** `PATCH /connect/service-automation/catalog/catalog-item/{catalogItemId}` — status: `implemented`
|
|
183
|
-
|
|
184
|
-
**Inputs:**
|
|
185
|
-
|
|
186
|
-
- `catalogItemId` *(`String`)* — The catalogItemId (== productId) of the process to bind the surface to.
|
|
187
|
-
- `intakeFormSurfaceId` *(`String`)* — The surface id to bind, sourced by mode. GENERATE-NEW (FLOW ONLY): the id returned by generate-intake-form-flow.intake_form_id (a 300-prefix Flow definition id). ATTACH-EXISTING: the user's pick — for a Flow, node.FlowDefinition.value (300-prefix definition id) from list-screen-flows.flow_definition_ids; for an OmniScript, an id from list-omniscript-records.omniscript_ids. In every case it MUST be a real id from the generate response or the org's list, never hand-constructed, and for Flow it must be the definition id (300…), NOT the 2aF version-view id. Sent as intakeForm.intakeFormId.
|
|
188
|
-
|
|
189
|
-
- **Source:** output of `list-screen-flows`, `list-omniscript-records`
|
|
190
|
-
- `surfaceType` *(`String`)* — "Flow" or "Omniscript" (note the lower-case s on the wire) — the chosen surface type. Sent as intakeForm.type.
|
|
191
|
-
|
|
192
|
-
- `containerId` *(`String`)* — The existing intake container id (intakeForm.id) from resolve-catalog-item, carried forward as intakeForm.id so the Update does not orphan the container. Omit only when resolve-catalog-item returned no intakeForm.id.
|
|
193
|
-
|
|
194
|
-
- **Source:** output of `resolve-catalog-item`
|
|
195
|
-
- `targetObject` *(`String`)* — The anchor object — a CLOSED enum accepting only Case, Incident, or ServiceRequest. Re-sent to avoid the DETACH TRAP [precondition: bind_patch_resends_anchor_identity_fields]. Take the value from resolve-catalog-item, never a fixed assumption.
|
|
196
|
-
|
|
197
|
-
- **Source:** output of `resolve-catalog-item`
|
|
198
|
-
- `name` *(`String`)* — The process name — re-sent to preserve identity on this full-overwrite Update.
|
|
199
|
-
- `usedFor` *(`String`)* — The usedFor value (ServiceProcess) — re-sent to preserve identity.
|
|
200
|
-
- `isActive` *(`Boolean`)* — The isActive flag — re-sent to preserve identity.
|
|
201
|
-
|
|
202
|
-
**Depends on:** `resolve-catalog-item`, `generate-intake-form-flow`, `list-screen-flows`, `list-omniscript-records`
|
|
203
|
-
|
|
204
|
-
**Rollback:** To unbind, re-invoke patchCatalogItemGet clearing/replacing intakeForm.intakeFormId (or binding a different surface), always re-sending the anchor identity fields. The catalog-item resource has no DELETE method.
|
|
205
|
-
|
|
206
|
-
### Verify operations
|
|
207
|
-
|
|
208
|
-
#### `verify-intake`
|
|
209
|
-
|
|
210
|
-
Read the process back and confirm the intake surface is bound and the anchor held. Works for every branch — generate-new (Flow) and attach-existing (Flow or OmniScript).
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
**Call:** `GET /connect/service-automation/catalog/catalog-item/{catalogItemId}` — status: `implemented`
|
|
214
|
-
|
|
215
|
-
**Inputs:**
|
|
216
|
-
|
|
217
|
-
- `catalogItemId` *(`String`)* — The catalogItemId (== productId) of the process to verify.
|
|
218
|
-
|
|
219
|
-
**Depends on:** `resolve-catalog-item`, `generate-intake-form-flow`, `bind-existing-surface`
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: industries-catalog-process-knowledge-configure
|
|
3
|
-
description: "Use this skill when users want to cHILD of the create-unified-catalog-service-process orchestrator — one configuration pass over a service process that ALREADY EXISTS. Trigger when users mention configure, unified, catalog, service, process, knowledge, automation, connect, api, service-automation-connect-api."
|
|
4
|
-
metadata:
|
|
5
|
-
version: "1.0"
|
|
6
|
-
accessCheck: "IndustriesEpc.orgHasUnifiedCatalog"
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Managing Configure Unified Catalog Service Process Knowledge
|
|
10
|
-
|
|
11
|
-
## When to Use This Skill
|
|
12
|
-
|
|
13
|
-
CHILD of the create-unified-catalog-service-process orchestrator — one configuration pass over a service process that ALREADY EXISTS. Run standalone against an existing process (supply its catalogItemId), or as the phase that orchestrator routes to; for a NEW end-to-end process start at create-unified-catalog-service-process, which asks the creation fork FIRST.
|
|
14
|
-
Use this when an admin wants to add (or remove) the Knowledge articles shown on a service process that ALREADY EXISTS — e.g. "attach the reimbursement-policy article to this service process". DONE when the chosen articles read back in associatedArticles on the verify GET with the anchor still intact. Org-gated on Unified Catalog. This attaches EXISTING published articles; it does not author or publish an article. associatedArticles is a DELTA list: send ONLY the change — a new article as operationType:"Create", a removal as operationType:"Delete" carrying that article's association id — never re-send the already-attached ones (re-sending an attached article as "Create" is rejected 400 "already attached"). DETACH-TRAP handling and the delta-list rules are in agent_guidance and step assertions.
|
|
15
|
-
|
|
16
|
-
## Critical Constraints
|
|
17
|
-
|
|
18
|
-
**Preconditions:**
|
|
19
|
-
|
|
20
|
-
- Org must have Unified Catalog enabled.
|
|
21
|
-
(check: `Unified Product Catalog enabled`)
|
|
22
|
-
- HARD CONSTRAINT — the service process must ALREADY EXIST and its catalogItemId (== productId) must be known before this workflow runs. The first step (resolve-catalog-item) GETs the item to confirm it exists and is usedFor=ServiceProcess before any write; a 404 there means the id is wrong or the process was never created — the process must be created first, then re-run here with its catalogItemId.
|
|
23
|
-
(check: `process_exists_with_known_catalog_item_id`)
|
|
24
|
-
- HARD CONSTRAINT — each article to associate MUST be a real KnowledgeArticleId taken from the list step (list-knowledge-articles) for THIS org. Never guess or hand-construct an article id. Only PUBLISHED (Online) articles are listable/associable. List the eligible articles, let the user pick one or more, and bind those exact ids.
|
|
25
|
-
(check: `attached_article_is_a_real_listed_id`)
|
|
26
|
-
- HARD CONSTRAINT — associatedArticles on patchCatalogItemGet is a DELTA list, NOT a full replacement. Send ONLY the entries that change; the articles already attached stay attached without being re-sent. To ADD an article, send just that one as operationType:"Create". To REMOVE one, send just that one as operationType:"Delete" carrying its association id (the associatedArticles[].id from resolve-catalog-item — a 1WK-prefix id; a Delete without that id is rejected). Do NOT re-send an already-attached article as "Create" — it is rejected 400 "This article is already attached to this record". (An already-attached article re-sent as "Update" does NOT error but CHURNS its association id — the 1WK id is replaced with a fresh one; the end set is unchanged but any 1WK id captured earlier goes stale. Never treat an association id as durable across a re-Update; always re-read it from a fresh GET before a Delete.) Confirm the final set on the verify GET.
|
|
27
|
-
(check: `bind_sends_only_changed_articles`)
|
|
28
|
-
- HARD CONSTRAINT — patchCatalogItemGet overwrites the item's scalar identity: the bind MUST re-send the item's identity fields (targetObject, name, usedFor, isActive). Omitting targetObject CLEARS the anchor — it reads back absent on the next GET, not reset to a default, even after it was set at create time. The intakeForm block is ALSO a full overwrite: sending it with only {id, operationType:Update} preserves the container but WIPES the bound surface (intakeFormId + type disappear). When the item has an intake surface, the bind MUST re-send intakeForm.intakeFormId AND intakeForm.type alongside the container id, not just the id. The bind PATCH always carries the four identity fields and re-sends the FULL intakeForm (id + intakeFormId + type) when one exists; the verify GET confirms the anchor and intake surface are intact.
|
|
29
|
-
(check: `bind_patch_resends_anchor_identity_fields`)
|
|
30
|
-
|
|
31
|
-
**Operational rules:**
|
|
32
|
-
|
|
33
|
-
- MUST-DO CONTRACT (read before executing — each rule is enforced by the named precondition/step; do NOT skip because the detail is further down):
|
|
34
|
-
1. CONFIRM the process exists first — run resolve-catalog-item (GET) and capture its
|
|
35
|
-
identity fields (name, usedFor, isActive, targetObject), its current intakeForm.id,
|
|
36
|
-
and its CURRENT associatedArticles[] — each entry is {id, knowledgeArticleId}; the
|
|
37
|
-
association id (1WK-prefix) is required to REMOVE that article later. A 404 means the
|
|
38
|
-
catalogItemId is wrong; do NOT proceed.
|
|
39
|
-
[precondition: process_exists_with_known_catalog_item_id]
|
|
40
|
-
2. LIST the org's PUBLISHED (Online) Knowledge articles via list-knowledge-articles,
|
|
41
|
-
present the COMPLETE set as numbered text (Title, KnowledgeArticleId), and let the
|
|
42
|
-
user pick one or more. [precondition: attached_article_is_a_real_listed_id]
|
|
43
|
-
3. BIND via patchCatalogItemGet sending ONLY the change — associatedArticles is a DELTA
|
|
44
|
-
list, not a full replacement: send each NEWLY chosen article as operationType:"Create"
|
|
45
|
-
(its knowledgeArticleId only); to REMOVE an article, send just that one as
|
|
46
|
-
operationType:"Delete" carrying its association id from resolve-catalog-item. Do NOT
|
|
47
|
-
re-send the already-attached articles — they stay attached, and re-sending an attached
|
|
48
|
-
one as "Create" is rejected 400 "already attached".
|
|
49
|
-
[precondition: bind_sends_only_changed_articles]
|
|
50
|
-
4. The bind PATCH is a FULL overwrite of the ITEM's scalar identity — ALWAYS re-send
|
|
51
|
-
targetObject + name + usedFor + isActive. The intakeForm block is ALSO a full overwrite:
|
|
52
|
-
when the item has an intake surface, re-send the FULL block — intakeForm.id AND
|
|
53
|
-
intakeForm.intakeFormId AND intakeForm.type (operationType:Update). Sending only {id}
|
|
54
|
-
preserves the container but WIPES the bound surface. Omit intakeForm only
|
|
55
|
-
when the item has no surface. Otherwise the anchor clears (reads back absent) and/or the intake surface
|
|
56
|
-
detaches. (The identity overwrite and the associatedArticles delta are independent: the
|
|
57
|
-
scalars are replaced, the article list is a delta.)
|
|
58
|
-
[precondition: bind_patch_resends_anchor_identity_fields]
|
|
59
|
-
5. VERIFY: GET the item and confirm associatedArticles contains the intended final set of
|
|
60
|
-
knowledgeArticleIds AND targetObject is unchanged. [step: verify-articles]
|
|
61
|
-
- ASK MODALITY: for the article list (unbounded), list the COMPLETE set as numbered text (Title, KnowledgeArticleId, LastModifiedDate) and let the user type one or more selections; present smartly (match a named target locally; list small sets in full; narrow a large set with a typed name rather than dumping every row — the full set is already fetched). The list is a paged GraphQL query (first:2000 + pageInfo.hasNextPage/endCursor) — page through to completeness before asking. Only Online (published) articles appear; a draft/archived article will not be listed and cannot be associated until published.
|
|
62
|
-
TIMING: resolve → list → bind → verify. There is one write path; the add and remove semantics both flow through the associatedArticles[] delta on the bind — add sends a Create entry, remove sends a Delete entry carrying the association id.
|
|
63
|
-
|
|
64
|
-
## Verification Checklist
|
|
65
|
-
|
|
66
|
-
After every write operation, confirm the effect by re-reading state:
|
|
67
|
-
|
|
68
|
-
- After `resolve-catalog-item`, `bind-knowledge-articles`: call `verify-articles` (`GET /connect/service-automation/catalog/catalog-item/{catalogItemId}`)
|
|
69
|
-
|
|
70
|
-
## Operations Reference
|
|
71
|
-
|
|
72
|
-
Operations grouped by purpose. Use these as the building blocks for the workflows above.
|
|
73
|
-
|
|
74
|
-
### Summary
|
|
75
|
-
|
|
76
|
-
| Operation | Purpose | Status | Call | Depends on |
|
|
77
|
-
|-----------|---------|--------|------|------------|
|
|
78
|
-
| `resolve-catalog-item` | read | implemented | `GET /connect/service-automation/catalog/catalog-item/{catalogItemId}` | — |
|
|
79
|
-
| `list-knowledge-articles` | read | implemented | `queryKnowledgeArticles` | `resolve-catalog-item` |
|
|
80
|
-
| `bind-knowledge-articles` | write | implemented | `PATCH /connect/service-automation/catalog/catalog-item/{catalogItemId}` | `resolve-catalog-item`, `list-knowledge-articles` |
|
|
81
|
-
| `verify-articles` | verify | implemented | `GET /connect/service-automation/catalog/catalog-item/{catalogItemId}` | `resolve-catalog-item`, `bind-knowledge-articles` |
|
|
82
|
-
|
|
83
|
-
### Read operations
|
|
84
|
-
|
|
85
|
-
#### `resolve-catalog-item`
|
|
86
|
-
|
|
87
|
-
CONFIRM + CAPTURE — GET the existing service process to prove it exists and to capture the identity fields the later bind must re-send AND the CURRENT associatedArticles[]. Each associatedArticles entry is {id, knowledgeArticleId}: the id (1WK-prefix association id) is what a later Delete must carry to remove that article; the knowledgeArticleId tells you which articles are already attached so you don't try to re-add one (a re-add as "Create" is rejected 400 "already attached"). Fails fast (404) if the catalogItemId is wrong or the process was never created. Capture name, usedFor, isActive, targetObject (the anchor), the current intake surface (intakeForm.id AND intakeForm.intakeFormId + intakeForm.type — the bound Flow/OmniScript, NOT just the container id) and the current associatedArticles.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
**Call:** `GET /connect/service-automation/catalog/catalog-item/{catalogItemId}` — status: `implemented`
|
|
91
|
-
|
|
92
|
-
**Inputs:**
|
|
93
|
-
|
|
94
|
-
- `catalogItemId` *(`String`)* — The catalogItemId (== productId) of the EXISTING service process. If the user does not have it, the process must be created first before this workflow can run.
|
|
95
|
-
|
|
96
|
-
#### `list-knowledge-articles`
|
|
97
|
-
|
|
98
|
-
LIST — the org's PUBLISHED (Online) Knowledge articles via UIAPI GraphQL: Knowledge__kav filtered to PublishStatus=="Online". Present the COMPLETE set as numbered text (Title, KnowledgeArticleId, LastModifiedDate) and let the user pick one or more; page via pageInfo.endCursor (first:2000 + hasNextPage) — PRESENT smartly: if the user already NAMED the target, match it in the fetched set and show only the matches; if the set is small (≤ ~25) list it all as numbered text; if it is large, do NOT dump every row — show the most-recently-modified top slice (or ask a narrowing keyword) and invite the user to type a name to search (the full set is already fetched, so the local match stays exact). TARGETED LOOKUP: when the user has already NAMED the article, add a title predicate to the where filter — {Title: {like: "%<name>%"}}, AND-combined with the PublishStatus filter above — to fetch just the matches in ONE call instead of paging the whole list; fall back to the full paged listing only when no name was given or the filtered query returns nothing. The list is org-specific — take it from this call, never a fixed list. ID TO BIND: bind the node.KnowledgeArticleId.value (the kA0-prefix KnowledgeArticleId, the stable per-article id across versions), NOT node.Id (the per-version Knowledge__kav row id). associatedArticles.knowledgeArticleId expects the KnowledgeArticleId.
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
**Call:** `queryKnowledgeArticles` — status: `implemented`
|
|
102
|
-
|
|
103
|
-
**Depends on:** `resolve-catalog-item`
|
|
104
|
-
|
|
105
|
-
### Write operations
|
|
106
|
-
|
|
107
|
-
#### `bind-knowledge-articles`
|
|
108
|
-
|
|
109
|
-
ASSOCIATE BIND — change the process's associatedArticles[] via patchCatalogItemGet. DELTA LIST: associatedArticles is a delta, not a full replacement — send ONLY the entries that change. To ADD each newly chosen article, send {knowledgeArticleId, operationType:"Create"}; to REMOVE an article, send {id: <its 1WK association id from resolve-catalog-item>, knowledgeArticleId, operationType:"Delete"}. Do NOT re-send the already-attached articles — they stay attached, and re-sending an attached one as "Create" is rejected 400 "This article is already attached to this record". A Delete without the association id is also rejected — carry the id from resolve-catalog-item.existing_associated_articles. DETACH TRAP: this PATCH is a full overwrite of the ITEM's scalar identity — it MUST also re-send the item's identity fields (targetObject, name, usedFor, isActive), sourced from resolve-catalog-item. The intakeForm block is ALSO a full overwrite: when the item has an intake surface, re-send the FULL block — intakeForm.id (container) AND intakeForm.intakeFormId (the bound Flow/OmniScript) AND intakeForm.type, all from resolve-catalog-item, with operationType:"Update". Sending only {id, operationType:Update} preserves the container but WIPES the bound surface (intakeFormId + type vanish). Omit the intakeForm block only if resolve-catalog-item returned no intake_surface_id. Omitting targetObject CLEARS the anchor (it reads back absent on the next GET, not reset to a default). (The scalar identity is replaced; the associatedArticles list is a delta — the two behave independently in the same PATCH.)
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
**Call:** `PATCH /connect/service-automation/catalog/catalog-item/{catalogItemId}` — status: `implemented`
|
|
113
|
-
|
|
114
|
-
**Inputs:**
|
|
115
|
-
|
|
116
|
-
- `catalogItemId` *(`String`)* — The catalogItemId (== productId) of the process to associate the articles with.
|
|
117
|
-
- `associatedArticles` *(`Array`)* — The DELTA of articles to change — send ONLY changed entries, never the already-attached ones. To ADD an article: {knowledgeArticleId, operationType:"Create"}, where knowledgeArticleId is a chosen id from list-knowledge-articles.article_ids (kA0-prefix KnowledgeArticleId, never hand-constructed) that is NOT already in resolve-catalog-item.existing_article_ids. To REMOVE an article: {id, knowledgeArticleId, operationType:"Delete"}, where id is that article's association id (1WK-prefix) from resolve-catalog-item.existing_associated_articles. Re-sending an already-attached article as "Create" is rejected 400 "already attached"; a Delete missing the association id is also rejected.
|
|
118
|
-
|
|
119
|
-
- **Source:** output of `list-knowledge-articles`, `resolve-catalog-item`
|
|
120
|
-
- `intakeContainerId` *(`String`)* — The existing intake container id (intakeForm.id) from resolve-catalog-item, carried forward as intakeForm.id (with operationType:"Update"). NOTE the container id alone is NOT enough — the intakeForm block is a full overwrite, so intakeSurfaceId + intakeSurfaceType below must also be re-sent or the bound surface is wiped. Omit the whole intakeForm block only when resolve-catalog-item returned no intake_surface_id.
|
|
121
|
-
|
|
122
|
-
- **Source:** output of `resolve-catalog-item`
|
|
123
|
-
- `intakeSurfaceId` *(`String`)* — The bound intake surface id (intakeForm.intakeFormId — the Flow/OmniScript definition id) from resolve-catalog-item. MUST be re-sent alongside the container id: sending intakeForm with only {id} wipes the surface. Present only when the item has a surface.
|
|
124
|
-
|
|
125
|
-
- **Source:** output of `resolve-catalog-item`
|
|
126
|
-
- `intakeSurfaceType` *(`String`)* — The bound intake surface type (intakeForm.type — "Flow" or "OmniScript") from resolve-catalog-item. Re-sent with intakeSurfaceId to preserve the bound surface.
|
|
127
|
-
|
|
128
|
-
- **Source:** output of `resolve-catalog-item`
|
|
129
|
-
- `targetObject` *(`String`)* — The anchor object (a closed set — Case, Incident, or ServiceRequest) — re-sent on this identity-overwrite PATCH or the anchor CLEARS — it reads back absent on the next GET, not reset to a default (DETACH TRAP). Take the value from resolve-catalog-item, never a fixed assumption.
|
|
130
|
-
|
|
131
|
-
- **Source:** output of `resolve-catalog-item`
|
|
132
|
-
- `name` *(`String`)* — The process name — re-sent to preserve identity on this identity-overwrite PATCH.
|
|
133
|
-
- `usedFor` *(`String`)* — The usedFor value (ServiceProcess) — re-sent to preserve identity.
|
|
134
|
-
- `isActive` *(`Boolean`)* — The isActive flag — re-sent to preserve identity.
|
|
135
|
-
|
|
136
|
-
**Depends on:** `resolve-catalog-item`, `list-knowledge-articles`
|
|
137
|
-
|
|
138
|
-
**Rollback:** To remove an article added here, re-invoke patchCatalogItemGet with that article as operationType:"Delete" carrying its association id (read it back from the bind response or a fresh GET), always re-sending the anchor identity fields AND the full intakeForm block (id + intakeFormId + type when a surface exists) — the rollback PATCH is the same full-overwrite, so anchor-only re-send would wipe the surface. Because the list is a delta, the other articles are untouched. The catalog-item resource has no DELETE method.
|
|
139
|
-
|
|
140
|
-
### Verify operations
|
|
141
|
-
|
|
142
|
-
#### `verify-articles`
|
|
143
|
-
|
|
144
|
-
Read the process back and confirm the intended articles are associated and the anchor held.
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
**Call:** `GET /connect/service-automation/catalog/catalog-item/{catalogItemId}` — status: `implemented`
|
|
148
|
-
|
|
149
|
-
**Inputs:**
|
|
150
|
-
|
|
151
|
-
- `catalogItemId` *(`String`)* — The catalogItemId (== productId) of the process to verify.
|
|
152
|
-
|
|
153
|
-
**Depends on:** `resolve-catalog-item`, `bind-knowledge-articles`
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: industries-catalog-process-preprocessor-configure
|
|
3
|
-
description: "Use this skill when users want to cHILD of the create-unified-catalog-service-process orchestrator — one configuration pass over a service process that ALREADY EXISTS. Trigger when users mention configure, unified, catalog, service, process, preprocessor, automation, connect, api, service-automation-connect-api."
|
|
4
|
-
metadata:
|
|
5
|
-
version: "1.0"
|
|
6
|
-
accessCheck: "IndustriesEpc.orgHasUnifiedCatalog"
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Managing Configure Unified Catalog Service Process Preprocessor
|
|
10
|
-
|
|
11
|
-
## When to Use This Skill
|
|
12
|
-
|
|
13
|
-
CHILD of the create-unified-catalog-service-process orchestrator — one configuration pass over a service process that ALREADY EXISTS. Run standalone against an existing process (supply its catalogItemId), or as the phase that orchestrator routes to; for a NEW end-to-end process start at create-unified-catalog-service-process, which asks the creation fork FIRST.
|
|
14
|
-
Use this when an admin wants to set (or remove) the Apex preprocessor on a service process that ALREADY EXISTS — e.g. "add a preprocessor that rejects duplicate laptop requests". DONE when the chosen class reads back as the ONE preProcessors entry on the verify GET with the anchor still intact. Org-gated on Unified Catalog. This references an EXISTING Apex class; it does not author or compile one. SINGLE-VALUED: a process has at most ONE preprocessor. To SET when none exists, send the class as operationType:"Create". To CHANGE the existing one, REPLACE — send the current class as operationType:"Delete" (carrying its junction id) AND the new class as operationType:"Create" in the same bind. To REMOVE, send the current class as operationType:"Delete" carrying its junction id. NEVER send a Create while a preprocessor is already attached without also Deleting it: the API accepts the second Create (200) but the extra junction is INVALID — it never renders in the UI and is not honoured. A Delete WITHOUT its junction id does not error: it silently creates a stray entry instead of removing anything, so the junction id is mandatory on every Delete. DETACH-TRAP handling and the single-valued replace rule are in agent_guidance and step assertions.
|
|
15
|
-
|
|
16
|
-
## Critical Constraints
|
|
17
|
-
|
|
18
|
-
**Preconditions:**
|
|
19
|
-
|
|
20
|
-
- Org must have Unified Catalog enabled.
|
|
21
|
-
(check: `Unified Product Catalog enabled`)
|
|
22
|
-
- HARD CONSTRAINT — the service process must ALREADY EXIST and its catalogItemId (== productId) must be known before this workflow runs. The first step (resolve-catalog-item) GETs the item to confirm it exists and is usedFor=ServiceProcess before any write; a 404 there means the id is wrong or the process was never created — the process must be created first, then re-run here with its catalogItemId.
|
|
23
|
-
(check: `process_exists_with_known_catalog_item_id`)
|
|
24
|
-
- HARD CONSTRAINT — the preprocessor to set MUST be a real ApexClass Id taken from the list step (list-apex-classes) for THIS org. Never guess or hand-construct a class id. List the eligible classes, let the user pick ONE, and bind that exact id.
|
|
25
|
-
(check: `preprocessor_is_a_real_listed_apex_class`)
|
|
26
|
-
- HARD CONSTRAINT — a service process is SINGLE-VALUED for preprocessors: at most ONE. The Connect API UNDER-ENFORCES this — sending a second class as operationType:"Create" while one is already attached is accepted (200) and persists a second junction, but that row is INVALID (never renders in the UI, not honoured). So the bind rule is REPLACE, not add:
|
|
27
|
-
- SET (none attached): send the new class as {preProcessorsID, operationType:"Create"}.
|
|
28
|
-
- CHANGE (one attached): send the existing class as {id:<its 127-prefix junction id>,
|
|
29
|
-
preProcessorsID, operationType:"Delete"} AND the new class as {preProcessorsID,
|
|
30
|
-
operationType:"Create"} in the SAME bind.
|
|
31
|
-
- REMOVE: send the existing class as {id, preProcessorsID, operationType:"Delete"}.
|
|
32
|
-
NEVER send a Create while a preprocessor is already attached without also Deleting it. A Delete WITHOUT its junction id does NOT error — it silently ADDS a stray entry instead of removing anything, so the junction id (preProcessors[].id from resolve-catalog-item, a 127-prefix id) is mandatory on every Delete. Confirm the final set (exactly one, the intended class) on the verify GET.
|
|
33
|
-
(check: `bind_replaces_single_preprocessor`)
|
|
34
|
-
- HARD CONSTRAINT — patchCatalogItemGet overwrites the item's scalar identity: the bind MUST re-send the item's identity fields (targetObject, name, usedFor, isActive). Omitting targetObject CLEARS the anchor — it reads back absent on the next GET, not reset to a default, even after it was set at create time. The intakeForm block is ALSO a full overwrite: sending it with only {id, operationType:Update} preserves the container but WIPES the bound surface (intakeFormId + type disappear). When the item has an intake surface, the bind MUST re-send intakeForm.intakeFormId AND intakeForm.type alongside the container id, not just the id. The bind PATCH always carries the four identity fields and re-sends the FULL intakeForm (id + intakeFormId + type) when one exists; the verify GET confirms the anchor and intake surface are intact.
|
|
35
|
-
(check: `bind_patch_resends_anchor_identity_fields`)
|
|
36
|
-
|
|
37
|
-
**Operational rules:**
|
|
38
|
-
|
|
39
|
-
- MUST-DO CONTRACT (read before executing — each rule is enforced by the named precondition/step; do NOT skip because the detail is further down):
|
|
40
|
-
1. CONFIRM the process exists first — run resolve-catalog-item (GET) and capture its
|
|
41
|
-
identity fields (name, usedFor, isActive, targetObject), its current intakeForm.id,
|
|
42
|
-
and its CURRENT preProcessors[] — each entry is {id, preProcessorsID}; the junction id
|
|
43
|
-
(127-prefix) is required to REMOVE that preprocessor later. A 404 means the
|
|
44
|
-
catalogItemId is wrong; do NOT proceed.
|
|
45
|
-
[precondition: process_exists_with_known_catalog_item_id]
|
|
46
|
-
2. LIST the org's Apex classes via list-apex-classes, present the COMPLETE set as numbered
|
|
47
|
-
text (Name, ApexClass Id), and let the user pick ONE.
|
|
48
|
-
[precondition: preprocessor_is_a_real_listed_apex_class]
|
|
49
|
-
3. BIND via patchCatalogItemGet — SINGLE-VALUED, so REPLACE rather than add. If NONE is
|
|
50
|
-
attached, send the chosen class as operationType:"Create" (its preProcessorsID only). If
|
|
51
|
-
ONE is already attached and you are CHANGING it, send the existing class as
|
|
52
|
-
operationType:"Delete" (carrying its 127-prefix junction id from resolve-catalog-item) AND
|
|
53
|
-
the new class as operationType:"Create" in the SAME bind. To REMOVE, send the existing
|
|
54
|
-
class as operationType:"Delete" carrying its junction id. NEVER send a Create while a
|
|
55
|
-
preprocessor is already attached without also Deleting it — the API accepts it (200) but
|
|
56
|
-
the extra junction is INVALID (never shows in the UI, not honoured). A
|
|
57
|
-
Delete missing the junction id silently ADDS a stray entry rather than removing; carry the
|
|
58
|
-
127-prefix id.
|
|
59
|
-
[precondition: bind_replaces_single_preprocessor]
|
|
60
|
-
4. The bind PATCH is a FULL overwrite of the ITEM's scalar identity — ALWAYS re-send
|
|
61
|
-
targetObject + name + usedFor + isActive. The intakeForm block is ALSO a full overwrite:
|
|
62
|
-
when the item has an intake surface, re-send the FULL block — intakeForm.id AND
|
|
63
|
-
intakeForm.intakeFormId AND intakeForm.type (operationType:Update). Sending only {id}
|
|
64
|
-
preserves the container but WIPES the bound surface. Omit intakeForm only
|
|
65
|
-
when the item has no surface. Otherwise the anchor clears (reads back absent) and/or the intake surface
|
|
66
|
-
detaches. (The identity overwrite and the preProcessors delta are independent: the scalars
|
|
67
|
-
are replaced, the preprocessor list is a delta.)
|
|
68
|
-
[precondition: bind_patch_resends_anchor_identity_fields]
|
|
69
|
-
5. VERIFY: GET the item and confirm preProcessors contains EXACTLY ONE entry — the intended
|
|
70
|
-
class — with no second/stray junction, AND targetObject is unchanged.
|
|
71
|
-
[step: verify-preprocessors]
|
|
72
|
-
- ASK MODALITY: for the Apex-class list (unbounded), list the COMPLETE set as numbered text (Name, ApexClass Id) and let the user type ONE selection; PRESENT smartly — match a named target locally, list a small set in full, and narrow a large one (typed name or a recent top slice) rather than dumping every row. The list is a paged SOQL query — page through nextRecordsUrl to completeness before asking. The list is org-specific — take it from this call, never a fixed list.
|
|
73
|
-
TIMING: resolve → list → bind → verify. There is one write path. SET, CHANGE, and REMOVE all flow through the preProcessors[] delta on the bind — SET sends one Create, CHANGE sends a Delete (of the existing, carrying its junction id) PLUS a Create (of the new) together, REMOVE sends one Delete carrying the junction id.
|
|
74
|
-
|
|
75
|
-
## Verification Checklist
|
|
76
|
-
|
|
77
|
-
After every write operation, confirm the effect by re-reading state:
|
|
78
|
-
|
|
79
|
-
- After `resolve-catalog-item`, `bind-preprocessors`: call `verify-preprocessors` (`GET /connect/service-automation/catalog/catalog-item/{catalogItemId}`)
|
|
80
|
-
|
|
81
|
-
## Operations Reference
|
|
82
|
-
|
|
83
|
-
Operations grouped by purpose. Use these as the building blocks for the workflows above.
|
|
84
|
-
|
|
85
|
-
### Summary
|
|
86
|
-
|
|
87
|
-
| Operation | Purpose | Status | Call | Depends on |
|
|
88
|
-
|-----------|---------|--------|------|------------|
|
|
89
|
-
| `resolve-catalog-item` | read | implemented | `GET /connect/service-automation/catalog/catalog-item/{catalogItemId}` | — |
|
|
90
|
-
| `list-apex-classes` | read | implemented | `queryApexClasses` | `resolve-catalog-item` |
|
|
91
|
-
| `bind-preprocessors` | write | implemented | `PATCH /connect/service-automation/catalog/catalog-item/{catalogItemId}` | `resolve-catalog-item`, `list-apex-classes` |
|
|
92
|
-
| `verify-preprocessors` | verify | implemented | `GET /connect/service-automation/catalog/catalog-item/{catalogItemId}` | `resolve-catalog-item`, `bind-preprocessors` |
|
|
93
|
-
|
|
94
|
-
### Read operations
|
|
95
|
-
|
|
96
|
-
#### `resolve-catalog-item`
|
|
97
|
-
|
|
98
|
-
CONFIRM + CAPTURE — GET the existing service process to prove it exists and to capture the identity fields the later bind must re-send AND the CURRENT preProcessors[]. Each preProcessors entry is {id, preProcessorsID}: the id (127-prefix junction id) is what a later Delete must carry to remove that preprocessor; the preProcessorsID (an ApexClass 01p id) tells you which classes are already attached. Fails fast (404) if the catalogItemId is wrong or the process was never created. Capture name, usedFor, isActive, targetObject (the anchor), the current intake surface (intakeForm.id AND intakeForm.intakeFormId + intakeForm.type — the bound Flow/OmniScript, NOT just the container id) and the current preProcessors.
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
**Call:** `GET /connect/service-automation/catalog/catalog-item/{catalogItemId}` — status: `implemented`
|
|
102
|
-
|
|
103
|
-
**Inputs:**
|
|
104
|
-
|
|
105
|
-
- `catalogItemId` *(`String`)* — The catalogItemId (== productId) of the EXISTING service process. If the user does not have it, the process must be created first before this workflow can run.
|
|
106
|
-
|
|
107
|
-
#### `list-apex-classes`
|
|
108
|
-
|
|
109
|
-
LIST — the org's Apex classes via SOQL over ApexClass. Present the COMPLETE set as numbered text (Name, ApexClass Id) and let the user pick ONE; page via nextRecordsUrl — never cap or truncate. TARGETED LOOKUP: when the user has already NAMED the class, append AND Name LIKE '%<name>%' to the SOQL WHERE (alongside Status='Active') to fetch just the matches in ONE call instead of paging the whole list; fall back to the full listing only when no name was given or the filter returns nothing. The list is org-specific — take it from this call, never a fixed list. ID TO BIND: bind the ApexClass Id (01p-prefix). preProcessors.preProcessorsID expects that id.
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
**Call:** `queryApexClasses` — status: `implemented`
|
|
113
|
-
|
|
114
|
-
**Inputs:**
|
|
115
|
-
|
|
116
|
-
- `q` *(`string`)*
|
|
117
|
-
|
|
118
|
-
**Depends on:** `resolve-catalog-item`
|
|
119
|
-
|
|
120
|
-
### Write operations
|
|
121
|
-
|
|
122
|
-
#### `bind-preprocessors`
|
|
123
|
-
|
|
124
|
-
SET BIND — change the process's single preprocessor via patchCatalogItemGet. SINGLE-VALUED / REPLACE: a process has at most ONE preprocessor. To SET when none is attached, send the chosen class as {preProcessorsID, operationType:"Create"}. To CHANGE the existing one, send the current class as {id:<its 127-prefix junction id from resolve-catalog-item>, preProcessorsID, operationType:"Delete"} AND the new class as {preProcessorsID, operationType:"Create"} in the SAME preProcessors[] array. To REMOVE, send only the current class as {id, preProcessorsID, operationType:"Delete"}. NEVER send a Create while a preprocessor is already attached without also Deleting it — the API accepts the second Create (200) and persists it, but that extra junction is INVALID: it never renders in the UI and is not honoured. A Delete WITHOUT the junction id does NOT error — it silently ADDS a stray entry instead of removing, so carry the id from resolve-catalog-item.existing_preprocessors. DETACH TRAP: this PATCH is a full overwrite of the ITEM's scalar identity — it MUST also re-send the item's identity fields (targetObject, name, usedFor, isActive), sourced from resolve-catalog-item. The intakeForm block is ALSO a full overwrite: when the item has an intake surface, re-send the FULL block — intakeForm.id (container) AND intakeForm.intakeFormId (the bound Flow/OmniScript) AND intakeForm.type, all from resolve-catalog-item, with operationType:"Update". Sending only {id, operationType:Update} preserves the container but WIPES the bound surface (intakeFormId + type vanish). Omit the intakeForm block only if resolve-catalog-item returned no intake_surface_id. Omitting targetObject CLEARS the anchor (it reads back absent on the next GET, not reset to a default). (The scalar identity is replaced; the preProcessors list is a delta — the two behave independently in the same PATCH.)
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
**Call:** `PATCH /connect/service-automation/catalog/catalog-item/{catalogItemId}` — status: `implemented`
|
|
128
|
-
|
|
129
|
-
**Inputs:**
|
|
130
|
-
|
|
131
|
-
- `catalogItemId` *(`String`)* — The catalogItemId (== productId) of the process to set the preprocessor on.
|
|
132
|
-
- `preProcessors` *(`Array`)* — The preProcessors[] delta for a SINGLE-VALUED preprocessor — REPLACE, not add. SET (none attached): [{preProcessorsID, operationType:"Create"}], where preProcessorsID is the chosen id from list-apex-classes.class_ids (01p-prefix ApexClass id, never hand-constructed). CHANGE (one attached): send BOTH in one array — the existing class as {id, preProcessorsID, operationType:"Delete"} (id = its 127-prefix junction id from resolve-catalog-item.existing_preprocessors) AND the new class as {preProcessorsID, operationType:"Create"}. REMOVE: [{id, preProcessorsID, operationType:"Delete"}]. NEVER send a bare Create while a preprocessor is already attached — the API accepts it (200) but the extra junction is INVALID (invisible in the UI, not honoured). A Delete missing the junction id silently adds a stray entry instead of removing.
|
|
133
|
-
|
|
134
|
-
- **Source:** output of `list-apex-classes`, `resolve-catalog-item`
|
|
135
|
-
- `intakeContainerId` *(`String`)* — The existing intake container id (intakeForm.id) from resolve-catalog-item, carried forward as intakeForm.id (with operationType:"Update"). NOTE the container id alone is NOT enough — the intakeForm block is a full overwrite, so intakeSurfaceId + intakeSurfaceType below must also be re-sent or the bound surface is wiped. Omit the whole intakeForm block only when resolve-catalog-item returned no intake_surface_id.
|
|
136
|
-
|
|
137
|
-
- **Source:** output of `resolve-catalog-item`
|
|
138
|
-
- `intakeSurfaceId` *(`String`)* — The bound intake surface id (intakeForm.intakeFormId — the Flow/OmniScript definition id) from resolve-catalog-item. MUST be re-sent alongside the container id: sending intakeForm with only {id} wipes the surface. Present only when the item has a surface.
|
|
139
|
-
|
|
140
|
-
- **Source:** output of `resolve-catalog-item`
|
|
141
|
-
- `intakeSurfaceType` *(`String`)* — The bound intake surface type (intakeForm.type — "Flow" or "OmniScript") from resolve-catalog-item. Re-sent with intakeSurfaceId to preserve the bound surface.
|
|
142
|
-
|
|
143
|
-
- **Source:** output of `resolve-catalog-item`
|
|
144
|
-
- `targetObject` *(`String`)* — The anchor object (a closed set — Case, Incident, or ServiceRequest) — re-sent on this identity-overwrite PATCH or the anchor CLEARS — it reads back absent on the next GET, not reset to a default (DETACH TRAP). Take the value from resolve-catalog-item, never a fixed assumption.
|
|
145
|
-
|
|
146
|
-
- **Source:** output of `resolve-catalog-item`
|
|
147
|
-
- `name` *(`String`)* — The process name — re-sent to preserve identity on this identity-overwrite PATCH.
|
|
148
|
-
- `usedFor` *(`String`)* — The usedFor value (ServiceProcess) — re-sent to preserve identity.
|
|
149
|
-
- `isActive` *(`Boolean`)* — The isActive flag — re-sent to preserve identity.
|
|
150
|
-
|
|
151
|
-
**Depends on:** `resolve-catalog-item`, `list-apex-classes`
|
|
152
|
-
|
|
153
|
-
**Rollback:** To undo, re-invoke patchCatalogItemGet with the class added here as operationType:"Delete" carrying its junction id (read it back from the bind response or a fresh GET); if this bind REPLACED a prior preprocessor, also re-Create the prior class to restore it. Always re-send the anchor identity fields AND the full intakeForm block (id + intakeFormId + type when a surface exists) — the rollback PATCH is the same full-overwrite, so anchor-only re-send would wipe the surface. The catalog-item resource has no DELETE method.
|
|
154
|
-
|
|
155
|
-
### Verify operations
|
|
156
|
-
|
|
157
|
-
#### `verify-preprocessors`
|
|
158
|
-
|
|
159
|
-
Read the process back and confirm the intended preprocessor is the sole entry (or none after a REMOVE) and the anchor held.
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
**Call:** `GET /connect/service-automation/catalog/catalog-item/{catalogItemId}` — status: `implemented`
|
|
163
|
-
|
|
164
|
-
**Inputs:**
|
|
165
|
-
|
|
166
|
-
- `catalogItemId` *(`String`)* — The catalogItemId (== productId) of the process to verify.
|
|
167
|
-
|
|
168
|
-
**Depends on:** `resolve-catalog-item`, `bind-preprocessors`
|