アシスタントをプロジェクトに統合する(その他の言語)

以下の各セクションの手順に沿って、Google アシスタントをプロジェクトに統合します。

gRPC バインディング

Google アシスタント サービスは、高性能のオープンソース RPC フレームワークである gRPC の上に構築されています。このフレームワークは、双方向オーディオ ストリーミングに適しています。

Python

Python を使用する場合は、まずこのガイドをご覧ください。

C++

GitHub の C++ サンプルをご覧ください。

Node.js

GitHub の Node.js サンプルをご覧ください。

Android Things

組み込みデバイスに関心をお持ちの場合は、Android Things の Assistant SDK サンプルをご覧ください。

その他の言語

  • googleapis リポジトリのクローンを作成して、Google Assistant Service API のプロトコル バッファ インターフェースの定義を取得します。
  • gRPC のドキュメントに従って、選択した言語の gRPC バインディングを生成します
  • 以降のセクションの手順に従います。

アシスタントで使用する Google アカウントを認可および認証する

次のステップでは、Google アカウントを使用してデバイスが Google アシスタントと通信できるようにデバイスを承認します。

Assistant SDK スコープで OAuth トークンを取得する

Assistant SDK は、OAuth 2.0 アクセス トークンを使用して、デバイスとアシスタントへの接続を承認します。

プロトタイピングでは、認可ツールを使用して、デバイスモデルの登録時に生成された client_secret_<client-id>.json ファイルから OAuth2.0 認証情報を簡単に生成できます。

認証情報を生成するには、次の手順に従います。

  1. Python 仮想環境を使用して、認可ツールとその依存関係をシステムの Python パッケージから分離します。

    sudo apt-get update
    sudo apt-get install python3-dev python3-venv # Use python3.4-venv if the package cannot be found.
    python3 -m venv env
    env/bin/python -m pip install --upgrade pip setuptools wheel
    source env/bin/activate
    
  2. 認可ツールをインストールします。

    python -m pip install --upgrade google-auth-oauthlib[tool]
  3. ツールを実行します。(SSH セッションではなく)デバイスのターミナルからこれを実行する場合は、--headless フラグを削除します。

    google-oauthlib-tool --client-secrets /path/to/client_secret_client-id.json --scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless
    

デバイスのプロビジョニング メカニズムの一部として認証を統合する準備ができたら、OAuth 2.0 を使用した Google API へのアクセスのガイドを読み、OAuth アクセス トークンを取得、永続化、使用してデバイスが Assistant API と通信できるようにする方法を理解してください。

これらのガイドに従うときは、次のものを使用してください。

デバイスを保護するためのおすすめの方法については、プライバシーとセキュリティに関するベスト プラクティスをご覧ください。

OAuth トークンを使用して gRPC 接続を認証する

最後に、Google でトークンベースの認証を使用する方法を確認して、Assistant API への gRPC 接続を認証する方法をご覧ください。

デバイスを登録する

デバイスモデルとインスタンスを手動または登録ツール(Python で利用可能)で登録します。

アシスタントとの基本的な会話を実装する

  1. Google Assistant Service API 用に双方向ストリーミング gRPC クライアントを実装します。
  2. ユーザーが新しいリクエストをトリガーするのを待ちます(たとえば、ボタンの押下による GPIO 割り込みを待ちます)。
  3. config フィールドを設定して AssistRequest メッセージを送信します(AssistConfig を参照)。config フィールドに以下が含まれていることを確認します。

    • audio_in_config フィールド。後続のリクエストで提供される audio_in データの処理方法を指定します(AudioInConfig を参照)。
    • audio_out_config フィールドには、サーバーが audio_out メッセージを返す際に使用する形式を指定します(AudioOutConfig を参照)。
    • device_config フィールド。アシスタントは登録済みデバイスを識別します(DeviceConfig を参照)。
    • dialog_state_in フィールドに、リクエストに関連付けられた language_code が含まれます(DialogStateIn を参照)。
  4. 録音を開始します。

  5. audio_in フィールドに音声クエリの音声データを含めて複数の AssistRequest メッセージを送信します。

  6. 受信 AssistResponse メッセージを処理します。

  7. AssistResponse メッセージから会話メタデータを抽出します。たとえば、dialog_state_out から conversation_statevolume_percentage を取得します(DialogStateOut を参照)。

  8. END_OF_UTTERANCEevent_typeAssistResponse を受信したら、録画を停止します。

  9. audio_out フィールドから取得した音声データを使用して、アシスタントの応答の音声を再生します。

  10. 先ほど抽出した conversation_state を、次の AssistRequestAssistConfigDialogStateIn メッセージにコピーします。

これで、デバイスから Google アシスタントに最初のリクエストを送信する準備が整いました。

デバイス アクションによって会話を拡張する

上記の基本的な会話ダイアログを拡張して、特定のデバイスに固有のハードウェア機能をトリガーします。

  1. 受信 AssistResponse メッセージで、device_action フィールドを抽出します(DeviceAction を参照)。
  2. device_request_json フィールドの JSON ペイロードを解析します。サポートされているトレイトのリストについては、デバイス トレイトのページをご覧ください。各トレイト スキーマのページには、JSON ペイロードで返されるデバイス コマンドとパラメータを含む EXECUTE リクエストの例が示されています。

ユーザー リクエストの音声文字変換結果を取得する

デバイスにディスプレイが接続されている場合は、それを使用してユーザー リクエストを表示できます。この音声文字変換テキストを取得するには、AssistResponse メッセージの speech_results フィールドを解析します。音声認識が完了すると、stability が 1.0 に設定された 1 つのアイテムがこのリストに追加されます。

アシスタントのレスポンスのテキストまたは視覚的レンダリングを取得する

デバイスにディスプレイが接続されている場合は、ディスプレイを使用して、ユーザーのリクエストに対するアシスタントの書式なしテキスト レスポンスを表示できます。このテキストは DialogStateOut.supplemental_display_text フィールドにあります。

アシスタントは、特定のクエリ(「マウンテンビューの天気は?」や「今何時?」など)に対して HTML5 による視覚的レスポンスをサポートしています。これを有効にするには、AssistConfigscreen_out_config フィールドを設定します。ScreenOutConfig メッセージのフィールド screen_modePLAYING に設定する必要があります。

AssistResponse メッセージにフィールド screen_out が設定されます。HTML5 データ(存在する場合)は data フィールドから抽出できます。

テキスト入力によってクエリを送信する

テキスト インターフェース(キーボードなど)がデバイスに接続されている場合は、config フィールドに text_query フィールドを設定します(AssistConfig を参照)。audio_in_config フィールドは設定しないでください。

トラブルシューティング

問題が発生した場合は、トラブルシューティングのページをご覧ください。