MCPInstall

service-native-voice-recording-transcription-configure

Configure (enable OR disable) 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. Either preference can be turned on or off independently. Use this skill when a user asks to turn on/off, enable/disable, 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 off call recording', 'disable 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.

Installs
641
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/forcedotcom/sf-skills --skill service-native-voice-recording-transcription-configure
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads service-native-voice-recording-transcription-configure automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Configure Native Voice Recording & Transcription (headless)

Turn call recording and call transcription for Native Voice (Thunderbird Voice) on or off on an org, programmatically, so the change takes effect for headless / API-driven support sessions that never touch the Service Console UI. Recording and transcription are two separate preferences — this skill can set either or both to the requested state (leaving the other untouched) and returns a structured JSON confirmation.

Scope

  • In scope: setting enableCallRecording and/or enableCallTranscription to a requested state — true (enable) or false (disable) — on the ThunderbirdVoiceSettings metadata via an sf CLI Metadata API deploy (the generic Settings container, member ThunderbirdVoice); returning a JSON confirmation of the resulting configuration. A preference the user does not name is left at its current value.
  • Out of scope: changing any other ThunderbirdVoiceSettings boolean (e.g. call-recording redaction, SIP recording) — siblings are read only to be preserved, never set or reported; redacting/scrubbing PII from existing recordings or transcripts; transcribing a supplied audio file; provisioning the Native Voice / Thunderbird channel itself; authoring Flow, Apex, or permission sets. These are outside this skill's scope — handle them separately.

Required Inputs

Gather or infer before proceeding:

  • Target org — an org alias or username the sf CLI is authenticated to. The deploy uses this existing sf login; no session id or access token is requested. Default: the org's default target. Confirm connectivity with sf org display -o <alias>.
  • Which preferences — recording, transcription, or both. Default: both, since headless capture typically needs recording and transcription. If the user named just one, target only that one and leave the other at its current value.
  • Desired state — enable (on/true) or disable (off/false) for each named preference. Default: enable, unless the user asks to turn something off. Honor a disable request literally — never re-enable a preference the user asked to turn off.

Workflow

All steps are sequential. Do not skip or reorder. If blocked, stop and ask for the missing org context.

  1. Confirm the two preferences are modeled separately. Recording (enableCallRecording) and transcription (enableCallTranscription) are distinct booleans on the same metadata type — never collapse them into one combined flag. The final confirmation must report each independently.

  2. Run the configure script. Run scripts/enable-recording-transcription.sh --target-org <alias> with the desired state per preference: --recording on|off and/or --transcription on|off. With no preference flags it defaults to turning both on. Examples: turn both off → --recording off --transcription off; enable recording only → --recording on (transcription left as-is); disable transcription only → --transcription off. The script retrieves ThunderbirdVoiceSettings (via the Settings container), checks the org-perm gate, sets only the named flag(s) to the requested value while preserving every other field, validates with a dry-run deploy, deploys, and verifies by round-trip. Use --dry-run to retrieve + validate without persisting. Run scripts/enable-recording-transcription.sh --help for all options.

  3. For the Metadata API contract, read references/thunderbird-voice-settings.md — it documents the type, the two booleans, the Settings-container manifest, the v68.0+ version floor, and the retrieve-first gate check. The manifest template the script generates is assets/package.xml.

    This uses the sf CLI Metadata API deploy, not a raw SOAP call. The member is the mdApiType without the Settings suffix (ThunderbirdVoice), and the manifest version MUST be >= 68.0 — the fields are not exposed at any lower version.

  4. Change only the named target field(s), to the requested state. The deployed settings file sets exactly the preference(s) the user named — enableCallRecording and/or enableCallTranscription — to the requested value (true to enable, false to disable); every other ThunderbirdVoiceSettings boolean, INCLUDING a target preference the user did not name, keeps its retrieved value. Do not add or flip other booleans, and never coerce a disable request back to true — they are out of this skill's scope or contrary to the request.

  5. Return the confirmation JSON. Emit a single JSON object matching assets/confirmation-output.json: the metadata type and fullName, that it was applied via a headless/API deploy, and — for each of the two preferences separately — its field name and its resulting enabled state (true/false, as it now stands after the deploy, whether it was changed or left as-is), plus an overall status (ENABLED, DISABLED, or CONFIGURED). It also includes a preserved array echoing every sibling boolean (e.g. enableCallRecRedaction, enableSipRecording) with the value it was retrieved with — this attests the siblings were carried through unchanged, which compliance callers need as explicit "nothing else moved" assurance. Reporting a sibling's value is NOT changing it. On a successful run the script prints this object on stdout; surface it verbatim as the deliverable — do not strip the preserved block.


Rules / Constraints

ConstraintRationale
Model recording and transcription as two separate preferencesThey are distinct booleans (enableCallRecording, enableCallTranscription); collapsing them loses the ability to enable one without the other and fails the output contract.
Deploy through the generic Settings container with member ThunderbirdVoiceThunderbirdVoiceSettings is not a retrievable top-level type name; the Settings container (member = mdApiType minus the Settings suffix) is the sf CLI path and uses the org's sf login — no session id.
Manifest version must be >= 68.0ThunderbirdVoiceSettings fields are only exposed at API v68.0+; below that the retrieve returns the type empty/absent.
Retrieve before deploy; preserve all sibling fieldsThe 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 preserved block, but never change themCompliance 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 changes only the named target field(s).
Honor the requested state literally — enable means true, disable means falseA disable request that silently re-enables the preference (or reports success while leaving it on) is a correctness failure; set exactly what was asked and report the value the org actually returns.
Verify by round-trip before reporting the statusA "Succeeded" deploy is not proof; only report the resulting state after a re-retrieve returns each named preference at its requested value.
Output must be a single valid JSON objectThe 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 outputThese are secrets / PII; the confirmation reports configuration state only.

Gotchas

IssueResolution
Property 'enableCallRecording' not valid in version <N> / Settings type 'ThunderbirdVoice' is unknownAPI version too low. The fields are only exposed at v68.0+. Raise --api-version to 68.0 or higher — this is NOT a feature gate.
Retrieve returns an empty <ThunderbirdVoiceSettings/> (no fields)Org-perm gate orgHasNativeVoiceAllowed is off — Native Voice is not provisioned. Enable via provisioning/Blacktab; metadata cannot flip an unprovisioned feature.
Trying to retrieve ThunderbirdVoiceSettings as the type nameUse the Settings container with member ThunderbirdVoice (mdApiType minus the Settings suffix); the full type name is not a retrievable member.
Collapsing both prefs into one toggle (e.g. recordingAndTranscription: true)Keep two distinct entries in both the deployed file and the confirmation JSON.
Deploying a partial settings fileStart from the retrieved file so sibling prefs keep their values; a partial file can reset them.
Missing jq / sfThe script depends on them; install or run in an environment that has them (declared in metadata.cliTools).

Output Expectations

Deliverables:

  • A single JSON confirmation object on stdout, shaped per assets/confirmation-output.json — the metadata target, the headless/API deploy path, each of the two preferences reported separately with its enabled state, a preserved array echoing every sibling boolean (unchanged) so callers can confirm nothing else moved, and an overall status.

No files are written to the org's source tree — the script works in a temporary SFDX project and reports the result.


Reference File Index

FileWhen to read
scripts/enable-recording-transcription.shStep 2 — run to retrieve → set named field(s) → validate → deploy → verify (supports --recording on|off, --transcription on|off, --dry-run, --api-version, --help; defaults to both on).
references/thunderbird-voice-settings.mdStep 3 — for the metadata type, the two booleans, the Settings manifest, the v68.0+ floor, and the gate check.
assets/package.xmlStep 3 — the Metadata API manifest template the script generates; read to understand or hand-build the retrieve/deploy.
assets/confirmation-output.jsonStep 5 — the exact shape of the JSON confirmation to return.

FAQ

What does the service-native-voice-recording-transcription-configure skill do?

Configure (enable OR disable) 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. Either preference can be turned on or off independently. Use this skill when a user asks to turn on/off, enable/disable, 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 off call recording', 'disable 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.

How do I install service-native-voice-recording-transcription-configure?

Run npx skills add https://github.com/forcedotcom/sf-skills --skill service-native-voice-recording-transcription-configure in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/service-native-voice-recording-transcription-configure/ (personal) or .claude/skills/service-native-voice-recording-transcription-configure/ (project).

Which AI agents can use service-native-voice-recording-transcription-configure?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is service-native-voice-recording-transcription-configure safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains service-native-voice-recording-transcription-configure?

It is published by forcedotcom in forcedotcom/sf-skills. It has 641 recorded installs.

More from forcedotcom/sf-skills

View all →

platform-apex-generate

forcedotcom/sf-skills

Primary Apex authoring skill for class generation, refactoring, and review. ALWAYS ACTIVATE when the user mentions Apex, .cls, triggers, or asks to create/refactor a class (service, selector, domain, batch, queueable, schedulable, invocable, DTO, utility, interface, abstract, exception, REST resource). Use this skill for requests involving SObject CRUD, mapping collections, fetching related records, scheduled jobs, batch jobs, trigger design, @AuraEnabled controllers, @RestResource endpoints, custom REST APIs, or code review of existing Apex.

platform-apex-test-generate

forcedotcom/sf-skills

Use to generate and validate Apex test classes with TestDataFactory patterns, bulk testing (251+ records), mocking, assertions, and disciplined test-fix loops. Use when creating Apex test classes (for triggers, services, controllers, batch jobs, queueables, and callouts), improving coverage, debugging or fixing failing Apex tests, or running test/coverage analysis. Triggers on Test.cls files, sf apex run test, coverage reports. Do NOT trigger for production Apex (use platform-apex-generate) or Jest/LWC tests.

Testing & QA7.1K installs

platform-apex-test-run

forcedotcom/sf-skills

Apex test execution, coverage analysis, and test-fix loops with 120-point scoring. Use when the user runs Apex tests, checks code coverage, fixes failing tests, or touches Test.cls / Test.cls files. DO NOT TRIGGER when writing Apex production code (use platform-apex-generate), Agentforce agent testing (use agentforce-test), or Jest/LWC tests (use experience-lwc-generate).

Testing & QA7K installs

platform-apex-logs-debug

forcedotcom/sf-skills

Salesforce debug log analysis and troubleshooting with 100-point scoring. TRIGGER when: user analyzes debug logs, hits governor limits, reads stack traces, or touches .log files from Salesforce orgs. DO NOT TRIGGER when: running Apex tests (use platform-apex-test-run), generating or fixing Apex code (use platform-apex-generate), or Agentforce session tracing (use agentforce-observe).

platform-soql-query

forcedotcom/sf-skills

Use when the user needs SOQL/SOSL authoring or optimization: natural-language-to-query generation, relationship queries, aggregates, query-plan/selectivity analysis, and performance or safety improvements. TRIGGER when the user writes, optimizes, or debugs SOQL/SOSL, touches .soql files, or asks about relationship queries, aggregates, or query performance. DO NOT TRIGGER for bulk data operations (use platform-data-manage), Apex DML logic (use platform-apex-generate), or report/dashboard queries.

platform-metadata-deploy

forcedotcom/sf-skills

Salesforce DevOps automation using sf CLI v2. TRIGGER when: user deploys metadata, validates a deploy or does a dry-run, deploys to a Production org, quick-deploys a validated job ID, ships/promotes to prod, creates/manages scratch orgs or sandboxes, sets up CI/CD pipelines, or troubleshoots deployment errors with sf project deploy. DO NOT TRIGGER when: writing Apex code, building LWC components (use experience-lwc-generate), creating metadata definitions (use platform-custom-object-generate), deleting metadata from an org (use platform-destructive-deploy), or querying org data (use platform-data-manage).

DevOps & Cloud6.8K installs

Popular media & creative skills

View category →

hyperframes

heygen-com/hyperframes

Read first to make, edit, animate or render any video with HyperFrames (HTML rendered to video), including launch films, explainers, music videos, charts, maps, vertical clips, title cards, captions and overlays. Holds the render contract, the work loop and what each kind of video needs.

Media & Creative1.2M installs

media-use

heygen-com/hyperframes

Get or make any media for a HyperFrames video - music, sound effects, images, icons, logos, voiceover, avatar and generated video, transcripts, cutouts, colour grades and looks - with HeyGen or free local tools, and mix placed audio. Also for footage that looks dark, flat or dull, or should be stylized or hidden.

Media & Creative1.1M installs

hyperframes-registry

heygen-com/hyperframes

About 450 ready-made HyperFrames blocks and components installed as editable source - transitions, overlays, titles, kinetic type, captions, charts, map overlays, 3D, camera moves. Use it before hand-building any named visual (CRT scanlines, glitch, film grain, a chart); also for hyperframes add and catalog.

Media & Creative1M installs

hyperframes-creative

heygen-com/hyperframes

Non-animation creative direction for HyperFrames videos. Use for design spec (frame.md / design.md) handling, palettes, typography, narration, beat planning, audio-reactive visuals, composition patterns, and brand / style decisions. For atomic motion patterns and scene blueprints, use hyperframes-animation.

Media & Creative916.5K installs

ai-video-generation

101-skills/superpowers

Generate AI videos with Google Veo, Seedance 2.0, HappyHorse, Wan, Grok and 40+ models via inference.sh CLI. Models: Veo 3.1, Veo 3, Seedance 2.0, HappyHorse 1.0, Wan 2.5, Grok Imagine Video, OmniHuman, Fabric, HunyuanVideo. Capabilities: text-to-video, image-to-video, reference-to-video, video editing, lipsync, avatar animation, video upscaling, foley sound. Use for: social media videos, marketing content, explainer videos, product demos, AI avatars. Triggers: video generation, ai video, text to video, image to video, veo, animate image, video from image, ai animation, video generator, generate video, t2v, i2v, ai video maker, create video with ai, runway alternative, pika alternative, sora alternative, kling alternative, seedance, happyhorse

Media & Creative881.5K installs

ai-image-generation

101-skills/superpowers

Generate AI images with GPT-Image-2, FLUX, Gemini, Grok, Seedream, Reve and 50+ models via inference.sh CLI. Models: GPT-Image-2, FLUX Dev LoRA, FLUX.2 Klein LoRA, Gemini 3 Pro Image, Grok Imagine, Seedream 4.5, Reve, ImagineArt. Capabilities: text-to-image, image-to-image, inpainting, LoRA, image editing, upscaling, text rendering. Use for: AI art, product mockups, concept art, social media graphics, marketing visuals, illustrations. Triggers: flux, image generation, ai image, text to image, stable diffusion, generate image, ai art, midjourney alternative, dall-e alternative, text2img, t2i, image generator, ai picture, create image with ai, generative ai, ai illustration, grok image, gemini image, gpt image, openai image, chatgpt image

Media & Creative880.3K installs