首页 文章

如何在谷歌动作和对话流程中保存状态

提问于
浏览
0

我很困惑谷歌文档的对话流和谷歌的行动 . 看起来我需要在两者之间进行混合和匹配才能实现某些行为,比如在对话的转弯之间保存状态 . 例如,我有一个对话流意图处理程序,如下所示

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}`);
}

看起来似乎没有会话或用户数据被持久化 . 那么如何通过dialogflow API保存状态呢?我错过了什么?

我在对话框流程示例中的混淆是否展示了针对谷歌上的操作的请求/响应的不同处理程序? (我应该把与对话流代理相关的所有内容都拉出来吗?)

---编辑---

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);

1 回答

  • 1

    您可以使用conversationToken将数据保存在会话中 . 您可以通过对话界面“conv.data”访问conversationToken,然后键入要存储的参数的名称 . 例如:

    Example to use conversationToken

    通过它,您可以将需要保存的数据保存在Action的同一会话中 . 当您将对话从一个设备发送到另一个设备时,这也适用(newSurface) . 但是,如果您关闭操作,会话数据将会丢失 .

相关问题