如何在 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) 的情况。但是如果你关闭你的操作,会话数据将会丢失。