web-dev-qa-db-fra.com

Comment enregistrer et récupérer des informations sur les invocations de mon agent dans Dialogflow?

Je souhaite que mon agent Actions sur Google stocke et récupère certaines informations lors d'appels - comme un cookie. Comment puis-je faire cela?

7
Lord Loh.

Vous avez beaucoup d'options sur la façon dont vous voulez faire cela, en fonction de ce que vous essayez de faire. Ce n'est pas exactement comme un cookie Web, bien qu'il existe des similitudes.

Si vous voulez l’équivalent d’un cookie de session, des informations conservées pendant une conversation simple , vos options sont les suivantes:

  • Utilisation de l'ID de session fourni dans le cadre des informations qui vous sont envoyées à chaque invocation et suivi de cela dans votre exécution.
  • Stockage des informations que vous souhaitez conserver à l'aide d'un contexte Dialogflow
  • Si vous utilisez la bibliothèque JavaScript actions-on-google, stockez-la dans l'objet app.data créé pour vous.

Si vous souhaitez que l’équivalent d’un cookie durable conserve les informations entre les conversations, vous avez le choix.

  • Utilisation de l'ID utilisateur anonyme fourni dans le cadre des informations qui vous sont envoyées à chaque invocation et suivi de cela dans votre exécution.
  • Si vous utilisez la bibliothèque javascript actions-on-google, stockez-la dans l'objet app.userStorage créé pour vous.
  • Stockez-le en tant que partie de la chaîne dans la réponse JSON sous data.google.userStorage.

Quelques informations supplémentaires sur chacun de ces

ID de session

Un identifiant de session différent est créé pour chaque conversation que vous avez. Vous pouvez obtenir cet ID de session en examinant le code JSON envoyé à votre compte Web dans le paramètre sessionId.

Vous pouvez ensuite rechercher cela dans un magasin de données que vous gérez.

Contexte de dialogue

Les contextes sont des outils puissants disponibles avec Dialogflow. Vous retournez un contexte dans le cadre de votre Webhook d’exécution et indiquez le nom du contexte, sa durée de vie (combien de tours supplémentaires de la conversation, il sera renvoyé à votre Webhook), ainsi que tous les paramètres associés au contexte (chaîne clé/valeur paires).

Les contextes sont particulièrement utiles pour aider à déterminer quelles intentions peuvent être appelées. Vous pouvez indiquer quels contextes doivent être actifs pour qu'une intention soit reconnue par Dialogflow.

Si vous utilisez la bibliothèque actions-on-google node.js, vous pouvez définir un contexte de la manière suivante:

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

Vous devez le faire avant d'appeler app.ask() ou app.tell().

Ou vous pouvez faire l'équivalent dans le JSON en tant que partie du bloc contextOut de la réponse

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

Lors de l'appel suivant de votre Webhook, vous pourrez extraire ce contexte en consultant le tableau result.contexts ou en utilisant les méthodes app.getContext() ou app.getContextArgument() dans la bibliothèque.

Utilisation de app.data

Si vous utilisez la bibliothèque, Google a effectué une partie du travail à votre place. L'objet app.data est créé pour vous. Toutes les valeurs que vous définissez dans l'objet sont disponibles pendant toute la durée de la session. Il vous suffit de les lire lors d'appels ultérieurs à votre compte Webhook.

(Sous les couvertures, Google utilise un contexte pour cela, donc il n'y a pas de magie. Les deux fonctionnent ensemble et vous êtes libre de faire les deux.)

Anonymous UserID

Lorsqu'un utilisateur utilise votre action pour la première fois, un ID utilisateur est généré. Cet ID ne vous donne pas accès à des informations spécifiques à leur sujet et n'est utilisé pour aucune autre action, mais chaque fois que vous le voyez, vous pouvez être assuré que c'est le même utilisateur qui l'a utilisé lors d'une précédente occurrence. Tout comme un cookie, toutefois, l'utilisateur peut le réinitialiser et un nouvel identifiant lui sera généré pour votre action.

Vous obtenez cela du JSON à originalRequest.user.userId ou en utilisant app.getUser().userId. Une fois que vous l'avez, vous utiliserez un magasin de données pour stocker et récupérer des informations sur cet utilisateur.

Utilisation de app.userStorage

Semblable à app.data, il existe également un objet app.userStorage créé pour vous pour chaque utilisateur. Toutes les modifications que vous apportez à cet objet sont enregistrées entre les conversations que vous avez avec cet utilisateur.

Contrairement à app.data, cependant, cela ne sera pas stocké dans un contexte. Il a sa propre méthode de stockage. Qui conduit à...

Stockage dans JSON

Si vous n'utilisez pas la bibliothèque actions-on-google, vous avez toujours accès à userStorage via la réponse et demandez directement JSON. Vous devez stocker ceci en tant que chaîne, mais si vous devez stocker un objet plus complexe, une méthode courante consiste à le stringifier en tant que JSON.

Vous stockerez cette valeur sous data.google.userStorage dans la réponse et pourrez la récupérer sous originalRequest.data.user.userStorage dans la demande reçue par votre Webhook.

14
Prisoner

On dirait que vous voudrez peut-être effectuer un paiement sur Account Linking: https://developers.google.com/actions/identity/account-linking . Avec la liaison de compte, vous pouvez collecter des informations sur l'utilisateur final que vous échangez avec Google en fournissant une clé unique. Cette clé unique fait partie de toutes les demandes que vous recevez de Google. Ainsi, lorsque vous obtenez cette clé unique, vous recherchez les informations que vous avez collectées auprès de l'utilisateur final. Dans votre cas, vous stockeriez les informations d'identification ou toute autre clé nécessaire pour accéder aux informations de l'utilisateur final. Après la liaison initiale, toutes les nouvelles données que vous obtenez peuvent être stockées avec les informations d'origine collectées, en fonction de la clé unique obtenue lors de la liaison de compte.

0
NinePlanFailed

Vous pouvez enregistrer les informations dans le contexte avec un paramètre de valeur clé.

SAUVEGARDER DES VALEURS DANS UN CONTEXTE:

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

OBTENIR DES VALEURS DU CONTEXTE

 agent.getContext('context-name');

Pour plus de détails: https://dialogflow.com/docs/contexts/contexts-fulfillment

0
Ajay Venugopal

Vous pouvez également utiliser une base de données Google Cloud telle que BigQuery ou Firestore

0
Dan Aharon