Loading...
Loading...
Enable call recording and call transcription for Native Voice (Thunderbird Voice) programmatically via the Metadata API, for headless / API-driven support where no human uses the Service Console UI. Use this skill when a user asks to turn on, enable, or configure Native Voice recording and/or transcription for headless or automated voice calls. TRIGGER when: users mention Thunderbird Voice, Native Voice, ThunderbirdVoiceSettings, enableCallRecording, enableCallTranscription, 'enable recording and transcription', 'turn on call recording via API', headless voice recording, or configuring voice-call capture without clicking through Setup. DO NOT TRIGGER when: the user wants to redact or scrub PII from existing recordings, transcribe a supplied audio file, or author a Flow/Apex — those are out of scope for this skill.
npx skill4agent add forcedotcom/sf-skills service-native-voice-recording-transcription-configureenableCallRecordingenableCallTranscriptionThunderbirdVoiceSettingsSettingsThunderbirdVoiceThunderbirdVoiceSettingssfsf org display -o <alias>enableCallRecordingenableCallTranscriptionscripts/enable-recording-transcription.sh --target-org <alias>ThunderbirdVoiceSettingsSettingstrue--dry-runscripts/enable-recording-transcription.sh --helpreferences/thunderbird-voice-settings.mdSettingsassets/package.xmlThis uses the sf CLI Metadata API deploy, not a raw SOAP call. The member is the mdApiType without thesuffix (Settings), and the manifest version MUST be >= 68.0 — the fields are not exposed at any lower version.ThunderbirdVoice
enableCallRecordingenableCallTranscriptiontrueThunderbirdVoiceSettingsassets/confirmation-output.jsontypefullNamestatuspreservedenableCallRecRedactionenableSipRecordingpreserved| Constraint | Rationale |
|---|---|
| Model recording and transcription as two separate preferences | They are distinct booleans ( |
Deploy through the generic | |
| Manifest version must be >= 68.0 | |
| Retrieve before deploy; preserve all sibling fields | The deploy is a full-file replace — starting from the retrieved file keeps other prefs intact and lets the gate be checked. |
Report the preserved siblings in a | Compliance callers need explicit "nothing else moved" assurance; the confirmation echoes each sibling's retrieved value unchanged. Echoing a value is not setting it — the deployed file still flips only the two target fields. |
Verify by round-trip before reporting | A "Succeeded" deploy is not proof; only claim enabled after a re-retrieve returns both |
| Output must be a single valid JSON object | The confirmation is consumed programmatically by headless callers; prose-only answers are not usable. |
| Do not include a session id, access token, phone number, recording URL, or transcript content in the output | These are secrets / PII; the confirmation reports configuration state only. |
| Issue | Resolution |
|---|---|
| API version too low. The fields are only exposed at v68.0+. Raise |
Retrieve returns an empty | Org-perm gate |
Trying to retrieve | Use the |
Collapsing both prefs into one toggle (e.g. | Keep two distinct entries in both the deployed file and the confirmation JSON. |
| Deploying a partial settings file | Start from the retrieved file so sibling prefs keep their values; a partial file can reset them. |
Missing | The script depends on them; install or run in an environment that has them (declared in |
assets/confirmation-output.jsonpreservedstatus| File | When to read |
|---|---|
| Step 2 — run to retrieve → flip → validate → deploy → verify (supports |
| Step 3 — for the metadata type, the two booleans, the |
| Step 3 — the Metadata API manifest template the script generates; read to understand or hand-build the retrieve/deploy. |
| Step 5 — the exact shape of the JSON confirmation to return. |