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

时间:2018-11-13 07:56:22

标签: node.js dialogflow actions-on-google

我对dialogflow和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}`);
}

看起来会话或用户数据都不会持久存在。那么,如何通过dialogflow API保存状态?我想念什么?

我在对话框流程示例中的困惑是否说明了针对Google动作的请求/响应的不同处理程序? (我应该剔除与dialogflow代理相关的所有内容吗?)

---编辑---

 const {WebhookClient} = require('dialogflow-fulfillment');
 ...
 exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
   const agent = new WebhookClient({ request, response });

OR

 const { dialogflow } = require('actions-on-google');
 ...
 const app = dialogflow();
 exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

1 个答案:

答案 0 :(得分:2)

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

Example to use conversationToken

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