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

Я делаю действия над проектом Google, которые будут использовать основные функции запоминания того, что говорит пользователь, и использования его для других целей.

Так, например, вот так может выглядеть разговор:

1     User: Hello
2     Bot: Hey! What's your name?
3     User: Joel
4     Bot: Your name is Joel, is that correct?
5     User: Yes that is correct
6     Bot: Awesome, it's great to meet you Joel.

Я знаю, как получить информацию изначально, но у меня возникают проблемы с получением информации (имя)Джоэл ') передал другое намерение, которое используется исключительно для подтверждения.

Вот что у меня есть:

app.intent('greeting', (conv, params) => {
  const context = conv.contexts.set('context');      // working good
  conv.ask(`I got ${params.name}, is that right?`);
});

app.intent('greeting_1', (conv,params) => {
  const context1 = conv.contexts.get('context');  //not working
  conv.ask(`Awesome, it's great to meet yoy ${params.name}`);
 });

Если это поможет, в частности ошибка, которую я получаю, читает:

TypeError: Cannot read property 'userDecision' of undefined

Как мне заставить это работать?У меня такое чувство, что я должен сохранить данные в userStorage, но мне действительно нужно было сделать это очень просто, поэтому я не знаком с этим.

Спасибо за помощь!

1 Ответ

0 голосов
/ 14 февраля 2019

Прежде всего, привет!

Ваша первоначальная мысль о сохранении данных в UserStorage может быть правильной в зависимости от вашего варианта использования.Позвольте мне уточнить:

Два способа сохранения данных с действиями в клиентской библиотеке Google Node.JS

Хранение данных в разговоре

Вы можете использовать conv.data.name = 'Joel' для сохраненияданные между поворотами разговора.Но эти данные не будут доступны в следующий раз, когда пользователь вернется.

Постоянное хранение данных (пока пользователь позволяет это)

Именно здесь userStorage вступает в игру.Вы можете использовать conv.user.storage.name = 'Joel', чтобы помнить имя пользователя каждый раз, когда он возвращается.Помните, что для этого типа постоянного хранилища может потребоваться согласие пользователя в зависимости от того, где он живет.

Юридическое примечание: Получение согласия до доступа к userStorage.В некоторых странах действуют правила, согласно которым разработчики должны получить согласие пользователя, прежде чем он сможет получить доступ или сохранить определенную информацию (например, личную информацию) в хранилище пользователя.Если вы работаете в одной из этих стран и хотите получить доступ к этой информации или сохранить ее в userStorage, вы должны использовать помощник по подтверждению, чтобы запросить согласие у пользователя и получить согласие, прежде чем вы сможете начать хранить такую ​​информацию в userStorage.

Вам также необходимо объяснить данные, которые вы сохраняете, в своей Политике конфиденциальности.

Что касается вашего конкретного случая использования, хранение данных, которые не изменятся (например, имя), вuserStorage - гораздо лучший метод.Поскольку, если вы сохраните его только для одного разговора, вам нужно будет снова запросить разрешение в следующий раз.

Это должно охватывать ваши основные потребности сохранения данных на платформе.Однако, если вам нужно более сложное решение для управления состоянием, вы можете проверить Контексты диалогового окна .


РЕДАКТИРОВАТЬ: Я упустил из виду, что вы ужеиспользуя контексты.Но ответ остается в силе: вам не нужно использовать контексты, если все, что вы хотите сделать, это сохранить данные во время разговора.

Но я думаю, что причина вашей проблемы в том, что вы не устанавливаете или не получаете параметры контекста правильно.Взгляните на примеры здесь и здесь :

Метод context.set() получает три параметра;имя, продолжительность жизни и параметры.Вы передаете только имя контекста в своем коде.

И, использование только метода contexts.get() недостаточно для чтения параметров контекста.Вам нужно прочитать их так:

app.intent('Tell Greeting', conv => {
  const context1 = conv.contexts.get('context1')
  const { color, num } = context1.parameters
})

Но я повторяю свою первоначальную мысль.Вы не должны делать вещи настолько сложными для себя, если вам действительно не нужно.Попробуйте использовать conv.data и conv.user.storage, если это возможно.

...