web-dev-qa-db-ja.com

Dialogflowでエージェントを呼び出したときに情報を保存および取得するにはどうすればよいですか?

Actions on Googleエージェントで、Cookieなど、呼び出し全体で特定の情報を保存および取得したいと思います。どうすればよいですか?

9
Lord Loh.

何をしようとしているのかに応じて、これをどのように実行するかについて多くのオプションがあります。類似点はありますが、WebCookieとまったく同じではありません。

セッションCookieと同等の情報、単一の会話中に保持される情報が必要な場合、オプションは次のとおりです。

  • 呼び出しごとに送信される情報の一部として提供されるセッションIDを使用し、これをフルフィルメントで追跡します。
  • Dialogflowコンテキストを使用して保持する情報を保存する
  • アクションオングーグルJavaScriptライブラリを使用している場合は、これを作成した_app.data_オブジェクトに保存します。

会話間で情報を保持するために長持ちするCookieに相当するものが必要な場合、オプションは次のとおりです。

  • 呼び出しごとに送信される情報の一部として提供される匿名ユーザーIDを使用し、これをフルフィルメントで追跡します。
  • アクションオングーグルJavaScriptライブラリを使用している場合は、これを作成した_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_の下で取得できます。

19
Prisoner

キー値パラメーターを使用して、コンテキストに情報を保存できます。

コンテキストでの値の保存:

agent.set.Context({
  name:'context-name',
  lifespan: 5,
  parameters:{
    'parameter-name':'parameter-value'
    }
});

コンテキストから値を取得する

 agent.getContext('context-name');

詳細: https://dialogflow.com/docs/contexts/contexts-fulfillment

1
Ajay Venugopal

アカウントリンクをチェックアウトすることをお勧めします: https://developers.google.com/actions/identity/account-linking 。アカウントのリンクを使用すると、一意のキーを提供することで、Googleと交換するエンドユーザー情報を収集できます。この一意のキーは、Googleから受け取るすべてのリクエストの一部になるため、その一意のキーを取得したら、エンドユーザーから収集した情報を検索します。あなたの場合、資格情報またはエンドユーザー情報にアクセスするために必要なキーを保存します。最初のリンク後、取得した新しいデータは、アカウントのリンク中に取得した一意のキーに基づいて、収集した元の情報とともに保存できます。

0
NinePlanFailed

この目的のために、私はそのためだけにノードモジュールを実行しました。API呼び出しからの外部jsonファイルで、後で取得するために追加情報を保存して追加する必要があります。このモジュール、Storeオブジェクト、配列、json、値、ナビゲーション履歴で多くのことができると思いますか?、前のページに戻ります。 localStorageやCookieのように機能します。制限はありません。名前(キー)と値で複数のストレージを作成できます。これは新しく、自分のプロジェクトで現在バグをテストしています。

Runkitでテスト

npmで

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')
0
Gino

BigQueryFirestore のようなGoogleCloudデータベースを使用することもできます

0
Dan Aharon