アクションを定義する(Dialogflow)

アクションは、アプリの呼び出しと検出モデルを定義するアプリへのエントリ ポイントです。アクション パッケージと呼ばれる JSON ファイルでアクションを宣言します。このパッケージは、後で Actions プロジェクトをテストまたは送信して承認を得るために、デベロッパー プロジェクトにアップロードします。アクション パッケージは、アクション プロジェクト内のアクションを定義する JSON ファイルです。

アクション パッケージでアクションを定義するには、アクションの呼び出し方法と、そのインテントがトリガーされたときに対応するフルフィルメント エンドポイントを定義するインテントを作成します。作成できるアクションには、次のタイプがあります。

  • デフォルトのアクション: すべての Actions プロジェクトには、ユーザーが会話を開始するためのエントリ ポイントとして機能するウェルカム インテントが必要です。ウェルカム インテントは、ユーザーがアクションの名前を発話して明示的に呼び出すとトリガーされます(例: 「OK Google, ExampleAction と話して」)。このウェルカム インテントは、actions.intent.MAIN インテント名で識別されます。
  • ディープリンク用の追加のアクション: 自分で定義したインテントを使用して、アクション パッケージに追加のアクションを作成できます。これにより、ユーザーはアクション名とインテントを指定して特定の機能を呼び出せます(例: 「OK Google, ExampleAction で靴を探して」)。

これらの呼び出しモデルの仕組みの詳細については、インテントと呼び出しをご覧ください。

デフォルトのアクションを定義する

すべてのアクション パッケージには、actions.intent.MAIN インテントを処理するインテントが 1 つだけ必要です。このインテントは、ユーザーがアクションを名前で呼び出すとトリガーされます(例: 「OK Google, ExampleAction と話して」)。

action.json という名前のボイラープレート アクション パッケージ ファイルを生成する手順は次のとおりです。

  1. gactions CLI をダウンロードします。
  2. アクション プロジェクトのソースファイル用のローカル ディレクトリを作成します。
  3. ターミナルで次のコマンドを実行します。

    $ cd PROJECT_DIRECTORY
    $ gactions init

アクション パッケージ ファイルが生成されたら、プレースホルダの内容を実際の値に置き換えます。ExampleAction を変更した action.json の例を次に示します。

{
  "actions": [
    {
      "description": "Default welcome intent",
      "name": "MAIN",
      "fulfillment": {
        "conversationName": "ExampleAction"
      },
      "intent": {
        "name": "actions.intent.MAIN",
        "trigger": {
          "queryPatterns": [
            "talk to ExampleAction"
          ]
        }
      }
    }
  ],
  "conversations": {
    "ExampleAction": {
      "name": "ExampleAction",
      "url": "https://www.example.com/ExampleAction"
    }
  },
  "locale": "en"
}

追加のアクションを定義する

エントリ ポイントとなる追加のアクションを指定できます。これにより、ユーザーは実行したいことをより詳細に指定できるようになり(例: 「OK Google, ExampleAction で靴を探して」)、インテントを明確にできます。

追加のアクションを定義するには:

  1. actions 配列で、すべてのエントリ ポイントに Action を指定します。

    次のコードは、以下を定義する追加の「購入」アクションの例です。
    • インテント名: com.example.ExampleAction.BUY
    • parameters: このインテントがトリガーされたときにユーザー入力から解析します。これは、ユーザーがアクションを呼び出したときに、アクション フレーズの特定のデータが必要な場合に便利です。
    • インテントをトリガーするためにユーザーが言うべきことを定義する queryPatternsクエリパターンには、解析するパラメータを定義する Schema.org タイプを含めることができます。
    {
      "description": "Direct access",
      "name": "BUY",
      "fulfillment": {
        "conversationName": "ExampleAction"
      },
      "intent": {
        "name": "com.example.ExampleAction.BUY",
        "parameters": [
          {
            "name": "color",
            "type": "org.schema.type.Color"
          }
        ],
        "trigger": {
          "queryPatterns": [
            "find some $org.schema.type.Color:color sneakers",
            "buy some blue suede shoes",
            "get running shoes"
          ]
        }
      }
    }
          
  2. conversations オブジェクト内のアイテムに対応する conversationName を指定して、このインテントのフルフィルメントを指定します。

    {
      "conversations": {
        "ExampleAction": {
          "name": "ExampleAction",
          "url": "https://www.example.com/ExampleAction"
        }
      }
    }
        

これがアクション パッケージ全体の例です。

{
  "actions": [
    {
      "description": "Default welcome intent",
      "name": "MAIN",
      "fulfillment": {
        "conversationName": "ExampleAction"
      },
      "intent": {
        "name": "actions.intent.MAIN",
        "trigger": {
          "queryPatterns": [
            "talk to ExampleAction"
          ]
        }
      }
    },
    {
      "description": "Direct access",
      "name": "BUY",
      "fulfillment": {
        "conversationName": "ExampleAction"
      },
      "intent": {
        "name": "com.example.ExampleAction.BUY",
        "parameters": [
          {
            "name": "color",
            "type": "org.schema.type.Color"
          }
        ],
        "trigger": {
          "queryPatterns": [
            "find some $org.schema.type.Color:color sneakers",
            "buy some blue suede shoes",
            "get running shoes"
          ]
        }
      }
    }
  ],
  "conversations": {
    "ExampleAction": {
      "name": "ExampleAction",
      "url": "https://www.example.com/ExampleAction"
    }
  },
  "locale": "en"
}