我很困惑谷歌文档的对话流和谷歌的行动 . 看起来我需要在两者之间进行混合和匹配才能实现某些行为,比如在对话的转弯之间保存状态 . 例如,我有一个对话流意图处理程序,如下所示
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 回答
您可以使用conversationToken将数据保存在会话中 . 您可以通过对话界面“conv.data”访问conversationToken,然后键入要存储的参数的名称 . 例如:
通过它,您可以将需要保存的数据保存在Action的同一会话中 . 当您将对话从一个设备发送到另一个设备时,这也适用(newSurface) . 但是,如果您关闭操作,会话数据将会丢失 .