service-native-voice-recording-transcription-configure
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseEnable Native Voice Recording & Transcription (headless)
以无界面方式启用Native Voice录音与转录
Turn on call recording and call transcription for Native Voice (Thunderbird
Voice) on an org, programmatically, so they take effect for headless / API-driven
support sessions that never touch the Service Console UI. Recording and transcription
are two separate preferences — this skill enables both and returns a structured
JSON confirmation.
通过编程方式在组织中为Native Voice(Thunderbird Voice)开启录音和转录功能,使其在从未接触Service Console UI的无界面/API驱动支持会话中生效。录音和转录是两个独立的偏好设置——此技能会同时启用两者,并返回结构化的JSON确认信息。
Scope
范围
- In scope: enabling and
enableCallRecordingon theenableCallTranscriptionmetadata via an sf CLI Metadata API deploy (the genericThunderbirdVoiceSettingscontainer, memberSettings); returning a JSON confirmation of the resulting configuration.ThunderbirdVoice - Out of scope: changing any other 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.
ThunderbirdVoiceSettings
- 包含范围:通过sf CLI Metadata API部署(通用容器,成员为
Settings)在ThunderbirdVoice元数据上启用ThunderbirdVoiceSettings和enableCallRecording;返回配置结果的JSON确认信息。enableCallTranscription - 排除范围:修改任何其他布尔值(如通话录音编辑、SIP录音)——这些关联设置仅可读取以保留原有状态,绝不进行设置或上报;从现有录音或转录文本中编辑/清除PII;转录提供的音频文件;配置Native Voice/Thunderbird渠道本身;编写Flow、Apex或权限集。这些均超出此技能的范围——需单独处理。
ThunderbirdVoiceSettings
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 login; no session id or access token is requested. Default: the org's default target. Confirm connectivity with
sf.sf org display -o <alias> - Which preferences — recording, transcription, or both. Default: both, since headless capture typically needs recording and transcription. Confirm only if the user named just one.
在执行前需收集或推断:
- 目标组织——sf CLI已认证的组织别名或用户名。部署将使用现有的登录信息;无需请求会话ID或访问令牌。默认值:组织的默认目标。可通过
sf确认连接性。sf org display -o <alias> - 需启用的偏好设置——录音、转录,或两者都启用。默认值:两者都启用,因为无界面捕获通常同时需要录音和转录。仅当用户明确指定其中一项时才需确认。
Workflow
工作流程
All steps are sequential. Do not skip or reorder. If blocked, stop and ask for the
missing org context.
-
Confirm the two preferences are modeled separately. Recording () and transcription (
enableCallRecording) are distinct booleans on the same metadata type — never collapse them into one combined flag. The final confirmation must report each independently.enableCallTranscription -
Run the enable script. Run. It retrieves
scripts/enable-recording-transcription.sh --target-org <alias>(via theThunderbirdVoiceSettingscontainer), checks the org-perm gate, flips the two target flags toSettingswhile preserving every sibling, validates with a dry-run deploy, deploys, and verifies by round-trip. Usetrueto retrieve + validate without persisting. Run--dry-runfor all options.scripts/enable-recording-transcription.sh --help -
For the Metadata API contract, read— it documents the type, the two booleans, the
references/thunderbird-voice-settings.md-container manifest, the v68.0+ version floor, and the retrieve-first gate check. The manifest template the script generates isSettings.assets/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 -
Change only the two target fields. The deployed settings file sets exactlyand
enableCallRecordingtoenableCallTranscription; every othertrueboolean keeps its retrieved value. Do not add or flip other booleans — they are out of this skill's scope.ThunderbirdVoiceSettings -
Return the confirmation JSON. Emit a single JSON object matching: the metadata
assets/confirmation-output.jsonandtype, that it was applied via a headless/API deploy, and — for each of the two preferences separately — its field name and enabled state, plus an overallfullName. It also includes astatusarray echoing every sibling boolean (e.g.preserved,enableCallRecRedaction) 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 theenableSipRecordingblock.preserved
所有步骤需按顺序执行,不得跳过或重新排序。若受阻,请停止并询问缺失的组织上下文信息。
-
确认两项偏好设置为独立配置。录音()和转录(
enableCallRecording)是同一元数据类型下的独立布尔值——绝不能将它们合并为一个组合标志。最终的确认信息必须分别上报每一项的状态。enableCallTranscription -
运行启用脚本。执行。该脚本会检索
scripts/enable-recording-transcription.sh --target-org <alias>(通过ThunderbirdVoiceSettings容器),检查组织权限网关,将两个目标标志设为Settings同时保留所有关联设置,通过试运行部署进行验证,完成部署,并通过往返验证确认结果。使用true参数可仅检索并验证,不保存更改。执行--dry-run查看所有选项。scripts/enable-recording-transcription.sh --help -
关于Metadata API约定,请阅读——其中记录了元数据类型、两个布尔值、
references/thunderbird-voice-settings.md容器清单、**v68.0+**的版本下限,以及检索前的网关检查。脚本生成的清单模板为Settings。assets/package.xml此操作使用sf CLI Metadata API部署,而非原始SOAP调用。成员为mdApiType(不含后缀,即Settings),且清单版本必须**>= 68.0**——低于此版本的字段不会被暴露。ThunderbirdVoice -
仅修改两个目标字段。部署的设置文件仅将和
enableCallRecording设为enableCallTranscription;所有其他true布尔值保持其检索到的原始值。不得添加或修改其他布尔值——这些超出此技能的范围。ThunderbirdVoiceSettings -
返回确认JSON。输出一个符合格式的JSON对象:包含元数据
assets/confirmation-output.json和type、通过无界面/API部署应用的信息,以及——针对每一项偏好设置——其字段名称和启用状态,还有整体fullName。此外还包含一个**status**数组,回显所有关联布尔值(如preserved、enableCallRecRedaction)及其检索到的原始值——这可向合规调用者明确证明关联设置未被修改。上报关联设置的值并不等同于修改它们。脚本运行成功时会在标准输出打印此对象,请直接原样展示作为交付结果——不要移除enableSipRecording块。preserved
Rules / Constraints
规则/约束
| 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. |
| 约束 | 理由 |
|---|---|
| 将录音和转录视为两个独立的偏好设置 | 它们是独立的布尔值( |
通过通用 | |
| 清单版本必须>=68.0 | |
| 部署前先检索;保留所有关联字段 | 部署是全文件替换——从检索到的文件开始操作可保持其他偏好设置不变,并能检查网关状态。 |
在 | 合规调用者需要明确的“无其他更改”保证;确认信息会回显每个关联设置的原始值。回显值并不等同于设置值——部署文件仍仅修改两个目标字段。 |
往返验证后再上报 | “部署成功”并不代表配置生效;仅当重新检索返回两项均为 |
| 输出必须是单个有效的JSON对象 | 确认信息由无界面调用者以编程方式消费;仅用文本描述的答案无法使用。 |
| 输出中不得包含会话ID、访问令牌、电话号码、录音URL或转录内容 | 这些属于机密信息/PII;确认信息仅上报配置状态。 |
Gotchas
常见问题
| 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 |
| 问题 | 解决方案 |
|---|---|
| API版本过低。字段仅在v68.0+版本中暴露。将 |
检索返回空的 | 组织权限网关 |
尝试以 | 使用 |
将两项偏好设置合并为一个开关(如 | 在部署文件和确认JSON中均保留两个独立的条目。 |
| 部署部分设置文件 | 从检索到的文件开始操作,以保持关联偏好设置的原始值;部分文件可能会重置这些设置。 |
缺少 | 脚本依赖这些工具;需安装它们或在已安装的环境中运行(已在 |
Output Expectations
输出预期
Deliverables:
- A single JSON confirmation object on stdout, shaped per — the metadata target, the headless/API deploy path, each of the two preferences reported separately with its enabled state, a
assets/confirmation-output.jsonarray echoing every sibling boolean (unchanged) so callers can confirm nothing else moved, and an overallpreserved.status
No files are written to the org's source tree — the script works in a temporary SFDX
project and reports the result.
交付成果:
- 标准输出中的单个JSON确认对象,格式符合——包含元数据目标、无界面/API部署路径、分别上报的两项偏好设置及其启用状态、回显所有关联布尔值(未修改)的
assets/confirmation-output.json数组(以便调用者确认无其他更改),以及整体preserved。status
不会向组织的源代码树写入任何文件——脚本在临时SFDX项目中运行并上报结果。
Reference File Index
参考文件索引
| 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. |
| 文件 | 阅读时机 |
|---|---|
| 步骤2——执行以完成检索→修改→验证→部署→验证(支持 |
| 步骤3——了解元数据类型、两个布尔值、 |
| 步骤3——脚本生成的Metadata API清单模板;阅读以理解或手动构建检索/部署操作。 |
| 步骤5——需返回的JSON确认信息的精确格式。 |