如何在 google 操作和对话流程中保存状态
how to save state in google action and dialog flow
我对 google 有关 google 的对话流和操作的文档感到非常困惑。看起来我需要在两者之间混合搭配以实现某些行为,例如在对话轮次之间保存状态。例如,我有一个如下所示的对话流意图处理程序
function showCard(agent) {
let conv = agent.conv();
if(!conv) console.log('There is no conv!'); // only assistant will have a conversation
let n = 0;
if(conv){
if( !conv.user.storage ) conv.user.storage = {};
n = conv.user.storage.cardNumber || conv.data.cardNumber || 0;
console.log(`set cardNumber from ${n}`);
}
// do some magic to generate a Card and simple response into _speakText
agent.add( _speakText );
if( conv ) {
if( !conv.user.storage ) conv.user.storage = {};
conv.data.cardNumber = n;
conv.user.storage.cardNumber = n;
console.log(`set cardNumber to ${n}`);
}
看起来对话或用户数据都没有被持久化。那么如何通过对话流 API 保存状态?我错过了什么?
我是否感到困惑,因为 dialogflow 示例展示了 requests/responses 的不同处理程序,而不是对 google 的操作? (我是否应该删除与 dialogflow 代理相关的所有内容?)
--- 编辑 ---
const {WebhookClient} = require('dialogflow-fulfillment');
...
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
或
const { dialogflow } = require('actions-on-google');
...
const app = dialogflow();
exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);
您可以使用conversationToken 保存会话中的数据。您可以通过会话接口“conv.data”访问conversationToken,然后键入您要存储的参数的名称。例如:
通过它,您可以将需要保存的数据保存在您的 Action 的同一会话中。这也适用于将对话从一台设备发送到另一台设备 (newSurface) 的情况。但是如果你关闭你的操作,会话数据将会丢失。
我对 google 有关 google 的对话流和操作的文档感到非常困惑。看起来我需要在两者之间混合搭配以实现某些行为,例如在对话轮次之间保存状态。例如,我有一个如下所示的对话流意图处理程序
function showCard(agent) {
let conv = agent.conv();
if(!conv) console.log('There is no conv!'); // only assistant will have a conversation
let n = 0;
if(conv){
if( !conv.user.storage ) conv.user.storage = {};
n = conv.user.storage.cardNumber || conv.data.cardNumber || 0;
console.log(`set cardNumber from ${n}`);
}
// do some magic to generate a Card and simple response into _speakText
agent.add( _speakText );
if( conv ) {
if( !conv.user.storage ) conv.user.storage = {};
conv.data.cardNumber = n;
conv.user.storage.cardNumber = n;
console.log(`set cardNumber to ${n}`);
}
看起来对话或用户数据都没有被持久化。那么如何通过对话流 API 保存状态?我错过了什么?
我是否感到困惑,因为 dialogflow 示例展示了 requests/responses 的不同处理程序,而不是对 google 的操作? (我是否应该删除与 dialogflow 代理相关的所有内容?)
--- 编辑 ---
const {WebhookClient} = require('dialogflow-fulfillment');
...
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
或
const { dialogflow } = require('actions-on-google');
...
const app = dialogflow();
exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);
您可以使用conversationToken 保存会话中的数据。您可以通过会话接口“conv.data”访问conversationToken,然后键入您要存储的参数的名称。例如:
通过它,您可以将需要保存的数据保存在您的 Action 的同一会话中。这也适用于将对话从一台设备发送到另一台设备 (newSurface) 的情况。但是如果你关闭你的操作,会话数据将会丢失。