以下の各セクションの手順に沿って、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 認証情報を簡単に生成できます。
認証情報を生成するには、次の手順に従います。
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
認可ツールをインストールします。
python -m pip install --upgrade google-auth-oauthlib[tool]
ツールを実行します。(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 スコープ: https://www.googleapis.com/auth/assistant-sdk-prototype
サポートされている OAuth フロー:
デバイスを保護するためのおすすめの方法については、プライバシーとセキュリティに関するベスト プラクティスをご覧ください。
OAuth トークンを使用して gRPC 接続を認証する
最後に、Google でトークンベースの認証を使用する方法を確認して、Assistant API への gRPC 接続を認証する方法をご覧ください。
デバイスを登録する
デバイスモデルとインスタンスを手動または登録ツール(Python で利用可能)で登録します。
アシスタントとの基本的な会話を実装する
- Google Assistant Service API 用に双方向ストリーミング gRPC クライアントを実装します。
- ユーザーが新しいリクエストをトリガーするのを待ちます(たとえば、ボタンの押下による GPIO 割り込みを待ちます)。
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
を参照)。
録音を開始します。
audio_in
フィールドに音声クエリの音声データを含めて複数のAssistRequest
メッセージを送信します。受信
AssistResponse
メッセージを処理します。AssistResponse
メッセージから会話メタデータを抽出します。たとえば、dialog_state_out
からconversation_state
とvolume_percentage
を取得します(DialogStateOut
を参照)。END_OF_UTTERANCE
のevent_type
のAssistResponse
を受信したら、録画を停止します。audio_out
フィールドから取得した音声データを使用して、アシスタントの応答の音声を再生します。先ほど抽出した
conversation_state
を、次のAssistRequest
のAssistConfig
のDialogStateIn
メッセージにコピーします。
これで、デバイスから Google アシスタントに最初のリクエストを送信する準備が整いました。
デバイス アクションによって会話を拡張する
上記の基本的な会話ダイアログを拡張して、特定のデバイスに固有のハードウェア機能をトリガーします。
- 受信
AssistResponse
メッセージで、device_action
フィールドを抽出します(DeviceAction
を参照)。 device_request_json
フィールドの JSON ペイロードを解析します。サポートされているトレイトのリストについては、デバイス トレイトのページをご覧ください。各トレイト スキーマのページには、JSON ペイロードで返されるデバイス コマンドとパラメータを含む EXECUTE リクエストの例が示されています。
ユーザー リクエストの音声文字変換結果を取得する
デバイスにディスプレイが接続されている場合は、それを使用してユーザー リクエストを表示できます。この音声文字変換テキストを取得するには、AssistResponse
メッセージの speech_results
フィールドを解析します。音声認識が完了すると、stability
が 1.0 に設定された 1 つのアイテムがこのリストに追加されます。
アシスタントのレスポンスのテキストまたは視覚的レンダリングを取得する
デバイスにディスプレイが接続されている場合は、ディスプレイを使用して、ユーザーのリクエストに対するアシスタントの書式なしテキスト レスポンスを表示できます。このテキストは DialogStateOut.supplemental_display_text
フィールドにあります。
アシスタントは、特定のクエリ(「マウンテンビューの天気は?」や「今何時?」など)に対して HTML5 による視覚的レスポンスをサポートしています。これを有効にするには、AssistConfig
の screen_out_config
フィールドを設定します。ScreenOutConfig
メッセージのフィールド screen_mode
を PLAYING
に設定する必要があります。
AssistResponse
メッセージにフィールド screen_out
が設定されます。HTML5 データ(存在する場合)は data
フィールドから抽出できます。
テキスト入力によってクエリを送信する
テキスト インターフェース(キーボードなど)がデバイスに接続されている場合は、config
フィールドに text_query
フィールドを設定します(AssistConfig
を参照)。audio_in_config
フィールドは設定しないでください。
トラブルシューティング
問題が発生した場合は、トラブルシューティングのページをご覧ください。