カスタム デバイス アクションを登録する

<ph type="x-smartling-placeholder">

お使いのデバイスに、現在の トレイト 「点滅」などライトを点滅させることができるデバイスのトレイトを定義します。マイページ デバイスへのカスタム アクションを定義して、デバイスに送信するコマンドを指定できます。 特別な機能をトリガーできます。

カスタム デバイス アクションを定義するには、次のものが必要です。

  • ユーザーのクエリと照合するパターン
  • 一致したクエリに関連付けるカスタム デバイス アクション
  • デバイスがアクションをサポートしている場合、ユーザーに音声で返されるテキスト
  • デバイスに返されるコマンド名(パラメータを含む)

カスタム デバイス アクションを作成するには、この情報を アクション パッケージ。 アクション パッケージは、アシスタントのレスポンスの形式を定義します。 Actions SDK では、カスタム デバイス アクションはローカルで処理されます。Pod の リクエストを処理し、レスポンスを提供します。カスタム デバイス アクションは 会話形式ではありません。

アクション パッケージを作成する

次の例のように、ファイル(actions.json など)を作成します。 LED を点滅させるテストコマンドを定義します。 先ほど学習したサンプルコードから、 前のステップでダウンロードしたファイル:

cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/library/
cp ~/assistant-sdk-python/google-assistant-sdk/actions.json .

<ph type="x-smartling-placeholder">

</ph> <ph type="x-smartling-placeholder">
</ph>
{
    "manifest": {
        "displayName": "Blinky light",
        "invocationName": "Blinky light",
        "category": "PRODUCTIVITY"
    },
    "actions": [
        {
            "name": "com.example.actions.BlinkLight",
            "availability": {
                "deviceClasses": [
                    {
                        "assistantSdkDevice": {}
                    }
                ]
            },
            "intent": {
                "name": "com.example.intents.BlinkLight",
                "parameters": [
                    {
                        "name": "number",
                        "type": "SchemaOrg_Number"
                    },
                    {
                        "name": "speed",
                        "type": "Speed"
                    }
                ],
                "trigger": {
                    "queryPatterns": [
                        "blink ($Speed:speed)? $SchemaOrg_Number:number times",
                        "blink $SchemaOrg_Number:number times ($Speed:speed)?"
                    ]
                }
            },
            "fulfillment": {
                "staticFulfillment": {
                    "templatedResponse": {
                        "items": [
                            {
                                "simpleResponse": {
                                    "textToSpeech": "Blinking $number times"
                                }
                            },
                            {
                                "deviceExecution": {
                                    "command": "com.example.commands.BlinkLight",
                                    "params": {
                                        "speed": "$speed",
                                        "number": "$number"
                                    }
                                }
                            }
                        ]
                    }
                }
            }
        }
    ],
    "types": [
        {
            "name": "$Speed",
            "entities": [
                {
                    "key": "SLOWLY",
                    "synonyms": [
                        "slowly",
                        "slow"
                    ]
                },
                {
                    "key": "NORMALLY",
                    "synonyms": [
                        "normally",
                        "regular"
                    ]
                },
                {
                    "key": "QUICKLY",
                    "synonyms": [
                        "quickly",
                        "fast",
                        "quick"
                    ]
                }
            ]
        }
    ]
}

前の例では、次の情報を使用してカスタム デバイスを定義しています。 アクション:

  • ユーザーのクエリと照合するパターン(blink N 回
  • 一致したクエリに関連付けるカスタム デバイス アクション(com.example.actions.BlinkLight) 整理するために
  • デバイスがアクションをサポートしている場合、ユーザーに音声で返されるテキスト (N 回点滅
  • 返送されるコマンド名(com.example.commands.BlinkLight) デバイス、および任意のパラメータ(数値と、場合によっては速度の説明)

クエリパターンを定義する際は、次の点に注意してください。

  • schema.org で定義されたタイプを使用できます。 一致している必要があります
  • types [...] 配列は、カスタムタイプ( $Speed)。
  • クエリパターンではカスタム型を使用できます。ユーザーは クエリパターンに一致するカスタムタイプの同義語です。
  • 類義語が一致した場合、型インスタンス(speed)は 正規化されたキー(SLOWLY)を返します。1 つのグループに複数のエンティティを たとえば、異なる速度に対応する複数のライトが 点滅します。
  • リクエストの TTS パターンの一部は省略可能にできます。たとえば、 クエリパターンの ($Speed:speed)?: この部分は省略可能です。
  • $type.raw(例: $speed.raw) レスポンスの TTS は、ユーザーが実際に話した単語に置き換えられます。

各フィールドの詳細については、このモジュールの ActionPackage ご覧ください

アクション パッケージをデプロイする

アクション パッケージでカスタム デバイス アクションを作成すると、 アシスタントがアクセスできるアクション パッケージ。

このセクションの手順はお使いのデバイスでも実行できますが、 開発システム上で実行できます次のコマンドは、バージョン管理の 実行できます。

  1. gactions コマンドライン ツールをダウンロードします。

  2. gactions と同じディレクトリから既存の認証情報を削除します。 ツールです。

    rm creds.data
  3. gactions CLI を使用してアクション パッケージを Google に保存します。 project_id は、Actions Console プロジェクトに置き換えます。 ID

    ./gactions update --action_package actions.json --project project_id
  4. このコマンドを初めて実行すると URL が表示され、 ログインします。URL をコピーしてブラウザに貼り付けます(どのシステムでも実行できます)。 このページで、Google アカウントへのログインを求められます。署名 前のステップでプロジェクトを作成したときの Google アカウントに ステップ

  5. API からの権限リクエストを承認すると、コードが表示されます 「4/XXXX」のように入力します。このコードをコピーして ターミナル:

    Enter the authorization code:

    承認に成功すると、次のようなレスポンスが表示されます。 次のとおりです。

    Your app for the Assistant for project my-devices-project was successfully
    updated with your actions.
    
  6. gactions CLI を使用して、アクション パッケージをテストモードにデプロイします。 アクション パッケージを少なくとも 1 回 Google に保存しておく必要があります 表示されます。テストモードでは、デバイスでアクション パッケージが ユーザー アカウントのみです。

    ./gactions test --action_package actions.json --project project_id

    現時点では、アクション シミュレータを使用してこのプロジェクトをテストすることはできません。

  7. アクション パッケージを更新するには、gactions update コマンドを使用します。

  8. (省略可)ローカライズされたアクション パッケージを作成できます。 多数の言語とロケールをサポート 同時に使用できます。

サンプルを変更する

このセクションの手順はデバイスで行います。

nano hotword.py

カスタム アクション用のハンドラを追加します。必要に応じて、以下のハンドラを使用できます。 上記のサンプル アクション パッケージを使用します。

import time # Add this to the imports near the top of the file

...

if event.type == EventType.ON_DEVICE_ACTION:
    for command, params in event.actions:
        print('Do command', command, 'with params', str(params))

        # Add the following lines after the existing line above:

        if command == "com.example.commands.BlinkLight":
            number = int( params['number'] )
            for i in range(int(number)):
                print('Device is blinking.')
                # GPIO.output(25, 1)
                time.sleep(1)
                # GPIO.output(25, 0)
                time.sleep(1)

サンプルの実行

変更したソースコードを実行します。

python hotword.py --device-model-id my-model

クエリを試します。上記の例の場合、次のクエリを試してみます。

OK Google, 5 回点滅して。

使用するクエリは、アクション パッケージで指定したクエリパターンと一致する必要があります。