@salesforce/afv-skills 1.42.0 → 1.44.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 +2 -6
- package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +3 -0
- package/skills/automation-sandbox-post-copy-configure/SKILL.md +4 -0
- package/skills/design-systems-slds-validate/SKILL.md +2 -2
- package/skills/dx-devops-conflict-resolve/SKILL.md +205 -0
- package/skills/dx-devops-conflict-resolve/examples/conflict-workflows.md +165 -0
- package/skills/dx-devops-conflict-resolve/references/deploy-failure-resolution.md +75 -0
- package/skills/dx-devops-conflict-resolve/references/git-conflict-resolution.md +124 -0
- package/skills/dx-devops-conflict-resolve/scripts/detect-conflicts.sh +91 -0
- package/skills/dx-devops-conflict-resolve/scripts/diagnose-deploy-failure.sh +156 -0
- package/skills/dx-devops-request-status/SKILL.md +160 -0
- package/skills/dx-devops-request-status/examples/polling-workflows.md +101 -0
- package/skills/dx-devops-request-status/references/cli-commands.md +176 -0
- package/skills/dx-devops-request-status/scripts/poll-status.sh +134 -0
- package/skills/dx-devops-test-failures-analyze/SKILL.md +6 -6
- package/skills/dx-devops-test-pipeline-configure/SKILL.md +7 -7
- package/skills/dx-devops-test-suite-assignments-configure/SKILL.md +6 -6
- package/skills/dx-devops-test-suite-run/SKILL.md +6 -6
- package/skills/dx-devops-work-item-manage/SKILL.md +2 -0
- package/skills/dx-org-manage/references/creating-scratch-org.md +5 -2
- package/skills/dx-org-manage/references/creating-snapshot.md +1 -0
- package/skills/dx-org-shape-manage/SKILL.md +152 -0
- package/skills/dx-org-shape-manage/examples/create_error_output.json +9 -0
- package/skills/dx-org-shape-manage/examples/create_success_output.json +9 -0
- package/skills/dx-org-shape-manage/examples/delete_output.json +11 -0
- package/skills/dx-org-shape-manage/examples/list_inactive_output.json +32 -0
- package/skills/dx-org-shape-manage/examples/list_output.json +24 -0
- package/skills/dx-org-shape-manage/references/cli_flags.md +135 -0
- package/skills/dx-org-switch/SKILL.md +2 -2
- package/skills/dx-org-trial-expiration-check/SKILL.md +2 -0
- package/skills/dx-pkg-post-install-configure/SKILL.md +3 -0
- package/skills/education-cloud-multi-campus-configure/SKILL.md +211 -0
- package/skills/education-cloud-multi-campus-configure/examples/hierarchy_visualization.md +174 -0
- package/skills/education-cloud-multi-campus-configure/examples/output_examples.md +54 -0
- package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input.csv +29 -0
- package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input_edgecases.csv +16 -0
- package/skills/education-cloud-multi-campus-configure/references/account_recordtype_prerequisite.md +44 -0
- package/skills/education-cloud-multi-campus-configure/references/delta_computation.md +33 -0
- package/skills/education-cloud-multi-campus-configure/references/error_handling.md +198 -0
- package/skills/education-cloud-multi-campus-configure/references/foundation_prerequisites.md +54 -0
- package/skills/education-cloud-multi-campus-configure/references/gotchas.md +16 -0
- package/skills/education-cloud-multi-campus-configure/references/hierarchy_parsing_rules.md +133 -0
- package/skills/education-cloud-multi-campus-configure/references/mcp-invocation.md +75 -0
- package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/SKILL.md +1 -1
- package/skills/experience-cms-brand-apply/SKILL.md +4 -1
- package/skills/experience-cms-brand-create/SKILL.md +197 -0
- package/skills/experience-cms-brand-create/assets/brand-template.json +329 -0
- package/skills/experience-cms-brand-create/references/brand-anatomy.md +120 -0
- package/skills/experience-cms-brand-create/references/disk-contract.md +84 -0
- package/skills/experience-cms-content-generate/SKILL.md +192 -0
- package/skills/experience-cms-content-generate/assets/display-formats.md +84 -0
- package/skills/experience-cms-content-generate/assets/payloads/create-content-bulk.json +11 -0
- package/skills/experience-cms-content-generate/assets/payloads/create-content-single.json +11 -0
- package/skills/experience-cms-content-generate/assets/payloads/publish-content.json +4 -0
- package/skills/experience-cms-content-generate/assets/payloads/update-content.json +9 -0
- package/skills/experience-cms-content-generate/assets/questions.md +241 -0
- package/skills/experience-cms-content-generate/examples/create-content-call.md +81 -0
- package/skills/experience-cms-content-generate/references/bulk-batching.md +56 -0
- package/skills/experience-cms-content-generate/references/content-type-classification.md +88 -0
- package/skills/experience-cms-content-generate/references/content-write-tool.md +95 -0
- package/skills/experience-cms-content-generate/references/delegation-protocol.md +37 -0
- package/skills/experience-cms-content-generate/references/edit-publish-workflow.md +63 -0
- package/skills/experience-cms-content-generate/references/error-recovery.md +72 -0
- package/skills/experience-cms-content-generate/references/identifier-resolution.md +26 -0
- package/skills/experience-cms-content-generate/references/intent-routing.md +45 -0
- package/skills/experience-cms-content-generate/references/principles.md +19 -0
- package/skills/experience-cms-content-generate/references/ux-rules.md +68 -0
- package/skills/experience-cms-content-generate/references/workspace-resolution.md +33 -0
- package/skills/experience-cms-content-type-generate/SKILL.md +449 -0
- package/skills/experience-cms-content-type-generate/assets/discovery-prompts.md +79 -0
- package/skills/experience-cms-content-type-generate/assets/schema-example.json +70 -0
- package/skills/experience-cms-content-type-generate/references/agent-checklist.md +50 -0
- package/skills/experience-cms-content-type-generate/references/anti-patterns.md +39 -0
- package/skills/experience-cms-content-type-generate/references/deployment-errors.md +27 -0
- package/skills/experience-cms-content-type-generate/references/discovery-details.md +106 -0
- package/skills/experience-cms-content-type-generate/references/discovery-query-rules.md +85 -0
- package/skills/experience-cms-content-type-generate/references/edit-fields-loop.md +48 -0
- package/skills/experience-cms-content-type-generate/references/pre-deploy-checklist.md +21 -0
- package/skills/experience-cms-content-type-generate/references/retrieve-and-reconcile.md +105 -0
- package/skills/experience-cms-content-type-generate/references/schema-rules.md +51 -0
- package/skills/experience-cms-content-type-generate/references/schema-summary-format.md +60 -0
- package/skills/experience-lds-graphql-generate/SKILL.md +4 -0
- package/skills/experience-lwc-accessibility-jest-run/SKILL.md +79 -0
- package/skills/experience-lwc-accessibility-jest-run/references/running-sa11y-jest-tests.md +205 -0
- package/skills/experience-lwc-design-generate/SKILL.md +5 -4
- package/skills/experience-lwc-generate/SKILL.md +10 -9
- package/skills/experience-ui-bundle-deploy/references/dev-preview.md +21 -0
- package/skills/experience-ui-bundle-deploy/references/social-login.md +1 -0
- package/skills/experience-ui-bundle-file-upload-generate/SKILL.md +6 -6
- package/skills/experience-ui-bundle-localize/SKILL.md +30 -37
- package/skills/experience-ui-bundle-localize/references/gotchas.md +23 -7
- package/skills/experience-ui-bundle-localize/references/i18n-setup.md +48 -4
- package/skills/experience-ui-bundle-localize/references/label-xml.md +22 -8
- package/skills/experience-ui-bundle-localize/references/verifying.md +39 -11
- package/skills/experience-ui-bundle-localize/scripts/detect-bundle-type.sh +118 -15
- package/skills/experience-ui-bundle-localize/scripts/tests/test-detect-bundle-type.sh +187 -0
- package/skills/experience-ui-bundle-mfa-configure/SKILL.md +13 -2
- package/skills/experience-ui-bundle-mfa-configure/references/social-login.md +1 -0
- package/skills/experience-ui-bundle-project-generate/SKILL.md +2 -2
- package/skills/integration-connectivity-generate/SKILL.md +11 -10
- package/skills/integration-eventing-cdc-configure/SKILL.md +6 -6
- package/skills/integration-eventing-subscription-configure/SKILL.md +6 -5
- package/skills/mobile-platform-native-capabilities-integrate/SKILL.md +2 -2
- package/skills/mobile-platform-offline-validate/scripts/package.json +1 -1
- package/skills/platform-agentexchange-partner-offers-configure/SKILL.md +8 -8
- package/skills/platform-custom-application-generate/SKILL.md +2 -0
- package/skills/platform-custom-field-generate/SKILL.md +8 -6
- package/skills/platform-custom-metadata-type-generate/SKILL.md +460 -0
- package/skills/platform-custom-metadata-type-generate/references/cmdt-records.md +251 -0
- package/skills/platform-custom-metadata-type-generate/scripts/sanitize-developer-name.sh +46 -0
- package/skills/platform-custom-setting-generate/SKILL.md +419 -0
- package/skills/platform-dataspace-access-configure/SKILL.md +2 -0
- package/skills/platform-sharing-owd-configure/SKILL.md +3 -0
- package/skills/platform-value-set-generate/SKILL.md +2 -0
- package/skills/service-agentforce-channel-configure/SKILL.md +29 -20
- package/skills/service-agentforce-channel-configure/assets/BotEmailDefinition.botEmailDefinition-meta.xml +36 -0
- package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email +17 -0
- package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email-meta.xml +29 -0
- package/skills/service-agentforce-channel-configure/assets/mdapi-package.xml +25 -0
- package/skills/service-agentforce-channel-configure/assets/settings-mdapi-package.xml +30 -0
- package/skills/service-agentforce-channel-configure/references/agent-wiring.md +20 -0
- package/skills/service-agentforce-channel-configure/references/botemaildefinition.md +107 -0
- package/skills/service-agentforce-channel-configure/references/channel-branch-email.md +203 -50
- package/skills/service-agentforce-channel-configure/references/channel-types.md +30 -3
- package/skills/service-agentforce-channel-configure/references/queue-resolution.md +17 -8
- package/skills/service-agentforce-channel-configure/references/routing-flow.md +14 -3
- package/skills/service-agentforce-channel-configure/scripts/validate-botemaildefinition.py +126 -0
- package/skills/service-agentforce-channel-configure/scripts/validate-emailtemplate.py +133 -0
- package/skills/service-de-channel-activate/SKILL.md +271 -0
- package/skills/service-de-channel-activate/references/gotchas.md +31 -0
- package/skills/service-de-channel-activate/references/phone-verification.md +96 -0
- package/skills/service-de-channel-activate/references/worked-examples.md +14 -0
- package/skills/service-de-channel-consent-configure/SKILL.md +230 -0
- package/skills/service-de-channel-consent-configure/references/gotchas.md +41 -0
- package/skills/service-de-channel-consent-configure/references/language-keywords.md +84 -0
- package/skills/service-de-channel-consent-configure/references/worked-examples.md +134 -0
- package/skills/service-de-channel-create/SKILL.md +369 -0
- package/skills/service-de-channel-create/references/apple.md +59 -0
- package/skills/service-de-channel-create/references/connect-insert.md +84 -0
- package/skills/service-de-channel-create/references/facebook.md +154 -0
- package/skills/service-de-channel-create/references/line.md +66 -0
- package/skills/service-de-channel-create/references/sms.md +98 -0
- package/skills/service-de-channel-create/references/whatsapp.md +98 -0
- package/skills/service-de-channel-create/references/worked-examples.md +70 -0
- package/skills/service-de-channel-routing-configure/SKILL.md +345 -0
- package/skills/service-de-channel-routing-configure/references/asa-routing.md +90 -0
- package/skills/service-de-channel-routing-configure/references/gotchas.md +27 -0
- package/skills/service-de-channel-routing-configure/references/queue-creation.md +123 -0
- package/skills/service-de-channel-routing-configure/references/target-locate.md +98 -0
- package/skills/service-de-channel-routing-configure/references/worked-examples.md +174 -0
- package/skills/service-de-headless-channel-configure/SKILL.md +305 -0
- package/skills/service-de-headless-channel-configure/references/gotchas.md +27 -0
- package/skills/service-de-headless-channel-configure/references/inputs.md +49 -0
- package/skills/service-de-headless-channel-configure/references/output-envelopes.md +53 -0
- package/skills/service-de-headless-channel-configure/references/partial-success.md +24 -0
- package/skills/service-de-headless-channel-configure/references/terms-and-conditions.md +54 -0
- package/skills/service-de-headless-channel-configure/references/worked-examples.md +108 -0
- package/skills/service-de-waba-integrate/SKILL.md +227 -0
- package/skills/service-digital-engagement-channel-configure/scripts/check-api-version.sh +29 -0
- package/skills/service-digital-engagement-messaging-site-integrate/SKILL.md +10 -9
- package/skills/service-digital-engagement-messaging-site-integrate/references/lwr_patch.md +39 -21
- package/skills/service-digital-engagement-messaging-site-integrate/scripts/patch_lwr_bundle.sh +157 -96
- package/skills/service-email-to-case-configure/SKILL.md +190 -0
- package/skills/service-email-to-case-configure/assets/CaseSettings.settings-meta.xml +45 -0
- package/skills/service-email-to-case-configure/examples/CaseSettings-two-addresses.settings-meta.xml +36 -0
- package/skills/service-email-to-case-configure/references/apply-mechanics.md +73 -0
- package/skills/service-email-to-case-configure/references/routing_address_reference.md +73 -0
- package/skills/service-email-to-case-configure/references/troubleshooting.md +25 -0
- package/skills/service-email-to-case-configure/scripts/apply-casesettings.py +1315 -0
- package/skills/service-email-to-case-configure/scripts/check-agent-email-capability.sh +26 -0
- package/skills/service-email-to-case-configure/scripts/tests/__init__.py +0 -0
- package/skills/service-email-to-case-configure/scripts/tests/_bootstrap.py +45 -0
- package/skills/service-email-to-case-configure/scripts/tests/_fakeorg.py +366 -0
- package/skills/service-email-to-case-configure/scripts/tests/_run.py +84 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_apply_org_scenarios.py +655 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_get_session.py +134 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_new_capabilities.py +193 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_validate_casesettings.py +170 -0
- package/skills/service-email-to-case-configure/scripts/validate-casesettings.py +229 -0
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +33 -15
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +63 -47
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +17 -12
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/references/cli-invocation.md +5 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/classify-enable-plan.mjs +11 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +8 -6
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/references/cli-invocation.md +3 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/scripts/classify-readiness.mjs +11 -3
- package/skills/service-itsm-agentic-setup-configure/SKILL.md +5 -5
- package/skills/service-itsm-agentic-setup-configure/examples/output-templates.md +5 -5
- package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +2 -2
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +11 -7
- package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +20 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +10 -6
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/action-availability.md +7 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +11 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/build-create-body.mjs +24 -17
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-action-availability.mjs +98 -58
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +20 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/strip-release-management.mjs +176 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +19 -19
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/cli-invocation.md +3 -4
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/helper-contracts.md +6 -6
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/permset-topology.md +3 -10
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-permset-availability.mjs +7 -9
- package/skills/service-itsm-incident-mgmt-configure/SKILL.md +2 -0
- package/skills/service-itsm-incident-priority-configure/SKILL.md +15 -12
- package/skills/service-itsm-incident-priority-configure/examples/matrix-operations.md +27 -1
- package/skills/service-itsm-incident-priority-configure/references/sf-cli-invocation.md +37 -6
- package/skills/service-native-voice-recording-transcription-configure/SKILL.md +146 -0
- package/skills/service-native-voice-recording-transcription-configure/assets/confirmation-output.json +16 -0
- package/skills/service-native-voice-recording-transcription-configure/assets/package.xml +22 -0
- package/skills/service-native-voice-recording-transcription-configure/references/thunderbird-voice-settings.md +101 -0
- package/skills/service-native-voice-recording-transcription-configure/scripts/enable-recording-transcription.sh +181 -0
- package/skills/service-helpagent-coordinate/references/channel-help-portal.md +0 -22
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-1-1-non-text-content.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-i-lists.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-ii-tables.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iii-form-labels.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iv-regions.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-v-groups.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-5-identify-input.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-4-3-contrast.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-1-1-keyboard.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-4-link-purpose.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-6-headings-labels.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-1-pointer-gestures.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-2-pointer-cancellation.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-3-label-in-name.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-7-dragging-movement.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-1-on-focus.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-2-on-input.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-1-error-identification.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-2-labels-instructions.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-3-error-suggestion.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-i-name.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-ii-role.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-iii-value.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-1-1-non-text-content.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-1-use-of-color.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-10-resize-reflow.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-11-non-text-contrast.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-3-contrast.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/scripts/contrast-ratio.py +0 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# ThunderbirdVoiceSettings — Metadata API contract
|
|
2
|
+
|
|
3
|
+
Reference for enabling Native Voice (Thunderbird Voice) recording and transcription
|
|
4
|
+
via the Metadata API, using the sf CLI `Settings`-container retrieve/deploy path.
|
|
5
|
+
Read this when constructing or debugging `scripts/enable-recording-transcription.sh`.
|
|
6
|
+
|
|
7
|
+
## The metadata type
|
|
8
|
+
|
|
9
|
+
`ThunderbirdVoiceSettings` is a singleton settings type (extends `Metadata`),
|
|
10
|
+
addressed by a fixed `fullName`:
|
|
11
|
+
|
|
12
|
+
- **type (mdApiType)**: `ThunderbirdVoiceSettings`
|
|
13
|
+
- **fullName**: `ThunderbirdVoice`
|
|
14
|
+
|
|
15
|
+
This skill manages exactly two boolean preferences:
|
|
16
|
+
|
|
17
|
+
| Field | Meaning | This skill |
|
|
18
|
+
|-------|---------|------------|
|
|
19
|
+
| `enableCallRecording` | Capture audio of Native Voice calls | **set `true`** (target) |
|
|
20
|
+
| `enableCallTranscription` | Produce transcripts of Native Voice calls | **set `true`** (target) |
|
|
21
|
+
|
|
22
|
+
Recording and transcription are independent — a call can be recorded without being
|
|
23
|
+
transcribed and vice versa — so they are always modeled and reported as two separate
|
|
24
|
+
preferences.
|
|
25
|
+
|
|
26
|
+
The type may expose other booleans (e.g. `enableCallRecRedaction`,
|
|
27
|
+
`enableRealTimeStreamingRecording`, `enableSipRecording`). They are **out of scope** to
|
|
28
|
+
*change*: the skill reads them only to preserve their existing values on the deployed
|
|
29
|
+
file. It does, however, **echo them back unchanged** in a `preserved` block of the
|
|
30
|
+
confirmation JSON — reporting a sibling's retrieved value is not the same as setting it,
|
|
31
|
+
and compliance callers rely on that block for explicit "nothing else moved" assurance.
|
|
32
|
+
No sibling is ever reported as changed.
|
|
33
|
+
|
|
34
|
+
## Why the sf CLI, not raw SOAP
|
|
35
|
+
|
|
36
|
+
`ThunderbirdVoiceSettings` is not a retrievable top-level type name, so it is easy to
|
|
37
|
+
conclude "raw SOAP `updateMetadata()` is the only path." That is wrong. The generic
|
|
38
|
+
**`Settings`** container type *is* in the sf CLI metadata registry, and its member is
|
|
39
|
+
the mdApiType **without** the trailing `Settings` — i.e. `ThunderbirdVoice`. Retrieving
|
|
40
|
+
and deploying through that container:
|
|
41
|
+
|
|
42
|
+
- authenticates with the org's existing **`sf` login** — no browser session id /
|
|
43
|
+
access token is ever handled (raw SOAP on internal pc-rnd orgs rejects CLI OAuth
|
|
44
|
+
sessions on the SOAP endpoint, which is why a SOAP path there needs a browser sid);
|
|
45
|
+
- lets us **retrieve first** to check the gate and snapshot sibling prefs, then deploy
|
|
46
|
+
a full file that preserves them;
|
|
47
|
+
- gives a built-in **verify** step (round-trip retrieve).
|
|
48
|
+
|
|
49
|
+
## The manifest
|
|
50
|
+
|
|
51
|
+
`assets/package.xml` is the manifest template (the script generates it into a temp
|
|
52
|
+
SFDX project). Two things matter:
|
|
53
|
+
|
|
54
|
+
```xml
|
|
55
|
+
<types><members>ThunderbirdVoice</members><name>Settings</name></types>
|
|
56
|
+
<version>68.0</version>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
- **member** = `ThunderbirdVoice` (mdApiType minus `Settings`), **name** = `Settings`.
|
|
60
|
+
- **Pin the version to 68.0.** `ThunderbirdVoiceSettings` fields are only exposed at
|
|
61
|
+
API **v68.0 and above**, so anything below 68.0 returns the type empty/absent — the
|
|
62
|
+
fields simply are not in the schema at those versions. But do NOT reach for the CLI's
|
|
63
|
+
newest default either: a retrieve/deploy at a version **above the org's max supported
|
|
64
|
+
API** SILENTLY returns an empty result (no error), indistinguishable from "feature not
|
|
65
|
+
provisioned". 68.0 is the field-exposure floor and works on every org that has the
|
|
66
|
+
feature. (Verified sweep on thb-einstein, org max v68.0: v64/62/60 → "Settings type
|
|
67
|
+
'ThunderbirdVoice' is unknown"; v65/66/67 → type absent; v68 → fields present, deploy
|
|
68
|
+
round-trips; **v69 → success:true but files:[] — silent empty**.)
|
|
69
|
+
|
|
70
|
+
## Sequence
|
|
71
|
+
|
|
72
|
+
1. **Retrieve** `-x package.xml` → `force-app/main/default/settings/ThunderbirdVoice.settings-meta.xml`.
|
|
73
|
+
2. **Gate check.** If the file is an empty self-closing `<ThunderbirdVoiceSettings/>`
|
|
74
|
+
(no fields), the org-perm gate `ThunderbirdVoice.orgHasNativeVoiceAllowed` is **off**
|
|
75
|
+
— Native Voice is not provisioned. Stop; this is enabled via provisioning/Blacktab,
|
|
76
|
+
not this skill. If the fields are listed, the gate is on — proceed.
|
|
77
|
+
3. **Flip** `enableCallRecording` and `enableCallTranscription` to `true`; leave every
|
|
78
|
+
sibling field at its retrieved value.
|
|
79
|
+
4. **Validate** with `deploy --dry-run` (never skip).
|
|
80
|
+
5. **Deploy**.
|
|
81
|
+
6. **Verify** by re-retrieving and confirming the org *returns* both `true`.
|
|
82
|
+
|
|
83
|
+
## Distinguishing the two failure modes
|
|
84
|
+
|
|
85
|
+
| Symptom | Cause | What to do |
|
|
86
|
+
|---------|-------|------------|
|
|
87
|
+
| Retrieve returns fields, deploy round-trips | Working as intended | done |
|
|
88
|
+
| Retrieve returns an **empty** `<ThunderbirdVoiceSettings/>` | Org-perm gate off (feature not provisioned) | provision / Blacktab — not fixable via metadata |
|
|
89
|
+
| Retrieve returns **no** settings file, or `Settings` type "unknown" | **API version too low** (< 68.0) | raise `--api-version` to 68.0+ |
|
|
90
|
+
|
|
91
|
+
> The historical `FIELD_INTEGRITY_EXCEPTION: Property 'enableCallRecording' not valid
|
|
92
|
+
> in version <N>` error was **a version problem, not a feature gate** — it appeared when
|
|
93
|
+
> the request used an API version below 68.0. Bumping to v68.0+ resolves it. Do not
|
|
94
|
+
> mistake it for an unprovisioned feature; distinguish the two with the retrieve gate
|
|
95
|
+
> check above.
|
|
96
|
+
|
|
97
|
+
## Auth
|
|
98
|
+
|
|
99
|
+
`scripts/enable-recording-transcription.sh --target-org <alias>` uses the sf CLI's
|
|
100
|
+
existing authentication for that alias (confirm with `sf org display -o <alias>`). No
|
|
101
|
+
session id or access token is requested, handled, or printed.
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# Enable Native Voice (Thunderbird Voice) call recording + transcription via the
|
|
4
|
+
# Metadata API, using the sf CLI Settings-container retrieve/deploy path.
|
|
5
|
+
#
|
|
6
|
+
# Scope: this skill enables exactly two preferences — enableCallRecording and
|
|
7
|
+
# enableCallTranscription. Every other ThunderbirdVoiceSettings boolean is read
|
|
8
|
+
# only to be preserved verbatim — none is changed. The siblings ARE reported
|
|
9
|
+
# back (unchanged) in a `preserved` block so compliance callers can confirm
|
|
10
|
+
# nothing else moved; reporting a value is not the same as setting it.
|
|
11
|
+
#
|
|
12
|
+
# Why sf CLI (not raw SOAP): the generic `Settings` metadata type IS in the sf
|
|
13
|
+
# CLI registry (member = the type name without the `Settings` suffix, i.e.
|
|
14
|
+
# `ThunderbirdVoice`). Deploying through it authenticates with the org's existing
|
|
15
|
+
# `sf` login — no browser session id / access token is ever handled. Retrieving
|
|
16
|
+
# first lets us (a) check the org-perm gate and (b) preserve sibling prefs.
|
|
17
|
+
#
|
|
18
|
+
# Sequence: retrieve -> gate check -> flip the two target fields -> validate
|
|
19
|
+
# (dry-run) -> deploy -> verify by round-trip -> print a JSON confirmation.
|
|
20
|
+
#
|
|
21
|
+
# Deps: sf, jq. (No curl, no session id.)
|
|
22
|
+
#
|
|
23
|
+
set -euo pipefail
|
|
24
|
+
|
|
25
|
+
# ThunderbirdVoiceSettings fields are only exposed at API v68.0+; below that the
|
|
26
|
+
# Settings type does not appear in a retrieve at all. Default to exactly 68.0 — the
|
|
27
|
+
# field-exposure floor. A retrieve/deploy at a version ABOVE the org's max supported
|
|
28
|
+
# API SILENTLY returns an empty result (no error), which is indistinguishable from
|
|
29
|
+
# "feature not provisioned". 68.0 works on every org that has the feature; do NOT
|
|
30
|
+
# bump this default to a newer version unless you also cap it to the org's max.
|
|
31
|
+
API_VERSION="68.0"
|
|
32
|
+
TARGET_ORG=""
|
|
33
|
+
DRY_RUN="false"
|
|
34
|
+
|
|
35
|
+
# mdApiType ThunderbirdVoiceSettings -> package.xml member without the "Settings" suffix.
|
|
36
|
+
MEMBER="ThunderbirdVoice"
|
|
37
|
+
SETTINGS_FILE_REL="force-app/main/default/settings/${MEMBER}.settings-meta.xml"
|
|
38
|
+
|
|
39
|
+
usage() {
|
|
40
|
+
cat <<'EOF'
|
|
41
|
+
Enable Native Voice call recording + transcription (sf CLI Settings deploy).
|
|
42
|
+
|
|
43
|
+
Usage:
|
|
44
|
+
enable-recording-transcription.sh --target-org <alias> [--dry-run] [--api-version X.Y]
|
|
45
|
+
|
|
46
|
+
Options:
|
|
47
|
+
--target-org <alias> Org alias/username the sf CLI is authenticated to. Required.
|
|
48
|
+
--api-version <X.Y> Metadata API version (default: 68.0; must be >= 68.0, the
|
|
49
|
+
version at which ThunderbirdVoiceSettings is exposed). Do NOT
|
|
50
|
+
exceed the target org's max supported version — a retrieve
|
|
51
|
+
above it silently returns empty.
|
|
52
|
+
--dry-run Retrieve + validate the change (deploy --dry-run) but do NOT
|
|
53
|
+
persist it. Prints the JSON confirmation with status VALIDATED.
|
|
54
|
+
-h, --help Show this help.
|
|
55
|
+
|
|
56
|
+
On success prints a JSON confirmation object: the two enabled preferences reported
|
|
57
|
+
separately, plus a `preserved` block echoing every sibling boolean (unchanged) so
|
|
58
|
+
callers can confirm nothing else moved.
|
|
59
|
+
Uses the org's sf login; no session id / access token is handled or printed.
|
|
60
|
+
EOF
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
while [ $# -gt 0 ]; do
|
|
64
|
+
case "$1" in
|
|
65
|
+
--target-org) TARGET_ORG="$2"; shift 2 ;;
|
|
66
|
+
--api-version) API_VERSION="$2"; shift 2 ;;
|
|
67
|
+
--dry-run) DRY_RUN="true"; shift ;;
|
|
68
|
+
-h|--help) usage; exit 0 ;;
|
|
69
|
+
*) echo "ERROR: unknown argument: $1" >&2; usage >&2; exit 2 ;;
|
|
70
|
+
esac
|
|
71
|
+
done
|
|
72
|
+
|
|
73
|
+
fail() { echo "ERROR: $*" >&2; exit 1; }
|
|
74
|
+
|
|
75
|
+
command -v sf >/dev/null 2>&1 || fail "sf CLI not found (required)."
|
|
76
|
+
command -v jq >/dev/null 2>&1 || fail "jq not found (required)."
|
|
77
|
+
[ -n "$TARGET_ORG" ] || fail "--target-org is required."
|
|
78
|
+
|
|
79
|
+
# Guard the version floor deterministically. Require a full X.Y form so a bare
|
|
80
|
+
# major like "68" can't end up as <version>68</version> in the manifest.
|
|
81
|
+
printf '%s' "$API_VERSION" | grep -qE '^[0-9]+\.[0-9]+$' \
|
|
82
|
+
|| fail "invalid --api-version '$API_VERSION' (expected X.Y, e.g. 68.0)."
|
|
83
|
+
API_MAJOR="${API_VERSION%%.*}"
|
|
84
|
+
[ "$API_MAJOR" -ge 68 ] || fail "--api-version must be >= 68.0 (ThunderbirdVoiceSettings is not exposed below v68.0). Got $API_VERSION."
|
|
85
|
+
|
|
86
|
+
# --- scaffold an isolated SFDX project so the retrieve/deploy is self-contained
|
|
87
|
+
WORKDIR="$(mktemp -d)"
|
|
88
|
+
trap 'rm -rf "$WORKDIR"' EXIT
|
|
89
|
+
sf project generate --name p --output-dir "$WORKDIR" >/dev/null 2>&1 \
|
|
90
|
+
|| fail "could not scaffold a temporary SFDX project."
|
|
91
|
+
PROJ="$WORKDIR/p"
|
|
92
|
+
|
|
93
|
+
cat > "$PROJ/package.xml" <<EOF
|
|
94
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
95
|
+
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
96
|
+
<types><members>${MEMBER}</members><name>Settings</name></types>
|
|
97
|
+
<version>${API_VERSION}</version>
|
|
98
|
+
</Package>
|
|
99
|
+
EOF
|
|
100
|
+
|
|
101
|
+
SETTINGS_FILE="$PROJ/$SETTINGS_FILE_REL"
|
|
102
|
+
|
|
103
|
+
# --- step 1: retrieve current settings (gate check + sibling snapshot) --------
|
|
104
|
+
( cd "$PROJ" && sf project retrieve start -x package.xml -o "$TARGET_ORG" >/dev/null 2>&1 ) \
|
|
105
|
+
|| fail "retrieve failed for org '$TARGET_ORG'. Check the alias is connected (sf org display -o $TARGET_ORG)."
|
|
106
|
+
|
|
107
|
+
[ -f "$SETTINGS_FILE" ] || fail "retrieve returned no ${MEMBER}.settings-meta.xml — the Settings type was not returned at v${API_VERSION}. Two causes: (a) v${API_VERSION} is BELOW 68.0 (fields not yet exposed), or (b) v${API_VERSION} is ABOVE the org's max supported API version, which SILENTLY returns empty. Pin --api-version to the org's max (68.0 works on every org that has the feature)."
|
|
108
|
+
|
|
109
|
+
# Gate check: an empty self-closing element means the org-perm gate
|
|
110
|
+
# (orgHasNativeVoiceAllowed) is OFF — the feature is not provisioned. The fields
|
|
111
|
+
# are only present when the gate is on.
|
|
112
|
+
if ! grep -q '<enableCallRecording>' "$SETTINGS_FILE"; then
|
|
113
|
+
fail "Native Voice is not provisioned on '$TARGET_ORG' (ThunderbirdVoiceSettings returned no fields). This is an org-perm gate enabled through provisioning/Blacktab, not something this skill can flip."
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
# --- step 2: flip only the two target fields, preserve every sibling ----------
|
|
117
|
+
# Version-suffixed sed -i for BSD (macOS) + GNU portability.
|
|
118
|
+
sed -E -i.bak \
|
|
119
|
+
-e 's|<enableCallRecording>[^<]*</enableCallRecording>|<enableCallRecording>true</enableCallRecording>|' \
|
|
120
|
+
-e 's|<enableCallTranscription>[^<]*</enableCallTranscription>|<enableCallTranscription>true</enableCallTranscription>|' \
|
|
121
|
+
"$SETTINGS_FILE"
|
|
122
|
+
rm -f "${SETTINGS_FILE}.bak"
|
|
123
|
+
|
|
124
|
+
grep -q '<enableCallRecording>true</enableCallRecording>' "$SETTINGS_FILE" || fail "could not set enableCallRecording in the retrieved file."
|
|
125
|
+
grep -q '<enableCallTranscription>true</enableCallTranscription>' "$SETTINGS_FILE" || fail "could not set enableCallTranscription in the retrieved file."
|
|
126
|
+
|
|
127
|
+
# --- step 3: validate (dry-run). Never skip. ---------------------------------
|
|
128
|
+
( cd "$PROJ" && sf project deploy start -x package.xml -o "$TARGET_ORG" --dry-run --ignore-conflicts >/dev/null 2>&1 ) \
|
|
129
|
+
|| fail "validation (deploy --dry-run) failed — the org rejected the change. Re-check the gate (step 1)."
|
|
130
|
+
|
|
131
|
+
# Collect every boolean sibling (<tag>true|false</tag>) EXCEPT the two target
|
|
132
|
+
# prefs from the retrieved settings file, as a JSON array [{name, enabled}], so
|
|
133
|
+
# the confirmation can attest each sibling was retrieved and carried through
|
|
134
|
+
# unchanged. `grep -o` isolates each pair; `#`-delimited sed avoids colliding
|
|
135
|
+
# with the `|` alternation; the `|| true` guards keep an empty result (no
|
|
136
|
+
# siblings) from tripping `set -o pipefail`.
|
|
137
|
+
extract_preserved() { # $1 = settings xml file -> JSON array on stdout
|
|
138
|
+
{ grep -oE '<[A-Za-z][A-Za-z0-9]*>(true|false)</[A-Za-z][A-Za-z0-9]*>' "$1" || true; } \
|
|
139
|
+
| sed -E 's#<([A-Za-z0-9]+)>([a-z]+)</[A-Za-z0-9]+>#\1 \2#' \
|
|
140
|
+
| { grep -vE '^(enableCallRecording|enableCallTranscription) ' || true; } \
|
|
141
|
+
| jq -R -s 'split("\n") | map(select(length > 0) | split(" ") | { name: .[0], enabled: (.[1] == "true") })'
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
emit_json() { # $1 = status, $2 = preserved siblings JSON array
|
|
145
|
+
jq -n --arg apiVersion "$API_VERSION" --arg status "$1" --argjson preserved "$2" \
|
|
146
|
+
'{
|
|
147
|
+
type: "ThunderbirdVoiceSettings",
|
|
148
|
+
fullName: "ThunderbirdVoice",
|
|
149
|
+
apiVersion: $apiVersion,
|
|
150
|
+
method: "sf project deploy (Settings/ThunderbirdVoice)",
|
|
151
|
+
headless: true,
|
|
152
|
+
preferences: [
|
|
153
|
+
{ name: "enableCallRecording", enabled: true },
|
|
154
|
+
{ name: "enableCallTranscription", enabled: true }
|
|
155
|
+
],
|
|
156
|
+
preserved: $preserved,
|
|
157
|
+
status: $status
|
|
158
|
+
}'
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if [ "$DRY_RUN" = "true" ]; then
|
|
162
|
+
# Siblings are still at their retrieved values in the local file (only the two
|
|
163
|
+
# targets were flipped in step 2); report them as preserved.
|
|
164
|
+
emit_json "VALIDATED" "$(extract_preserved "$SETTINGS_FILE")"
|
|
165
|
+
exit 0
|
|
166
|
+
fi
|
|
167
|
+
|
|
168
|
+
# --- step 4: deploy ----------------------------------------------------------
|
|
169
|
+
( cd "$PROJ" && sf project deploy start -x package.xml -o "$TARGET_ORG" --ignore-conflicts >/dev/null 2>&1 ) \
|
|
170
|
+
|| fail "deploy failed after a successful dry-run."
|
|
171
|
+
|
|
172
|
+
# --- step 5: verify by round-trip (do not trust "Succeeded") -----------------
|
|
173
|
+
rm -f "$SETTINGS_FILE"
|
|
174
|
+
( cd "$PROJ" && sf project retrieve start -x package.xml -o "$TARGET_ORG" >/dev/null 2>&1 ) \
|
|
175
|
+
|| fail "post-deploy retrieve failed; cannot verify."
|
|
176
|
+
grep -q '<enableCallRecording>true</enableCallRecording>' "$SETTINGS_FILE" || fail "verification failed: org did not return enableCallRecording=true."
|
|
177
|
+
grep -q '<enableCallTranscription>true</enableCallTranscription>' "$SETTINGS_FILE" || fail "verification failed: org did not return enableCallTranscription=true."
|
|
178
|
+
|
|
179
|
+
# Report siblings from the post-deploy round-tripped file — their real, current
|
|
180
|
+
# (unchanged) values, proving nothing else moved.
|
|
181
|
+
emit_json "ENABLED" "$(extract_preserved "$SETTINGS_FILE")"
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# Channel branch — Help Portal *(Coming soon)*
|
|
2
|
-
|
|
3
|
-
> **When to read this file.** Load it only if the user selected **Help Portal** at Checkpoint 3.
|
|
4
|
-
|
|
5
|
-
## This is a hard stop, not an aspirational selection
|
|
6
|
-
|
|
7
|
-
Help Portal is **not yet supported.** DO NOT attempt to build anything for this channel. Do not create supporting objects, records, or metadata "toward" the feature — standing up a portal site or wiring routing for it is out of scope and requires a dedicated skill that does not exist yet. Trying to fulfill it by creating adjacent objects produces broken half-configurations that look done but never work.
|
|
8
|
-
|
|
9
|
-
Respond to the user verbatim:
|
|
10
|
-
|
|
11
|
-
> *"This feature is coming soon, please select Web Chat."*
|
|
12
|
-
|
|
13
|
-
Then re-present the channel selection (Web Chat / Help Portal / Voice) and wait for a supported choice. Do not proceed until the user picks Web Chat.
|
|
14
|
-
|
|
15
|
-
## Intended future shape (for reference only — do not build)
|
|
16
|
-
|
|
17
|
-
When the channel ships, it will ask the user for:
|
|
18
|
-
- **Site Name / Domain Name**
|
|
19
|
-
- **Logo image** (png, svg, or jpg — a file name or path)
|
|
20
|
-
- **Brand colors (RGB)**: Action color, Link color, Border color, Background color, Text color
|
|
21
|
-
|
|
22
|
-
…then use `experience-lwr-site-generate` to build the Experience Cloud site with the supplied branding and embed the agent on it. This is documented so the eventual implementation has a target; it is **not** a licence to build it now.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|