@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,727 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: experience-custom-domain-create
|
|
3
|
+
description: "System-of-record describing the Salesforce Connect REST API routes for managing custom domains — onboard a new domain to Cloudflare (the only supported CDN partner), list registered domains, check pending-configuration status, activate a domain, list / fetch custom URLs for a domain or site, and associate a domain to a site. Routes only — runtime dispatch (auth, transport, retries) is handled by the MCP tool that consumes this description."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sf-custom-domain
|
|
9
|
+
|
|
10
|
+
System-of-record for the Salesforce Connect REST API routes used to manage custom domains. **This skill describes the API contract only — it does not invoke any CLI or shell commands.** Runtime dispatch (auth, transport, retries) is the responsibility of the MCP tool that consumes this description.
|
|
11
|
+
|
|
12
|
+
Nine user-facing operations against `/services/data/v<version>/connect/custom-domain/...`:
|
|
13
|
+
|
|
14
|
+
- **Onboard** — trigger phrases: "onboard `<domain>`", "register `<domain>` to cloudflare", "add custom domain `<domain>`". Primary route: `POST /connect/custom-domain/domains`.
|
|
15
|
+
- **List domains** — trigger phrases: "list custom domains", "show all custom domains", "what domains are registered". Primary route: `GET /connect/custom-domain/domains`.
|
|
16
|
+
- **Pending status** — trigger phrases: "status of `<domain>`", "pending configuration for `<domain>`", "is `<domain>` activated yet". Primary route: `GET /connect/custom-domain/domains/{domainId}/pending-configuration`.
|
|
17
|
+
- **Activate** — trigger phrases: "activate `<domain>`", "activate custom domain `<domain>`", "move `<domain>` to active". Primary route: `POST /connect/custom-domain/domains/{domainId}/activate`.
|
|
18
|
+
- **List URLs by domain** — trigger phrases: "list urls for `<domain>`", "custom urls on `<domain>`", "what urls point at `<domain>`". Primary route: `GET /connect/custom-domain/domains/{domainId}/custom-urls`.
|
|
19
|
+
- **List all URLs** — trigger phrases: "list all custom urls", "all custom urls", "every custom url in the org", "show me all the urls". Composes **List domains** + **List URLs by domain** for each.
|
|
20
|
+
- **Get URL** — trigger phrases: "show url `<customUrlId>`", "details of url `<customUrlId>` on `<domain>`". Primary route: `GET /connect/custom-domain/domains/{domainId}/custom-urls/{customUrlId}`.
|
|
21
|
+
- **List URLs by site** — trigger phrases: "list urls for site `<siteId>`", "custom urls on site `<storeOrSiteId>`". Primary route: `GET /connect/custom-domain/domains/sites/{storeOrSiteId}/custom-urls`.
|
|
22
|
+
- **Associate domain to site** — trigger phrases: "associate `<domain>` with site `<siteName|siteId>`", "attach site `<siteName|siteId>` to `<domain>` at path `<path>`", "associate site `<siteName>` with `<domain>`", "add a custom url". Primary route: `POST /connect/custom-domain/domains/{domainId}/custom-urls`.
|
|
23
|
+
|
|
24
|
+
API version is read from `constants.json`, which pins `apiVersion` to **v67.0** for every operation in this skill — always call these routes at v67.0 or higher.
|
|
25
|
+
|
|
26
|
+
See the companion `references.md` for DNS-prerequisite documentation and Connect API reference material.
|
|
27
|
+
|
|
28
|
+
## Output rules — strict (applies to all ops)
|
|
29
|
+
|
|
30
|
+
- The skill produces *exactly one* result message and stops. No follow-up verification, no extra tables, no "should I also..." questions.
|
|
31
|
+
- Do not run additional checks after the result message. If something needs verifying, the user will ask separately.
|
|
32
|
+
- Confirmation prompts are allowed only at the points called out below ("proceed despite warnings"). Nowhere else.
|
|
33
|
+
|
|
34
|
+
## Common — error-shape contract
|
|
35
|
+
|
|
36
|
+
All Connect API errors follow the standard Salesforce shape: an array of `{errorCode, message}`. When mapping errors, surface the first entry's message verbatim and apply the per-operation error tables below. If the response indicates an unknown / unsupported endpoint, suggest checking the API version on https://developer.salesforce.com/docs/atlas.en-us.chatterapi.meta/chatterapi/connect_resources_custom_domain_resources.htm and confirm the org supports v67.0+ — see `constants.json`. Never retry automatically — the user retries.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Operation: Onboard
|
|
41
|
+
|
|
42
|
+
Register a new custom domain. The CDN partner is always Cloudflare (the only supported `cdnPartner` enum value).
|
|
43
|
+
|
|
44
|
+
### Required inputs
|
|
45
|
+
|
|
46
|
+
- `domainName` — required. Strip leading/trailing whitespace, lowercase. Reject if it doesn't match a basic FQDN pattern (`^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$`). If not supplied, ask:
|
|
47
|
+
> What domain do you want to onboard? (e.g. `www.example.com`)
|
|
48
|
+
- `cdnPartner` — always `Cloudflare`. This is the only supported enum value. If the user supplies any value other than `cloudflare`/`Cloudflare` (case-insensitive), reject the request (see edge cases). Normalize to the exact string `Cloudflare` before sending.
|
|
49
|
+
- `configurationOption` — always `CdnPartner` for this skill. Other options (`ExternalHttps`, `NoHttps`, `SitesRuntime`) are out of scope.
|
|
50
|
+
|
|
51
|
+
### Helper routes (optional, for remediation only)
|
|
52
|
+
|
|
53
|
+
Two read-only Connect API routes return the authoritative CNAME-target values for a domain. They are **not** invoked as part of onboarding — Salesforce runs its own validation when the registration POST is called and returns a clear error if DNS isn't ready. These routes exist so the consumer can surface the expected target in error remediation when Salesforce's own message doesn't include it.
|
|
54
|
+
|
|
55
|
+
**Route — ownership CNAME**
|
|
56
|
+
- **Method/path:** `GET /services/data/v<version>/connect/custom-domain/domains/{domainName}/expected-cname`
|
|
57
|
+
- **Request:** no body.
|
|
58
|
+
- **Response shape (200):** JSON object containing the CNAME target the domain's DNS must point to.
|
|
59
|
+
|
|
60
|
+
**Route — CDN validation CNAME**
|
|
61
|
+
- **Method/path:** `GET /services/data/v<version>/connect/custom-domain/domains/{domainName}/expected-cdn-validation-cname`
|
|
62
|
+
- **Request:** no body.
|
|
63
|
+
- **Response shape (200):** JSON object containing the `_acme-challenge.<domain>` CNAME target the CDN partner uses for cert provisioning.
|
|
64
|
+
|
|
65
|
+
If both routes return `NOT_FOUND` at the configured API version, the documented format is `[domainName].[orgId-lowercased].live.siteforce.com` (see `references.md`). On internal/non-production stacks the actual provisioned target may include extra path segments before `siteforce.com` — the API routes above are the source of truth; the constructed format is best-effort.
|
|
66
|
+
|
|
67
|
+
### Step 1: Register the domain
|
|
68
|
+
|
|
69
|
+
- **Method/path:** `POST /services/data/v<version>/connect/custom-domain/domains`
|
|
70
|
+
- **Response shape (success, HTTP 2xx):** JSON object with `domainId` and `domainName` (and additional metadata fields).
|
|
71
|
+
|
|
72
|
+
**Request body:**
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"domainName": "<domainName>",
|
|
77
|
+
"configurationOption": "CdnPartner",
|
|
78
|
+
"cdnPartner": "Cloudflare"
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
`cdnPartner` is fixed to the literal string `"Cloudflare"`; it is the only supported enum value.
|
|
83
|
+
|
|
84
|
+
### Step 2: Interpret the response
|
|
85
|
+
|
|
86
|
+
**On success:**
|
|
87
|
+
```text
|
|
88
|
+
## ✅ Domain submitted for provisioning
|
|
89
|
+
|
|
90
|
+
- **Domain**: `<domainName>`
|
|
91
|
+
- **CDN partner**: `<cdnPartner>`
|
|
92
|
+
- **API version**: v<version>
|
|
93
|
+
|
|
94
|
+
The domain has been submitted to Salesforce for provisioning — it is **not active yet**. Provisioning can take up to 24 hours.
|
|
95
|
+
|
|
96
|
+
Salesforce response (pretty-printed JSON):
|
|
97
|
+
<pretty-printed response>
|
|
98
|
+
|
|
99
|
+
Next step: check provisioning status with `pending configuration for <domainName>`.
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**On error** — map the first entry of the JSON error array. Standard known error patterns:
|
|
103
|
+
|
|
104
|
+
- **`can't validate the domain` AND `CNAME record may still be processing`** → DNS not ready. **Extract the expected CNAME target from the error message itself** — Salesforce includes it in the message ("Make sure the domain name X uses Y as its CNAME target"). Quote that target verbatim to the user. DNS can take up to 24 hours to propagate. If the error message doesn't include the target, fall back to calling `GET /connect/custom-domain/domains/<domainName>/expected-cname` (or the documented format `<domain>.<orgIdLower>.live.siteforce.com`).
|
|
105
|
+
- **`domain may not belong to you`** (without the CNAME-processing phrase) → Salesforce can't prove ownership of `<domain>`. Get the authoritative CNAME target via `GET /connect/custom-domain/domains/<domainName>/expected-cname` and tell the user the CNAME must point there so Salesforce can verify control.
|
|
106
|
+
- **`DUPLICATE_VALUE` / `already exists` / `already registered`** → `<domain>` is already registered in this org. Use the `list custom domains` op to see all registered domains, or check pending-configuration.
|
|
107
|
+
- **`INVALID_INPUT` and message mentions `domainName`** → `<domain>` failed format validation by Salesforce. Confirm it's a valid public FQDN you control (no leading/trailing dots, no underscores, valid TLD).
|
|
108
|
+
- **`INSUFFICIENT_ACCESS` / `INSUFFICIENT_ACCESS_OR_READONLY`** → the user doesn't have permission to register custom domains. Ask an admin to grant the relevant permission set (often `Modify All Data` or a custom-domain-specific perm set).
|
|
109
|
+
- **`NOT_FOUND` and the path is `/connect/custom-domain/domains`** → the API endpoint isn't available at v<version>. Check https://developer.salesforce.com/docs/atlas.en-us.chatterapi.meta/chatterapi/connect_resources_custom_domain_resources.htm for the current "Available Version" of `POST /connect/custom-domain/domains`.
|
|
110
|
+
- **Anything else** → surface the raw `errorCode` + `message` verbatim, then suggest: "If this looks like a wrong API version, check the endpoint's Available Version on https://developer.salesforce.com/docs/atlas.en-us.chatterapi.meta/chatterapi/connect_resources_custom_domain_resources.htm."
|
|
111
|
+
|
|
112
|
+
Always wrap the error in:
|
|
113
|
+
|
|
114
|
+
```text
|
|
115
|
+
## ❌ Onboarding failed
|
|
116
|
+
|
|
117
|
+
- **Domain**: `<domainName>`
|
|
118
|
+
- **CDN partner**: `<cdnPartner>`
|
|
119
|
+
|
|
120
|
+
**Error**: `<errorCode>` — `<one-line summary>`
|
|
121
|
+
|
|
122
|
+
**What this means:** <plain-English from the table above>
|
|
123
|
+
|
|
124
|
+
**What to try:** <action from the table above>
|
|
125
|
+
|
|
126
|
+
Raw response (JSON):
|
|
127
|
+
<error JSON>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Operation: List
|
|
133
|
+
|
|
134
|
+
List all custom domains registered in the org.
|
|
135
|
+
|
|
136
|
+
### API call
|
|
137
|
+
|
|
138
|
+
- **Method/path:** `GET /services/data/v<version>/connect/custom-domain/domains`
|
|
139
|
+
- **Request:** no body.
|
|
140
|
+
- **Response shape (success):** JSON object whose primary array contains entries with `domainId` and `domainName` (and additional metadata fields).
|
|
141
|
+
|
|
142
|
+
### Display
|
|
143
|
+
|
|
144
|
+
**Success:** render as a markdown table.
|
|
145
|
+
```text
|
|
146
|
+
## Custom domains
|
|
147
|
+
|
|
148
|
+
| Domain ID | Domain Name |
|
|
149
|
+
|---|---|
|
|
150
|
+
| 0I4… | <name1> |
|
|
151
|
+
| 0I4… | <name2> |
|
|
152
|
+
```
|
|
153
|
+
If the array is empty: `No custom domains are registered.`
|
|
154
|
+
|
|
155
|
+
**Error:** same wrapper as Onboard's error block, minus the domain-specific fields.
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Operation: Pending status
|
|
160
|
+
|
|
161
|
+
Fetch the in-flight provisioning status of a single domain.
|
|
162
|
+
|
|
163
|
+
### Required input
|
|
164
|
+
|
|
165
|
+
- `domainName` — required. If not given, ask for it.
|
|
166
|
+
|
|
167
|
+
### Step 1: Resolve domainId from domainName
|
|
168
|
+
|
|
169
|
+
Call the **List** route to get the full `{domainId, domainName}` mapping. Find the entry with `domainName == <user-supplied>` (case-insensitive match).
|
|
170
|
+
|
|
171
|
+
- **Found** → carry `domainId` forward.
|
|
172
|
+
- **Not found** → surface a clear error and list valid choices, then stop (no further calls):
|
|
173
|
+
|
|
174
|
+
```text
|
|
175
|
+
## ❌ Domain not found
|
|
176
|
+
|
|
177
|
+
`<user-supplied>` is not registered. Registered domains:
|
|
178
|
+
|
|
179
|
+
- `<name1>` — `<id1>`
|
|
180
|
+
- `<name2>` — `<id2>`
|
|
181
|
+
…
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Step 2: Fetch pending configuration
|
|
185
|
+
|
|
186
|
+
- **Method/path:** `GET /services/data/v<version>/connect/custom-domain/domains/{domainId}/pending-configuration`
|
|
187
|
+
- **Request:** no body.
|
|
188
|
+
- **Response shape (success, HTTP 2xx with body):** JSON object containing `domainStatus`, `configurationOption`, `cdnPartnerOptions`, `associateType` (and additional metadata fields).
|
|
189
|
+
- **Special-case response:** `NOT_FOUND` / `The requested resource does not exist` is the **expected** outcome when the domain is fully provisioned with no pending configuration — render this as success, not as an error.
|
|
190
|
+
|
|
191
|
+
### Step 3: Display
|
|
192
|
+
|
|
193
|
+
**On success (HTTP 2xx with body):** pretty-print the JSON inside a result block; surface the key fields if present (`domainStatus`, `configurationOption`, `cdnPartnerOptions`, `associateType`).
|
|
194
|
+
```text
|
|
195
|
+
## Pending configuration — `<domainName>`
|
|
196
|
+
|
|
197
|
+
- **Domain ID**: `<domainId>`
|
|
198
|
+
- **Status**: `<domainStatus>`
|
|
199
|
+
- **Config option**: `<configurationOption>`
|
|
200
|
+
- **CDN partner**: `<cdnPartner if any>`
|
|
201
|
+
- **Associate type**: `<associateType>`
|
|
202
|
+
|
|
203
|
+
Full response (pretty-printed JSON):
|
|
204
|
+
<pretty-printed body>
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**`NOT_FOUND` / `The requested resource does not exist`:**
|
|
208
|
+
```text
|
|
209
|
+
## ✅ No pending configuration
|
|
210
|
+
|
|
211
|
+
`<domainName>` (`<domainId>`) has no pending configuration — it appears to be fully provisioned and active.
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
This is *not* an error. Do not show a red ❌ block.
|
|
215
|
+
|
|
216
|
+
**Other errors:** generic error wrapper, surface `errorCode` + `message` verbatim.
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Operation: Activate
|
|
221
|
+
|
|
222
|
+
Move a domain whose `domainStatus` is `AwaitingActivation` to `Completed`.
|
|
223
|
+
|
|
224
|
+
### Required input
|
|
225
|
+
|
|
226
|
+
- `domainName` — required. If not given, ask for it.
|
|
227
|
+
|
|
228
|
+
### Step 1: Resolve domainId from domainName
|
|
229
|
+
|
|
230
|
+
Call the **List** route (using the global `apiVersion`) to get the full `{domainId, domainName}` mapping. Find the entry with `domainName == <user-supplied>` (case-insensitive match).
|
|
231
|
+
|
|
232
|
+
- **Found** → carry `domainId` forward.
|
|
233
|
+
- **Not found** → same "Domain not found" block as Pending status. Stop.
|
|
234
|
+
|
|
235
|
+
### Step 2: Activate
|
|
236
|
+
|
|
237
|
+
Use the global `apiVersion` (v67.0).
|
|
238
|
+
|
|
239
|
+
- **Method/path:** `POST /services/data/v<version>/connect/custom-domain/domains/{domainId}/activate`
|
|
240
|
+
- **Request body:** `{}` (empty JSON object — required even though the operation takes no parameters).
|
|
241
|
+
- **Response shape (success, HTTP 2xx):** JSON object containing `domainName` and the new `domainStatus` (and additional metadata fields).
|
|
242
|
+
|
|
243
|
+
### Step 3: Interpret the response
|
|
244
|
+
|
|
245
|
+
**On success:**
|
|
246
|
+
```text
|
|
247
|
+
## ✅ Domain activated
|
|
248
|
+
|
|
249
|
+
- **Domain**: `<domainName>`
|
|
250
|
+
- **Domain ID**: `<domainId>`
|
|
251
|
+
- **Status**: `<domainStatus>`
|
|
252
|
+
- **API version**: v<version>
|
|
253
|
+
|
|
254
|
+
Salesforce response (pretty-printed JSON):
|
|
255
|
+
<pretty-printed response>
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**Known error patterns:**
|
|
259
|
+
|
|
260
|
+
- **`INVALID_INPUT` and message contains `must be in AwaitingActivation status`** → `<domainName>` is not in `AwaitingActivation` status — it cannot be activated right now. Check current status with `pending configuration for <domainName>`. If it's already `Completed`, no action is needed.
|
|
261
|
+
- **`NOT_FOUND` / `The requested resource does not exist`** → the activate endpoint isn't available at the configured version. Check https://developer.salesforce.com/docs/atlas.en-us.chatterapi.meta/chatterapi/connect_resources_custom_domain_resources.htm for the current Available Version.
|
|
262
|
+
- **`INSUFFICIENT_ACCESS` / `INSUFFICIENT_ACCESS_OR_READONLY`** → the user doesn't have permission to activate custom domains. Ask an admin to grant the relevant permission set.
|
|
263
|
+
- **Anything else** → surface raw `errorCode` + `message` verbatim.
|
|
264
|
+
|
|
265
|
+
Wrap errors in:
|
|
266
|
+
```text
|
|
267
|
+
## ❌ Activation failed
|
|
268
|
+
|
|
269
|
+
- **Domain**: `<domainName>`
|
|
270
|
+
- **Domain ID**: `<domainId>`
|
|
271
|
+
- **API version**: v<version>
|
|
272
|
+
|
|
273
|
+
**Error**: `<errorCode>` — `<one-line summary>`
|
|
274
|
+
|
|
275
|
+
**What this means:** <plain-English from the table above>
|
|
276
|
+
|
|
277
|
+
**What to try:** <action from the table above>
|
|
278
|
+
|
|
279
|
+
Raw response (JSON):
|
|
280
|
+
<error JSON>
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## Operation: List URLs by domain
|
|
286
|
+
|
|
287
|
+
List every custom URL bound to a registered custom domain. Each row carries the domain ↔ site association (a single domain can serve multiple paths, each routed to a different site).
|
|
288
|
+
|
|
289
|
+
### Required input
|
|
290
|
+
|
|
291
|
+
- `domainName` *or* `domainId` — exactly one is required. If only `domainName` is given, resolve `domainId` via the **List domains** route (case-insensitive match). If neither is given, ask:
|
|
292
|
+
> Which domain do you want the custom URLs for? (`<domainName>` or `<domainId>`)
|
|
293
|
+
|
|
294
|
+
### API call
|
|
295
|
+
|
|
296
|
+
- **Method/path:** `GET /services/data/v<version>/connect/custom-domain/domains/{domainId}/custom-urls`
|
|
297
|
+
- **Request:** no body.
|
|
298
|
+
- **Response shape (success, HTTP 2xx):** JSON object with a `customUrls` array. Each entry contains: `customUrlId`, `domainId`, `domainName`, `path`, `primarySiteUrl`, `siteId`, `siteName`, `siteType` (Community / LightningExperience / etc.). May also include `lastModified` and `status` (`Published`, `Preview`, etc.). The response shape does **not** carry site description — use the [Site metadata enrichment](#site-metadata-enrichment-site-entity) section below if needed.
|
|
299
|
+
|
|
300
|
+
### Display
|
|
301
|
+
|
|
302
|
+
Render as a markdown table.
|
|
303
|
+
|
|
304
|
+
```text
|
|
305
|
+
## Custom URLs on `<domainName>` (`<domainId>`)
|
|
306
|
+
|
|
307
|
+
| customUrlId | path | siteId | siteName | siteType | primary | status |
|
|
308
|
+
|---|---|---|---|---|---|---|
|
|
309
|
+
| 0Jf… | / | 0DM… | t1 | Community | false | Published |
|
|
310
|
+
…
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
If the array is empty: `No custom URLs are associated with <domainName> yet.`
|
|
314
|
+
|
|
315
|
+
**Error:** generic error wrapper from Onboard.
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## Operation: List all URLs
|
|
320
|
+
|
|
321
|
+
Aggregate every custom URL across every registered domain in the org. The Connect API does **not** expose an org-wide custom-URL list — this op is a composition of two existing routes: **List domains** to discover the domain set, then **List URLs by domain** for each `domainId`.
|
|
322
|
+
|
|
323
|
+
Use when the user asks "show me all the custom urls", "list all custom urls", or any phrasing that implies org-wide scope without naming a specific domain or site.
|
|
324
|
+
|
|
325
|
+
### No additional inputs
|
|
326
|
+
|
|
327
|
+
Take no arguments. Do not ask the user to narrow scope — the whole point of this op is "everything." If the user already named a domain or site, route to **List URLs by domain** or **List URLs by site** instead.
|
|
328
|
+
|
|
329
|
+
### Step 1: List all domains
|
|
330
|
+
|
|
331
|
+
Call **List domains**:
|
|
332
|
+
- **Method/path:** `GET /services/data/v<version>/connect/custom-domain/domains`
|
|
333
|
+
- **Request:** no body.
|
|
334
|
+
- **Response shape:** JSON object whose primary array contains entries with `domainId` and `domainName`.
|
|
335
|
+
|
|
336
|
+
If the array is empty:
|
|
337
|
+
```text
|
|
338
|
+
## No custom URLs
|
|
339
|
+
|
|
340
|
+
No custom domains are registered in this org, so there are no custom URLs to list.
|
|
341
|
+
```
|
|
342
|
+
Stop. No further calls.
|
|
343
|
+
|
|
344
|
+
If the call errors, surface the generic error wrapper from Onboard. Stop.
|
|
345
|
+
|
|
346
|
+
### Step 2: For each `domainId`, fetch its custom URLs
|
|
347
|
+
|
|
348
|
+
For each `(domainId, domainName)` from Step 1, call **List URLs by domain**:
|
|
349
|
+
- **Method/path:** `GET /services/data/v<version>/connect/custom-domain/domains/{domainId}/custom-urls`
|
|
350
|
+
- **Request:** no body.
|
|
351
|
+
- **Response shape:** JSON object with a `customUrls` array (per-row shape: `customUrlId`, `domainId`, `domainName`, `path`, `primarySiteUrl`, `siteId`, `siteName`, `siteType`, optional `lastModified`, `status`).
|
|
352
|
+
|
|
353
|
+
These calls are independent and **may be issued in parallel** (the consuming runtime decides — this skill does not constrain concurrency). Treat each per-domain call independently:
|
|
354
|
+
- Per-domain success → append rows to the aggregate.
|
|
355
|
+
- Per-domain failure → record the error with its `domainName` and `domainId`, but **do not abort the whole op**. Continue with the remaining domains.
|
|
356
|
+
- Per-domain empty array → silently include 0 rows for that domain (no error, no separate "empty" annotation in the per-row table).
|
|
357
|
+
|
|
358
|
+
### Step 3: Display
|
|
359
|
+
|
|
360
|
+
Render one consolidated table sorted by `domainName`, then `path`. Domains with zero URLs are listed in a separate one-liner block at the bottom so they're not lost.
|
|
361
|
+
|
|
362
|
+
```text
|
|
363
|
+
## All custom URLs in the org
|
|
364
|
+
|
|
365
|
+
| Domain | customUrlId | path | siteId | siteName | siteType | primary | status |
|
|
366
|
+
|---|---|---|---|---|---|---|---|
|
|
367
|
+
| <domainName1> | 0Jf… | / | 0DM… | t1 | Community | false | Published |
|
|
368
|
+
| <domainName1> | 0Jf… | /lwr2vforcesite | 0DM… | lwr2 | Community | false | Published |
|
|
369
|
+
| <domainName2> | 0Jf… | / | 0DM… | s1 | Communities | true | Published |
|
|
370
|
+
…
|
|
371
|
+
|
|
372
|
+
**Totals**: <N> URLs across <M> domain(s).
|
|
373
|
+
|
|
374
|
+
**Domains with no URLs yet**: `<domainName3>`, `<domainName4>` (if any — omit this line otherwise).
|
|
375
|
+
|
|
376
|
+
**Per-domain failures** (if any — omit this block otherwise):
|
|
377
|
+
- `<domainName>` (`<domainId>`) — `<errorCode>`: `<message>`
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
If the aggregate row count is zero AND every per-domain call succeeded:
|
|
381
|
+
```text
|
|
382
|
+
## No custom URLs
|
|
383
|
+
|
|
384
|
+
<M> domain(s) registered, none with any custom URLs yet:
|
|
385
|
+
- `<domainName1>` (`<domainId>`)
|
|
386
|
+
…
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
If **every** per-domain call errored, surface the failures and stop:
|
|
390
|
+
```text
|
|
391
|
+
## ❌ List all URLs failed
|
|
392
|
+
|
|
393
|
+
All <M> per-domain `GET .../custom-urls` calls returned errors. Likely a permission, version, or auth issue affecting the whole org rather than one domain.
|
|
394
|
+
|
|
395
|
+
Per-domain errors:
|
|
396
|
+
- `<domainName>` — `<errorCode>`: `<message>`
|
|
397
|
+
…
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
### Output rules (specific to this op)
|
|
401
|
+
|
|
402
|
+
- **Single result message.** Even though the op makes N+1 API calls, render exactly one consolidated message at the end. Do not stream per-domain progress updates.
|
|
403
|
+
- **Don't auto-fall-back.** If `GET /domains/{domainId}/custom-urls` returns the same shape of server-side bug as `GET /custom-urls/{customUrlId}` (`INTERNAL_ERROR / query returned more than one row`), record the failure for that domain and move on — do not rerun anything for that domain.
|
|
404
|
+
- **No per-URL details fetch.** This op does not call `Get URL` for each row; the **List URLs by domain** response carries everything needed for the table.
|
|
405
|
+
|
|
406
|
+
---
|
|
407
|
+
|
|
408
|
+
## Operation: Get URL
|
|
409
|
+
|
|
410
|
+
Fetch metadata for a single custom URL by its `customUrlId`.
|
|
411
|
+
|
|
412
|
+
### Required input
|
|
413
|
+
|
|
414
|
+
- `domainId` (or `domainName` resolved via List) and `customUrlId` — both required. If only `customUrlId` is given without a domain, resolve via **List URLs by site** or **List URLs by domain** first.
|
|
415
|
+
|
|
416
|
+
### API call
|
|
417
|
+
|
|
418
|
+
- **Method/path:** `GET /services/data/v<version>/connect/custom-domain/domains/{domainId}/custom-urls/{customUrlId}`
|
|
419
|
+
- **Request:** no body.
|
|
420
|
+
- **Response shape (success, HTTP 2xx):** single JSON object with the same per-row fields as **List URLs by domain** (`customUrlId`, `domainId`, `domainName`, `path`, `primarySiteUrl`, `siteId`, `siteName`, `siteType`, plus optional `lastModified`, `status`).
|
|
421
|
+
|
|
422
|
+
### Display
|
|
423
|
+
|
|
424
|
+
Pretty-print as a key/value block:
|
|
425
|
+
|
|
426
|
+
```text
|
|
427
|
+
## Custom URL `<customUrlId>` on `<domainName>`
|
|
428
|
+
|
|
429
|
+
- **Path**: `<path>`
|
|
430
|
+
- **Primary**: `<primarySiteUrl>`
|
|
431
|
+
- **Site**: `<siteName>` (`<siteId>`, `<siteType>`)
|
|
432
|
+
- **Status**: `<status>`
|
|
433
|
+
- **Last modified**: `<lastModified>`
|
|
434
|
+
|
|
435
|
+
Full response (pretty-printed JSON):
|
|
436
|
+
<pretty-printed body>
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
### Known issue: `INTERNAL_ERROR` / `query returned more than one row`
|
|
440
|
+
|
|
441
|
+
The endpoint occasionally returns HTTP 500 with:
|
|
442
|
+
```text
|
|
443
|
+
errorCode: INTERNAL_ERROR
|
|
444
|
+
message: "ERROR: query returned more than one row ..."
|
|
445
|
+
```
|
|
446
|
+
Reason: if the site behind the requested `customUrlId` is published under more than one domain/path mapping, the lookup matches multiple rows and can't disambiguate. Site-side ambiguity, not a `customUrlId` collision — `customUrlId` itself is unique.
|
|
447
|
+
|
|
448
|
+
**When this fires:** surface a clear, plain-English message and **fall back** to the **List URLs by domain** op so the user can locate the row by `path` instead. Do not retry the same call.
|
|
449
|
+
|
|
450
|
+
```text
|
|
451
|
+
## ⚠ Custom URL lookup failed (server-side issue)
|
|
452
|
+
|
|
453
|
+
The `GET .../custom-urls/<customUrlId>` endpoint returned `INTERNAL_ERROR` on `<domainName>` — this is a known server-side bug where the stored procedure can't pick a single row.
|
|
454
|
+
|
|
455
|
+
Falling back to listing all custom URLs on the domain instead.
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
Then immediately render the **List URLs by domain** result for the same `domainId`.
|
|
459
|
+
|
|
460
|
+
**Other errors:** generic error wrapper.
|
|
461
|
+
|
|
462
|
+
---
|
|
463
|
+
|
|
464
|
+
## Operation: List URLs by site
|
|
465
|
+
|
|
466
|
+
Fetch every custom URL associated with a given site / store, across all custom domains in the org. Useful when you have a `siteId` and want to discover which domain(s) it sits behind.
|
|
467
|
+
|
|
468
|
+
### Required input
|
|
469
|
+
|
|
470
|
+
- `storeOrSiteId` — required. The 15-char or 18-char Salesforce ID of the site or store (`0DM…` for Communities, `0DR…` etc.). If not given, ask for it.
|
|
471
|
+
|
|
472
|
+
### API call
|
|
473
|
+
|
|
474
|
+
- **Method/path:** `GET /services/data/v<version>/connect/custom-domain/domains/sites/{storeOrSiteId}/custom-urls`
|
|
475
|
+
- **Request:** no body.
|
|
476
|
+
- **Response shape (success, HTTP 2xx):** JSON object with a `customUrls` array using the same per-row shape as **List URLs by domain**. May also surface `lastModified` and `status`.
|
|
477
|
+
|
|
478
|
+
### Display
|
|
479
|
+
|
|
480
|
+
```text
|
|
481
|
+
## Custom URLs for site `<siteName>` (`<storeOrSiteId>`)
|
|
482
|
+
|
|
483
|
+
| customUrlId | domainName | path | primary | status |
|
|
484
|
+
|---|---|---|---|---|
|
|
485
|
+
| 0Jf… | <name> | / | false | Preview |
|
|
486
|
+
…
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
If the array is empty: `No custom URLs are bound to site <storeOrSiteId>.`
|
|
490
|
+
|
|
491
|
+
**Error:** generic error wrapper.
|
|
492
|
+
|
|
493
|
+
---
|
|
494
|
+
|
|
495
|
+
## Operation: Associate domain to site
|
|
496
|
+
|
|
497
|
+
Bind an existing custom domain to a site (or store) at a given path. Uses the global `apiVersion` (v67.0), same as every other operation in this skill.
|
|
498
|
+
|
|
499
|
+
**Wire-verified behavior** (one POST, two rows):
|
|
500
|
+
- The server creates **two** `customUrl` records per call:
|
|
501
|
+
- **Row 1** — the `path` as-supplied (the LWR sub-site row).
|
|
502
|
+
- **Row 2** — `path` with the site's `Site.UrlPathPrefix` appended. Example: POST `/testpath` against a site whose `UrlPathPrefix` is `vforcesite` ⇒ a second row at `/testpathvforcesite`.
|
|
503
|
+
- The POST response body returns **only Row 1**. Use **List URLs by domain** on the same `domainId` to see both rows.
|
|
504
|
+
- An 18-char `siteId` in the request is normalised to 15-char in the response.
|
|
505
|
+
- **Not idempotent.** A repeat POST at the same `(domainId, path)` returns `400 DUPLICATE_VALUE`.
|
|
506
|
+
|
|
507
|
+
### Required inputs
|
|
508
|
+
|
|
509
|
+
- `domainName` *or* `domainId` — exactly one. Resolve `domainName → domainId` via **List domains** (Step 1).
|
|
510
|
+
- `siteName` *or* `siteId` — exactly one. The site (Site / store) to bind. Must already exist; this skill does not create sites. If `siteName` is given, resolve `siteName → siteId` via the [Site metadata enrichment](#site-metadata-enrichment-site-entity) SOQL against `Site` (Step 2). If multiple sites match the same name, ask the user to disambiguate before proceeding.
|
|
511
|
+
- `path` — optional. Site-relative URL prefix (e.g. `/`, `/lwr2`, `/store`). Must start with `/` if given. Default: `/` (the apex). The empty string is invalid.
|
|
512
|
+
|
|
513
|
+
If `domainName`/`domainId` or `siteName`/`siteId` is missing, ask:
|
|
514
|
+
> Which domain and site should I associate? (`<domainName|domainId>` and `<siteName|siteId>`, optionally a `<path>` — defaults to `/`)
|
|
515
|
+
|
|
516
|
+
This op is intentionally agnostic about whether the user gives names or IDs. "associate `acme.com` to site `Storefront`" must work end-to-end without further ID prompts when the names are unambiguous.
|
|
517
|
+
|
|
518
|
+
### Step 1: Resolve domainId from domainName (if `domainId` not supplied)
|
|
519
|
+
|
|
520
|
+
Call **List domains**, case-insensitive match on `domainName`. Stop with the "Domain not found" block if the user-supplied name is not registered. If a `domainId` was supplied directly, skip this step.
|
|
521
|
+
|
|
522
|
+
### Step 2: Resolve siteId from siteName (if `siteId` not supplied)
|
|
523
|
+
|
|
524
|
+
The Custom Domain Connect API has no site-by-name lookup, so this resolution goes through the platform `Site` SObject (the underlying record for every Experience Cloud site / store). The consuming runtime executes the SOQL — this skill specifies the query and how to interpret the result.
|
|
525
|
+
|
|
526
|
+
**Query** (case-insensitive name match; surface `Description` so the user can disambiguate among same-named sites):
|
|
527
|
+
|
|
528
|
+
```sql
|
|
529
|
+
SELECT Id, Name, Description, UrlPathPrefix, Status
|
|
530
|
+
FROM Site
|
|
531
|
+
WHERE Name = '<siteName-escaped>'
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
Where `<siteName-escaped>` is the user-supplied name with single quotes / backslashes escaped per SOQL string-literal rules. If the consumer is unsure about case, use `WHERE Name LIKE '<siteName-escaped>'` instead — the consumer is free to widen, but the skill defaults to exact case-insensitive match.
|
|
535
|
+
|
|
536
|
+
**Interpret the result:**
|
|
537
|
+
|
|
538
|
+
- **Exactly one row** → carry `siteId = result[0].Id` forward to Step 3. Capture `Description` and `UrlPathPrefix` for the eventual success block; you'll need them for the display.
|
|
539
|
+
- **Zero rows** → surface a clear error and stop. No further calls.
|
|
540
|
+
- **Two or more rows** → **do not pick one automatically.** Ask the user to disambiguate, surfacing every candidate's `Description` so the choice is informed. Stop. Do not POST. The user re-issues the command with `siteId` chosen explicitly.
|
|
541
|
+
|
|
542
|
+
**Zero rows:**
|
|
543
|
+
|
|
544
|
+
```text
|
|
545
|
+
## ❌ Site not found
|
|
546
|
+
|
|
547
|
+
No site named `<siteName>` exists in this org (queried `Site` via SOQL).
|
|
548
|
+
|
|
549
|
+
- Check the spelling of the site name.
|
|
550
|
+
- If the site is a store, confirm it's published / accessible to your user.
|
|
551
|
+
- You can also pass the site ID directly (`0DM…` for Communities).
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
**Two or more rows:**
|
|
555
|
+
|
|
556
|
+
```text
|
|
557
|
+
## ⚠ Multiple sites named `<siteName>`
|
|
558
|
+
|
|
559
|
+
<N> sites in this org share that name. Pick one by ID before I proceed:
|
|
560
|
+
|
|
561
|
+
| siteId | Description | UrlPathPrefix | Status |
|
|
562
|
+
|---|---|---|---|
|
|
563
|
+
| 0DM…1 | <description1 or "(no description)"> | <prefix1 or "(none)"> | <status1> |
|
|
564
|
+
| 0DM…2 | <description2 or "(no description)"> | <prefix2 or "(none)"> | <status2> |
|
|
565
|
+
…
|
|
566
|
+
|
|
567
|
+
Re-run with the explicit `siteId` you want. (No site has been associated yet.)
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
If the SOQL itself errors (e.g. no read on `Site`, malformed query), surface the error verbatim under a `## ❌ Site lookup failed` block and stop. The user retries with `siteId`.
|
|
571
|
+
|
|
572
|
+
If a `siteId` was supplied directly, skip this step entirely. Optionally fetch the row for that `siteId` (`SELECT Id, Name, Description, UrlPathPrefix FROM Site WHERE Id = '<siteId>'`) to enrich the success block; if the lookup fails, fall through and use only the API-returned `siteName`/`siteType` in the display.
|
|
573
|
+
|
|
574
|
+
### Step 3: POST the association
|
|
575
|
+
|
|
576
|
+
After Steps 1 and 2, both `domainId` and `siteId` are known. The user may have supplied them directly, or this skill may have resolved them from `domainName` and `siteName` via List domains + the `Site` SOQL.
|
|
577
|
+
|
|
578
|
+
Use the global `apiVersion` (v67.0).
|
|
579
|
+
|
|
580
|
+
- **Method/path:** `POST /services/data/v<version>/connect/custom-domain/domains/{domainId}/custom-urls`
|
|
581
|
+
- **Request body fields:**
|
|
582
|
+
- `siteId` — required. 15- or 18-char `0DM…`; server normalises to 15-char.
|
|
583
|
+
- `path` — required. Must begin with `/`. Omitting it returns `400 DUPLICATE_VALUE` (not `REQUIRED_FIELD_MISSING` — wire-verified).
|
|
584
|
+
- No other fields are accepted by this skill. Do not pass `customUrlId` (server-assigned), `domainId` (from URL path), `siteName`, or `siteType` (server-resolved).
|
|
585
|
+
- **Response shape (HTTP 201):** the Row-1 record only (see example below). Row 2 (`path + UrlPathPrefix`) is created server-side but **not** returned in this response. Run **List URLs by domain** on the same `domainId` to inspect it.
|
|
586
|
+
|
|
587
|
+
**Request body:**
|
|
588
|
+
|
|
589
|
+
```json
|
|
590
|
+
{
|
|
591
|
+
"siteId": "0DM…",
|
|
592
|
+
"path": "/<path>"
|
|
593
|
+
}
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
**Response shape (HTTP 201):**
|
|
597
|
+
|
|
598
|
+
```json
|
|
599
|
+
{
|
|
600
|
+
"customUrlId": "0Jf…",
|
|
601
|
+
"domainId": "0I4…",
|
|
602
|
+
"domainName": "<domainName>",
|
|
603
|
+
"path": "/your-path",
|
|
604
|
+
"primarySiteUrl": false,
|
|
605
|
+
"siteId": "0DM… (15-char)",
|
|
606
|
+
"siteName": "<site name>",
|
|
607
|
+
"siteType": "Community",
|
|
608
|
+
"status": "Published"
|
|
609
|
+
}
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
### Step 4: Display
|
|
613
|
+
|
|
614
|
+
```text
|
|
615
|
+
## ✅ Site associated with domain
|
|
616
|
+
|
|
617
|
+
- **Domain**: `<domainName>` (`<domainId>`)
|
|
618
|
+
- **Site**: `<siteName>` (`<siteId>`, `<siteType>`)
|
|
619
|
+
- **Site description**: `<Site.Description from Step 2 — or "(no description)" if blank, or omit this line entirely if Step 2 was skipped>`
|
|
620
|
+
- **Path (server-normalised)**: `<path>`
|
|
621
|
+
- **Custom URL ID**: `<customUrlId>`
|
|
622
|
+
- **Status**: `<status>`
|
|
623
|
+
- **API version**: v<version>
|
|
624
|
+
|
|
625
|
+
Salesforce response (pretty-printed JSON):
|
|
626
|
+
<pretty-printed response>
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
If the server-normalised `path` differs from the requested input, surface a one-line note above the success block:
|
|
630
|
+
|
|
631
|
+
```text
|
|
632
|
+
ℹ Server normalised the path: requested `<requested>` → stored `<stored>`. (Salesforce appends the site's URL path prefix when the site has one.)
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
### Known error patterns
|
|
636
|
+
|
|
637
|
+
- **`404 NOT_FOUND` / `The requested resource does not exist`** — endpoint not exposed at this org's version at all. Check https://developer.salesforce.com/docs/atlas.en-us.chatterapi.meta/chatterapi/connect_resources_custom_domain_resources.htm for the current Available Version.
|
|
638
|
+
- **`500 UNKNOWN_EXCEPTION`** — bogus / non-existent `siteId`. `<siteId>` cannot be resolved by the server. Confirm the ID format (`0DM…` for Communities) and that the site exists in this org. The server returns 500 (not 400) for unknown siteIds — wire-verified.
|
|
639
|
+
- **`400 DUPLICATE_VALUE` — `A custom URL already exists for this domain and path`** — repeat POST at same `(domainId, path)`. A custom URL already exists at `<path>` on `<domainName>`. The op is **not idempotent** — use **List URLs by domain** to inspect the existing binding.
|
|
640
|
+
- **`400 DUPLICATE_VALUE`** (no `path` field) — `path` missing from the request body. `path` is required and must begin with `/`. The server returns `DUPLICATE_VALUE` (not `REQUIRED_FIELD_MISSING`) for this case — wire-verified.
|
|
641
|
+
- **`400 INVALID_INPUT` and message mentions `path`** — malformed path. Must start with `/` and contain only URL-safe characters. The empty string is invalid; use `/` for the apex.
|
|
642
|
+
- **`403 INSUFFICIENT_ACCESS` / `INSUFFICIENT_ACCESS_OR_READONLY`** — caller lacks the perm. Ask an admin to grant the relevant permission set.
|
|
643
|
+
- **Anything else** — surface raw `errorCode` + `message` verbatim.
|
|
644
|
+
|
|
645
|
+
Wrap errors in:
|
|
646
|
+
|
|
647
|
+
```text
|
|
648
|
+
## ❌ Site association failed
|
|
649
|
+
|
|
650
|
+
- **Domain**: `<domainName>` (`<domainId>`)
|
|
651
|
+
- **Site**: `<siteId>`
|
|
652
|
+
- **Path**: `<path>`
|
|
653
|
+
- **API version**: v<version>
|
|
654
|
+
|
|
655
|
+
**Error**: `<errorCode>` — `<one-line summary>`
|
|
656
|
+
|
|
657
|
+
**What this means:** <plain-English from the table above>
|
|
658
|
+
|
|
659
|
+
**What to try:** <action from the table above>
|
|
660
|
+
|
|
661
|
+
Raw response (JSON):
|
|
662
|
+
<error JSON>
|
|
663
|
+
```
|
|
664
|
+
|
|
665
|
+
---
|
|
666
|
+
|
|
667
|
+
## Site metadata enrichment (Site entity)
|
|
668
|
+
|
|
669
|
+
The custom-URL routes return `siteId`, `siteName`, and `siteType`, but **not** the human-friendly `Description` or the site's own `UrlPathPrefix`. The Connect API also has no site-by-name lookup, so resolving a user-supplied site name to its `siteId` likewise depends on the platform `Site` SObject.
|
|
670
|
+
|
|
671
|
+
- **Object:** `Site` (the platform-internal record for every Experience Cloud / Communities site / store; one row per site).
|
|
672
|
+
- **Join key:** `Site.Id == customUrls[*].siteId` — the site IDs returned by the custom-URL routes are `Site.Id` values.
|
|
673
|
+
- **Fields worth surfacing:** `Id`, `Name`, `Description`, `UrlPathPrefix`, `Status`, `SiteType`, `MasterLabel`.
|
|
674
|
+
|
|
675
|
+
This metadata source is consumed by the skill in two distinct ways:
|
|
676
|
+
|
|
677
|
+
1. **Display enrichment (optional).** Custom-URL display ops (List URLs by domain / List URLs by site / List all URLs / Get URL) may fold `Description` and `UrlPathPrefix` into the per-row table alongside `siteName`. **Do not block** the primary custom-URL display on this enrichment — render with API fields first, layer on `Site` data when present.
|
|
678
|
+
|
|
679
|
+
2. **Name resolution (required when used).** [Operation: Associate domain to site](#operation-associate-domain-to-site) uses this object to resolve a user-supplied `siteName` to a `siteId` before the POST. That resolution **is** load-bearing: zero rows ⇒ stop with a "site not found" error; multiple rows ⇒ stop and ask the user to disambiguate using the per-row `Description`. See Associate's Step 2 for the exact behavior.
|
|
680
|
+
|
|
681
|
+
**Example SOQL queries** (the consumer constructs and executes these — this skill specifies the queries but does not invoke SOQL itself):
|
|
682
|
+
|
|
683
|
+
Bulk display enrichment:
|
|
684
|
+
```sql
|
|
685
|
+
SELECT Id, Name, Description, UrlPathPrefix, Status
|
|
686
|
+
FROM Site
|
|
687
|
+
WHERE Id IN ('<siteId1>', '<siteId2>', …)
|
|
688
|
+
```
|
|
689
|
+
|
|
690
|
+
Name resolution for Associate Step 2:
|
|
691
|
+
```sql
|
|
692
|
+
SELECT Id, Name, Description, UrlPathPrefix, Status
|
|
693
|
+
FROM Site
|
|
694
|
+
WHERE Name = '<siteName-escaped>'
|
|
695
|
+
```
|
|
696
|
+
|
|
697
|
+
---
|
|
698
|
+
|
|
699
|
+
## Edge cases (all ops)
|
|
700
|
+
|
|
701
|
+
- **User asks for a CDN partner other than Cloudflare** — reject with: "Only `Cloudflare` is supported. Use `cloudflare`."
|
|
702
|
+
- **User passes a domain with a wildcard** (`*.example.com`) — reject in input validation.
|
|
703
|
+
- **Pending-configuration response with anything OTHER than `NOT_FOUND`** is an error — generic error wrapper.
|
|
704
|
+
- **`GET /custom-urls/{customUrlId}` returns `INTERNAL_ERROR` / `query returned more than one row`** — fall back to **List URLs by domain** for the same `domainId` (see [Get URL — Known issue](#known-issue-internal_error--query-returned-more-than-one-row)).
|
|
705
|
+
- **`POST /custom-urls` returns `NOT_FOUND` at v67.0** — confirm the org has the version of the API that exposes the associate endpoint; older patches resolve only at v67+.
|
|
706
|
+
|
|
707
|
+
<!-- skill-validate: ignore-start -->
|
|
708
|
+
<!-- codey:operations start -->
|
|
709
|
+
## Operations Reference
|
|
710
|
+
|
|
711
|
+
Operations this skill uses — routing and dependency reference.
|
|
712
|
+
|
|
713
|
+
| Operation | Purpose | Status | Call | Depends on |
|
|
714
|
+
|-----------|---------|--------|------|------------|
|
|
715
|
+
| `get-expected-cname` | read | — | `GET /services/data/v67.0/connect/custom-domain/domains/{domainName}/expected-cname` | — |
|
|
716
|
+
| `get-expected-cdn-validation-cname` | read | — | `GET /services/data/v67.0/connect/custom-domain/domains/{domainName}/expected-cdn-validation-cname` | — |
|
|
717
|
+
| `onboard-custom-domain` | write | — | `POST /services/data/v67.0/connect/custom-domain/domains` | `get-expected-cname`, `get-expected-cdn-validation-cname` |
|
|
718
|
+
| `list-custom-domains` | read | — | `GET /services/data/v67.0/connect/custom-domain/domains` | — |
|
|
719
|
+
| `get-pending-configuration` | read | — | `GET /services/data/v67.0/connect/custom-domain/domains/{domainId}/pending-configuration` | `list-custom-domains` |
|
|
720
|
+
| `activate-custom-domain` | write | — | `POST /services/data/v67.0/connect/custom-domain/domains/{domainId}/activate` | `list-custom-domains`, `get-pending-configuration` |
|
|
721
|
+
| `list-custom-urls-by-domain` | read | — | `GET /services/data/v67.0/connect/custom-domain/domains/{domainId}/custom-urls` | `list-custom-domains` |
|
|
722
|
+
| `list-custom-urls-by-site` | read | — | `GET /services/data/v67.0/connect/custom-domain/domains/sites/{storeOrSiteId}/custom-urls` | — |
|
|
723
|
+
| `get-custom-url-detail` | read | — | `GET /services/data/v67.0/connect/custom-domain/domains/{domainId}/custom-urls/{customUrlId}` | `list-custom-urls-by-domain` |
|
|
724
|
+
| `associate-domain-to-site` | write | — | `POST /services/data/v67.0/connect/custom-domain/domains/{domainId}/custom-urls` | `list-custom-domains`, `resolve-site-name-to-id` |
|
|
725
|
+
| `resolve-site-name-to-id` | read | — | `GET /services/data/v67.0/query` | — |
|
|
726
|
+
<!-- codey:operations end -->
|
|
727
|
+
<!-- skill-validate: ignore-end -->
|