我对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);
答案 0 :(得分:2)
您可以使用会话令牌将数据保存在会话中。您可以通过对话界面“ conv.data”访问对话令牌,然后键入要存储的参数的名称。例如:
通过它,您可以保存需要保存在Action的同一会话中的数据。当您将通话从一台设备发送到另一台(newSurface)时,这也适用。但是,如果您关闭操作,则会话数据将丢失。