我试图通过检查conv.user.entitlements来查看用户是否购买了产品,但购买后立即除外,这是空的。
此值以前在对话之间似乎一直存在,现在始终为空。购买后我可以立即使用conv.user.entitlements看到该权利,但是随后它消失了。
if (arg.purchaseStatus === 'PURCHASE_STATUS_OK') {
console.log('purchase2 ', conv.user.entitlements);
//this works as expected showing the entitlement
在日志中,我看到:Purchase2 [{授权:[[Object]], packageName:'com.chad.myfirstapp'}]
但是当我尝试在下一次对话中记录相同内容时,我得到:
purchase2 []
答案 0 :(得分:0)
尽管conv.user
对象能够跨会话存储数据,但要记住documented here既有技术限制,也有法律限制。
当Assistant可以将身份与用户匹配时,用户存储的内容将永不过期,只有用户或操作本身可以清除它。
当助手无法将身份与用户匹配时,将在对话结束时清除用户存储的内容。助手无法将身份与用户匹配的情况的示例包括:
除了conv.user
对象之外,您还可以将数据存储在首选数据库中。 This Github sample演示了如何将Dialogflow连接到Firebase Firestore数据库。
您可以找到写入功能here:
function writeToDb (agent) {
// Get parameter from Dialogflow with the string to add to the database
const databaseEntry = agent.parameters.databaseEntry;
// Get the database collection 'dialogflow' and document 'agent' and store
// the document {entry: "<value of database entry>"} in the 'agent' document
const dialogflowAgentRef = db.collection('dialogflow').doc('agent');
return db.runTransaction(t => {
t.set(dialogflowAgentRef, {entry: databaseEntry});
return Promise.resolve('Write complete');
}).then(doc => {
agent.add(`Wrote "${databaseEntry}" to the Firestore database.`);
}).catch(err => {
console.log(`Error writing to Firestore: ${err}`);
agent.add(`Failed to write "${databaseEntry}" to the Firestore database.`);
});
}
答案 1 :(得分:0)
如果您只想查看用户是否曾经购买过商品,请使用conv.user.storage存储一个布尔值,以了解用户是否曾经购买过商品:
conv.user.storage.hasPurchasedItem = true
或者也许您可以在conv.user.storage中进行购买并检查其长度:
conv.user.storage.purchases = conv.user.storage.purchases || []
conv.user.storage.purchases.push({item: bananas, cost: 0.99})