VoiceID
VoiceIDは、任意のブラウザー認証方法です。 アプリが対応を有効にした後、各ウォレットの所有者が登録するかどうかを選びます。 話者照合と発話認識は、信頼するWallet iframe内でローカル実行します。 鍵管理、セッション、ポリシー、しきい値署名の既存の確認は維持されます。
インストールと設定
アプリには同じバージョンのパッケージをインストールしてください。 VERSIONをリリースノートに記載された対応するバージョンに置き換えます。
pnpm add @seams/wallet@VERSION @seams/voiceid@VERSION任意のパッケージから記述子をインポートし、既存の設定にauthMethodsを追加します。 次の例はNEARとArcのテストネットを有効にします。
import { defineSeamsConfig } from '@seams/wallet';
import { voiceIdAuthMethod } from '@seams/voiceid';
export const voiceIdConfig = defineSeamsConfig({
walletOrigin: import.meta.env.VITE_WALLET_ORIGIN,
relayerUrl: import.meta.env.VITE_RELAYER_URL,
publishableKey: import.meta.env.VITE_SEAMS_PUBLISHABLE_KEY,
authMethods: [voiceIdAuthMethod()],
chains: [{ network: 'near-testnet' }, { network: 'arc-testnet', chainId: 5_042_002 }],
});ウォレットの設定と認証に従い、設定をSeamsWebProviderへ渡してください。 記述子のインポートと対応の有効化では、エンジンやモデルをダウンロードしません。 パスキーとメールOTPの処理でもVoiceIDアセットを読み込みません。 発話認識モデルの初期設定はCitrinet-256 LSです。容量の小さいAuroraASR-1Mを使う場合は、 voiceIdAuthMethod({ transcriptionModel: 'aurora' })を設定します。 ダウンロードする発話認識モデルは選択したものだけです。モデルを変更しても、保存済みの話者登録は維持されます。
Walletホストの準備
walletOriginの運用者も、両方のパッケージを同じバージョンでインストールする必要があります。 別の運用者がWalletをホストする場合は、そのオリジンでのVoiceID対応を依頼してください。
インストール後、ホスト側のプロジェクトで次のコマンドを実行します。
npx --no-install seams-voiceid-host ./wallet-with-voiceidコマンドは、インストール済みのWalletパッケージを自動検出します。pnpmの配置にも対応します。 Walletと任意のVoiceIDのアセットを、指定した出力ディレクトリーへまとめます。 ビルドごとに新しい出力ディレクトリーを使ってください。既存ディレクトリーやインストール済みパッケージは上書きしません。
出力ディレクトリーを、walletOriginの静的ルートとしてデプロイしてください。 /wallet-service、/sdk/*、アセットマニフェストを含みます。 マニフェストに記載されたContent-Typeとキャッシュヘッダーを維持してください。 ホストの要件はホスト型統合を参照してください。
ホストは、有効なVoiceID操作で必要になったときだけ/sdk/voiceid/host.jsを読み込みます。 ホストへの配置が欠けている場合や互換性がない場合は、設定エラーを返します。
ウォレットへの登録
所有者は、まずパスキーまたはメールOTPでウォレットをアンロックします。 次にWalletメニューの認証方法 → VoiceIDを開きます。 アプリ独自のVoiceIDを有効にする操作も用意できます。
import type { SeamsContextType } from '@seams/wallet/react';
export async function enableVoiceId(seams: SeamsContextType['seams'], walletId: string) {
const result = await seams.registration.activateAuthMethod({
walletId,
method: 'voiceid',
});
if (result.kind === 'cancelled') return result;
console.log('VoiceID enabled', result.walletAuthMethodId);
return result;
}プロバイダー内でuseSeams()からseamsを取得します。 ユーザーのクリック後、現在のウォレットIDとともにenableVoiceIdへ渡してください。 Walletは、マイクの許可と、受け入れた3つのサンプルを管理します。 拒否されたサンプルは再試行できます。画面を閉じるとkind: 'cancelled'を返します。 登録に成功するとwalletAuthMethodIdを返します。現在の認証方法は変わりません。 登録済みの方法で再度有効化を呼ぶと、音声の管理を開きます。
アンロックと送金承認
所有者はWalletのサインインメニューでVoiceIDを選べます。 独自のアンロック操作には、ウォレットIDと登録済みのwalletAuthMethodIdを渡します。
export async function unlockWithVoiceId(
seams: SeamsContextType['seams'],
walletId: string,
walletAuthMethodId: string,
) {
const result = await seams.auth.unlockWithAuthMethod({
walletId,
walletAuthMethodId,
method: 'voiceid',
});
if (!result.success) throw new Error(result.error);
return result;
}VoiceIDでアンロックした後も、既存のトランザクションAPIを使います。 NEARとArcのテストネット送金の確認画面に、VoiceIDで確認を表示します。 所有者は、表示された短い英語の発話を普段の速さで読みます。 各確認で新しい音声照合が必要です。実験用の話者の類似度しきい値は0.45です。 発話認識では、自然な発話に対応するため、一定範囲の違いを許容します。 表示された発話で鮮度を確認します。承認する操作はトランザクションの確認画面で定まります。
VoiceIDの有効化や登録だけでは、パスキーやメールOTPでの署名方法は変わりません。 署名者や認証方法の追加、登録音声の変更では、引き続き操作単位の承認を求めます。
読み込みと保存
初回のVoiceID操作では、転送時の圧縮前でCitrinetなら約36 MB、Auroraなら約27 MBをダウンロードします。 1つの進捗表示で、エンジン、話者モデル、音声検出モデル、選択した発話認識モデルの読み込み状況を示します。その後、推論の準備が終わるまで**VoiceIDを準備中…**を表示します。 ブラウザーの保存領域が利用可能な場合、検証済みのアセットをキャッシュします。 サイトデータの削除やブラウザーによるキャッシュ削除で、再ダウンロードが必要になる場合があります。
音声はローカルに留まり、処理後に破棄します。Walletオリジンは、登録テンプレートとデバイス認証情報を保存します。 登録と追加サンプルには、時間や利用回数の制限がありません。 登録を削除した場合やWalletオリジンの保存領域を消去した場合は、再登録が必要です。 音声の管理では、所有者の新たな確認後に認識の改善、リセット、再録音を行えます。
VoiceIDは、そのブラウザーのデバイス認証情報とローカルの話者照合に依存します。 録音音声や合成音声への耐性について、本番環境での精度を保証しません。 登録音声の管理に備え、パスキーまたはメールOTPを利用可能にしてください。