field-service-voice-to-form-configure について
Field Service Mobile で、レコード編集画面やデータ収集フォームへの音声入力を設定する Agent スキルです。Salesforce 管理者向けに org の状態を確認して設定、権限、ライセンスを整え、Setup での手動操作が必要な手順を案内します。
主な機能
- 012 種類の音声入力方式を設定
- 02ライセンス、設定、フォームを検出
- 03Lightning Data Service を有効化
- 04指定技術者の権限を設定
- 05REST 呼び出しで org を変更
- 06手動操作が必要な Setup 手順を提示
活用シーン
- 01モバイル技術者の音声入力を有効化
- 02レコード編集画面の音声入力を設定
- 03Data Capture Flow の音声入力を有効化
- 04Einstein や Field Service の前提条件を確認
MCP 対応
README によると、org 操作は Codey runtime 経由で REST 呼び出しを実行し、共有環境では Headless 360 MCP を使います。UI 操作のみの手順は agent-native browser MCP または管理者が実施します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill field-service-voice-to-form-configureインストール後、Claude Code で/field-service-voice-to-form-configureを入力して読み込まれたか確認します。
詳細
Voice to Form の設定
新規の Field Service 組織で、Field Service Mobile の Voice to Form を設定します。Voice to Form を使うと、モバイル作業者はフォームまたはレコード編集画面でマイクをタップして、内容を音声入力できます。Einstein の生成 AI が音声を解析し、該当する項目に入力します。
この機能には 2 つのバリエーションがあります。両者は権限の基盤を共有していますが、有効化するスイッチは異なります。
| バリエーション | 機能 | 表示場所 | 基盤となるスイッチ |
|---|---|---|---|
| Voice to Record Edit (V2RE) | モバイル作業者が編集可能なオブジェクト(Work Order、Service Appointment、Asset、Contact、Account、カスタムオブジェクトなど)の標準レコード編集画面に音声入力します | レコード編集画面のマイクアイコン | FieldServiceMobileSettings.IsShowEditFullRecord = true(組織レベルの行)+ FieldServiceVoiceToRecordEdit システム権限 |
| Voice to Form Data Capture (V2F, Beta) | 管理者が Flow Builder で作成した Discovery Framework/Data Capture フローに音声入力します | Data Capture フォームのマイクアイコン | FieldServiceVoiceToForm システム権限+フォームごとの LLM Targetable フラグ(UI の切り替えのみ) |
このスキルでは、Salesforce のドキュメントに記載された次の順序で、両方の完全なセットアップを説明します。
help.salesforce.com/s/articleView?id=service.mfs_voice_to_form_setup.htm(V2F Data Capture)help.salesforce.com/s/articleView?id=service.mfs_voice_to_record_edit_setup.htm(V2 Record Edit)
このスキルは冪等です。すでに設定済みの組織で再実行しても、変更は適用されません。
ランタイムの仕様: このスキルでの組織とのやり取りはすべて、Codey ランタイムを介してディスパッチされる REST 呼び出しです(ローカルでは
dispatch/共有環境ではホスト型の Headless 360 MCP)。このスキルは実行環境に依存しません。sfCLI、シェルスクリプト、ローカルの Python、jq、一時ファイル、メタデータのデプロイ、Apex は使用しません。検出は REST GET のセットです。LDS の切り替えは Tooling のFieldServiceSettings.MetadataPATCH、V2RE の組織スイッチは sObject PATCH、音声権限セットは単一の sObject POST、エンタイトルメントの付与は関連オブジェクトへの POST です。呼び出し可能な API がない唯一の手順である、フォームごとの LLM Targetable フラグは、エージェントネイティブのブラウザー MCP を使って設定するか、Setup のディープリンクを管理者に提示します(シェル手順ではなく、クリックして開くリンクです)。シェルコマンドは実行しないでください。
プラットフォームに関する注意事項
- すべての API パスでは
vXX.0を使用します。組織の現在の API バージョン(v62.0 以降。V2F Beta では最近のリリースが前提です)に固定してください。 - Tooling と記されたエンドポイントは
/services/data/vXX.0/tooling/...にディスパッチされます。それ以外はコア Data API(/services/data/vXX.0/...)です。 - Codey ランタイムは接続済みの組織を解決して更新し、必要に応じてトークンを発行します。このスキルで組織エイリアス、インスタンス URL、アクセストークンを管理することはありません。
- Setup で実際にクリックが必要な手順がいくつかあります(Einstein の基本セットアップウィザードの組織設定、フォームごとの LLM Targetable フラグ)。これらについては、管理者がクリックできる正確な Setup ディープリンクを提示します。スクリプトで設定しようとはしません。
- 以下の SOQL はすべて、
GET /services/data/vXX.0/query?q=<soql>(Data API)またはGET /services/data/vXX.0/tooling/query?q=<soql>(Tooling)としてディスパッチされます。レコードを返す読み取りはエージェント内で処理されるため、シェルで解析する必要はありません。
エディションとライセンス
- エディション。 Field Service のコア機能、管理パッケージ、モバイルアプリは、Lightning Experience の Enterprise、Unlimited、Developer エディションで利用できます。
- モバイルの利用資格。 すべてのモバイルワーカーは、アプリにログインするために Field Service Mobile PSL(
FieldServiceMobilePsl)が必要です。最新の Field Service 組織では、標準ユーザーライセンスに追加する権限セットライセンスであり、個別の「Field Service Mobile」ユーザーライセンス SKU はありません。(以前のドキュメントには異なる説明がありました。Step 0 のライブPermissionSetLicenseクエリを優先してください。) - V2RE の利用資格。 Voice to Record Edit を使用するモバイルワーカーには、Einstein for Field Service PSL(
EinsteinFieldServicePsl)が必要です。 - V2F(Beta)の利用資格。 Data Capture で Voice to Form を使用するモバイルワーカーには、Agentforce for Field Service PSL が必要です。Voice to Form Beta では、カスタム権限セット(クローンではなく、最小限のカスタム権限セット。Step 4 を参照)に V2F と V2RE のシステム権限を設定することも必要です。予期しない料金を避けるため、割り当てる前にアカウント担当者にライセンスの利用資格を確認してください。
- アプリのバージョン。 V2RE には Field Service Mobile App の Summer '25 以降が必要です。V2F には最新バージョンが必要です。
前提条件
セットアップ手順を実行する前に、次のすべてを確認してください。
- エディションとアドオン。 組織で Einstein for Field Service(V2RE)および/または Agentforce for Field Service(V2F)を利用できます。
- Einstein の生成 AI が完全に有効になっていること。プロビジョニングされているだけでは不十分です。 Step 1.5 のプローブで確認できます。
EinsteinLlmのランタイム利用資格が有効である必要があります(ライブ LLM 呼び出しがFUNCTIONALITY_NOT_ENABLEDではなく 200 を返すこと)。トライアル組織や SDO 組織では PSL が割り当てられていても、ランタイムが有効になっていないことがよくあります。これは、モバイルアプリで「更新をおすすめできませんでした」と表示される最も一般的な原因です。 - グラウンディングされたデータに対して Prompt Builder も使用する場合は、Data Cloud がプロビジョニングされ、有効になっていること。V2F のヘルプ記事で必要とされています。実際には、V2RE は Data Cloud を有効化しなくても動作します。
- V2F のみ:
help.salesforce.com/s/articleView?id=service.mfs_data_capture_setup.htmに従って Data Capture をセットアップします。このスキルは Step 5 で DC フォームを検出し、存在しない場合は、このリポジトリ内のfs-data-capture-form-deployerスキルに引き継いでフォームを作成します。 - 管理者ユーザーに適切な権限があること:
Customize Application、Manage Profiles and Permission Sets、Manage Flows。
セットアップ手順
手順は順番に実行してください。各手順では書き込み前に組織の状態を読み取ります。前提条件を満たしていない場合は、問題を示して停止し、組織を変更しません。以下の各読み取りと書き込みは、単一の dispatch 呼び出しです。
ステップ 0:プロビジョニング状態を検出して振り分ける
組織を分類するために、6つの読み取り検出を実行します。一見直感的に思えるいくつかのクエリ(FlowDefinitionView、Tooling の FieldServiceMobileSettings、Flow.DeveloperName)は動作しません。以下の項目名とサーフェスは検証済みです。
1. Einstein/Agentforce/モバイル Field Service の PSL — GET /services/data/vXX.0/query:
SELECT DeveloperName, MasterLabel, TotalLicenses, UsedLicenses
FROM PermissionSetLicense
WHERE DeveloperName IN ('EinsteinFieldServicePsl','FieldServiceMobilePsl','AgentforceForFieldServicePsl')
V2F のデモには EinsteinFieldServicePsl と FieldServiceMobilePsl が必要です。AgentforceForFieldServicePsl は任意です。ここで返された PSL のみをステップ 7 で割り当てます。
2. 標準提供の EinsteinFieldServiceUser 権限セット(読み取り専用の複製元参照) — GET /services/data/vXX.0/query:
SELECT Id, Name, Label FROM PermissionSet WHERE Name = 'EinsteinFieldServiceUser'
存在する場合 → FSL パッケージは V2F 対応バージョンでインストールされています。この権限セットは読み取り専用で提供されます。このスキルは編集せず、複製もしません(ステップ 4 を参照)。
3. Lightning Data Service モード(LDS) — Tooling GET /services/data/vXX.0/tooling/query:
SELECT FullName, Metadata FROM FieldServiceSettings
Metadata.enableLsdkMode を読み取ります。true → LDS は有効です。そのまま進みます。false → ステップ 1 で有効にします。LDS は V2F-DC には必須で、V2RE では任意です。
4. V2RE 組織スイッチ — 通常の sObject GET /services/data/vXX.0/query(Tooling ではありません):
SELECT Id, MasterLabel, IsDefault, IsShowEditFullRecord FROM FieldServiceMobileSettings
IsDefault = true の行(または唯一の行)の Id を取得します。ステップ 2 の PATCH はその行を対象にします。
5. 有効な Data Capture フォーム — Tooling GET /services/data/vXX.0/tooling/query(FlowDefinitionView ではありません):
SELECT Id, MasterLabel, ProcessType, Status, DefinitionId
FROM Flow
WHERE ProcessType IN ('DataCaptureFlow','DiscoveryFrameworkDataCaptureFlow') AND Status = 'Active'
表示には MasterLabel を使用します。Flow には DeveloperName 列がありません(クエリすると 400 INVALID_FIELD エラーになります)。API 名は Definition.DeveloperName をたどって確認します。行が 0 件の場合、ステップ 5 で fs-data-capture-form-deployer に引き継ぎます。
6. 既存の V2F カスタム権限セット — GET /services/data/vXX.0/query:
SELECT Id, Name, Label FROM PermissionSet WHERE IsCustom = true AND Name LIKE '%V2F%'
1 行 → 以前の実行で作成されています。ステップ 4 をスキップし、その Id を再利用します。行が 0 件 → ステップ 4 で作成します。
結果を解釈して組織を分類します。
| 診断 1(PSL) | 診断 2(権限セット) | 診断 5(フォーム) | アクション |
|---|---|---|---|
| MISSING | 任意 | 任意 | 停止します。 Einstein/Agentforce for Field Service の購入について、Salesforce の AE にお問い合わせください。このスキルは続行できません。 |
| PRESENT | MISSING | 任意 | ステップ 1.5 に進みます。 Einstein の基本設定が未完了です。ほかの作業を行う前にウィザードを実行してください。 |
| PRESENT | PRESENT | MISSING | 続行します。 V2RE は問題なく設定されます。V2F-DC はステップ 5 で DC スキルに引き継がれます。 |
| PRESENT | PRESENT | PRESENT | 続行します。 どちらのバリアントも問題なく設定されます。 |
ステップ 0.5:対象の技術者ユーザーを選択する
Voice to Form はユーザーごとの機能です。各技術者には Field Service Mobile PSL、Einstein for Field Service PSL、V2F/V2RE 権限セット、および有効な ServiceResource 行が必要です。このスキルは一度に1人の技術者を対象にするため、管理者は広範囲に展開する前にパイロット運用を行えます。
管理者に尋ねます:「Voice to Form を有効にしたい特定の技術者ユーザーはいますか?」
はいの場合: 管理者からユーザー名または User Id を提供してもらいます。ユーザーが有効であり、ServiceResource レコードを持っていることを、2つの GET /services/data/vXX.0/query 読み取りで検証します(指定された値をバインドされた WHERE に代入します)。
SELECT Id, Name, Username, IsActive, Profile.Name FROM User
WHERE (Username = :tech OR Id = :tech) AND IsActive = true
SELECT Id, Name, ResourceType FROM ServiceResource
WHERE RelatedRecordId IN (SELECT Id FROM User WHERE Username = :tech OR Id = :tech)
AND IsActive = true
いいえの場合: 候補を自動選択します。管理者以外のプロファイルを持つ、有効な ResourceType='T' の技術者から最初のユーザーを選び、確認のために提示します。GET /services/data/vXX.0/query:
SELECT Id, Name, RelatedRecord.Id, RelatedRecord.Username, RelatedRecord.Name, RelatedRecord.Profile.Name
FROM ServiceResource
WHERE IsActive = true AND ResourceType = 'T'
AND RelatedRecordId != null AND RelatedRecord.IsActive = true
AND RelatedRecord.Profile.Name NOT IN ('System Administrator')
AND (NOT RelatedRecord.Profile.Name LIKE '%Customer Community%')
AND (NOT RelatedRecord.Profile.Name LIKE '%Partner Community%')
ORDER BY Name LIMIT 1
割り当て手順で使用するため、技術者の User.Id(TECH_USER_ID とします)と Username を取得します。必要に応じて実行中の管理者の User Id も同じ方法(SELECT Id, Username FROM User WHERE ...)で特定します。Codey ランタイムは接続済みの ID をすでに把握しているため、org display の呼び出しは不要です。
ステップ 1:Field Service モバイルアプリで Lightning Data Service を有効にする
Discovery Framework フォームの Voice to Form(V2F-DC)は、LDS 対応のモバイルコンテナ内でレンダリングされます。V2RE は LDS なしでも動作しますが、有効にしても問題はなく、V2F-DC では必須なので、最初に一度だけ有効にしてください。
Winter '25 以降の新しい組織では、LDS がデフォルトで有効になっています。Spring '26 までに、すべての組織が自動的に移行されます。
FieldServiceSettings は Tooling sObject で、設定は JSON の Metadata フィールドに格納されています。Step 0 の診断 3 で読み取る内容と同じ形式です。そのため、LDS の有効化には Tooling での 読み取り・変更・書き込み PATCH を使用し、メタデータファイルのデプロイは行いません。.settings-meta.xml も、SFDX プロジェクトも、sf project deploy start も不要です。この方法は最初から必要ありませんでした。Tooling の Metadata サーフェスが実際の REST パスです(FieldServiceSettings の共有設定に、同じパターンを使う関連スキル fs-data-capture-form-deployer と同様です)。
1a. 設定のシングルトンを読み取る(Step 0 の診断 3 ですでに実行していますが、完全な Metadata オブジェクトとその行の ID を取得するため、再度読み取ります)— Tooling GET /services/data/vXX.0/tooling/query:
SELECT Id, FullName, Metadata FROM FieldServiceSettings
Metadata.enableLsdkMode がすでに true の場合、LDS は有効です。Step 1.5 に進んでください。それ以外の場合は、行の Id(base64 でエンコードされたシングルトン Tooling ID)と、完全な Metadata オブジェクトを控えてください。
1b. enableLsdkMode: true にして、完全な Metadata を PATCH で書き戻す — PATCH /services/data/vXX.0/tooling/sobjects/FieldServiceSettings/{Id}:
{ "Metadata": { "...all sibling keys from the GET...", "enableLsdkMode": true } }
1a で読み取った 完全な Metadata オブジェクトを送信し、enableLsdkMode だけを変更してください。一部だけを含むリクエストボディを送ると、省略した組織設定(fieldServiceOrgPref、enableWorkOrders、検索フィールドの配列など)が null になります。204 が返れば成功です。
1c. 実際に切り替わったことを確認する — 1a の Tooling 読み取りを再実行し、Metadata.enableLsdkMode == true を確認してください。これにより、書き込みが成功したと報告されてもフラグが false のままになる、まれな SDO/トライアル組織のケースに対処できます。切り替わっていない場合は、管理者が手動で切り替えられるように Setup へのディープリンクを提示してください。
LDS Setup UI (fallback — only if the PATCH did not persist):
<instanceUrl>/lightning/setup/FieldServiceSettings/home
Enable 'Lightning SDK for Field Service Mobile' under the Lightning SDK section.
(Codey ランタイムはインスタンス URL を認識しています。このスキルでは、管理者向けに相対 Setup パスを指定するだけです。)
ステップ 1.5:Einstein 生成 AI ランタイムが ON であることを確認する
ここは最も見落とされやすいステップです。これが無効でも、マイクアイコンはデバイス上に表示され、文字起こしも動作しますが、音声を使うたびに 「更新をおすすめできませんでした。もう一度お試しください。」 というエラーが発生します。これは、enableEinsteinGPT 組織設定が切り替えられていないため、LLM ランタイムが FUNCTIONALITY_NOT_ENABLED: [EinsteinLlm] を返すことが原因です。
1.5a. ランタイムをライブで確認する。 これが唯一確実なテストです。Einstein 設定に対する Tooling クエリは、リリースによって信頼性が異なります。GET /services/data/vXX.0/einstein/prompt-templates?pageSize=5 をディスパッチしてください。
promptRecords配列(少なくとも 1 行。たとえばeinstein_gpt__summarizeContactなど、Salesforce が管理するデフォルト設定)が返る 200 → LLM ランタイムは ON です。Step 2 に進んでください。FUNCTIONALITY_NOT_ENABLED: [EinsteinLlm]が返る 400 → ランタイムは OFF です。1.5b に進んでください。
1.5b. 確認に失敗した場合は、管理者向けにウィザードへのディープリンクを提示する。 ウィザードは実際に UI からのみ操作できます。このスキルでは操作できず、操作も試みません。相対 Setup パスを指定してください(ランタイムがインスタンス URL を解決します)。
Einstein LLM runtime is OFF. Walk the wizard end-to-end.
PRIMARY (start here):
/lightning/setup/EinsteinSetup/home
Wizard sub-pages:
Generative AI: /lightning/setup/EinsteinGPTSetupHome/home
Trust Layer: /lightning/setup/EinsteinTrustSetup/home
Data Cloud: /lightning/setup/DataCloudSetup/home
Prompt Builder: /lightning/setup/EinsteinPromptStudio/home
Models config: /lightning/setup/EinsteinModelsConfiguration/home
In order:
1. Open the PRIMARY link. Toggle 'Turn On Einstein' -> accept terms.
2. Open the Generative AI sub-page. Step through each numbered stage
(enable the org pref, set up Trust Layer, acknowledge data usage,
enable Prompt Builder).
3. If the wizard prompts for Data Cloud, open Data Cloud Setup and activate.
If it's not visible, refresh or re-login; if still missing, the org needs
a Data Cloud SKU (a CRT to Salesforce Support).
4. Re-run the 1.5a probe. If it now returns promptRecords, continue to Step 2.
Most common SDO/trial-org symptom: PSLs all assigned, EinsteinSetup page exists,
but the runtime entitlement was never turned on. 'Turn On Einstein' flips it.
1.5c. 管理者がウィザードを完了した後、再度確認する。 1.5a の dispatch 呼び出しを再実行してください。promptRecords が返るまで、先に進まないでください。
ステップ 2:Voice to Record Edit 組織スイッチを有効にする
V2RE の組織レベルのスイッチは、通常の sObject である FieldServiceMobileSettings にあります(Tooling Settings 型ではありません。以前のドキュメントの記載は誤りです)。該当する項目は IsShowEditFullRecord(表示ラベル「レコードの完全編集を有効化」)です。設定レコードには名前があり(デフォルトは「Field Service Mobile Settings」)、どのプロファイルが設定を継承するかを制御する IsDefault フラグがあります。
2a. デフォルト設定行を見つける(ステップ 0 の診断 4 を参照)か、新規作成する — 診断 4 で行が返されなかった場合は、POST /services/data/vXX.0/sobjects/FieldServiceMobileSettings でデフォルト設定を作成します。
{
"MasterLabel": "Field Service Mobile Settings",
"DeveloperName": "Field_Service_Mobile_Settings",
"IsDefault": true,
"IsShowEditFullRecord": true
}
201 が返されると、新しい行の Id が返されます(この時点でステップ 2b の条件も満たすため、PATCH は不要です)。
2b. 既存の行で IsShowEditFullRecord(および IsDefault)を true にする — PATCH /services/data/vXX.0/sobjects/FieldServiceMobileSettings/{Id}:
{ "IsShowEditFullRecord": true, "IsDefault": true }
204 が返されれば成功です。行を再読み込みして(ステップ 0 の診断 4)、両方のフィールドが true であることを確認します。IsDefault = true でない場合、この切り替えが有効になるのは MobileSettingsAssignment を介してこの設定行に明示的に割り当てられたプロファイルのみです。パイロットでは IsDefault = true にするのが最も簡単です。PATCH は冪等です。同じ値を再送信しても 204 が返され、変更はありません。
デバイス上でユーザーに表示される内容。 Salesforce のヘルプ(
mfs_actions_order.xml)によると、IsShowEditFullRecord = trueで、ユーザーがオブジェクトの編集アクセス権を持っている場合、Work Order Overview 画面の Actions ランチャーに、Quick Actions の後で Edit Work Order、Edit Work Order Line Item、Edit Service Appointment が表示されます。モバイルアプリは設定をキャッシュするため、新しいアクションを表示するには、技術者がログアウトしてから再度ログインする必要があります。
ステップ 3:V2F と V2RE のシステム権限列が存在することを確認する
Salesforce には、バリアントごとに異なる 2 つのシステム権限が用意されています。これらはカスタム権限セットで有効にします(ステップ 4)。PermissionSet の describe にある列は次のとおりです。
- V2F(ベータ版):
FieldServiceVoiceToForm— 列PermissionsFieldServiceVoiceToForm - V2RE:
FieldServiceVoiceToRecordEdit— 列PermissionsFieldServiceVoiceToRecordEdit
describe で列が存在することが、組織レベルの機能フラグの判定になります。GET /services/data/vXX.0/sobjects/PermissionSet/describe を実行し、fields[].name を PermissionsFieldServiceVoiceTo* で絞り込みます。
- 両方の列が存在する → V2F ベータ版と V2RE の両方が組織でライセンスされています。
PermissionsFieldServiceVoiceToRecordEditのみ存在する → V2F ベータ版はこの組織で有効になっていません。ヘルプ記事によると、「お客様の組織 ID を特定し、該当するサンドボックスまたは本番組織で機能フラグを有効にする必要があります。」Salesforce サポートに組織 ID を伝えて CRT を提出し、その後、V2RE のみのセットアップを続けます。- どちらも存在しない → この機能はライセンスされていません。中止してください。
describe では、両方の列が createable = true および updateable = true であることも確認できます。そのため、ステップ 4 は単一の POST で実行できます(以下を参照)。
ステップ 4:両方のシステム権限を持つ V2F/V2RE 権限セットを作成する
単一の sObject POST で音声システム権限を有効にする最小限のカスタム権限セットを作成します。PermissionSet は REST で作成可能な sObject であり、すべての Permissions* システム権限列は作成時に書き込み可能です(ステップ 3 の describe で、474 個すべての Permissions* 列が作成可能かつ更新可能であることを確認済みです)。そのため、権限セットは音声権限がすでに有効な状態で作成されます。XML も SFDX プロジェクトも sf project deploy start も不要です。
EinsteinFieldServiceUserを「クローン」しないでください。同梱の権限セットにはオブジェクト権限が一切なく、関連のない 2 つのシステム権限(ShowPreWorkBriefGA、FieldServiceCopilotActions)しかありません。実質的なペイロードは Einstein ライセンスへのリンクのみで、これはステップ 7 でEinsteinFieldServicePslPSL を通じてすでに付与されます。音声システム権限のブール値だけを持つ最小限のカスタム権限セットが適切であり、必要十分です。同梱の権限セットを複製しても何も追加されません。
POST /services/data/vXX.0/sobjects/PermissionSet をディスパッチします。リクエストボディの値はステップ 3 の describe に基づいて設定します。PermissionsFieldServiceVoiceToForm: true を設定するのは、その列が存在する場合に限ります(不明な権限列を送信すると 400 エラーになります)。
{
"Name": "EinsteinFieldServiceUser_V2F",
"Label": "Einstein for Field Service User (V2F)",
"Description": "Adds Field Service Voice to Form / Voice to Record Edit system perms. Assign to admins and mobile workers who use voice on the FSL mobile app.",
"PermissionsFieldServiceVoiceToRecordEdit": true,
"PermissionsFieldServiceVoiceToForm": true
}
Nameは^[A-Za-z][A-Za-z0-9_]*$に一致する必要があります。カスタム権限セットは自動的にIsCustom = trueになります。- V2RE 列のみが存在する場合(V2F Beta がオフの場合)、
PermissionsFieldServiceVoiceToFormは省略し、V2RE 専用の権限セットを作成します。 - 201 が返されると、新しい PermissionSet Id が返されます。
- 同じ
Nameで再実行すると 400DUPLICATE_DEVELOPER_NAMEが返されます。ステップ 0 の診断 6 チェックでは、V2F 権限セットがすでに存在する場合に作成をスキップし、その Id を再利用して、この事態を防ぎます。
権限が実際に反映されたことを確認します(下流のトリガーによって権限がクリアされても、作成が成功したと報告されることがあります)。GET /services/data/vXX.0/query を使用します。
SELECT Id, Name, PermissionsFieldServiceVoiceToRecordEdit FROM PermissionSet
WHERE IsCustom = true AND Name = 'EinsteinFieldServiceUser_V2F'
その列が組織に存在する場合に限り、SELECT に PermissionsFieldServiceVoiceToForm を追加します。権限列の値が true として返されることを確認します。ステップ 7 用に Id を記録します。
ステップ 5:Data Capture フォームを検出し、V2F で有効にするフォームを決める
このステップで対話が発生するのは V2F-DC の場合のみです。V2RE はステップ 2、ステップ 4、ステップ 7 で完全に有効になります(フォームごとの切り替えは不要です)。
5a. アクティブな DC フォームを一覧表示します — Tooling の GET /services/data/vXX.0/tooling/query を使用します(ほとんどの組織では FlowDefinitionView は Tooling クエリの対象外です)。
SELECT Id, MasterLabel, ProcessType, Status, DefinitionId, Definition.DeveloperName
FROM Flow
WHERE ProcessType IN ('DataCaptureFlow','DiscoveryFrameworkDataCaptureFlow') AND Status = 'Active'
ORDER BY MasterLabel
フォーム数を提示し、1 つ以上ある場合は各フォーム(Definition.DeveloperName — MasterLabel)を一覧表示します。
5b. フォームが 0 件の場合: fs-data-capture-form-deployer スキルに引き継ぎ、V2F-DC の有効化を停止します。V2RE には影響しません。(この引き継ぎは、FORM_COUNT == 0 を条件として、SOR 内の機械可読な delegates_to エッジで表されます。)
No Data Capture forms found.
Voice to Form fills DC forms; without at least one DC form, there is nothing to enable.
To create one, invoke the fs-data-capture-form-deployer skill in this repo
(../fs-data-capture-form-deployer/SKILL.md), or use fs-data-capture-form-designer
(prose or image/PDF input) for end-to-end form generation.
Re-run this skill from Step 5 after at least one DC form exists. Steps 0-4 are
idempotent; re-running is safe.
V2RE — Voice to Record Edit — does NOT depend on DC forms. If you only want V2RE,
Steps 1, 1.5, 2, 4, 7 are sufficient.
5c. フォームが 1 件以上ある場合: 管理者にどのフォームを選ぶか尋ねます。デフォルトではすべてを選択肢として提示します。
Which forms do you want to enable Voice to Form on?
[a] All <FORM_COUNT> forms above (recommended for a fresh setup)
[s] Some — pick a subset by row number or DeveloperName
[n] None for now — re-run later
ステップ 6:選択したフォームごとに LLM Targetable を有効化する
検証済みの制約('26 年夏時点で呼び出し可能な API はありません)。 LLM Targetable フラグには、メタデータ API による表現がありません。候補となる 7 つのフィールド名(
isLLMTargetable、isAIPromptable、isAvailableForLlm、voiceCaptureEnabled、supportsVoiceCapture、voiceToFormEnabled、isAITargetable)は、すべて Flow XSD パーサーによってElement ... invalid at this location in type Flowとして拒否されました。Tooling REST のFlow.MetadataJSON には LLM/音声/ターゲット指定のキーがなく、FlowDefinition.Metadataにも何もありません。このフラグは、Flow Builder の「詳細を表示」の下にある「名前を付けて保存」ダイアログにしか存在しません。このスキルにおける、REST では実行できない唯一の手順です。実行環境への依存ではなく、ブラウザー MCP を介してエージェントネイティブに処理します。
有効化する方法は 2 つあります。実行環境で利用できるものに応じて選んでください。
パス A(推奨 — エージェントネイティブなブラウザー MCP 操作)。 実際のフォームでこの方法によりフラグを有効化した後、V2F がモバイルアプリで正しくトリガーされることを含め、最初から最後まで動作することを検証済みです。ブラウザー MCP は(dispatch のように)エージェントの実行環境の一部であり、このスキルが依存するシェルや外部ツールではありません。
フォームごとに、次の手順を実行します。
- フォームを Flow Builder で開きます。ステップ 5a のリストから、選択したフォームごとに Flow Id を解決し、ブラウザー MCP で
<instanceUrl>/builder_platform_interaction/flowBuilder.app?flowId=<FLOW_ID>に移動します。(認証済みセッションは実行環境によって提供されます。このスキルではfrontdoor.jspURL を作成したり、トークンを処理したりしません。) - ツールバーの 新しいバージョンとして保存 をクリックします(「名前を付けて保存」ダイアログが開きます)。
- ダイアログの 詳細を表示 をクリックします。
- LLM Targetable のラベルをクリックします(チェックボックスが切り替わります)。
- ダイアログの 保存 ボタンをクリックします → Flow Builder によって V(n+1) が Draft として作成されます。
- ツールバーの 有効化 をクリックします → Draft が Active になり、以前のバージョンは Obsolete になります。
フォームごとのブラウザー MCP のクリック手順(ノード ID はページの読み込みごとに変わるため、browser_a11y_tree で再取得する必要があります):
browser_navigate(<instanceUrl>/builder_platform_interaction/flowBuilder.app?flowId=<FLOW_ID>)
# Wait until the toolbar renders. The "Last saved on..." banner is reliable.
browser_a11y_tree(query="Save As New Version") -> click that node
browser_a11y_tree(query="Show Advanced") -> click that node
browser_click("LLM Targetable") # aria-label resolution works for the label
browser_a11y_tree(query="dialog") -> drill into the dialog root, click "Save"
browser_a11y_tree(query="Activate") -> click that node
フォームごとの確認 — VersionNumber がより大きい新しい Active バージョンがあれば、保存が完了したことを確認できます。Tooling GET /services/data/vXX.0/tooling/query:
SELECT Definition.DeveloperName, VersionNumber, Status, LastModifiedDate FROM Flow
WHERE Definition.DeveloperName = :formApiName ORDER BY VersionNumber DESC LIMIT 3
最新の行が Active であり、LastModifiedDate が実行時刻に近いことを確認します。
パス B(ブラウザー MCP が利用できない場合の代替手段)— 管理者にディープリンクを渡す。 選択したフォームごとに Flow Builder の URL とクリック手順を提示します。管理者が各フォームを開き、「新しいバージョンとして保存」→「詳細を表示」→ LLM Targetable にチェックを入れる →「保存」→「有効化」の順に操作します。
Open each link. Click Save As New Version. Click Show Advanced.
Tick 'LLM Targetable'. Click Save. Click Activate.
<form MasterLabel>
<instanceUrl>/builder_platform_interaction/flowBuilder.app?flowId=<FLOW_ID>
注意点: Active なフローで 保存 だけをクリック(「新しいバージョンとして保存」を使わない)すると、Save ボタンがグレー表示のままになります。Flow Builder では、有効なフローをそのまま変更することはできません。バージョンプロパティのダイアログで LLM Targetable をクリックしても、通常の「保存」では変更が保存されません。「新しいバージョンとして保存」により Draft V(n+1) が作成され、その後「有効化」をクリックすると、その Draft が Active に切り替わります。
フォームの保存と有効化が完了したら、技術者はデバイスでフォームを開き、マイクアイコンが表示されることを確認します(ステップ 7 の permset は前提条件であり、トリガーではありません)。
ステップ 7:権限セットライセンスと音声権限セットを割り当てる
ステップ 0 の診断 1 で返された PSL と、ステップ 4 の権限セットを、管理者(エンドツーエンドで検証できるようにするため)と技術者(マイクがデバイス上に表示され、LLM の呼び出しが成功するようにするため)の両方に割り当てます。各付与は関連オブジェクトへの POST で、(ユーザー、権限)ペアごとに 1 行です。すでに割り当てられている場合は 400 DUPLICATE_VALUE が返されますが、呼び出し元はこれを何もしない成功として扱います。
7a. 検出された各 PSL を割り当てる — ユーザーごと、PSL ごとに POST /services/data/vXX.0/sobjects/PermissionSetLicenseAssign を 1 回実行します。PermissionSetLicenseId はステップ 0 の診断 1 の結果から解決します。
{ "AssigneeId": "<userId>", "PermissionSetLicenseId": "<pslId>" }
{管理者の User Id、技術者の User Id} × {診断 1 で検出された各 PSL — 最低でも EinsteinFieldServicePsl と FieldServiceMobilePsl} に対して実行します。
7b. ステップ 4 の権限セットを割り当てる — ユーザーごとに POST /services/data/vXX.0/sobjects/PermissionSetAssignment を 1 回実行します。
{ "AssigneeId": "<userId>", "PermissionSetId": "<v2fPermsetId>" }
7c. 技術者のモバイルユーザー権限一式を確認する。 TECH_USER_ID に対して次の 4 つの GET /services/data/vXX.0/query 読み取りを実行し、それぞれが想定される行を返すことを確認します。ここで行が欠けていると、エラーメッセージが表示されないままデバイス上で確実に失敗します。
- Field Service Mobile PSL が割り当て済み:
SELECT PermissionSetLicense.DeveloperName FROM PermissionSetLicenseAssign WHERE AssigneeId = :techId AND PermissionSetLicense.DeveloperName = 'FieldServiceMobilePsl' - Einstein for Field Service PSL が割り当て済み:
SELECT PermissionSetLicense.DeveloperName FROM PermissionSetLicenseAssign WHERE AssigneeId = :techId AND PermissionSetLicense.DeveloperName = 'EinsteinFieldServicePsl' - 両方のシステム権限を含む音声権限セットが割り当て済み:
SELECT PermissionSet.PermissionsFieldServiceVoiceToForm, PermissionSet.PermissionsFieldServiceVoiceToRecordEdit FROM PermissionSetAssignment WHERE AssigneeId = :techId AND PermissionSet.Name = 'EinsteinFieldServiceUser_V2F' - ServiceResource が有効で、親オブジェクトへの編集アクセス権がある:
SELECT Id, IsActive FROM ServiceResource WHERE RelatedRecordId = :techId AND IsActive = trueSELECT SObjectType, PermissionsRead, PermissionsEdit FROM ObjectPermissions WHERE ParentId IN (SELECT PermissionSetId FROM PermissionSetAssignment WHERE AssigneeId = :techId) AND SObjectType IN ('WorkOrder','ServiceAppointment')
よくある不足:
- PSL が不足している: ユーザーのプロファイルに FSL Mobile PSL がありません。明示的に割り当ててください(7a)。
- 編集アクセスがない/不完全: Standard User プロファイルでは、デフォルトで FSL オブジェクトへの編集アクセス権が付与されません。ユーザーを Field Service Mobile プロファイルに移すか、権限セットを通じて読み取り+編集アクセス権を付与してください。
4 項目すべてに合格すれば、技術者の権限一式は整っています。デバイス上での検証(以下)は、REST ワークフローの範囲外となる管理者による手動作業です。
ステップ 8:デバイス上で検証する(手動)
技術者がデバイスの Field Service Mobile アプリにログインし、音声入力が機能することを確認します。これは人が行う作業です。スキルによる組織の設定は完了しています。
次の 3 項目を順番に確認します。
8a. V2RE —「Edit Work Order」アクションが表示される:
- 今日のスケジュールにある作業指示を開きます。
- 「概要」画面の右上にある Actions をタップします。
- 「クイックアクション」の後に Edit Work Order、Edit Work Order Line Item、Edit Service Appointment が表示されます。
表示されない場合は、ログアウトしてから再度ログインしてください(設定キャッシュが原因です)。
8b. V2RE のマイク — 音声で項目に入力する:
- Edit Work Order をタップします。
- キーボードの横にマイクアイコンがあることを確認します。
- マイクをタップし、たとえば 「優先度を高に設定して、顧客からキッチンで水漏れがあると報告されたという説明を追加してください。」 と話します。
- 優先度と説明が入力されることを確認します。
マイクは表示されるものの、音声入力が 「更新をおすすめできませんでした。もう一度お試しください。」 と表示されて失敗する場合は、ステップ 1.5 に戻り、ライブ LLM プローブを再実行してください。Einstein ウィザードが完全に完了していません。
8c. V2F-DC のマイク — DC フォームに音声で入力する:
- 作業指示の「フォーム」タブ(または関連リスト)を開きます。
- ステップ 6 で LLM Targetable を有効にした DC フォームのいずれかを開きます。
- マイクをタップして話します。
- 項目が入力されることを確認します。
フォームにマイクが表示されない場合、LLM Targetable のクリックが保存されていません。Flow Builder(ステップ 6)で開き直し、チェックボックスを確認して、もう一度保存してください。
組織に Data Capture フォームが 1 つもない場合
ステップ 5 は早期終了します。このスキルは fs-data-capture-form-deployer スキル(このリポジトリ内の関連スキル)に引き継ぎ、V2F-DC の有効化を停止します。V2RE には影響しません。V2RE のみであれば、ステップ 1、1.5、2、4、7 で十分です。
DC スキルがフォームを 1 つ以上作成した後に V2F-DC の有効化を再開するには、ステップ 5 から再実行してください。ステップ 0〜4 は冪等です。
設定リファレンス
| 対象 | 設定場所 | 変更方法 |
|---|---|---|
| モバイルワーカーにマイクを表示するかどうか | EinsteinFieldServiceUser_V2F 権限セットの割り当て + EinsteinFieldServicePsl PSL の割り当て + FieldServiceMobilePsl PSL の割り当て | ステップ 7(関連オブジェクトへの POST) |
| Einstein LLM ランタイムが有効かどうか | enableEinsteinGPT 組織設定 | 設定 → Einstein → はじめにウィザード(ステップ 1.5、UI のみ) |
| 作業指示の編集/SA の編集アクションを表示するかどうか | FieldServiceMobileSettings.IsShowEditFullRecord + FSM 設定行の IsDefault = true(または明示的なプロファイル割り当て) | ステップ 2(sObject PATCH) |
| モバイルアプリで LDS が有効かどうか | FieldServiceSettings.Metadata.enableLsdkMode | ステップ 1(Tooling Metadata PATCH) |
| ユーザーに対して V2RE が機能するかどうか | カスタム権限セット経由の FieldServiceVoiceToRecordEdit システム権限 | ステップ 4、ステップ 7 |
| 組織で V2F(ベータ版)が機能するかどうか | describe に FieldServiceVoiceToForm システム権限が存在すること + Salesforce サポートによる Customer Org ID の機能フラグの有効化 | ステップ 3 の describe。見つからない場合はサポートに CRT を送信 |
| 特定の DC フォームで V2F が有効かどうか | Flow Builder の保存ダイアログにある LLM 対応チェックボックス(メタデータ API 経由の方法はありません) | ステップ 6(ブラウザー MCP またはディープリンク) |
| 音声からテキストへの変換と項目マッピングを実行する LLM | Salesforce が管理 | お客様による設定はできません |
よくある問題
レコード編集画面(V2RE)にマイクが表示されない。
次の順に確認してください:
FieldServiceMobileSettings.IsShowEditFullRecord = trueであり、その行のIsDefault = trueであること(ステップ 2 で確認)。- ユーザーに
PermissionsFieldServiceVoiceToRecordEdit = trueを設定したカスタム権限セットが割り当てられていること(ステップ 7c、項目 3)。 - ユーザーに
FieldServiceMobilePslPSL が割り当てられていること(ステップ 7c、項目 1)。 - ステップ 2 の後に、ユーザーがログアウトして再度ログインしていること。
- ユーザーが Summer '25 以降の Field Service Mobile App を使用していること。
Data Capture フォーム(V2F)にマイクが表示されない。
次の順に確認してください:
- フォームで LLM Targetable = true になっていること(ステップ 6 で確認)。
- ユーザーにカスタム権限セットを通じて V2F システム権限が付与されていること(ステップ 7c、項目 3 → V2F=true)。
- ユーザーに FSL Mobile PSL が割り当てられていること(ステップ 7c、項目 1)。
- Customer Org ID 機能フラグが有効になっていること。項目 1~3 を確認しても表示されない場合は、組織 ID を添えて CRT を提出してください(ステップ 3 で説明)。
- フォームに Upload Image、Upload File、Image Preview、Matrix、Lookup、Signature コンポーネントのみが含まれていないこと。これらは V2F に対応していません。
マイクは表示されるが、「We couldn't recommend any updates. Try again.」と表示され、音声入力が失敗する。
これは最もよくある失敗ケースです。LLM ランタイムがオフになっています。次の順に確認してください:
- ステップ 1.5a のプローブを実行します。
FUNCTIONALITY_NOT_ENABLED: [EinsteinLlm]が返された場合、ランタイムはオフです。 - Einstein Setup ウィザードを実行します(ステップ 1.5b)。「Turn On Einstein」をオンにします。Trust Layer を含め、番号付きのすべてのステップを実行してください。
- プローブを再実行します。少なくとも 1 行を含む
promptRecordsが返された場合、ランタイムはオンです。 - 技術者にデバイス上で再試行してもらいます。
ウィザードの実行後もプローブが失敗する場合は、組織 ID と FUNCTIONALITY_NOT_ENABLED: [EinsteinLlm] エラーコードを添えて、Salesforce Support に CRT を提出してください。SDO とトライアル組織では、ウィザードの完了後でも Salesforce 側での有効化が必要になることがあります。
マイクは表示され、音声は文字起こしされるが、誤った項目に入力される。
LLM が音声を誤った項目にマッピングしています。よくあるパターンは 2 つあります:
- 項目ラベルが似ている。 ラベルが似た 2 つの項目(「Notes」と「Technician Notes」など)があると、マッピングが混乱します。わかりやすい名前に変更してください。
- フォームが長すぎる。 1 画面に収まるフォームが長いと、マッピングの精度が低下します。複数の画面に分割してください。
モバイルのアクションリストに Edit Work Order アクションが表示されない。
mfs_actions_order.xml によると、Edit アクションは Quick Actions の後に表示され、IsShowEditFullRecord = true であり、かつユーザーがオブジェクトに対する編集アクセス権を持つ場合にのみ表示されます。次の手順で確認してください:
- ステップ 2 で確認 —
IsShowEditFullRecord = trueかつIsDefault = true。 - ステップ 7c、項目 4 — WorkOrder と ServiceAppointment の Edit 権限。
- モバイルアプリでログアウトして再度ログインします。アクションリストはキャッシュされています。
検証チェックリスト
本番環境で Voice to Form が有効であると宣言する前に実行してください。
- 認証プローブ(
SELECT Id FROM Organization LIMIT 1)が想定どおりの組織を返します。 - 少なくとも 1 つの Einstein/Agentforce for Field Service PSL が存在し、
TotalLicenses > 0かつUsedLicenses < TotalLicensesです。 - Field Service Mobile の LDS が有効です(204 だけでなく、PATCH 後に読み戻した実際の
Metadata.enableLsdkMode値で確認します)。 - Step 1.5 のプローブが
promptRecordsを伴って 200 を返します。/einstein/prompt-templatesへの LLM のライブ呼び出しで、FUNCTIONALITY_NOT_ENABLEDではなく、少なくとも 1 行が返されます。 -
FieldServiceMobileSettings.IsShowEditFullRecord = trueであり、同じ行のIsDefault = true(または技術者のプロファイルに明示的に割り当て済み)です。 - カスタム権限セット
EinsteinFieldServiceUser_V2Fが存在し、PermissionsFieldServiceVoiceToRecordEdit = trueです(V2F Beta がオンの場合はPermissionsFieldServiceVoiceToForm = trueも設定します)。 - 権限セットが管理者と選択した技術者の両方に割り当てられています。
- 技術者に
FieldServiceMobilePslとEinsteinFieldServicePslが割り当てられており、アクティブなServiceResource行も存在します。 - (V2F-DC のみ)少なくとも 1 つの DC フォームで LLM Targetable がオンになっており、新しい Active バージョンがあります(Step 6 で確認)。
- デバイス上で、技術者がログアウトして再ログインし、Work Order を開いて Edit(V2RE)をタップするか DC フォーム(V2F)を開くと、マイクが表示され、音声入力が正しい項目に入力されます。
規約
- REST ネイティブで、実行環境に依存しません。 組織の読み取りと書き込みはすべて、Codey ランタイム経由でディスパッチする単一の
dispatchREST 呼び出しです。このスキルではsfCLI、シェル、ローカルの Python やjq、一時ファイル、メタデータのデプロイ、Apex は使用しません。唯一の非 REST 手順(LLM Targetable)では、エージェントネイティブのブラウザー MCP または Setup のディープリンクを使用し、シェルは使用しません。 - 冪等です。 すでに設定済みの組織で再実行しても、変更は適用されません。LDS/権限セット/PSL の書き込みは安全に再実行できます(204/変更なし、または成功として扱う
DUPLICATE_VALUE)。 - API 名は組織から読み取ります。 PSL の DeveloperName、権限セットの Id、フォーム API 名の一覧、FSM Settings の行 Id はすべてライブで読み取り、ハードコードしません。
- Tooling の設定プローブよりランタイムのプローブを優先します。
Ai4mSettings.enableEinsteinGPTは、完全に有効化された組織でも<missing>を返します。確実な確認方法は Step 1.5a の LLM ライブ呼び出しだけです。 - JSON の
Metadataフィールドにはオブジェクト全体を書き込みます。 LDS の PATCH ではFieldServiceSettings.Metadataオブジェクト全体を送信し、1 つのキーだけを切り替えます。部分的なボディを送信すると、省略した組織設定が null になります。 - 単一の信頼できる情報源を使います。 Salesforce Help に設定手順が記載されている場合、このスキルでは手順を再掲したり異なる説明をしたりせず、該当記事を参照します。
管理者が行う必要のある手動手順(クリック操作のみ)
このスキルでは、これらの手順を API 経由で実行できません。それぞれ、管理者がクリックする Setup のディープリンクを返します。
| タイミング | 内容 | 理由 |
|---|---|---|
| Step 1.5b | /lightning/setup/EinsteinSetup/home を開き、'Turn On Einstein' をクリックして、Generative AI サブページの番号付き手順をすべて実行します | enableEinsteinGPT 組織設定を切り替えます。最も重要な手順です。これを行わないと、ほかの設定がすべて正しくても、音声機能は「更新をおすすめできませんでした」というエラーで失敗します。 |
| Step 1(フォールバックのみ) | /lightning/setup/FieldServiceSettings/home を開き、'Lightning SDK for Field Service Mobile' を有効にします | Tooling の Metadata PATCH が、変更を反映しない SDO/トライアルテンプレートで保持されなかった場合にのみ実施します。PATCH が優先手順です。 |
| Step 6(Path B のフォールバックのみ) | 各 Flow Builder URL を開き、Save As New Version → Show Advanced → LLM Targetable にチェック → Save → Activate の順に操作します | メタデータ API 経由の方法はありません。Path A ではブラウザー MCP によって自動化します。このフォールバックは、ランタイムにブラウザー MCP がない場合に使用します。 |
| Step 8 | デバイス上で Field Service Mobile アプリからログアウトし、再ログインします | 設定と権限セットのキャッシュを更新します。アプリが変更を反映するのは、新しいセッションを開始した後だけです。 |
関連スキル
このリポジトリ内の関連スキル:
fs-data-capture-form-deployer— Flow Builder の仕様から Data Capture フォームを作成します。組織にフォームがない場合、ステップ 5 でこのスキルに引き継ぎます。fs-data-capture-form-designer— 自然言語のプロンプト、または撮影した紙のフォームや PDF から DC フォームを生成し、fs-data-capture-form-deployerを使ってデプロイします。fs-data-capture-form-editor— 既存の DC フォームを変更します。configure-field-service-mobile— FSL Mobile の組織レベル設定(LDS、Forms タブの表示、ブランディング)をセットアップします。ステップ 1(LDS)と、V2F-DC をモバイルで表示するために必要な Forms タブとの関連付けで、このスキルと連携します。fs-mobile-branding— Field Service Mobile アプリにブランドカラーを適用します。setting-up-pre-work-brief+customizing-pre-work-brief— 同じ Frontline AI ファミリーの関連スキルです。PWB は Work Order の概要タブに AI ブリーフを表示し、V2F は技術者がその Work Order のフォームやレコード編集画面に音声入力できるようにします。訪問前に PWB、訪問中に V2F を使うことで、2 つをスムーズに連携できます。fs-data-capture-reference— Data Capture の概念を解説する入門資料です。背景知識を得るのに役立ちます。salesforce-agx-*— AGX Flow Builder ファミリー(background-flow、screen-flow、data-retrieval-flow、orchestration-flow)です。既存のフローを Voice 対応にするのではなく、カスタム DC フローを作成する場合に役立ちます。
参考資料
外部資料(Salesforce ヘルプ):
- Voice to Form(Data Capture)のセットアップ:
https://help.salesforce.com/s/articleView?id=service.mfs_voice_to_form_setup.htm - Voice to Record Edit のセットアップ:
https://help.salesforce.com/s/articleView?id=service.mfs_voice_to_record_edit_setup.htm - Field Service Mobile 設定の詳細:
https://help.salesforce.com/s/articleView?id=service.mfs_settings_details.htm - Field Service Mobile アプリに表示されるアクション:
https://help.salesforce.com/s/articleView?id=service.mfs_actions_order.htm - Data Capture のセットアップ:
https://help.salesforce.com/s/articleView?id=service.mfs_data_capture_setup.htm - Data Capture フローの作成:
https://help.salesforce.com/s/articleView?id=service.mfs_data_capture_buildflow.htm - Data Capture の制限事項とガイドライン:
https://help.salesforce.com/s/articleView?id=service.mfs_data_capture_limitations.htm - Einstein 生成 AI のセットアップ:
https://help.salesforce.com/s/articleView?id=ai.generative_ai_enable.htm - Field Service Mobile の Lightning Data Service:
https://help.salesforce.com/s/articleView?id=service.mfs_lightning_data_service.htm
既知の制限事項
- Voice to Form はベータ版です。 Salesforce は、リリース間で動作、権限名、機能フラグを変更する権利を留保します。このスキルは Spring '26 / Summer '26 を対象としています。
- LLM Targetable にはメタデータ API の経路がありません。 実機で検証済みです。Flow XSD パーサーは候補となるフィールド名をすべて拒否し、Tooling REST の
Flow.MetadataJSON にも LLM 関連のキーは含まれていません。フォームごとの有効化には Flow Builder UI が必要です。ステップ 6 の Path A では、ブラウザー MCP を通じてこのエージェントがネイティブに操作します(エンドツーエンドで検証済み)。Path B では、管理者がクリックできるようディープリンクにフォールバックします。このスキルで REST を使用しないステップはこれだけです。 - Customer Org ID の機能フラグ。 V2F-DC を使用するには、Salesforce 側で特定の組織の機能フラグを有効にする必要があります。このスキルは
PermissionSet.PermissionsFieldServiceVoiceToFormの describe 列を使って検出しますが、有効化はできません。存在しない場合は、Salesforce サポートに CRT を提出してください。 - Einstein LLM ランタイムの利用資格。 トライアル組織や SDO 組織では、すべての PSL が割り当て済みでも、ランタイムが有効になっていないことがよくあります。ステップ 1.5 でこれを検出して表示します。解決するには、UI ウィザードをクリックして進める必要があります。ウィザードの完了後も、SDO 組織では Salesforce 側での有効化が必要になる場合があります。
- 変更に応じないテンプレートでの LDS。 まれに、SDO/トライアルテンプレートでは
enableLsdkModeの書き込みが成功を報告しても、切り替わらないことがあります。ステップ 1c では再読み込みしてこれを検出し、Setup のディープリンクにフォールバックします。 - コンポーネントタイプの対応範囲。 V2F は、DC フォームの Upload Image、Upload File、Image Preview、Matrix、Lookup、Signature コンポーネントをサポートしていません。これらのみで構成されたフォームには、マイクアイコンが表示されません。