@salesforce/afv-skills 1.63.0 → 1.65.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-gpt-email-generation-configure/SKILL.md +312 -0
- package/skills/agentforce-offline-experimentation-run/SKILL.md +253 -0
- package/skills/agentforce-offline-experimentation-run/scripts/build_report.py +796 -0
- package/skills/agentforce-offline-experimentation-run/scripts/resolve-token.sh +111 -0
- package/skills/agentforce-offline-experimentation-run/scripts/sfap_replay.py +1053 -0
- package/skills/agentforce-wizard-ui-forecasting-analytics-components-configure/SKILL.md +64 -0
- package/skills/agentforce-wizard-ui-sales-einstein-components-configure/SKILL.md +46 -0
- package/skills/automation-company-profile-info-query/SKILL.md +51 -0
- package/skills/automation-digital-wallet-configure/SKILL.md +689 -0
- package/skills/automation-flow-coordinate/SKILL.md +95 -0
- package/skills/automation-flow-coordinate/references/elements/action-call/action-call.md +1569 -0
- package/skills/automation-flow-coordinate/references/elements/action-call/conversation-messaging.md +96 -0
- package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-sms-message.json +23 -0
- package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-to-journey-no-fields.json +31 -0
- package/skills/automation-flow-coordinate/references/elements/action-call/send-to-journey.md +179 -0
- package/skills/automation-flow-coordinate/references/elements/exit-rule/examples/event-email-link-click.json +13 -0
- package/skills/automation-flow-coordinate/references/elements/exit-rule/exit-rule.md +83 -0
- package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/examples/forward-to-bot-or-agent.json +69 -0
- package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/forward-to-bot-or-agent.md +274 -0
- package/skills/automation-flow-coordinate/references/elements/start/audience-common.md +192 -0
- package/skills/automation-flow-coordinate/references/elements/start/automation-event-triggered.md +130 -0
- package/skills/automation-flow-coordinate/references/elements/start/data-cloud-data-change-triggered.md +92 -0
- package/skills/automation-flow-coordinate/references/elements/start/form-submission-triggered.md +88 -0
- package/skills/automation-flow-coordinate/references/elements/start/segment-triggered.md +152 -0
- package/skills/automation-flow-coordinate/references/elements/start/start.md +539 -0
- package/skills/automation-flow-coordinate/references/elements/subflow/subflow.md +152 -0
- package/skills/automation-flow-coordinate/references/elements/wait/wait.md +497 -0
- package/skills/automation-flow-coordinate/references/recipes/author/author.md +868 -0
- package/skills/automation-flow-coordinate/references/recipes/summarize/element-generic.md +300 -0
- package/skills/automation-flow-coordinate/references/recipes/summarize/reference-resolution.md +292 -0
- package/skills/automation-flow-coordinate/references/recipes/summarize/summarize.md +323 -0
- package/skills/automation-flow-coordinate/references/recipes/testing/examples/debug-output-template.md +109 -0
- package/skills/automation-flow-coordinate/references/recipes/testing/shape.md +219 -0
- package/skills/automation-flow-coordinate/references/recipes/testing/shared-stages/intent-analyzer.md +180 -0
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/debug.md +175 -0
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/promote.md +255 -0
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/save-debug.md +212 -0
- package/skills/automation-flow-coordinate/references/resources/variable/variable.md +171 -0
- package/skills/automation-flow-coordinate/references/shared/anti-patterns.md +786 -0
- package/skills/automation-flow-coordinate/references/shared/end/end.md +267 -0
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/README.md +69 -0
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/predictions.jsonl +80 -0
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/prompts.jsonl +116 -0
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/flow-type-resolver.md +321 -0
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/taxonomy.json +320 -0
- package/skills/automation-flow-coordinate/references/shared/server-functions.md +597 -0
- package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +21 -11
- package/skills/automation-sandbox-post-copy-config-generate/assets/config_template.json +10 -0
- package/skills/automation-sandbox-post-copy-config-generate/assets/json_schema.json +33 -1
- package/skills/automation-sandbox-post-copy-config-generate/references/configuration_catalog.md +44 -1
- package/skills/automation-sandbox-post-copy-configure/SKILL.md +132 -124
- package/skills/automation-sandbox-post-copy-configure/references/flow_activation_path.md +151 -0
- package/skills/automation-sandbox-post-copy-configure/references/scheduled_apex_path.md +55 -9
- package/skills/automotive-cloud-appraisal-management-settings-configure/SKILL.md +69 -0
- package/skills/automotive-cloud-dealer-essentials-configure/SKILL.md +78 -0
- package/skills/automotive-cloud-ground-agent-data-pipelines-configure/SKILL.md +373 -0
- package/skills/automotive-cloud-ground-mfg-agent-data-pipelines-configure/SKILL.md +273 -0
- package/skills/automotive-cloud-mfg-agent-data-pipelines-configure/SKILL.md +259 -0
- package/skills/automotive-cloud-mfg-sales-concierge-agent-create/SKILL.md +369 -0
- package/skills/automotive-cloud-mfg-sales-concierge-foundation-configure/SKILL.md +542 -0
- package/skills/automotive-cloud-mfg-sales-concierge-foundation-coordinate/SKILL.md +159 -0
- package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-agent-create/SKILL.md +349 -0
- package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-configure/SKILL.md +505 -0
- package/skills/automotive-cloud-sales-concierge-agent-create/SKILL.md +380 -0
- package/skills/automotive-cloud-sales-concierge-foundation-configure/SKILL.md +567 -0
- package/skills/automotive-cloud-sales-concierge-foundation-coordinate/SKILL.md +159 -0
- package/skills/automotive-cloud-sales-concierge-orchestrator-agent-create/SKILL.md +360 -0
- package/skills/automotive-cloud-sales-concierge-orchestrator-configure/SKILL.md +539 -0
- package/skills/automotive-cloud-sales-concierge-search-grounding-configure/SKILL.md +358 -0
- package/skills/commerce-b2b-merchant-quote-configure/SKILL.md +602 -0
- package/skills/commerce-b2b-store-configure/SKILL.md +251 -0
- package/skills/commerce-credit-memo-create/SKILL.md +139 -0
- package/skills/commerce-delivery-business-hours-configure/SKILL.md +277 -0
- package/skills/commerce-delivery-estimation-apply/SKILL.md +155 -0
- package/skills/commerce-delivery-estimation-configure/SKILL.md +377 -0
- package/skills/commerce-delivery-routing-specs-integrate/SKILL.md +174 -0
- package/skills/commerce-estimate-bopis-query/SKILL.md +279 -0
- package/skills/commerce-estimate-delivery-date-query/SKILL.md +349 -0
- package/skills/commerce-fees-apply/SKILL.md +227 -0
- package/skills/commerce-fulfillment-routing-analyze/SKILL.md +200 -0
- package/skills/commerce-guest-buyer-create/SKILL.md +173 -0
- package/skills/commerce-location-bopis-configure/SKILL.md +378 -0
- package/skills/commerce-location-business-hours-configure/SKILL.md +235 -0
- package/skills/commerce-location-delivery-processing-time-configure/SKILL.md +309 -0
- package/skills/commerce-location-graph-integrate/SKILL.md +131 -0
- package/skills/commerce-location-shipping-carrier-method-configure/SKILL.md +755 -0
- package/skills/commerce-location-temporary-operating-hours-configure/SKILL.md +331 -0
- package/skills/commerce-merchant-buyer-groups-configure/SKILL.md +579 -0
- package/skills/commerce-merchant-buyer-user-onboarding-create/SKILL.md +626 -0
- package/skills/commerce-merchant-catalog-configure/SKILL.md +614 -0
- package/skills/commerce-merchant-extension-provider-configure/SKILL.md +368 -0
- package/skills/commerce-merchant-insights-account-health-churn-analyze/SKILL.md +118 -0
- package/skills/commerce-merchant-insights-inventory-returns-analyze/SKILL.md +65 -0
- package/skills/commerce-merchant-insights-order-shopper-get/SKILL.md +90 -0
- package/skills/commerce-merchant-insights-product-performance-analyze/SKILL.md +72 -0
- package/skills/commerce-merchant-insights-query/SKILL.md +279 -0
- package/skills/commerce-merchant-storefront-guest-access-configure/SKILL.md +656 -0
- package/skills/commerce-order-summary-change-apply/SKILL.md +375 -0
- package/skills/commerce-product-details-get/SKILL.md +363 -0
- package/skills/commerce-product-search/SKILL.md +563 -0
- package/skills/commerce-react-storefront-create/SKILL.md +350 -0
- package/skills/commerce-return-order-summary-create/SKILL.md +513 -0
- package/skills/commerce-search-relevance-analyze/SKILL.md +757 -0
- package/skills/commerce-temporary-processing-time-override-create/SKILL.md +274 -0
- package/skills/communications-initial-setup-configure/SKILL.md +630 -0
- package/skills/communications-multisite-configure/SKILL.md +571 -0
- package/skills/communications-revenue-cloud-settings-configure/SKILL.md +74 -0
- package/skills/communications-smb-fiber-catalog-create/SKILL.md +413 -0
- package/skills/communications-tmf-integrate/SKILL.md +1368 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/SKILL.md +54 -107
- package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/copy.json +1 -1
- package/skills/consumer-goods-promotion-bo-api-deploy/references/conventions-and-payload-rules.md +82 -5
- package/skills/consumer-goods-promotion-bo-api-deploy/references/generate-and-wire.md +35 -2
- package/skills/consumer-goods-promotion-bo-api-deploy/references/preflight-and-seed-queries.md +149 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/references/smoke-and-verify.md +17 -1
- package/skills/consumer-goods-visit-activity-act4-questions-assign/SKILL.md +448 -0
- package/skills/consumer-goods-visit-activity-act5-standard-create/SKILL.md +269 -0
- package/skills/consumer-goods-visit-activity-act6-assortment-configure/SKILL.md +271 -0
- package/skills/consumer-goods-visit-activity-act7-account-scoping-create/SKILL.md +382 -0
- package/skills/consumer-goods-visit-activity-act8-plan-attach-create/SKILL.md +373 -0
- package/skills/consumer-goods-visit-activity-act9-proof-validate/SKILL.md +389 -0
- package/skills/consumer-goods-visit-and-activity-act1-specification-create/SKILL.md +338 -0
- package/skills/consumer-goods-visit-and-activity-act2-template-create/SKILL.md +547 -0
- package/skills/consumer-goods-visit-and-activity-act3-definition-create/SKILL.md +346 -0
- package/skills/consumer-goods-visit-and-activity-configure/SKILL.md +1110 -0
- package/skills/crm-analytics-adoption-insights-configure/SKILL.md +224 -0
- package/skills/crm-analytics-custom-report-type-lightning-configure/SKILL.md +418 -0
- package/skills/crm-analytics-dashboards-configure/SKILL.md +731 -0
- package/skills/crm-analytics-operational-analytics-metadata-bridge-migrate/SKILL.md +233 -0
- package/skills/crm-analytics-report-notifications-ui-configure/SKILL.md +184 -0
- package/skills/crm-analytics-sharing-inheritance-coverage-analyze/SKILL.md +167 -0
- package/skills/crm-analytics-sonic-getting-started-configure/SKILL.md +55 -0
- package/skills/crm-analytics-tableau-next-app-deploy/SKILL.md +1350 -0
- package/skills/crm-analytics-tableau-next-c360-basemodel-validate/SKILL.md +1862 -0
- package/skills/crm-analytics-tableau-next-datacloud-validate/SKILL.md +83 -0
- package/skills/crm-analytics-tableau-next-provisioning-validate/SKILL.md +81 -0
- package/skills/data360-activation-create/SKILL.md +104 -0
- package/skills/data360-activation-external-platform-get/SKILL.md +49 -0
- package/skills/data360-activation-target-create/SKILL.md +93 -0
- package/skills/data360-activation-v2-create/SKILL.md +456 -0
- package/skills/data360-audience-dmo-get/SKILL.md +38 -0
- package/skills/data360-calculated-affinity-create/SKILL.md +82 -0
- package/skills/data360-calculated-insight-create/SKILL.md +148 -0
- package/skills/data360-catalog-metadata-create/SKILL.md +183 -0
- package/skills/data360-code-extension-create/SKILL.md +115 -0
- package/skills/data360-communication-capping-create/SKILL.md +227 -0
- package/skills/data360-connection-create/SKILL.md +491 -0
- package/skills/data360-content-lens-create/SKILL.md +181 -0
- package/skills/data360-data-action-create/SKILL.md +126 -0
- package/skills/data360-data-action-target-create/SKILL.md +181 -0
- package/skills/data360-data-clean-room-create/SKILL.md +238 -0
- package/skills/data360-data-governance-create/SKILL.md +746 -0
- package/skills/data360-data-graph-create/SKILL.md +82 -0
- package/skills/data360-data-harmonized-model-object-reference-create/SKILL.md +38 -0
- package/skills/data360-data-lake-object-create/SKILL.md +207 -0
- package/skills/data360-data-model-object-catalog-get/SKILL.md +49 -0
- package/skills/data360-data-model-object-create/SKILL.md +128 -0
- package/skills/data360-data-model-object-mapping-create/SKILL.md +106 -0
- package/skills/data360-data-space-create/SKILL.md +161 -0
- package/skills/data360-data-streams-create/SKILL.md +324 -0
- package/skills/data360-engagement-signal-get/SKILL.md +38 -0
- package/skills/data360-experiment-create/SKILL.md +82 -0
- package/skills/data360-goal-based-campaign-create/SKILL.md +192 -0
- package/skills/data360-harmonization-process-history-get/SKILL.md +38 -0
- package/skills/data360-harmonized-unstructured-dmo-create/SKILL.md +84 -0
- package/skills/data360-identity-resolution-create/SKILL.md +115 -0
- package/skills/data360-intelligent-document-processing-create/SKILL.md +148 -0
- package/skills/data360-knowledge-graph-construction-create/SKILL.md +93 -0
- package/skills/data360-knowledge-graph-create/SKILL.md +216 -0
- package/skills/data360-knowledge-space-mcp-configure/SKILL.md +475 -0
- package/skills/data360-machine-learning-mcp-configure/SKILL.md +697 -0
- package/skills/data360-multi-org-mcp-configure/SKILL.md +117 -0
- package/skills/data360-secondary-index-mcp-configure/SKILL.md +126 -0
- package/skills/data360-segment-mcp-configure/SKILL.md +159 -0
- package/skills/data360-semantic-calculated-dimension-mcp-configure/SKILL.md +93 -0
- package/skills/data360-semantic-calculated-measurement-mcp-configure/SKILL.md +93 -0
- package/skills/data360-semantic-data-object-mcp-configure/SKILL.md +93 -0
- package/skills/data360-semantic-dimension-mcp-configure/SKILL.md +38 -0
- package/skills/data360-semantic-engine-mcp-configure/SKILL.md +62 -0
- package/skills/data360-semantic-measurement-mcp-configure/SKILL.md +38 -0
- package/skills/data360-semantic-metric-mcp-configure/SKILL.md +93 -0
- package/skills/data360-semantic-model-mcp-configure/SKILL.md +115 -0
- package/skills/data360-standard-mapping-mcp-configure/SKILL.md +38 -0
- package/skills/data360-tenant-lifecycle-mcp-configure/SKILL.md +73 -0
- package/skills/dx-devops-conflict-resolve/SKILL.md +1 -5
- package/skills/dx-devops-pipeline-manage/SKILL.md +1 -5
- package/skills/dx-devops-project-manage/SKILL.md +1 -5
- package/skills/dx-devops-promote/SKILL.md +1 -5
- package/skills/dx-devops-request-status/SKILL.md +1 -5
- package/skills/dx-lifecycle-center/SKILL.md +120 -0
- package/skills/dx-lifecycle-center/examples/workflows.md +175 -0
- package/skills/dx-lifecycle-center/references/connect-api.md +123 -0
- package/skills/dx-lifecycle-center/references/connect-org.md +184 -0
- package/skills/dx-lifecycle-center/references/deploy.md +153 -0
- package/skills/dx-lifecycle-center/references/error-handling.md +21 -0
- package/skills/dx-lifecycle-center/references/hub-org.md +37 -0
- package/skills/dx-lifecycle-center/references/list-orgs.md +99 -0
- package/skills/dx-lifecycle-center/references/request-body.md +75 -0
- package/skills/dx-lifecycle-center/references/troubleshooting.md +31 -0
- package/skills/dx-lifecycle-center/scripts/poll-deploy-status.sh +200 -0
- package/skills/dx-lifecycle-center/scripts/resolve-environment.sh +120 -0
- package/skills/dx-org-devhub-configure/SKILL.md +1 -3
- package/skills/dx-org-shape-manage/SKILL.md +1 -5
- package/skills/dx-org-snapshot-manage/SKILL.md +1 -3
- package/skills/education-cloud-academic-calendar-generate/SKILL.md +1 -3
- package/skills/education-cloud-course-catalog-migrate/SKILL.md +1 -3
- package/skills/education-cloud-domain-configure/SKILL.md +1 -3
- package/skills/education-cloud-multi-campus-configure/SKILL.md +1 -3
- package/skills/education-cloud-student-recruitment-agent-configure/SKILL.md +1 -5
- package/skills/experience-afv-query/SKILL.md +234 -0
- package/skills/experience-agentforce-vibes-in-react-configure/SKILL.md +63 -0
- package/skills/experience-apex-components-configure/SKILL.md +69 -0
- package/skills/experience-apex-pages-configure/SKILL.md +107 -0
- package/skills/experience-app-home-configure/SKILL.md +76 -0
- package/skills/experience-aura-lightning-out-access-configure/SKILL.md +58 -0
- package/skills/experience-briefcase-configure/SKILL.md +287 -0
- package/skills/experience-community-flexi-page-list-create/SKILL.md +74 -0
- package/skills/experience-community-template-definition-list-query/SKILL.md +48 -0
- package/skills/experience-community-theme-definition-list-query/SKILL.md +38 -0
- package/skills/experience-content-assets-configure/SKILL.md +86 -0
- package/skills/experience-custom-domain-create/SKILL.md +727 -0
- package/skills/experience-defer-rendering-workspace-page-setup-configure/SKILL.md +41 -0
- package/skills/experience-field-service-app-builder-configure/SKILL.md +187 -0
- package/skills/experience-flow-category-configure/SKILL.md +117 -0
- package/skills/experience-formula-configure/SKILL.md +358 -0
- package/skills/experience-global-actions-configure/SKILL.md +69 -0
- package/skills/experience-global-publisher-layouts-configure/SKILL.md +79 -0
- package/skills/experience-instrumentation-configure/SKILL.md +64 -0
- package/skills/experience-lex-engagement-configure/SKILL.md +50 -0
- package/skills/experience-lightning-bolt-open/SKILL.md +12 -0
- package/skills/experience-lightning-out-configure/SKILL.md +129 -0
- package/skills/experience-lightning-preview-configure/SKILL.md +67 -0
- package/skills/experience-lightning-types-query/SKILL.md +98 -0
- package/skills/experience-malware-scan-configure/SKILL.md +71 -0
- package/skills/experience-my-salesforce-configure/SKILL.md +126 -0
- package/skills/experience-navigation-menus-configure/SKILL.md +235 -0
- package/skills/experience-notification-types-configure/SKILL.md +206 -0
- package/skills/experience-notifications-configure/SKILL.md +75 -0
- package/skills/experience-record-discovery-query/SKILL.md +227 -0
- package/skills/experience-regenerate-previews-open/SKILL.md +94 -0
- package/skills/experience-sales-cloud-mab-configure/SKILL.md +254 -0
- package/skills/experience-schema-builder-open/SKILL.md +38 -0
- package/skills/experience-simple-record-home-configure/SKILL.md +110 -0
- package/skills/experience-static-resources-configure/SKILL.md +74 -0
- package/skills/experience-ui-bundle-2gp-deploy/SKILL.md +1 -3
- package/skills/experience-ui-bundle-features-generate/SKILL.md +1 -5
- package/skills/experience-ui-bundle-mfa-configure/SKILL.md +1 -3
- package/skills/field-service-data-capture-form-deployer-configure/SKILL.md +23 -2
- package/skills/field-service-data-capture-form-designer-configure/SKILL.md +13 -3
- package/skills/field-service-data-capture-migrate/SKILL.md +1 -3
- package/skills/field-service-mobile-branding-configure/SKILL.md +17 -3
- package/skills/field-service-objective-designer-configure/SKILL.md +72 -379
- package/skills/field-service-prework-brief-deployer-configure/SKILL.md +10 -537
- package/skills/field-service-scheduling-policy-designer-query/SKILL.md +65 -1093
- package/skills/{field-service-setup-orchestrator-get → field-service-setup-coordinate}/SKILL.md +18 -3
- package/skills/field-service-sobject-create-configure/SKILL.md +13 -213
- package/skills/field-service-voice-to-form-configure/SKILL.md +40 -11
- package/skills/field-service-work-plan-configure/SKILL.md +253 -0
- package/skills/field-service-work-rule-designer-configure/SKILL.md +121 -95
- package/skills/fsc-actionable-segmentation-settings-configure/SKILL.md +180 -0
- package/skills/fsc-digital-origination-bre-decision-matrix-foundation-create/SKILL.md +196 -0
- package/skills/fsc-digital-origination-bre-disclosures-consent-configure/SKILL.md +106 -0
- package/skills/fsc-digital-origination-bre-document-upload-configure/SKILL.md +96 -0
- package/skills/fsc-digital-origination-bre-permissions-assign/SKILL.md +111 -0
- package/skills/fsc-digital-origination-bre-setup-coordinate/SKILL.md +250 -0
- package/skills/fsc-digital-origination-bre-stp-eligibility-configure/SKILL.md +122 -0
- package/skills/fsc-digital-origination-coordinate/SKILL.md +653 -0
- package/skills/fsc-digital-origination-demo-run/SKILL.md +225 -0
- package/skills/fsc-digital-origination-execution-guardrails-validate/SKILL.md +112 -0
- package/skills/fsc-digital-origination-initial-setup-configure/SKILL.md +396 -0
- package/skills/fsc-digital-origination-pricing-setup-coordinate/SKILL.md +336 -0
- package/skills/fsc-digital-origination-pricing-setup-data-foundation-create/SKILL.md +208 -0
- package/skills/fsc-digital-origination-pricing-setup-procedure-create/SKILL.md +375 -0
- package/skills/fsc-digital-origination-product-setup-act1-permissions-assign/SKILL.md +83 -0
- package/skills/fsc-digital-origination-product-setup-coordinate/SKILL.md +248 -0
- package/skills/fsc-digital-origination-sample-data-create/SKILL.md +206 -0
- package/skills/fsc-document-checklist-settings-configure/SKILL.md +57 -0
- package/skills/fsc-flexible-hierarchy-configure/SKILL.md +148 -0
- package/skills/fsc-flexible-hierarchy-foundation-configure/SKILL.md +1430 -0
- package/skills/fsc-flexible-hierarchy-graph-config-create/SKILL.md +471 -0
- package/skills/fsc-flexible-hierarchy-rule-based-graph-deploy/SKILL.md +429 -0
- package/skills/fsc-pricing-product-configurator-configure/SKILL.md +150 -0
- package/skills/fsc-pricing-salesforce-omnistudio-switch/SKILL.md +123 -0
- package/skills/fsc-product-act2-catalog-categories-create/SKILL.md +82 -0
- package/skills/fsc-product-act3-attributes-create/SKILL.md +249 -0
- package/skills/fsc-product-act4-classification-assignment-create/SKILL.md +196 -0
- package/skills/fsc-product-act5-considerations-get/SKILL.md +44 -0
- package/skills/fsc-stage-management-apex-flow-deploy/SKILL.md +384 -0
- package/skills/fsc-stage-management-compliant-data-sharing-configure/SKILL.md +144 -0
- package/skills/fsc-stage-management-decision-matrices-create/SKILL.md +107 -0
- package/skills/fsc-stage-management-definition-assignments-create/SKILL.md +189 -0
- package/skills/fsc-stage-management-definition-create/SKILL.md +108 -0
- package/skills/fsc-stage-management-permissions-assign/SKILL.md +143 -0
- package/skills/fsc-stage-management-transitions-configure/SKILL.md +139 -0
- package/skills/health-cloud-appt-booking-config-configure/SKILL.md +135 -0
- package/skills/health-cloud-appt-booking-url-config-configure/SKILL.md +134 -0
- package/skills/health-cloud-care-provider-affl-role-config-configure/SKILL.md +136 -0
- package/skills/health-cloud-care-provider-search-config-configure/SKILL.md +134 -0
- package/skills/health-cloud-care-requests-create/SKILL.md +178 -0
- package/skills/health-cloud-initial-configure/SKILL.md +511 -0
- package/skills/health-cloud-patient-appointment-scheduling-configure/SKILL.md +1374 -0
- package/skills/health-cloud-provider-search-settings-configure/SKILL.md +924 -0
- package/skills/health-cloud-referral-management-coordinate/SKILL.md +513 -0
- package/skills/health-cloud-timeline-configure/SKILL.md +622 -0
- package/skills/health-cloud-virtual-visit-config-configure/SKILL.md +135 -0
- package/skills/industries-account-score-settings-query/SKILL.md +78 -0
- package/skills/industries-actionable-list-data-sources-dmo-configure/SKILL.md +177 -0
- package/skills/industries-ad-product-availability-search/SKILL.md +399 -0
- package/skills/industries-advanced-account-forecast-settings-configure/SKILL.md +628 -0
- package/skills/industries-advanced-therapy-management-settings-configure/SKILL.md +73 -0
- package/skills/industries-atm-settings-starter-configure/SKILL.md +76 -0
- package/skills/industries-batch-document-ai-configure/SKILL.md +196 -0
- package/skills/industries-behavioral-health-app-settings-configure/SKILL.md +71 -0
- package/skills/industries-branch-management-settings-configure/SKILL.md +89 -0
- package/skills/industries-bre-decision-table-access-configure/SKILL.md +367 -0
- package/skills/industries-brokerage-settings-configure/SKILL.md +41 -0
- package/skills/industries-calendar-sync-settings-configure/SKILL.md +89 -0
- package/skills/industries-care-request-settings-configure/SKILL.md +218 -0
- package/skills/industries-case-management-intelligence-settings-configure/SKILL.md +54 -0
- package/skills/industries-catalog-process-attributes-products-configure/SKILL.md +380 -0
- package/skills/industries-catalog-process-fulfillment-configure/SKILL.md +216 -0
- package/skills/industries-catalog-process-intake-configure/SKILL.md +219 -0
- package/skills/industries-catalog-process-knowledge-configure/SKILL.md +153 -0
- package/skills/industries-catalog-process-preprocessor-configure/SKILL.md +168 -0
- package/skills/industries-cds-general-settings-configure/SKILL.md +69 -0
- package/skills/industries-claim-financial-settings-configure/SKILL.md +169 -0
- package/skills/industries-clinical-data-model-settings-configure/SKILL.md +136 -0
- package/skills/industries-clinical-data-model-settings-starter-configure/SKILL.md +105 -0
- package/skills/industries-collection-plan-settings-configure/SKILL.md +132 -0
- package/skills/industries-comms-service-console-settings-configure/SKILL.md +159 -0
- package/skills/industries-compliance-configure/SKILL.md +102 -0
- package/skills/industries-compliance-document-extraction-setup-configure/SKILL.md +76 -0
- package/skills/industries-contact-center-app-layout-configure/SKILL.md +88 -0
- package/skills/industries-contact-center-components-configure/SKILL.md +96 -0
- package/skills/industries-contact-center-path-knowledge-configure/SKILL.md +95 -0
- package/skills/industries-contact-center-user-access-assign/SKILL.md +96 -0
- package/skills/industries-course-waitlist-config-configure/SKILL.md +162 -0
- package/skills/industries-crisis-center-settings-configure/SKILL.md +84 -0
- package/skills/industries-custom-object-settings-configure/SKILL.md +94 -0
- package/skills/industries-data-cloud-integration-configure/SKILL.md +88 -0
- package/skills/industries-data-space-feature-mappings-configure/SKILL.md +245 -0
- package/skills/industries-decision-matrix-builder-configure/SKILL.md +78 -0
- package/skills/industries-decision-table-hbase-configure/SKILL.md +87 -0
- package/skills/industries-decision-table-version-configure/SKILL.md +74 -0
- package/skills/industries-decision-tables-builder-configure/SKILL.md +253 -0
- package/skills/industries-decision-tables-configure/SKILL.md +439 -0
- package/skills/industries-energy-utilities-configure/SKILL.md +251 -0
- package/skills/industries-eu-cloud-multisite-configure/SKILL.md +1008 -0
- package/skills/industries-eu-new-connections-configure/SKILL.md +30 -0
- package/skills/industries-explainability-msg-template-configure/SKILL.md +135 -0
- package/skills/industries-expression-set-message-token-configure/SKILL.md +135 -0
- package/skills/industries-field-service-settings-configure/SKILL.md +82 -0
- package/skills/industries-form-framework-settings-configure/SKILL.md +30 -0
- package/skills/industries-fsc-ai-settings-configure/SKILL.md +57 -0
- package/skills/industries-fsc-association-engine-settings-configure/SKILL.md +172 -0
- package/skills/industries-fsc-b2b-settings-configure/SKILL.md +61 -0
- package/skills/industries-fsc-insurance-settings-configure/SKILL.md +58 -0
- package/skills/industries-fsc-visa-fulfillment-setup-configure/SKILL.md +103 -0
- package/skills/industries-fsc-wealth-agent-settings-configure/SKILL.md +117 -0
- package/skills/industries-fsc-wealth-settings-configure/SKILL.md +99 -0
- package/skills/industries-fundraising-gift-entry-settings-configure/SKILL.md +120 -0
- package/skills/industries-fundraising-rfm-configure/SKILL.md +128 -0
- package/skills/industries-fundraising-settings-configure/SKILL.md +145 -0
- package/skills/industries-fundraising-source-code-gen-configure/SKILL.md +299 -0
- package/skills/industries-google-maps-api-key-settings-configure/SKILL.md +87 -0
- package/skills/industries-grantmaking-intelligence-settings-open/SKILL.md +58 -0
- package/skills/industries-hc-score-category-settings-configure/SKILL.md +167 -0
- package/skills/industries-health-engagement-settings-configure/SKILL.md +218 -0
- package/skills/industries-home-health-agentforce-setup-configure/SKILL.md +131 -0
- package/skills/industries-home-health-bundling-policy-create/SKILL.md +50 -0
- package/skills/industries-home-health-entity-labels-configure/SKILL.md +29 -0
- package/skills/industries-home-health-fsl-package-deploy/SKILL.md +71 -0
- package/skills/industries-home-health-fsl-settings-validate/SKILL.md +27 -0
- package/skills/industries-home-health-guided-setup-care-and-skill-get/SKILL.md +80 -0
- package/skills/industries-home-health-guided-setup-configure/SKILL.md +836 -0
- package/skills/industries-home-health-guided-setup-enable-org-fsl-get/SKILL.md +55 -0
- package/skills/industries-home-health-guided-setup-get-org-ready-get/SKILL.md +61 -0
- package/skills/industries-home-health-licenses-assign/SKILL.md +27 -0
- package/skills/industries-home-health-operating-hours-create/SKILL.md +40 -0
- package/skills/industries-home-health-scheduling-policy-create/SKILL.md +41 -0
- package/skills/industries-home-health-service-objective-create/SKILL.md +22 -0
- package/skills/industries-home-health-skills-create/SKILL.md +31 -0
- package/skills/industries-home-health-users-create/SKILL.md +29 -0
- package/skills/industries-icm-act3-toggles-configure/SKILL.md +198 -0
- package/skills/industries-icm-act5-genai-suggested-assessments-configure/SKILL.md +361 -0
- package/skills/industries-icm-act6-mcg-integration-configure/SKILL.md +550 -0
- package/skills/industries-integrated-care-management-configure/SKILL.md +168 -0
- package/skills/industries-object-enablement-configure/SKILL.md +86 -0
- package/skills/industries-tpm-system-processing-service-configure/SKILL.md +64 -0
- package/skills/insurance-brokerage-agency-billing-configure/SKILL.md +1 -3
- package/skills/integration-apex-settings-configure/SKILL.md +61 -0
- package/skills/marketing-e360-email-archiving-configure/SKILL.md +73 -0
- package/skills/marketing-message-test/SKILL.md +1 -3
- package/skills/nonprofit-fundraising-configure/SKILL.md +240 -0
- package/skills/nonprofit-fundraising-configure/references/gotchas.md +26 -0
- package/skills/nonprofit-fundraising-configure/references/mcp-invocation.md +678 -0
- package/skills/nonprofit-fundraising-configure/references/permission-targeting.md +35 -0
- package/skills/nonprofit-volunteer-management-model-get/SKILL.md +166 -0
- package/skills/nonprofit-volunteer-management-model-get/references/entities.md +315 -0
- package/skills/nonprofit-volunteer-management-model-get/references/relationships.md +175 -0
- package/skills/nonprofit-volunteer-management-model-get/references/themes.md +143 -0
- package/skills/nonprofit-volunteer-management-records-create/SKILL.md +121 -0
- package/skills/nonprofit-volunteer-management-records-create/references/field-guide.md +284 -0
- package/skills/nonprofit-volunteer-management-records-create/references/mcp-invocation.md +248 -0
- package/skills/nonprofit-volunteer-management-records-create/references/review-format.md +140 -0
- package/skills/nonprofit-volunteer-management-records-create/scripts/expand-series.py +632 -0
- package/skills/nonprofit-volunteer-management-records-create/scripts/render-review-table.py +419 -0
- package/skills/nonprofit-volunteer-management-records-create/scripts/tests/test_expand_series.py +690 -0
- package/skills/nonprofit-volunteer-management-records-create/scripts/tests/test_render_review_table.py +421 -0
- package/skills/nonprofit-volunteer-management-structure-generate/SKILL.md +119 -0
- package/skills/nonprofit-volunteer-management-structure-generate/references/configuration-decisions.md +159 -0
- package/skills/nonprofit-volunteer-management-structure-generate/references/discovery-interview.md +137 -0
- package/skills/nonprofit-volunteer-management-structure-generate/references/edge-cases.md +48 -0
- package/skills/nonprofit-volunteer-management-structure-generate/references/mcp-invocation.md +75 -0
- package/skills/nonprofit-volunteer-management-structure-generate/references/plan-output.md +141 -0
- package/skills/platform-custom-field-generate/SKILL.md +1 -0
- package/skills/platform-custom-field-generate/references/advanced-picklists.md +5 -5
- package/skills/platform-custom-metadata-type-generate/SKILL.md +3 -0
- package/skills/platform-custom-object-generate/SKILL.md +4 -0
- package/skills/platform-custom-permissions-configure/SKILL.md +687 -0
- package/skills/platform-custom-setting-generate/SKILL.md +3 -0
- package/skills/platform-datamask-run/SKILL.md +1 -5
- package/skills/platform-label-workbench-import-create/SKILL.md +67 -0
- package/skills/platform-permission-set-generate/SKILL.md +3 -0
- package/skills/platform-privacy-agent-settings-configure/SKILL.md +752 -0
- package/skills/platform-salesforce-connect-adapter-generate/SKILL.md +1 -3
- package/skills/platform-sandbox-configure/SKILL.md +1 -3
- package/skills/platform-value-set-generate/SKILL.md +3 -0
- package/skills/sales-call-scoring-configure/SKILL.md +1 -5
- package/skills/service-agentforce-channel-configure/SKILL.md +1 -3
- package/skills/service-agentforce-human-escalation-configure/SKILL.md +1 -3
- package/skills/service-catalog-template-coordinate/SKILL.md +1 -3
- package/skills/service-concierge-portal-generate/SKILL.md +1 -3
- package/skills/service-email-to-case-configure/SKILL.md +1 -5
- package/skills/service-itsm-agentic-setup-agent-runtime-access-assign/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-cmdb-access-assign/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-cmdb-bundle-deploy/SKILL.md +1 -5
- package/skills/service-itsm-agentic-setup-cmdb-configure/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-cmdb-discovery-configure/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +1 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-uel-user-create/SKILL.md +1 -9
- package/skills/service-itsm-incident-mgmt-configure/SKILL.md +1 -5
- package/skills/service-itsm-incident-priority-configure/SKILL.md +1 -3
- package/skills/service-itsm-slack-itservice-configure/SKILL.md +1 -3
- package/skills/service-itsm-swarming-configure/SKILL.md +1 -3
- package/skills/service-itsm-teams-configure/SKILL.md +1 -3
- package/skills/service-itsm-teams-debug/SKILL.md +1 -3
- package/skills/service-itsm-teams-employee-agent-configure/SKILL.md +1 -3
- package/skills/service-itsm-teams-itdesk-configure/SKILL.md +1 -3
- package/skills/service-itsm-teams-itservice-configure/SKILL.md +1 -3
- package/skills/service-native-voice-recording-transcription-configure/SKILL.md +1 -3
- package/skills/service-omni-agent-users-create/SKILL.md +1 -3
- package/skills/service-omni-agent-work-sharing-configure/SKILL.md +1 -3
- package/skills/service-omni-attribute-routing-configure/SKILL.md +1 -3
- package/skills/service-omni-base-settings-configure/SKILL.md +1 -3
- package/skills/service-omni-channel-inventory-analyze/SKILL.md +1 -3
- package/skills/service-omni-channel-limits-analyze/SKILL.md +1 -3
- package/skills/service-omni-channel-setup-coordinate/SKILL.md +1 -3
- package/skills/service-omni-command-center-analyze/SKILL.md +1 -3
- package/skills/service-omni-command-center-configure/SKILL.md +1 -3
- package/skills/service-omni-permission-set-assign/SKILL.md +1 -3
- package/skills/service-omni-presence-status-deploy/SKILL.md +1 -3
- package/skills/service-omni-presence-user-config-deploy/SKILL.md +1 -3
- package/skills/service-omni-queue-deploy/SKILL.md +1 -3
- package/skills/service-omni-queue-members-assign/SKILL.md +1 -3
- package/skills/service-omni-queue-routing-config-deploy/SKILL.md +1 -3
- package/skills/service-omni-routing-flow-deploy/SKILL.md +1 -3
- package/skills/service-omni-service-channel-configure/SKILL.md +1 -3
- package/skills/service-omni-sidebar-configure/SKILL.md +1 -3
- package/skills/service-omni-skills-based-routing-configure/SKILL.md +1 -3
- package/skills/service-omni-supervisor-config-deploy/SKILL.md +1 -3
- package/skills/service-omni-supervisor-permset-assign/SKILL.md +1 -3
- package/skills/service-omni-supervisor-surface-deploy/SKILL.md +1 -3
- package/skills/service-omni-supervisor-users-create/SKILL.md +1 -3
- package/skills/service-omni-work-skill-routing-configure/SKILL.md +1 -3
- package/skills/tableau-next-asset-create/README.md +0 -65
|
@@ -0,0 +1,614 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: commerce-merchant-catalog-configure
|
|
3
|
+
description: "Use this skill when users want to merchant admin quick-adds a product (pricing/category/entitlement/image atomic), sets up variants (parent + Color/Size/Material children), bulk-imports/exports via CSV, or manages categories (add root/leaf/mid-branch, rename, delete). Trigger when users mention merchant, catalog, management."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
6
|
+
accessCheck: "(Commerce.b2bProductVariantsEnabled) || (Commerce.externalProductMediaEnabled) || (Commerce.orgHasCommerceB2BOrB2CEnabled) || (Commerce.webStoreExists) || (Files.csvReadable) || (User.hasApiEnabledPermission) || (User.hasCommerceAdminPermset)"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Managing Merchant Catalog Management
|
|
10
|
+
|
|
11
|
+
## When to Use This Skill
|
|
12
|
+
|
|
13
|
+
Merchant admin quick-adds a product (pricing/category/entitlement/image atomic), sets up variants (parent + Color/Size/Material children), bulk-imports/exports via CSV, or manages categories (add root/leaf/mid-branch, rename, delete). Caps — 5 attrs/set, 200 variants/parent, 100 sets. Import async — fire + auto-poll 15/30/60/120/180s.
|
|
14
|
+
|
|
15
|
+
## Workflow
|
|
16
|
+
|
|
17
|
+
1. NO PATHS. ONE clarifying q: singular→quick-add; CSV→bulk-import; "variants/sizes/colors"→variants. Never quote SOR/skill/step names.
|
|
18
|
+
|
|
19
|
+
2. QUICK-ADD IS ONE ATOMIC CALL. name+SKU+price+category+optional image URL → ONE creation. URL present → SILENT register-product-image-url first, mediaId → productMedia[]. NEVER add-product-media as follow-up (EXISTING products only).
|
|
20
|
+
|
|
21
|
+
3. URL→mediaId SILENT + AUTOMATIC. Branch A (ExternalMedia,2em) vs B (CMS,20Y) chosen ONCE/session from ExternalProductMediaEnabled. MUTUALLY EXCLUSIVE — no A→B fallback on 404; never expose which ran.
|
|
22
|
+
|
|
23
|
+
4. VOCAB WALL. Never surface:
|
|
24
|
+
- Wire: /services/data/…, connect/…, commerce/management/…, /headless/invoke, composite-products, sObject, dispatcher, controller, Aura, className, v66/v67/v69.
|
|
25
|
+
- Records: Product2, PricebookEntry, Pricebook2, ProductCategory(Product), ProductCatalog, CommerceEntitlementProduct/Policy, BuyerGroup, WebStore, ProductMedia, ProductAttribute(Set), ExternalMedia, ManagedContent, ContentVersion/Document, ElectronicMedia/Group, FieldPermissions.
|
|
26
|
+
- Ids: any 15/18-char prefix (01t/0ZG/0ZE/0ZC/01s/0YT/0DB/20Y/2em/068/069/0iY/0iU/0iX/05f/2mg/2pm).
|
|
27
|
+
- Feature-gate/SOR/step/skill/phase names.
|
|
28
|
+
Merchant vocab: WebStore→"your store"; ProductCategory→"category"; Product2→"product"; unitPrice→"sell price"; listPrice→"was-price"; *Media→"product image"; ProductAttributeSet→"variant options"; use product name ("family"/"parent" only if merchant leads).
|
|
29
|
+
|
|
30
|
+
5. PLAIN CONFIRMS + RECAPS. Pre-fire: "I'll add '{Name}' to your '{storeName}' store at ${price} (was ${listPrice}), in '{categoryName}', with the image. Proceed?" Post: "'{Name}' is live in your '{storeName}' store — ${price} (was ${listPrice}), in '{categoryName}', with the image." BANNED: JSON, ids, endpoint/record names, per-step narration, bulleted recaps, "Product Id:", tables.
|
|
31
|
+
|
|
32
|
+
6. ERROR TRANSLATION. On 422 use quick-add-product field→noun map; ONE plain sentence + action. No errorCode/fieldName/endpoint/record leak.
|
|
33
|
+
|
|
34
|
+
7. STORAGE-BRANCH INTERNAL. "How are images stored?" → "Stored with the product — update/replace anytime from the product page." Never surface ExternalMedia/ManagedContent/preference.
|
|
35
|
+
|
|
36
|
+
8. AMBIGUITY. ONE clarifying q, never a menu.
|
|
37
|
+
|
|
38
|
+
9. QUICK-ADD CHECKLIST. Solicit EVERY input before firing. Silent omission = bug.
|
|
39
|
+
REQUIRED: Store • Name • SKU • Sell price+currency • Category.
|
|
40
|
+
OPTIONAL (one grouped prompt): Was-price • Image URL • Description.
|
|
41
|
+
Confirmation MUST name the category. Post-success, offer skipped items in ONE plain sentence.
|
|
42
|
+
|
|
43
|
+
Category resolution (quick-add + variants):
|
|
44
|
+
a. Merchant NAMED → resolve silently against store's catalog.
|
|
45
|
+
b. Else SOQL LEAF only. Leaf = no children (`count() FROM ProductCategory WHERE ParentCategoryId='<cand>'`=0). Childless root IS a leaf. NEVER auto-assign to a container.
|
|
46
|
+
c. 1 leaf → use silently.
|
|
47
|
+
d. 2+ leaves → "Which section of your store should {productName} show up in? Options: {name1}, {name2}."
|
|
48
|
+
e. 0 leaves → offer to add one: "the store doesn't have a category set up yet — want me to add one first?" If merchant says yes → delegate to create-category (rule 13). Do NOT create silently on the fly.
|
|
49
|
+
Word mismatch: "'{word}' isn't a category in your store yet — want to create it, or use '{default}' for now?" If create → delegate to create-category. Explicit list: render hierarchically.
|
|
50
|
+
|
|
51
|
+
10. ADD-LATER ALWAYS. Image/Price/Category/Description all patchable in one plain sentence.
|
|
52
|
+
|
|
53
|
+
11. VARIANTS: SILENT SET REUSE + EXTEND. See list-product-attribute-sets for EXACT/SUPERSET/PARTIAL/NONE + extend-vs-fork. Surface: "Tshirt is live with Color × Size × Material variants."
|
|
54
|
+
|
|
55
|
+
11a. LIMIT GUARDS. MaxAttrSets=100, MaxItemsPerAttrSet=5, MaxVariationParentProducts=500000, MaxVariationsPerParent=200. Never narrate; surface only on block.
|
|
56
|
+
|
|
57
|
+
11b. FLS ON NEW CUSTOM FIELDS. See create-product-attribute-custom-field — admin silent FLS POST+poll vs non-admin STOP + admin-gap sentence. Never surface FieldPermissions/PermissionSet/describe/poll.
|
|
58
|
+
|
|
59
|
+
11c. MAKE-PURCHASABLE + POST-RECAP SILENCE. assign-entitlement-to-variant-family OWNS the ONE recap sentence + HARD ANTI-PATTERNS + POST-RECAP SILENCE + degraded variant. Everything before it is silent progress.
|
|
60
|
+
|
|
61
|
+
12. BULK-IMPORT CONTRACT. EVERYTHING between file-question (rule 12) and terminal recap (rule 12c) is SILENT except the ONE mapping-table gate (rule 12b). NO per-step narration ("uploading now", "found the catalog", "polling"), NO id/path readouts, NO framework/tool leaks ("task tool", "the SOR says"), NO "I'll do X then Y". If merchant DIDN'T give a file path/attachment, ONE plain q: "Where's the file?" (drag/drop OR path). If merchant already provided it, skip the q — proceed straight to silent upload → derive catalog → list pricebooks/currencies/locales → auto-map (rule 12a) → STOP for mapping gate (rule 12b) → silent import fire + auto-poll ladder → ONE terminal recap sentence (rule 12c → rule 12d).
|
|
62
|
+
|
|
63
|
+
12a. AUTO-MAP HEURISTICS (get-import-mapper-config). Case-insensitive exact → fuzzy on label. Price cols /price|cost|amount|MSRP/i → pricebooks[] rows; parse currency substring, match list-store-pricebooks. Slug cols /slug|permalink|seo-url/i → slugs[] with list-store-locales default. Category/entitlement cols → arrays. Media cols grouped by trailing digit. Variation cols → variation* sections. Zero price cols → skip pricebooks silently. Zero slug cols → skip slugs silently.
|
|
64
|
+
|
|
65
|
+
12b. HARD GATE — MAPPING CONFIRMATION. After auto-map, agent MUST print the mapping table AND stop. Do NOT fire import-products-csv until merchant explicitly approves ("looks good", "go ahead", "yes", "proceed", equivalent). Print-and-fire in the same turn is a BUG. Merchant vocab only: "SKU → Product SKU"; "Price (sale) USD → Pricebook 'B2B USD' (USD) [N others]"; "Slug en_US → Slug (en_US)"; "Media URL 1 / Title 1 → Product image 1". Merchant edits by naming column. Re-render only affected rows on edit. NEVER print section names (product/pricebooks/slugs/media_*), SF field names (StockKeepingUnit, IsActive, ContentVersion), or ids (068/01s/1Ce/0Zu/0ZG/0ZS/704/750). Close the table with exactly: "Okay to import, or want to change anything?"
|
|
66
|
+
|
|
67
|
+
12c. TERMINAL RECAP — ONE SENTENCE. Success template (exact): "Imported {N} products into your '{storeName}' store{, {M} skipped — I can pull the details}." Failure: "Import didn't complete — {reason}. Want me to retry with the same file?" Errors fetched ON DEMAND (importErrorsResource), never eagerly. POST-RECAP SILENCE — no follow-ups.
|
|
68
|
+
GOOD: "Imported 3 products into your 'Acme B2B Store' store, no issues."
|
|
69
|
+
BAD (all rule 12d violations): bullet-list breakdowns, ContentVersion/Job/Product ids, "product page: /lightning/r/…", "1 product updated (SKU 6010007 — Alpine Supply CO2 Cartridge)", quoted CSV headers in the recap, "2 pricebook entries updated", "if you want Insert next time change X", ANY sentence after the recap sentence.
|
|
70
|
+
|
|
71
|
+
12d. RECAP BAN LIST. In the terminal recap sentence, NEVER include: any 15/18-char id (068/01s/1Ce/0Zu/0ZG/0ZS/704/750/01t/2em/20Y/069), any endpoint/URL/path (/lightning/…, /services/…, connect/…, commerce/…), any framework/tool name ("task tool", "the SOR", "Codey", "MCP"), any API field name ("importOperationType", "Upsert", "ContentVersion", "PricebookEntry"), any quoted existing record ("SKU 6010007 — Alpine Supply CO2 Cartridge"), any bullet list / row count / follow-up tip / "next time try X" / "product page:" link. Recap is ONE sentence in merchant vocab. Anything else is a bug.
|
|
72
|
+
|
|
73
|
+
13. CATEGORY MANAGEMENT (add/rename/delete). Merchant vocab only — "category", "section", "group of products". Never surface ProductCategory / CatalogId / ParentCategoryId / 0ZG / 0ZS.
|
|
74
|
+
|
|
75
|
+
Store's catalog is derived silently from the store (derive-catalog-from-webstore). Merchant never picks/names the catalog.
|
|
76
|
+
|
|
77
|
+
13a. ADD (create-category). Any level supported — top-level (root) OR nested (under an existing category). Solicit BOTH inputs before firing:
|
|
78
|
+
- Name (required).
|
|
79
|
+
- Parent — ONE plain question: "Should '{name}' be a top-level category, or nested under an existing one? If nested, which one?"
|
|
80
|
+
• "top-level" / "root" / no parent → ParentCategoryId=null.
|
|
81
|
+
• Nested → resolve merchant's parent word against store's catalog SILENTLY. Multiple matches → "There's more than one '{word}' — which one? {name1} (under {parent1}), {name2} (top-level)." Zero matches → "'{word}' isn't a category yet — want that as a top-level category, or under something else?" One match → use silently.
|
|
82
|
+
Confirm ONCE: "I'll add '{name}' {as a top-level category | under '{parentName}'}. Proceed?" Post: "'{name}' is live {as a top-level category | under '{parentName}'} — you can now put products in it."
|
|
83
|
+
|
|
84
|
+
13b. RENAME (update-category). Rename only. Rule-0 confirmation gate with current+new name: "I'll rename '{currentName}' to '{newName}'. Proceed?" Post: "Renamed to '{newName}'." Never surface Name/PATCH/sObject.
|
|
85
|
+
|
|
86
|
+
13c. DELETE (delete-category). DESTRUCTIVE-OP HARD GATE — server does NOT block. Deleting a category with products silently drops those products' category assignments; buyers stop seeing them under that section. Pre-check product count SILENTLY (list-categories query returns NumberOfProducts). Gate templates:
|
|
87
|
+
- 0 products AND no child categories → single confirm: "I'll delete the '{name}' category. Proceed?" Post: "Deleted '{name}'."
|
|
88
|
+
- N products (>0) → "Heads up — '{name}' has {N} product{s} in it. If I delete it, {those products stay live but lose their spot in this section | that product stays live but loses its spot in this section}. Want me to move {them|it} to another category first, or go ahead and delete?" If merchant asks to move → delegate to assign-product-to-category. If merchant confirms delete → fire.
|
|
89
|
+
- Has child categories → BLOCK. "'{name}' has other categories nested under it ({childCount}). Delete or move those first, then I can delete '{name}'." NEVER auto-cascade — the platform will, but the merchant hasn't consented to losing the whole subtree.
|
|
90
|
+
Never surface: 0ZG ids, ProductCategoryProduct, cascade, DELETE verb, sObject.
|
|
91
|
+
|
|
92
|
+
13d. LIST-FOR-BROWSING (list-categories). Merchant asks "what categories do I have?" / "show my sections" → single hierarchical readout with product counts. Format: parent categories at top-level with "({N} products)" suffix, children indented one level with "({M} products)". Empty catalog → "This store doesn't have any categories yet — want to add one?" Never surface ids/CatalogId/NumberOfProducts field name.
|
|
93
|
+
|
|
94
|
+
## Critical Constraints
|
|
95
|
+
|
|
96
|
+
**Preconditions:**
|
|
97
|
+
|
|
98
|
+
- CommerceAdmin permset. (check: `User.hasCommerceAdminPermset`)
|
|
99
|
+
- B2B Commerce enabled. (check: `Commerce B2B or B2C enabled`)
|
|
100
|
+
- Caller knows a B2B WebStore id (0ZE). (check: `Commerce.webStoreExists`)
|
|
101
|
+
- Bulk-import only — CSV available (drag/drop OR path); agent uploads via upload-csv-to-files. (check: `Files.csvReadable`)
|
|
102
|
+
- Variants only — B2BProductVariants ON + Product2 Sharing=Public. (check: `Commerce.b2bProductVariantsEnabled`)
|
|
103
|
+
- External-media only — ExternalProductMediaEnabled ON. (check: `Commerce.externalProductMediaEnabled`)
|
|
104
|
+
- API Enabled permission. (check: `API Enabled permission`)
|
|
105
|
+
|
|
106
|
+
**Operational rules:**
|
|
107
|
+
|
|
108
|
+
- INTERNAL — never quote. Capability blurb only.
|
|
109
|
+
|
|
110
|
+
**Destructive operations — require explicit user confirmation:**
|
|
111
|
+
|
|
112
|
+
- **`delete-category`** — Delete a category from the store's catalog. Destructive-op hard gate — server does NOT block on assigned products; cascade drops ProductCategoryProduct rows silently.
|
|
113
|
+
- Rollback: {'operation': 'none_available', 'note': 'DELETE on ProductCategory is IRREVERSIBLE. ProductCategoryProduct junction rows are cascade-dropped by the platform, not recoverable via sObject POST (would need re-insert per (Product,Category) pair). Merchant re-creates via create-category + re-assigns via assign-product-to-category.'}
|
|
114
|
+
|
|
115
|
+
## Verification Checklist
|
|
116
|
+
|
|
117
|
+
After every write operation, confirm the effect by re-reading state:
|
|
118
|
+
|
|
119
|
+
- After `export-products-csv`: call `poll-export-job` (`GET /commerce/management/export/product/jobs`)
|
|
120
|
+
|
|
121
|
+
## Operations Reference
|
|
122
|
+
|
|
123
|
+
Operations grouped by purpose. Use these as the building blocks for the workflows above.
|
|
124
|
+
|
|
125
|
+
### Summary
|
|
126
|
+
|
|
127
|
+
| Operation | Purpose | Status | Call | Depends on |
|
|
128
|
+
|-----------|---------|--------|------|------------|
|
|
129
|
+
| `upload-csv-to-files` | write | implemented | `POST /sobjects/ContentVersion` | — |
|
|
130
|
+
| `derive-catalog-from-webstore` | read | implemented | `GET /query` | — |
|
|
131
|
+
| `list-store-pricebooks` | read | implemented | `GET /query` | — |
|
|
132
|
+
| `list-org-currencies` | read | implemented | `GET /query` | — |
|
|
133
|
+
| `list-store-locales` | read | implemented | `GET /query` | — |
|
|
134
|
+
| `get-import-mapper-config` | read | implemented | `GET /commerce/management/custom/import/mapper-config/{importObjectType}` | — |
|
|
135
|
+
| `import-products-csv` | write | implemented | `POST /commerce/management/custom/import/product/jobs` | `upload-csv-to-files`, `derive-catalog-from-webstore`, `get-import-mapper-config` |
|
|
136
|
+
| `poll-import-job` | read | implemented | `GET /commerce/management/custom/import/product/jobs/{jobId}` | `import-products-csv` |
|
|
137
|
+
| `register-product-image-url` | write | implemented | `POST /sobjects/ExternalMedia` | — |
|
|
138
|
+
| `quick-add-product` | write | implemented | `POST /commerce/management/webstore/{webstoreId}/composite-products` | — |
|
|
139
|
+
| `assign-product-to-category` | write | implemented | `POST /sobjects/ProductCategoryProduct` | — |
|
|
140
|
+
| `list-categories` | read | implemented | `GET /query` | — |
|
|
141
|
+
| `create-category` | write | implemented | `POST /sobjects/ProductCategory` | `derive-catalog-from-webstore`, `list-categories` |
|
|
142
|
+
| `update-category` | write | implemented | `PATCH /sobjects/ProductCategory/{id}` | `list-categories` |
|
|
143
|
+
| `delete-category` | delete | implemented | `DELETE /sobjects/ProductCategory/{id}` | `list-categories` |
|
|
144
|
+
| `list-product-attribute-sets` | read | implemented | `GET /query` | — |
|
|
145
|
+
| `create-product-attribute-custom-field` | write | implemented | `POST /tooling/sobjects/CustomField` | — |
|
|
146
|
+
| `create-product-attribute-set` | write | implemented | `POST /composite` | `create-product-attribute-custom-field` |
|
|
147
|
+
| `add-attribute-to-existing-set` | write | implemented | `POST /sobjects/ProductAttributeSetItem` | — |
|
|
148
|
+
| `backfill-variant-attribute-value` | write | implemented | `PATCH /sobjects/ProductAttribute/{id} (after GET /query for target ids)` | — |
|
|
149
|
+
| `create-master-product` | write | implemented | `POST /composite` | `create-product-attribute-set` |
|
|
150
|
+
| `create-variant-product` | write | implemented | `POST /composite` | `create-master-product` |
|
|
151
|
+
| `set-variant-family-pricing` | write | implemented | `POST /composite` | `create-master-product`, `create-variant-product` |
|
|
152
|
+
| `assign-entitlement-to-variant-family` | write | implemented | `POST /composite` | `create-master-product`, `create-variant-product` |
|
|
153
|
+
| `add-product-media` | write | implemented | `POST /sobjects/ProductMedia` | — |
|
|
154
|
+
| `export-products-csv` | write | implemented | `POST /commerce/management/export/product/jobs` | `derive-catalog-from-webstore` |
|
|
155
|
+
| `poll-export-job` | verify | implemented | `GET /commerce/management/export/product/jobs` | `export-products-csv` |
|
|
156
|
+
|
|
157
|
+
### Dependency graph
|
|
158
|
+
|
|
159
|
+
```mermaid
|
|
160
|
+
graph TD
|
|
161
|
+
upload_csv_to_files["upload-csv-to-files (write)"]
|
|
162
|
+
derive_catalog_from_webstore["derive-catalog-from-webstore (read)"]
|
|
163
|
+
list_store_pricebooks["list-store-pricebooks (read)"]
|
|
164
|
+
list_org_currencies["list-org-currencies (read)"]
|
|
165
|
+
list_store_locales["list-store-locales (read)"]
|
|
166
|
+
get_import_mapper_config["get-import-mapper-config (read)"]
|
|
167
|
+
import_products_csv["import-products-csv (write)"]
|
|
168
|
+
poll_import_job["poll-import-job (read)"]
|
|
169
|
+
register_product_image_url["register-product-image-url (write)"]
|
|
170
|
+
quick_add_product["quick-add-product (write)"]
|
|
171
|
+
assign_product_to_category["assign-product-to-category (write)"]
|
|
172
|
+
list_categories["list-categories (read)"]
|
|
173
|
+
create_category["create-category (write)"]
|
|
174
|
+
update_category["update-category (write)"]
|
|
175
|
+
delete_category["delete-category (delete)"]
|
|
176
|
+
list_product_attribute_sets["list-product-attribute-sets (read)"]
|
|
177
|
+
create_product_attribute_custom_field["create-product-attribute-custom-field (write)"]
|
|
178
|
+
create_product_attribute_set["create-product-attribute-set (write)"]
|
|
179
|
+
add_attribute_to_existing_set["add-attribute-to-existing-set (write)"]
|
|
180
|
+
backfill_variant_attribute_value["backfill-variant-attribute-value (write)"]
|
|
181
|
+
create_master_product["create-master-product (write)"]
|
|
182
|
+
create_variant_product["create-variant-product (write)"]
|
|
183
|
+
set_variant_family_pricing["set-variant-family-pricing (write)"]
|
|
184
|
+
assign_entitlement_to_variant_family["assign-entitlement-to-variant-family (write)"]
|
|
185
|
+
add_product_media["add-product-media (write)"]
|
|
186
|
+
export_products_csv["export-products-csv (write)"]
|
|
187
|
+
poll_export_job["poll-export-job (verify)"]
|
|
188
|
+
upload_csv_to_files --> import_products_csv
|
|
189
|
+
derive_catalog_from_webstore --> import_products_csv
|
|
190
|
+
get_import_mapper_config --> import_products_csv
|
|
191
|
+
import_products_csv --> poll_import_job
|
|
192
|
+
derive_catalog_from_webstore --> create_category
|
|
193
|
+
list_categories --> create_category
|
|
194
|
+
list_categories --> update_category
|
|
195
|
+
list_categories --> delete_category
|
|
196
|
+
create_product_attribute_custom_field --> create_product_attribute_set
|
|
197
|
+
create_product_attribute_set --> create_master_product
|
|
198
|
+
create_master_product --> create_variant_product
|
|
199
|
+
create_master_product --> set_variant_family_pricing
|
|
200
|
+
create_variant_product --> set_variant_family_pricing
|
|
201
|
+
create_master_product --> assign_entitlement_to_variant_family
|
|
202
|
+
create_variant_product --> assign_entitlement_to_variant_family
|
|
203
|
+
derive_catalog_from_webstore --> export_products_csv
|
|
204
|
+
export_products_csv --> poll_export_job
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Read operations
|
|
208
|
+
|
|
209
|
+
#### `derive-catalog-from-webstore`
|
|
210
|
+
|
|
211
|
+
Bulk-import prep — resolves the store's ProductCatalogId silently.
|
|
212
|
+
|
|
213
|
+
**Call:** `GET /query` — status: `implemented`
|
|
214
|
+
|
|
215
|
+
**Inputs:**
|
|
216
|
+
|
|
217
|
+
- `webstoreId` *(`String`)* — 0ZE.
|
|
218
|
+
|
|
219
|
+
**Rollback:** {'operation': 'none_needed', 'note': 'Read-only.'}
|
|
220
|
+
|
|
221
|
+
#### `list-store-pricebooks`
|
|
222
|
+
|
|
223
|
+
Bulk-import prep — active pricebooks attached to the store (mapping-table picker).
|
|
224
|
+
|
|
225
|
+
**Call:** `GET /query` — status: `implemented`
|
|
226
|
+
|
|
227
|
+
**Inputs:**
|
|
228
|
+
|
|
229
|
+
- `webstoreId` *(`String`)* — 0ZE.
|
|
230
|
+
|
|
231
|
+
**Rollback:** {'operation': 'none_needed', 'note': 'Read-only.'}
|
|
232
|
+
|
|
233
|
+
#### `list-org-currencies`
|
|
234
|
+
|
|
235
|
+
Bulk-import prep — active currencies (multi-currency picker).
|
|
236
|
+
|
|
237
|
+
**Call:** `GET /query` — status: `implemented`
|
|
238
|
+
|
|
239
|
+
**Rollback:** {'operation': 'none_needed', 'note': 'Read-only.'}
|
|
240
|
+
|
|
241
|
+
#### `list-store-locales`
|
|
242
|
+
|
|
243
|
+
Bulk-import prep — supported languages for slug mapping.
|
|
244
|
+
|
|
245
|
+
**Call:** `GET /query` — status: `implemented`
|
|
246
|
+
|
|
247
|
+
**Inputs:**
|
|
248
|
+
|
|
249
|
+
- `webstoreId` *(`String`)* — 0ZE.
|
|
250
|
+
|
|
251
|
+
**Rollback:** {'operation': 'none_needed', 'note': 'Read-only.'}
|
|
252
|
+
|
|
253
|
+
#### `get-import-mapper-config`
|
|
254
|
+
|
|
255
|
+
Bulk-import prep — fetches column catalog for CSV mapping.
|
|
256
|
+
|
|
257
|
+
**Call:** `GET /commerce/management/custom/import/mapper-config/{importObjectType}` — status: `implemented`
|
|
258
|
+
|
|
259
|
+
**Inputs:**
|
|
260
|
+
|
|
261
|
+
- `importObjectType` *(`String`)* — Always "Product". Category/Pricing → UNSUPPORTED_MODE.
|
|
262
|
+
- `storeId` *(`String`)* — 0ZE. Omit → org-wide defaults (wrong store risk).
|
|
263
|
+
|
|
264
|
+
**Rollback:** {'operation': 'none_needed', 'note': 'N/A.'}
|
|
265
|
+
|
|
266
|
+
#### `poll-import-job`
|
|
267
|
+
|
|
268
|
+
Import job status. Poll ladder 15/30/60/120/180s until endTime.
|
|
269
|
+
|
|
270
|
+
**Call:** `GET /commerce/management/custom/import/product/jobs/{jobId}` — status: `implemented`
|
|
271
|
+
|
|
272
|
+
**Inputs:**
|
|
273
|
+
|
|
274
|
+
- `jobId` *(`String`)* — Job id. Lost → GET /last-job.
|
|
275
|
+
|
|
276
|
+
**Depends on:** `import-products-csv`
|
|
277
|
+
|
|
278
|
+
**Rollback:** {'operation': 'none_needed', 'note': 'Read-only op. No rollback.'}
|
|
279
|
+
|
|
280
|
+
#### `list-categories`
|
|
281
|
+
|
|
282
|
+
Store's category tree with product counts. Powers rule 13a parent resolution, rule 13c delete gate, rule 13d readout, and rule 11c leaf resolution.
|
|
283
|
+
|
|
284
|
+
**Call:** `GET /query` — status: `implemented`
|
|
285
|
+
|
|
286
|
+
**Inputs:**
|
|
287
|
+
|
|
288
|
+
- `webstoreId` *(`String`)* — 0ZE. Drives the catalog subquery — never asked directly.
|
|
289
|
+
|
|
290
|
+
**Rollback:** {'operation': 'none_needed', 'note': 'Read-only.'}
|
|
291
|
+
|
|
292
|
+
#### `list-product-attribute-sets`
|
|
293
|
+
|
|
294
|
+
Variants discovery (silent). Lists sets+items ONCE to drive rule-11.
|
|
295
|
+
|
|
296
|
+
**Call:** `GET /query` — status: `implemented`
|
|
297
|
+
|
|
298
|
+
### Write operations
|
|
299
|
+
|
|
300
|
+
#### `upload-csv-to-files`
|
|
301
|
+
|
|
302
|
+
Bulk-import prep — uploads merchant CSV to Files, returns 068 ContentVersionId.
|
|
303
|
+
|
|
304
|
+
**Call:** `POST /sobjects/ContentVersion` — status: `implemented`
|
|
305
|
+
|
|
306
|
+
**Inputs:**
|
|
307
|
+
|
|
308
|
+
- `fileName` *(`String`)* — CSV file name (Title + PathOnClient).
|
|
309
|
+
- `fileContentBase64` *(`String`)* — base64-encoded CSV bytes → VersionData.
|
|
310
|
+
|
|
311
|
+
**Rollback:** {'operation': 'sobject_delete', 'note': 'DELETE ContentDocument (parent) if job never fires. Terminal job → keep for audit.'}
|
|
312
|
+
|
|
313
|
+
#### `import-products-csv`
|
|
314
|
+
|
|
315
|
+
Async (10s-5min). Kicks import; poll-import-job auto-follows.
|
|
316
|
+
|
|
317
|
+
**Call:** `POST /commerce/management/custom/import/product/jobs` — status: `implemented`
|
|
318
|
+
|
|
319
|
+
**Inputs:**
|
|
320
|
+
|
|
321
|
+
- `importContext` *(`String (enum)`)* — "Api" for direct REST callers.
|
|
322
|
+
- `importOperationType` *(`String (enum)`)* — Insert/Update/Upsert (Upsert recommended).
|
|
323
|
+
- `columnMappings` *(`Object`)* — Nested per-section object. product/variationAttributeSet/variationParentInfo → OBJECT {sfField:csvHeader}. categories/entitlementPolicies/media_*/variationAttributes → ARRAY of per-row objects (cap maxAllowed). pricebooks → ARRAY [{Price:csvHeader,PricebookId:01s,CurrencyCode:ISO}]. slugs → ARRAY [{Slug:csvHeader,LanguageCode:code}]. product MUST include Name + one of Id/ExternalId/StockKeepingUnit.
|
|
324
|
+
- `webstoreId` *(`String`)* — 0ZE → globalImportParameters.webstoreId (NOT storeId).
|
|
325
|
+
- `productCatalogId` *(`String`)* — 0ZS — derived from WebStoreCatalog, not asked.
|
|
326
|
+
- `entitlementPolicyId` *(`String`)* — 1Ce — from mapper `defaults.entitlementPolicy.id`.
|
|
327
|
+
- `cmsWorkspaceId` *(`String`)* — 0Zu — from mapper `defaults.CMSWorkspace.id`.
|
|
328
|
+
- `contentVersionId` *(`String`)* — 068 ContentVersion id (from upload-csv-to-files).
|
|
329
|
+
- **Source:** output of `upload-csv-to-files`
|
|
330
|
+
- `delimiter` *(`String`)* — CSV delimiter (default comma).
|
|
331
|
+
|
|
332
|
+
**Depends on:** `upload-csv-to-files`, `derive-catalog-from-webstore`, `get-import-mapper-config`
|
|
333
|
+
|
|
334
|
+
**Rollback:** {'operation': 'cancel-import-job', 'note': 'PATCH `{"status":"Cancelled"}` while running. Terminal = no-op. Created rows must be deleted manually.'}
|
|
335
|
+
|
|
336
|
+
#### `register-product-image-url`
|
|
337
|
+
|
|
338
|
+
INTERNAL. URL→mediaId for composite-products. A (v69 ExternalMedia→2em) or B (v67 cms/contents→20Y). Both feed same slot.
|
|
339
|
+
|
|
340
|
+
**Call:** `POST /sobjects/ExternalMedia` — status: `implemented`
|
|
341
|
+
|
|
342
|
+
**Inputs:**
|
|
343
|
+
|
|
344
|
+
- `imageUrl` *(`String`)* — https URL ≤1000 chars.
|
|
345
|
+
- `productName` *(`String`)* — Title + AlternateText.
|
|
346
|
+
- `contentSpaceId` *(`String`)* — Branch B only. 0Zu (once/session).
|
|
347
|
+
- `apiName` *(`String`)* — Branch B only.
|
|
348
|
+
|
|
349
|
+
**Rollback:** {'operation': 'sobject_delete', 'note': 'A → DELETE ExternalMedia/{2em}. B → DELETE cms/contents/{20Y}.'}
|
|
350
|
+
|
|
351
|
+
#### `quick-add-product`
|
|
352
|
+
|
|
353
|
+
Atomic — Product2 + Standard PBE + Strikethrough PBE + PCP/category + ProductMedia in ONE POST. 201/productId or 422/errorDetails.
|
|
354
|
+
|
|
355
|
+
**Call:** `POST /commerce/management/webstore/{webstoreId}/composite-products` — status: `implemented`
|
|
356
|
+
|
|
357
|
+
**Inputs:**
|
|
358
|
+
|
|
359
|
+
- `webstoreId` *(`String`)* — 0ZE WebStore id (path).
|
|
360
|
+
- `productFields` *(`Object`)* — Nested object — Name, ProductCode (SKU), StockKeepingUnit=SKU, Family, IsActive=true.
|
|
361
|
+
- `categoryIds` *(`Array<String>`)* — 0ZG ids. First=primary. Rule-11c.
|
|
362
|
+
- `productPricing` *(`Object`)* — Nested object {currencyISOCode,unitPrice,listPrice}. unitPrice→Standard PBE; listPrice→Strikethrough PBE.
|
|
363
|
+
- `productMedia` *(`Array<Object>`)* — Optional array of {developerName,mediaId}. developerName MUST be "productListImage" or "productDetailImage" (ElectronicMediaGroup.DeveloperName — NOT an arbitrary label). Emit BOTH entries with same mediaId. 2em/20Y interchangeable.
|
|
364
|
+
- `attributeSetInfo` *(`Object`)* — Variation flow only.
|
|
365
|
+
|
|
366
|
+
**Rollback:** {'operation': 'sobject_delete', 'note': 'DELETE Product2/{productId} cascades to PBE/PCP/ProductMedia. Irreversible.'}
|
|
367
|
+
|
|
368
|
+
#### `assign-product-to-category`
|
|
369
|
+
|
|
370
|
+
POST ProductCategoryProduct (IsPrimaryCategory=FALSE for quick-add). Reassign = DELETE prior PCP.
|
|
371
|
+
|
|
372
|
+
**Call:** `POST /sobjects/ProductCategoryProduct` — status: `implemented`
|
|
373
|
+
|
|
374
|
+
**Inputs:**
|
|
375
|
+
|
|
376
|
+
- `productId` *(`String`)* — 01t. Variants → MASTER only.
|
|
377
|
+
- `categoryId` *(`String`)* — 0ZG. Must be in store's catalog; never a root container.
|
|
378
|
+
- `isPrimaryCategory` *(`Boolean`)* — Default true.
|
|
379
|
+
|
|
380
|
+
**Rollback:** {'operation': 'sobject_delete', 'note': 'DELETE ProductCategoryProduct/{pcp_id}. 404 on retry OK.'}
|
|
381
|
+
|
|
382
|
+
#### `create-category`
|
|
383
|
+
|
|
384
|
+
Add a category to the store's catalog. Supports any hierarchy level — top-level (ParentCategoryId=null), leaf (ParentCategoryId=leaf-parent), or mid-branch (ParentCategoryId=intermediate).
|
|
385
|
+
|
|
386
|
+
**Call:** `POST /sobjects/ProductCategory` — status: `implemented`
|
|
387
|
+
|
|
388
|
+
**Inputs:**
|
|
389
|
+
|
|
390
|
+
- `name` *(`String`)* — Category display name (Name field, ≤200 chars).
|
|
391
|
+
- `webstoreId` *(`String`)* — 0ZE. Drives catalogId derivation — never asked.
|
|
392
|
+
- `productCatalogId` *(`String`)* — 0ZS. Silent — never surfaced.
|
|
393
|
+
- `parentCategoryId` *(`String`)* — 0ZG parent Id, or null/omitted for top-level. Rule 13a resolves merchant's parent word silently.
|
|
394
|
+
|
|
395
|
+
**Depends on:** `derive-catalog-from-webstore`, `list-categories`
|
|
396
|
+
|
|
397
|
+
**Rollback:** {'operation': 'sobject_delete', 'note': 'DELETE ProductCategory/{category_id}. Note — if products already assigned via ProductCategoryProduct, deletion cascades those junction rows silently.'}
|
|
398
|
+
|
|
399
|
+
#### `update-category`
|
|
400
|
+
|
|
401
|
+
Rename a category. PATCH Name only — no other field changes in scope.
|
|
402
|
+
|
|
403
|
+
**Call:** `PATCH /sobjects/ProductCategory/{id}` — status: `implemented`
|
|
404
|
+
|
|
405
|
+
**Inputs:**
|
|
406
|
+
|
|
407
|
+
- `categoryId` *(`String`)* — 0ZG target category Id. Merchant names the category; agent resolves silently.
|
|
408
|
+
- `newName` *(`String`)* — New display name (≤200 chars).
|
|
409
|
+
|
|
410
|
+
**Depends on:** `list-categories`
|
|
411
|
+
|
|
412
|
+
**Rollback:** {'operation': 'sobject_update', 'note': 'PATCH Name back to prior value. Note — no server-side undo.'}
|
|
413
|
+
|
|
414
|
+
#### `create-product-attribute-custom-field`
|
|
415
|
+
|
|
416
|
+
Variants picklist CustomField on ProductAttribute. Returns Tooling Id.
|
|
417
|
+
|
|
418
|
+
**Call:** `POST /tooling/sobjects/CustomField` — status: `implemented`
|
|
419
|
+
|
|
420
|
+
**Inputs:**
|
|
421
|
+
|
|
422
|
+
- `FullName` *(`String`)* — ProductAttribute.<apiName>__c
|
|
423
|
+
- `label` *(`String`)* — Label.
|
|
424
|
+
- `type` *(`String (enum)`)* — Picklist.
|
|
425
|
+
- `values` *(`Array<String>`)* — Values (locked at create).
|
|
426
|
+
- `restricted` *(`Boolean`)* — true.
|
|
427
|
+
|
|
428
|
+
**Rollback:** {'operation': 'metadata_delete', 'note': 'DELETE Tooling CustomField/{id}. Access errors = silent no-op.'}
|
|
429
|
+
|
|
430
|
+
#### `create-product-attribute-set`
|
|
431
|
+
|
|
432
|
+
Variants ProductAttributeSet grouping the parent CFs. Max 5 items; 1 set/parent.
|
|
433
|
+
|
|
434
|
+
**Call:** `POST /composite` — status: `implemented`
|
|
435
|
+
|
|
436
|
+
**Inputs:**
|
|
437
|
+
|
|
438
|
+
- `name` *(`String`)* — Set name.
|
|
439
|
+
- `description` *(`String`)* — Optional.
|
|
440
|
+
- `assignedAttributeFieldIds` *(`Array<String>`)* — 00N Tooling Ids ≤5. Field=ID not apiName.
|
|
441
|
+
- `groupedByAttributeId` *(`String`)* — One id gets IsGroupedBy=true.
|
|
442
|
+
|
|
443
|
+
**Depends on:** `create-product-attribute-custom-field`
|
|
444
|
+
|
|
445
|
+
**Rollback:** {'operation': 'sobject_delete', 'note': 'DELETE ProductAttributeSet/{id} — cascades to items. Not reversible.'}
|
|
446
|
+
|
|
447
|
+
#### `add-attribute-to-existing-set`
|
|
448
|
+
|
|
449
|
+
Rule-11 EXTEND. Adds one attr to existing set. After custom-field, before backfill.
|
|
450
|
+
|
|
451
|
+
**Call:** `POST /sobjects/ProductAttributeSetItem` — status: `implemented`
|
|
452
|
+
|
|
453
|
+
**Inputs:**
|
|
454
|
+
|
|
455
|
+
- `ProductAttributeSetId` *(`String`)* — 0iY set Id.
|
|
456
|
+
- `Field` *(`String`)* — Tooling CustomField Id (00Nxxx), NOT apiName. Passing apiName → INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST.
|
|
457
|
+
- `Sequence` *(`Integer`)* — Display order.
|
|
458
|
+
|
|
459
|
+
#### `backfill-variant-attribute-value`
|
|
460
|
+
|
|
461
|
+
Rule-11 EXTEND. Backfills existing variants with a default value. HARD GATE — prompt for default up front.
|
|
462
|
+
|
|
463
|
+
**Call:** `PATCH /sobjects/ProductAttribute/{id} (after GET /query for target ids)` — status: `implemented`
|
|
464
|
+
|
|
465
|
+
**Inputs:**
|
|
466
|
+
|
|
467
|
+
- `ProductAttributeSetId` *(`String`)* — Extended set.
|
|
468
|
+
- `fieldApiName` *(`String`)* — e.g. Material__c (include __c).
|
|
469
|
+
- `defaultValue` *(`String`)* — Default applied to ALL existing children. Must match one of the picklist values. HARD GATE.
|
|
470
|
+
|
|
471
|
+
#### `create-master-product`
|
|
472
|
+
|
|
473
|
+
Variants parent. Composite — Product2 Type=Base + ProductAttributeSetProduct.
|
|
474
|
+
|
|
475
|
+
**Call:** `POST /composite` — status: `implemented`
|
|
476
|
+
|
|
477
|
+
**Inputs:**
|
|
478
|
+
|
|
479
|
+
- `Name` *(`String`)* — Parent name.
|
|
480
|
+
- `ProductCode` *(`String`)* — Parent SKU (org-unique).
|
|
481
|
+
- `StockKeepingUnit` *(`String`)* — =ProductCode.
|
|
482
|
+
- `Family` *(`String`)* — Optional.
|
|
483
|
+
- `attributeSetId` *(`String`)* — 0iY set id.
|
|
484
|
+
|
|
485
|
+
**Depends on:** `create-product-attribute-set`
|
|
486
|
+
|
|
487
|
+
**Rollback:** {'operation': 'sobject_delete', 'note': 'DELETE master Product2 (variants FIRST — VariantParentId blocks master).'}
|
|
488
|
+
|
|
489
|
+
#### `create-variant-product`
|
|
490
|
+
|
|
491
|
+
Variants children. Composite — Product2 + ProductAttribute per child.
|
|
492
|
+
|
|
493
|
+
**Call:** `POST /composite` — status: `implemented`
|
|
494
|
+
|
|
495
|
+
**Inputs:**
|
|
496
|
+
|
|
497
|
+
- `masterProductId` *(`String`)* — 01t master.
|
|
498
|
+
- `variants` *(`Array<Object>`)* — {Name,ProductCode,StockKeepingUnit,Family,attributes:{Color__c,…}} per variant. Attr keys=picklist fields in master set.
|
|
499
|
+
|
|
500
|
+
**Depends on:** `create-master-product`
|
|
501
|
+
|
|
502
|
+
**Rollback:** {'operation': 'sobject_delete', 'note': 'DELETE each variant Product2. BEFORE master (VariantParentId blocks).'}
|
|
503
|
+
|
|
504
|
+
#### `set-variant-family-pricing`
|
|
505
|
+
|
|
506
|
+
Variants pricing. Standard PBEs then Store PBEs — order matters.
|
|
507
|
+
|
|
508
|
+
**Call:** `POST /composite` — status: `implemented`
|
|
509
|
+
|
|
510
|
+
**Inputs:**
|
|
511
|
+
|
|
512
|
+
- `masterProductId` *(`String`)* — 01t master.
|
|
513
|
+
- `variantProductIds` *(`Array<String>`)* — 01t variant ids.
|
|
514
|
+
- `unitPrice` *(`Number`)* — Sell price.
|
|
515
|
+
- `listPrice` *(`Number`)* — Optional was-price.
|
|
516
|
+
- `storePricebookIds` *(`Array<String>`)* — 01s store pricebooks.
|
|
517
|
+
- `standardPricebookId` *(`String`)* — 01s Standard PB (first).
|
|
518
|
+
|
|
519
|
+
**Depends on:** `create-master-product`, `create-variant-product`
|
|
520
|
+
|
|
521
|
+
**Rollback:** {'operation': 'sobject_delete', 'note': 'DELETE each PBE Id. Standard first → cascades custom entries.'}
|
|
522
|
+
|
|
523
|
+
#### `assign-entitlement-to-variant-family`
|
|
524
|
+
|
|
525
|
+
Variants entitlement. CommerceEntitlementProduct across master+variants × policies. Without this buyers see nothing.
|
|
526
|
+
|
|
527
|
+
**Call:** `POST /composite` — status: `implemented`
|
|
528
|
+
|
|
529
|
+
**Inputs:**
|
|
530
|
+
|
|
531
|
+
- `masterProductId` *(`String`)* — 01t master.
|
|
532
|
+
- `variantProductIds` *(`Array<String>`)* — 01t variant ids.
|
|
533
|
+
- `entitlementPolicyIds` *(`Array<String>`)* — 2rt policy ids.
|
|
534
|
+
|
|
535
|
+
**Depends on:** `create-master-product`, `create-variant-product`
|
|
536
|
+
|
|
537
|
+
**Rollback:** {'operation': 'sobject_delete', 'note': 'DELETE each CommerceEntitlementProduct Id.'}
|
|
538
|
+
|
|
539
|
+
#### `add-product-media`
|
|
540
|
+
|
|
541
|
+
Attach image URL to EXISTING product. Silent — 2× ProductMedia (List+Detail). NOT for quick-add.
|
|
542
|
+
|
|
543
|
+
**Call:** `POST /sobjects/ProductMedia` — status: `implemented`
|
|
544
|
+
|
|
545
|
+
**Inputs:**
|
|
546
|
+
|
|
547
|
+
- `productId` *(`String`)* — 01t.
|
|
548
|
+
- `imageUrl` *(`String`)* — HTTPS URL.
|
|
549
|
+
- `altText` *(`String`)* — Screen-reader text. Skippable.
|
|
550
|
+
- `title` *(`String`)* — Optional; defaults to Name.
|
|
551
|
+
|
|
552
|
+
**Rollback:** {'operation': 'sobject_delete', 'note': 'DELETE each ProductMedia (2pm). Underlying media record NOT deleted.'}
|
|
553
|
+
|
|
554
|
+
#### `export-products-csv`
|
|
555
|
+
|
|
556
|
+
Async export (10s-2min). Store-scoped SOQL over Product2 → CSV in Files.
|
|
557
|
+
|
|
558
|
+
**Call:** `POST /commerce/management/export/product/jobs` — status: `implemented`
|
|
559
|
+
|
|
560
|
+
**Inputs:**
|
|
561
|
+
|
|
562
|
+
- `productsInCompositeList` *(`String`)* — Source: output of derive-catalog-from-webstore (for the store-wide 0ZS catalog id), merchant.confirmedColumns
|
|
563
|
+
(from the pre-fire columns gate, see agent_guidance rule 1), and merchant.exportScope (either "catalog"
|
|
564
|
+
default or "category" with a merchant-picked 0ZG).
|
|
565
|
+
|
|
566
|
+
Despite the wire field name, this is a SOQL SELECT string against Product2 (LIMIT 300000), NOT a
|
|
567
|
+
CompositeList Id. The SELECT list becomes the CSV column headers; the WHERE clause scopes the export
|
|
568
|
+
via a subquery on ProductCategoryProduct.CatalogId (store-wide) or ProductCategoryProduct.ProductCategoryId
|
|
569
|
+
(category-scoped). Agent composes the full string just before firing. Raw product ids in the WHERE clause
|
|
570
|
+
fail accept-stage validation — always route through the ProductCategoryProduct join.
|
|
571
|
+
|
|
572
|
+
**Depends on:** `derive-catalog-from-webstore`
|
|
573
|
+
|
|
574
|
+
**Rollback:** {'operation': 'none_available', 'note': 'Export cannot be cancelled. Post-run — DELETE ContentDocument.'}
|
|
575
|
+
|
|
576
|
+
### Verify operations
|
|
577
|
+
|
|
578
|
+
#### `poll-export-job`
|
|
579
|
+
|
|
580
|
+
Verify + poll — export job status. Ladder 15/30/60/120/180s until endTime populates. Confirms the export-products-csv write landed.
|
|
581
|
+
|
|
582
|
+
**Call:** `GET /commerce/management/export/product/jobs` — status: `implemented`
|
|
583
|
+
|
|
584
|
+
**Inputs:**
|
|
585
|
+
|
|
586
|
+
- `jobId` *(`String`)* — Job id captured from the export POST. Used client-side to filter the collection response.
|
|
587
|
+
|
|
588
|
+
**Depends on:** `export-products-csv`
|
|
589
|
+
|
|
590
|
+
**Rollback:** {'operation': 'none_needed', 'note': 'Read-only op. No rollback.'}
|
|
591
|
+
|
|
592
|
+
### Destructive operations
|
|
593
|
+
|
|
594
|
+
#### `delete-category`
|
|
595
|
+
|
|
596
|
+
Delete a category from the store's catalog. Destructive-op hard gate — server does NOT block on assigned products; cascade drops ProductCategoryProduct rows silently.
|
|
597
|
+
|
|
598
|
+
**Call:** `DELETE /sobjects/ProductCategory/{id}` — status: `implemented`
|
|
599
|
+
|
|
600
|
+
**Inputs:**
|
|
601
|
+
|
|
602
|
+
- `categoryId` *(`String`)* — 0ZG target category Id. Merchant names the category; agent resolves silently.
|
|
603
|
+
|
|
604
|
+
**Depends on:** `list-categories`
|
|
605
|
+
|
|
606
|
+
**Rollback:** {'operation': 'none_available', 'note': 'DELETE on ProductCategory is IRREVERSIBLE. ProductCategoryProduct junction rows are cascade-dropped by the platform, not recoverable via sObject POST (would need re-insert per (Product,Category) pair). Merchant re-creates via create-category + re-assigns via assign-product-to-category.'}
|
|
607
|
+
|
|
608
|
+
## Notes
|
|
609
|
+
|
|
610
|
+
Act 2 of b2b-store-setup. Consumes a WebStore from merchant-storefront-lifecycle.
|
|
611
|
+
|
|
612
|
+
Recovery: import timeout → GET .../import/product/last-job; resume or retry. 500 "another import in progress" → wait 60-120s+retry. Poll 404 → jobId expired (~7d). create-variant 500 UNABLE_TO_LOCK_ROW → serialize+retry. 401 re-auth. 403 = missing CommerceAdmin/userIsStoreMerchandiser.
|
|
613
|
+
|
|
614
|
+
Out of scope: CSV upload, product deletion, catalog/pricebook creation, cross-catalog moves, moving a category to a new parent (rename-in-place only), category image (ProductCategoryMedia). Category ADD/RENAME/DELETE are in scope (rule 13, create-category / update-category / delete-category).
|