2017-11-28 2 views

答えて

6

あなたがしようとしていることに応じて、これを行う方法には多くの選択肢があります。ウェブクッキーに似ているわけではありませんが、類似点はあります。

あなたは単一の会話中に保持されているセッションクッキーの同等、情報が必要な場合は、あなたのオプションは、それぞれの上に、あなたに送信された情報の一部として提供されているセッションIDを使用して

  • ですあなたの履行中にこれを追跡し、追跡する。
  • Dialogflowコンテキストを使用して保持したい情報を保存する
  • Googleで作成したJavaScriptライブラリーを使用している場合は、これをapp.dataオブジェクトに保存します。

あなたが長期的なクッキーの同等の会話の間で情報を保持したい場合は、あなたのオプションは、各呼び出しであなたに送信された情報の一部として提供される匿名のユーザーIDを使用して

  • であり、これをあなたの履行の中で追跡する。
  • actions-on-google javascriptライブラリを使用している場合は、これをapp.userStorageオブジェクトに保存してください。
  • JSONレスポンスの文字列の一部としてdata.google.userStorageの下に格納します。

異なるセッションIDをお持ちの各会話のために作成されたこれらの

セッションID

のそれぞれについてのいくつかの詳細。 sessionIdパラメータでウェブフックに送信されたJSONを調べることで、このセッションIDを取得できます。

これは、管理している何らかの種類のデータストアで調べることができます。

Dialogflowコンテキスト

コンテキストはDialogflowで利用できる強力なツールです。あなたはあなたのフルフィルメントwebhookの一部としてコンテキストを返し、コンテキストの名前、そのライフタイム(あなたのwebhookに返される会話のラウンド数)、コンテキストに関連するパラメータ(文字列キー/値ペア)。

コンテキストは、どのインテントが呼び出されるかを判断するのに役立ちます。 Dialogflowでインテントが認識されるためにアクティブでなければならないコンテキストを指定できます。

あなたはアクションオングーグルのNode.jsライブラリを使用している場合、あなたはこのようなものを使用してコンテキストを設定することができます。

var contextParameters = { 
    foo: "Something foothy", 
    bar: "Your local bar." 
}; 
app.setContext("remember_this", 5, contextParameters); 

あなたはapp.ask()app.tell()を呼び出す前にこれを行う必要があります。

それとも、応答

"contextOut": [ 
    { 
    "name": "remember_this", 
    "lifespan": 5, 
    "parameters": { 
     "foo": "Something foothy", 
     "bar": "Your local bar." 
    } 
    } 
] 

あなたのウェブフックが呼び出される次回のcontextOutブロックの一部としてJSONで同等の操作を行うことができ、あなたはresult.contexts配列を見て、どちらか、このコンテキストを取得することができますライブラリーのapp.getContext()または​​メソッドを使用してください。あなたはライブラリを使用している場合app.data

を使用して

、Googleはあなたのための作業の一部を行っています。 app.dataオブジェクトが作成されます。オブジェクトに設定した値は、セッションの存続期間中使用できます。後でWebhookへの呼び出しで読み込むだけです。

は(カバーの下に、Googleはこのためのコンテキストを使用するため、魔法はありません。2つのワーク一緒に、あなたは両方を行うのは自由です。)

匿名ユーザーID

ユーザーが最初にアクションを使用すると、ユーザーIDが生成されます。このIDは、あなたの特定の情報にアクセスすることはできず、他のアクションには使用されませんが、それを見るたびに、以前のオカレンスで使用したのと同じユーザーであることが保証されます。しかし、クッキーのように、ユーザーはそれをリセットすることができ、ユーザーのアクションに対して新しいIDが生成されます。

これはJSONのoriginalRequest.user.userIdまたはapp.getUser().userIdで取得できます。いったんそれを取得したら、このユーザーに関する情報を保存して取得するために、ある種のデータストアを使用します。 app.dataと同様にapp.userStorage

を使用して

、ユーザーごとに作成されapp.userStorageオブジェクトもあります。このオブジェクトに加えた変更は、このユーザーとの会話の間に保存されます。

app.dataとは異なり、これはコンテキストに格納されません。それはそれ自身の記憶方法を持っています。あなたはどちらアクションオンGoogleのライブラリを使用していない場合、あなたはまだ応答して直接要求JSONを通じてuserStorageへのアクセス権を持っているにJSON

それを保存...

をリードしています。これを文字列として格納する必要がありますが、より複雑なオブジェクトを格納する必要がある場合は、JSONとして文字列化するのが一般的な方法です。

レスポンスでこの値をdata.google.userStorageに保存し、ウェブフックのリクエストでoriginalRequest.data.user.userStorageの下にこの値を取得できます。 https://developers.google.com/actions/identity/account-linking:あなたがアカウントのリンクをチェックアウトすることができますように

+0

Robinhood Trading Accountのポートフォリオ価値、現金および株価を教えてくれる代理店を築いた。私がこれらのいずれかを尋ねるたびに、私のバックエンドwebhook(CGI pythonスクリプト)が呼び出され、上流ロビンサーバーが照会されます。私はしばらくの間、すべての情報をキャッシュすることによってそれを避けたいと思います。また、私のユーザ名とパスワードは現在CGIのPythonでハードコードされています:-(私はあなたのアカウントデータでこれを取得して保存する方法を理解できません:回答ありがとう:-) –

+0

あなたはフォローアップの質問をしたり、バックグラウンドを与えたり、正確に何を必要としているのかを示します。これがあなたの質問に答えるなら、それを受け入れるか、またはupvotingすることができます。そうでない場合、追加情報が必要な場合は、元の質問を更新して、試したことを明確にしてください。試したことについてはうまくいかないし、できるだけ多くの情報を提供してください。 – Prisoner

0

などのGoogleのクラウドデータベースを使用することができますがね。アカウントのリンクを使用すると、一意のキーを提供することによってGoogleと交換するエンドユーザー情報を収集することができます。このユニークなキーは、Googleから受け取ったすべてのリクエストの一部になります。そのユニークキーを取得すると、エンドユーザーから収集した情報を参照します。あなたのケースでは、資格情報またはエンドユーザ情報にアクセスするために必要な鍵を保管します。最初のリンクの後、取得した新しいデータは、アカウントのリンク時に取得された固有のキーに基づいて、収集された元の情報とともに保存されます。

関連する問題