Skip to content

Web SDK ​

@sorisdk/web-audio は、Webサービスやブラウザベースの製品にSORI音声認識を 組み込むためのブラウザSDKです。

Beta

Web SDK は現在 Beta 段階です。実装はまだ発展途上のため、一部の API や 連携フローは変更される可能性があります。

前提条件 ​

  • https:// または http://localhost などのsecure context
  • AudioContext と MediaDevices.getUserMedia をサポートする最新ブラウザ
  • SORIが提供するephemeral keyフローへのアクセス
  • ユーザーが許可したマイク権限

npm・バンドラー連携 ​

npmとバンドラーを使用するアプリケーションでは、バージョンを指定して パッケージをインストールします。

bash
npm install @sorisdk/web-audio@0.6.10

Viteベースのアプリケーションでは vite-plugin-wasm も必要です。

bash
npm install --save-dev vite-plugin-wasm
ts
import wasm from "vite-plugin-wasm";

export default {
  plugins: [wasm()]
};

AudioRecognizer は、認証の初期化、セッション管理、パックのキャッシュ、 マイクによる認識を処理します。ephemeral keyは、アプリケーションのバック エンドまたはサーバーレスエンドポイントから取得してください。

ts
import { AudioRecognizer } from "@sorisdk/web-audio";

const recognizer = new AudioRecognizer({
  appId: "YOUR_APP_ID",
  ephemeralKey: async () => {
    const response = await fetch("/api/ephemeral-key", {
      method: "POST"
    });

    if (!response.ok) {
      throw new Error(`Ephemeral key request failed: HTTP ${response.status}`);
    }

    const { ephemeral_key } = await response.json();
    return ephemeral_key;
  }
});

recognizer.on("campaign", (event) => {
  console.log(event.campaign);
});

recognizer.on("error", ({ error }) => {
  console.error(error);
});

await recognizer.start();

認識を終了するときやページを破棄するときは、stop() または destroy() を 呼び出してください。

ブラウザ向けスタンドアロンモジュール ​

npmやバンドラーを使用しないブラウザアプリケーションでは、正確なバージョン URLからスタンドアロンESMモジュールを直接インポートします。これはブラウザ 標準のモジュールインポートであり、グローバルAPIは作成されません。

html
<script type="module">
  import { AudioRecognizer } from
    "https://cdn.iplateia.com/web/sorisdk/v0.6.10/sori-web-audio.mjs";

  const recognizer = new AudioRecognizer({
    appId: "YOUR_APP_ID",
    ephemeralKey: async () => {
      const response = await fetch("/api/ephemeral-key", {
        method: "POST"
      });

      if (!response.ok) {
        throw new Error(`Ephemeral key request failed: HTTP ${response.status}`);
      }

      const { ephemeral_key } = await response.json();
      return ephemeral_key;
    }
  });

  recognizer.on("campaign", (event) => {
    console.log(event.campaign);
  });

  recognizer.on("error", ({ error }) => {
    console.error(error);
  });

  await recognizer.start();
</script>

本番環境では正確なバージョンを固定し、可変の latest URLに置き換えないで ください。

Ephemeral Keyエンドポイントの保護 ​

スタンドアロンモジュールを使うとフロントエンドのビルドは不要になりますが、 信頼できるサーバーは引き続き必要です。有効期間の長いアプリケーション シークレットをブラウザコードに埋め込まないでください。

アプリケーション運営者は、製品に適した認証または匿名セッション検証に加え、 ユーザー、IP、セッション単位のレート制限、発行クォータ、不正利用の監視に よって、ephemeralKey が利用するエンドポイントを保護する責任があります。 エンドポイントが別オリジンにある場合はCORSヘッダーが必要になることが ありますが、CORSは認証ではなく、スクリプト、ボット、ブラウザ以外の クライアントからの呼び出しを防ぐものではありません。

キー発行とrelayパターンは Ephemeral Key を 参照してください。

Content Security Policy ​

厳格なContent Security Policy(CSP)を使用する場合は、 'wasm-unsafe-eval' でWebAssemblyのコンパイルを許可します。 https://cdn.iplateia.com を script-src と connect-src の両方に追加し、 SORI APIとephemeral keyエンドポイントのオリジンも connect-src に追加して ください。例:

text
script-src 'self' 'wasm-unsafe-eval' https://cdn.iplateia.com;
connect-src 'self' https://cdn.iplateia.com https://console.soriapi.com;

ephemeral keyエンドポイントが別のオリジンを使用する場合は、そのオリジンを connect-src に追加します。スタンドアロンの例ではインラインモジュール スクリプトを使用しているため、CSP nonceまたはhashで許可するか、許可済みの 外部スクリプトへ移動してください。この連携のためだけに 'unsafe-inline' を 有効にしないでください。

次のステップ ​