Как я могу получить права пользователей для сохранения в разговорах? - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь проверить, приобрел ли пользователь продукт, проверив 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 [{Права: [[Объект]], имя_пакета: 'com.chad.myfirstapp'}]

Но когда я пытаюсь войти в следующий разговор, я получаю:

покупка2 []

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Если вы просто хотите увидеть, приобрел ли пользователь элемент в прошлом, используйте 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})

0 голосов
/ 28 мая 2019

Несмотря на то, что объект conv.user способен хранить данные между разговорами, необходимо учитывать как технические, так и юридические ограничения, здесь задокументировано .

Когда помощник может сопоставить личность пользователя, содержимое пользовательского хранилища никогда не истекает, и очистить его может только пользователь или само Действие.

Когда помощник не может сопоставить личность пользователя, содержимое хранилища пользователя очищается в конце диалога. Примеры случаев, когда Помощник не может сопоставить личность пользователя:

  • Голосовое совпадение установлено, и совпадения отсутствуют.
  • Пользователь отключил личные данные.

В дополнение к объекту conv.user вы также можете хранить данные в предпочитаемой вами базе данных. Этот пример Github демонстрирует, как подключить Dialogflow к базе данных Firebase Firestore. Вы можете найти функцию записи здесь :

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