Actions on Googleエージェントで、Cookieなど、呼び出し全体で特定の情報を保存および取得したいと思います。どうすればよいですか?
何をしようとしているのかに応じて、これをどのように実行するかについて多くのオプションがあります。類似点はありますが、WebCookieとまったく同じではありません。
セッションCookieと同等の情報、単一の会話中に保持される情報が必要な場合、オプションは次のとおりです。
app.data
_オブジェクトに保存します。会話間で情報を保持するために長持ちするCookieに相当するものが必要な場合、オプションは次のとおりです。
app.userStorage
_オブジェクトに保存します。data.google.userStorage
_の下のJSON応答の文字列の一部としてそれを保存します。これらのそれぞれについてのいくつかのより多くの情報
セッションID
会話ごとに異なるセッションIDが作成されます。このセッションIDは、sessionId
パラメーターでWebhookに送信されたJSONを調べることで取得できます。
次に、管理しているある種のデータストアでこれを検索できます。
Dialogflowコンテキスト
コンテキストは、Dialogflowで使用できる強力なツールです。フルフィルメントWebhookの一部としてコンテキストを返し、コンテキストの名前、その存続期間(Webhookに返される会話のラウンド数)、およびコンテキストに関連付けられたパラメーター(文字列キー/値)を指定します。ペア)。
コンテキストは、どのインテントが呼び出されるかを判断するのに特に役立ちます。 Dialogflowがインテントを認識するためにアクティブにする必要があるコンテキストを指定できます。
Action-on-google node.jsライブラリを使用している場合は、次のようなものを使用してコンテキストを設定できます。
_var contextParameters = {
foo: "Something foothy",
bar: "Your local bar."
};
app.setContext( "remember_this", 5, contextParameters );
_
app.ask()
またはapp.tell()
を呼び出す前にこれを行う必要があります。
または、応答のcontextOut
ブロックの一部としてJSONで同等のことを行うことができます
_"contextOut": [
{
"name": "remember_this",
"lifespan": 5,
"parameters": {
"foo": "Something foothy",
"bar": "Your local bar."
}
}
]
_
次回Webhookが呼び出されたときに、このコンテキストをフェッチするには、_result.contexts
_配列を確認するか、ライブラリのapp.getContext()
またはapp.getContextArgument()
メソッドを使用します。
_app.data
_を使用
ライブラリを使用している場合は、Googleがいくつかの作業を行ってくれます。 _app.data
_オブジェクトが作成されます。オブジェクトに設定した値は、セッションの存続期間中使用できます。後でWebhookを呼び出すときにそれらを読み取るだけです。
(内部では、Googleはこれにコンテキストを使用するため、魔法はありません。2つは連携して機能し、両方を自由に実行できます。)
匿名ユーザーID
ユーザーが最初にアクションを使用すると、ユーザーIDが生成されます。このIDは、それらに関する特定の情報へのアクセスを提供せず、他のアクションには使用されませんが、このIDを表示するたびに、以前に使用したのと同じユーザーであることが保証されます。ただし、Cookieと同様に、ユーザーはCookieをリセットでき、アクション用に新しいIDが生成されます。
これは、JSONの_originalRequest.user.userId
_から、またはapp.getUser().userId
を使用して取得します。取得したら、ある種のデータストアを使用して、このユーザーに関する情報を保存および取得します。
_app.userStorage
_を使用
_app.data
_と同様に、ユーザーごとに作成される_app.userStorage
_オブジェクトもあります。このオブジェクトに加えた変更は、このユーザーとの会話の合間に保存されます。
ただし、_app.data
_とは異なり、これはコンテキストに格納されません。独自の保存方法があります。につながる...
JSONで保存
Action-on-googleライブラリを使用していない場合でも、応答を介してuserStorage
にアクセスし、JSONを直接要求できます。これを文字列として保存する必要がありますが、より複雑なオブジェクトを保存する必要がある場合、一般的な方法はそれをJSONとして文字列化することです。
この値は、応答の_data.google.userStorage
_の下に格納し、Webhookが受信する要求の_originalRequest.data.user.userStorage
_の下で取得できます。
キー値パラメーターを使用して、コンテキストに情報を保存できます。
コンテキストでの値の保存:
agent.set.Context({
name:'context-name',
lifespan: 5,
parameters:{
'parameter-name':'parameter-value'
}
});
コンテキストから値を取得する
agent.getContext('context-name');
詳細: https://dialogflow.com/docs/contexts/contexts-fulfillment
アカウントリンクをチェックアウトすることをお勧めします: https://developers.google.com/actions/identity/account-linking 。アカウントのリンクを使用すると、一意のキーを提供することで、Googleと交換するエンドユーザー情報を収集できます。この一意のキーは、Googleから受け取るすべてのリクエストの一部になるため、その一意のキーを取得したら、エンドユーザーから収集した情報を検索します。あなたの場合、資格情報またはエンドユーザー情報にアクセスするために必要なキーを保存します。最初のリンク後、取得した新しいデータは、アカウントのリンク中に取得した一意のキーに基づいて、収集した元の情報とともに保存できます。
この目的のために、私はそのためだけにノードモジュールを実行しました。API呼び出しからの外部jsonファイルで、後で取得するために追加情報を保存して追加する必要があります。このモジュール、Storeオブジェクト、配列、json、値、ナビゲーション履歴で多くのことができると思いますか?、前のページに戻ります。 localStorageやCookieのように機能します。制限はありません。名前(キー)と値で複数のストレージを作成できます。これは新しく、自分のプロジェクトで現在バグをテストしています。
vStorage = require('virtual-storage');
vStorage.set('name', '{title:'Title 1', description:'Descriptions 1'}')
let getStorage_name = vStorage.get('name');
console.log(getStorage_name.title);
vStorage.get('name')