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?
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:
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.
app.userStorage
créé pour vous.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.
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.
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