Actions SDKを使ったGoogleアシスタント向けのアプリにおいて、作成したフルフィルメントを呼び出すためには、フルフィルメントをデプロイしてインターネット上から利用可能な状態にして、そのエンドポイントURLをアクションパッケージ内に記載することが必要です。Firebase Cloud Functionsとしてフルフィルメントを開発していた場合には、Firebaseにデプロイ後に決定されるURLを登録することになります。
Actions on GoogleのドキュメントにあるBuild with Actions SDK - Deploy Fulfillmentにて、この手順が説明されています。以下は、その日本語訳です。
フルフィルメントのデプロイ
本番環境用のCloud Functions for Firebaseにデプロイするように環境を設定する方法を説明します。
注: あなたのフルフィルメントは、5秒以内に応答する必要があります。そうでなければ、アシスタントがタイムアウトにより会話を終了します。
- Node.jsをダウンロードし、インストールします。
- Firebase CLIをセットアップし、初期化します。もし、以下のコマンドが
EACCESエラーにより失敗する場合は、npmパーミッションを変更する必要があるでしょう。
npm install -g firebase-tools
- あなたのGoogleアカウントを使って、firebaseツールを認証します。
firebase login
- あなたのアクションプロジェクトをfirebaseツールに関連付けします。
cd <cloud_function_dir>/functions
firebase use PROJECT_ID
注: あなたのPROJECT_IDは、 myprojectname-ab123 のような何かに見えるでしょう。あなたのアクションプロジェクトの Settings エリアで、IDを見つけることができます。また、あなたのGoogleアカウントに関連付けられているプロジェクトを一覧表示するために firebase list を実行することで、IDを閲覧できます。
- フルフィルメントに依存しているものを入手し、フルフィルメントをデプロイします。
cd <cloud_function_dir>/functions
npm install
firebase deploy --only functions
デプロイ作業は、数分かかります。完了した際には、以下のような出力が表示されます。Dialogflow内で、 Function URL を入力する必要があるでしょう。
✔ Deploy complete!
Project Console: https://console.firebase.google.com/project/myprojectname-ab123/overview
Function URL (cloudFunctionName): https://us-central1-myprojectname-ab123.cloudfunctions.net/cloudFunctionName
- アクションパッケージ内でフルフィルメントを宣言している
conversationsオブジェクト内に、オブジェクトを作成します。
"conversations": {
"myFulfillmentFunction": {
"name": "myFulfillmentFunction",
"url": "(cloudFunctionName): https://us-central1-myprojectname-ab123.cloudfunctions.net/cloudFunctionName"
}
}
注: 開発マシン上で反復を早くするために、ローカルで開発やテストを行いたい場合があります。しかし、あなたのフルフィルメントは、インターネットから起動できなければなりません。この問題を回避するには、ngrokのようなツールを使用します。これは、インターネットから開発マシンにトンネルを作成することを可能にします。これにより、あなたのマシンが攻撃に対して脆弱になることに注意してください。この開発モデルを選択した場合は、注意が必要です。