Объекты сеанса DialogFlow и преобразование в значения в моей базе данных - PullRequest
1 голос
/ 30 марта 2019

Это немного сложно объяснить, поэтому я надеюсь, что использование примера будет наиболее эффективным.

Мы создаем сервис, который позволяет Parent вести список их Childrenи выполните действия против этих Children.

. Parent - это пользователь, делающий высказывания агенту / намерению DF.

Parent добавляет своих детей (имена) в базу данных.через веб-интерфейс (не DF) до использования DF.

Это означает, что у нас может быть представление базы данных, например:

PARENT TABLE

ID  Name
1   User A
2   User B     

РЕБЕНОК ТАБЛИЦА

ID  NAME  PARENT_ID
1   John  1
2   Jon   2
3   Jake  2

Фразы намерения имеют следующий формат и параметры

"Do {ACTION} for {CHILD_NAME}"

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

Напримерmple, если Пользователь A делает следующее высказывание

"Do {ACTION} for John"

Как мы можем гарантировать, что агент извлекает «Джон», а не «Джон», когда он передает параметры в выполнение?

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

Я не уверен, как это будет работать в моем случае.Я не могу ожидать, чтобы вести список ВСЕХ возможных имен, и даже если бы я мог, у меня было бы несколько записей для John и Jon и все равно не было бы способаагент, зная, какой из них использовать, я бы предположил.

Может быть, есть способ динамически добавлять заполнители сущностей для каждого использования и возможные значения параметров для этой сущности динамически на основе значений, которые мы храним в базе данных, но это кажется неосуществимым и нереалистичным?

Каково решение этого типа проблемы с диалоговым дизайном в DF?Это кажется очень распространенным явлением (Маркировка предметов из списка задач или приложений из списка покупок).

1 Ответ

1 голос
/ 01 апреля 2019

Это был длинный вопрос, поэтому я в основном отвечу на

Как мы можем обеспечить, чтобы агент извлекал «Джона», а не «Джона», когда он передает параметры выполнению?

Это может быть слишком просто, но после того, как вы извлечете имя, вы можете подтвердить правописание у пользователя с помощью следующего вопроса.

User: "Do {ACTION} for John"

Agent: "Ok, I heard, 'Do {ACTION} for John.' Is that correct?"

User: "Yes"

// call updateDatabase()

У вас все равно останетсяпроблема для пользователей Google Assistant, использующих устройства без экранов, но вы могли бы написать дополнительную логику для обработки ответвления для возможностей поверхности , например ...

const hasScreen =
conv.surface.capabilities.has('actions.capability.SCREEN_OUTPUT');
const hasAudio =
conv.surface.capabilities.has('actions.capability.AUDIO_OUTPUT');
const hasMediaPlayback =
conv.surface.capabilities.has('actions.capability.MEDIA_RESPONSE_AUDIO');
const hasWebBrowser =
conv.surface.capabilities.has('actions.capability.WEB_BROWSER');

Если поверхность неесть экран, вы можете разбить строку имени на массив и прочитать каждый символ обратно пользователю, как ...

Agent: "Ok, I heard, 'Do {ACTION} for John, spelled 'J', 'O', 'H', 'N'.' Is that correct?"
...