1. Прежде чем начать
В этой лабораторной работе вы узнаете, как создать розничного чат-бота с помощью Dialogflow CX , разговорной платформы искусственного интеллекта (CAIP) для создания диалоговых пользовательских интерфейсов. Dialogflow CX может реализовывать виртуальные агенты, такие как чат-боты, голосовые боты, телефонные шлюзы, и может поддерживать несколько каналов на более чем 50 различных языках.
В этой лаборатории кода вы узнаете, как создать чат-бота на веб-сайте для розничной торговли. Вымышленный бизнес, для которого мы создаем чат-бота, называется G-Records . G-Records — рок-лейбл, базирующийся в Калифорнии. На лейбле подписаны контракты с 4 рок-группами; Элис Гуглер , G's N' Roses , The Goo Fighters и The Google Dolls . G-Records продает товары группы всем поклонникам рока.
В конце этой лаборатории вы сможете использовать чат-бот, чтобы заказать рубашки или музыку, или спросить о своем заказе.
Что вы узнаете
Вы узнаете о преимуществах Dialogflow CX по сравнению с Dialogflow ES на практике! Оно включает в себя следующие понятия:
- Как создать виртуальный агент Dialogflow CX в Google Cloud
- Научитесь создавать потоки
- Научитесь создавать сущности
- Научитесь создавать намерения
- Узнайте, как создавать страницы и страницы перехода с обработчиками состояний.
- Узнайте, как переходить страницы с помощью маршрутов намерений.
- Узнайте, как переходить страницы с параметрами и условиями маршрутов.
- Узнайте, как возвращать условные ответы с помощью системных функций.
- Узнайте, как создавать резервные сообщения.
- Научитесь пользоваться симулятором
- Узнайте, как создавать тестовые примеры и тестовое покрытие.
Окончательный дизайн агента Dialogflow CX будет выглядеть так:
Что вам понадобится
- Для создания агента Dialogflow CX вам понадобится идентификатор Google или адрес Gmail.
- Доступ к Google Cloud.
2. Настройка среды
Создайте проект Google Cloud
Поскольку Dialogflow CX работает в Google Cloud, вам необходимо создать проект Google Cloud . Проект организует все ваши ресурсы Google Cloud. Он состоит из набора участников, включенных API (и других ресурсов), инструментов мониторинга, платежной информации, а также средств аутентификации и контроля доступа.
Когда вы создаете новый проект, вам нужно будет ввести имя проекта . И вам придется связать его с существующим платежным аккаунтом и организацией.
Платежный аккаунт используется для определения того, кто платит за определенный набор ресурсов, и его можно связать с одним или несколькими проектами. Использование проекта взимается со связанного платежного аккаунта. В большинстве случаев вы настраиваете биллинг при создании проекта. Дополнительную информацию см. в документации по выставлению счетов . Убедитесь, что для вашего облачного проекта включена оплата.
Включите API Dialogflow
Чтобы использовать Dialogflow, вам необходимо включить API Dialogflow для вашего проекта.
- Выберите проект, для которого вы хотите включить API, и нажмите «Продолжить» .
- Сверните меню API и сервисов и нажмите «Создать учетные данные».
- Нажмите «Данные приложения».
- Скажите «Нет», я их не использую, поскольку вы пока не используете Kubernetes Engine, App Engine или Cloud Functions.
- Нажмите Готово
Создайте новый агент Dialogflow CX.
Чтобы создать новый агент Dialogflow CX, сначала откройте консоль Dialogflow CX:
- Выберите ранее созданный проект Google Cloud.
- Нажмите Создать агента .
Заполните форму для основных настроек агента:
- Вы можете выбрать любое отображаемое имя.
- В качестве местоположения выберите: us-central1
- Выберите предпочитаемый часовой пояс.
- Выберите англо-английский в качестве языка по умолчанию.
Нажмите Создать .
Хорошо, у нас все готово. Наконец-то мы можем приступить к моделированию нашего виртуального агента.
3. Потоки
Сложные диалоги часто включают в себя несколько тем разговора. В случае с чат-ботом, который мы создаем для G-Records, для продажи товаров группы, у нас будут диалоги о каталоге продукции, оплате, статусе заказа и вопросах обслуживания клиентов. Мы могли бы разделить эти темы разговоров на потоки.
Потоки позволяют командам работать над отдельными маршрутами разговора. Хорошей практикой было бы упростить процесс, чтобы он легко помещался на экране и был более модульным.
Потоки — это новая концепция Dialogflow CX. В Dialogflow Essentials есть концепция Mega Agents, которая чем-то похожа на Flows. Однако вы будете использовать Flows гораздо чаще.
Позже в этой лабораторной работе мы будем использовать обработчики состояний , которые могут завершить поток (чтобы он вернулся к следующему или предыдущему потоку), или вы можете завершить полный сеанс агента.
Давайте пойдем и создадим несколько потоков.
Создание потоков
- В Dialogflow CX щелкните значок + > Создать поток .
- Укажите имя:
Catalog
и нажмите Enter.
Ваш первый каталог потоков создан. Теперь создайте другие потоки:
-
Order Process
-
My Order
-
Customer Care
Позже в этой лабораторной работе мы установим обработчики состояния страницы, это гарантирует, что в конечном итоге визуализация будет выглядеть следующим образом:
Симулятор
В правой части консоли Dialogflow CX вы можете протестировать виртуальный агент с помощью встроенного симулятора. Вы можете протестировать разговор с начала разговора или с определенного потока.
- Нажмите кнопку «Агент тестирования» в правом верхнем углу экрана.
- В поле разговора с агентом напишите:
Hello
Виртуальный агент ответит текстом приветствия по умолчанию: Привет! Как я могу помочь?
Давайте изменим этот текст приветствия по умолчанию.
Стартовый процесс по умолчанию
Давайте начнем с создания Intent Route , который будет запускаться, как только вы поприветствуете виртуального агента.
- На левой боковой панели «Сборка» > «Потоки » нажмите «Запуск по умолчанию» и выберите узел «Начальное дерево».
Откроется стартовая страница. Он автоматически выбрал стартовую страницу в разделе «Создать» > «Страницы» на боковой панели.
- В меню «Пуск» > «Маршруты» нажмите «Добро пожаловать по умолчанию» .
Намерение классифицирует намерение конечного пользователя для одного хода разговора. В Dialogflow CX намерения могут быть частью обработчика состояния для маршрутизации следующей активной страницы или выполнения.
- Удалите все записи «Говорит агент» и добавьте этот новый текст:
Welcome, I am the virtual agent of G-Records, a fictional rock label. You can order artists merchandise, ask questions about your order or shipping, and I can tell you more which artists are currently signed with us. How can I help?
Чтобы упростить общение, нам также понадобятся кнопки быстрого ответа/чипы предложений.
- Нажмите «Добавить диалог» > «Пользовательские полезные данные» и используйте приведенный ниже фрагмент кода.
- Используйте приведенный ниже фрагмент кода в качестве пользовательской полезной нагрузки и нажмите «Сохранить» .
Чтобы узнать больше о пользовательских полезных нагрузках, загляните в документацию .
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Which artists?"
},
{
"text": "Which products?"
},
{
"text": "About my order..."
}
]
}
]
]
}
- Продолжайте и проверьте намерение приветствия в симуляторе.
Вы, вероятно, задаетесь вопросом, почему вы не видите богатого контента. Это связано с тем, что богатый контент, такой как чипы предложений, зависит от интеграции. Для следующих шагов требуется учетная запись для выставления счетов, но вы можете пропустить их, если у вас ее нет.
- На левой боковой панели нажмите «Управление» > «Интеграции» .
- Выберите Dialogflow Messenger и нажмите «Подключиться» .
- Во всплывающем окне нажмите « Включить» .
Появится еще одно всплывающее окно, на этот раз с интеграционным кодом JavaScript, который вы можете вставить на свой веб-сайт, чтобы интегрировать компонент Dialogflow Messenger на свой веб-сайт. Поскольку веб-сайта у нас пока нет, протестируем виртуальный агент прямо в инструменте.
- Нажмите ссылку «Попробовать сейчас» .
- Нажмите на значок чат-бота в правом нижнем углу, чтобы открыть окно чата. Напишите
Hello
чтобы начать разговор.
На данный момент, когда вы нажимаете на фишки с предложениями, виртуальный агент не поймет, что вы имеете в виду. Это потому, что наш виртуальный агент еще не переключается между состояниями. Мы можем сделать это в Dialogflow CX с помощью Pages . Давайте продолжим лабораторную работу, сначала создадим несколько Entities и Intents .
4. Типы сущностей
Типы сущностей используются для управления извлечением данных из ввода конечного пользователя. Типы сущностей Dialogflow CX очень похожи на типы сущностей Dialogflow ES. Dialogflow предоставляет предопределенные системные объекты, которые могут соответствовать многим распространенным типам данных. Например, существуют системные сущности для сопоставления дат, времени, цветов, адресов электронной почты и т. д. Вы также можете создавать свои собственные объекты для сопоставления пользовательских данных.
Давайте начнем с подготовки всех пользовательских объектов, прежде чем мы сможем разработать страницы в потоке. Мы создадим следующие сущности:
Создание сущностей
Давайте создадим сущность Artist .
- Нажмите «Управление» > «Типы объектов».
- Нажмите + Создать
- Отображаемое имя:
Artist
- Сущности:
-
The Google Dolls
(синоним:Google Dolls
) -
The Goo Fighters
(синоним:Goo Fighters
) -
G's N' Roses
(с синонимом:Gs and Roses
) -
Alice Googler
- Нажмите «Дополнительные параметры» и установите флажок «Нечеткое сопоставление» . (Если вы напишете название группы неправильно, оно все равно может соответствовать нужному объекту.)
- В дополнительных параметрах также проверьте «Редактировать в журнале» . (Если вы напишете название группы неправильно, оно будет исправлено в журнале.)
- Нажмите «Сохранить».
Нам также понадобится сущность для товара :
- Нажмите «Управление» > «Типы объектов».
- Нажмите + Создать
- Отображаемое имя:
Merch
- Сущности:
-
T-shirt
-
Longsleeve
(синоним:Longsleeve shirt
) -
Tour Movie
-
Digital Album
(с синонимом:MP3 Album
,MP3
) -
CD
(с синонимамиDisc
,Physical CD
)
- Нажмите «Сохранить».
Нам также понадобится сущность для альбома :
- Нажмите «Управление» > «Типы объектов».
- Нажмите + Создать
- Отображаемое имя:
Album
- Сущности:
-
Live
-
Greatest Hits
(с синонимом:Hits
)
- Нажмите «Сохранить».
Нам также понадобится сущность для размеров одежды:
- Нажмите «Управление» > «Типы объектов».
- Нажмите + Создать
- Отображаемое имя:
ShirtSize
- Сущности:
-
XS
(с синонимом:Extra Small
) -
S
(с синонимом:Small
) -
M
(с синонимом:Medium
) -
L
(с синонимом:Large
) -
XL
(с синонимом:Extra Large
) -
2XL
(синоним:Extra Extra Large
) -
3XL
- Нажмите «Сохранить».
И сущность для номеров заказов , которые обычно состоят из 4 букв и цифр и 3 цифр. (например, ABCD123)
- Нажмите «Управление» > «Типы объектов».
- Нажмите + Создать
- Отображаемое имя:
OrderNumber
- Объекты регулярного выражения
- Объект: [AZ]{4}[0-9]{3}
- Нажмите «Сохранить».
Конфигурация вашей сущности должна выглядеть примерно так:
@Художник:
@Мерч:
@Альбом:
@ShirtSize:
@Номер заказа:
После того, как пользовательские объекты подготовлены, мы можем подготовить намерения. Продолжим лабораторную работу.
5. Намерения
Намерение классифицирует намерение конечного пользователя для одного хода разговора. В Dialogflow CX они были значительно упрощены. Он больше не является строительным блоком диалогового управления. Dialogflow CX использует намерения только в соответствии с тем, что говорят пользователи. В Dialogflow ES приходилось все привязывать к намерению (параметры, события, выполнение и т. д.). Намерения в Dialogflow CX содержат только обучающие фразы и поэтому могут использоваться повторно. Он больше не контролирует разговор. Таким образом, процесс создания намерений будет простым:
Обучающие фразы в намерениях могут использовать сущности для извлечения «переменных» входных данных, поэтому рекомендуется заранее создавать типы сущностей, что мы и делали на предыдущей странице лабораторных шагов.
Создание намерений
Давайте начнем с подготовки всех намерений, прежде чем мы сможем разработать страницы в потоке.
- Нажмите «Управление» > «Намерения» .
- Нажмите + Создать.
Используйте следующие детали:
- Отображаемое имя
redirect.artists.overview
- Описание
Artists overview: The bands supported by the label
Прокрутите вниз и создайте следующие обучающие фразы :
-
Which bands are signed?
-
Which bands
-
Which artists
-
Which artists are part of the record label
-
Who is part of the label
-
From which bands can I buy merchandise
-
Band merchandise
-
Which music do you have?
-
I would like to know who are signed to the label
-
Who are supported by the label
-
From who can I buy shirts
-
What music can I order
-
Can I get an overview of all the artists
- Нажмите Сохранить .
- Теперь продолжим и создадим все остальные намерения. Используйте свое воображение, чтобы придумать больше обучающих фраз. Лучшей практикой было бы иметь как минимум 10 обучающих фраз для каждого намерения, чтобы охватить различные способы, которыми пользователь может вызвать это намерение. Для целей этой лабораторной работы меньшее количество тоже вполне подойдет.
Несколько вещей, на которые стоит обратить внимание:
- Обратите внимание: когда вы вводите обучающую фразу, Dialogflow CX автоматически аннотирует ваши объекты. Если этого не происходит, возможно, вам придется обновить свою сущность (добавив синоним) или вручную аннотировав обучающую фразу.
- Более короткие обучающие фразы. Система NLU Dialogflow также может работать с более короткими обучающими фразами, и мы привели здесь несколько примеров.
- Перетренированность: слишком много тренировочных фраз для намерения может привести к перетренированности и менее желаемому результату. Лучше всего использовать итеративное и инкрементальное тестирование и добавлять обучающие фразы в случае, если намерение не совпадает.
Отображаемое имя | Тренировочные фразы |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
Теперь, когда наши повторно используемые элементы (потоки, сущности и намерения) подготовлены, мы можем объединить их, создав страницы и обработчики состояний.
6. Страницы и обработчики состояний
Разговор Dialogflow CX (сеанс) можно описать и визуализировать как конечный автомат . Возьмем, к примеру, торговый автомат, его можно смоделировать как конечный автомат. Он имеет следующие состояния: «Ожидание монет», «Выбрать конфету», «Дать конфету» и, учитывая набор входных данных, он перемещается между этими состояниями. Например, вставка монеты переводит торговый автомат из режима «Ожидание монет» в режим «Выбор конфет». Страницы — это то, как мы можем моделировать эти состояния для виртуального агента Dialogflow CX.
Когда конечный пользователь взаимодействует с Dialogflow CX в беседе, беседа перемещается со страницы на страницу, поэтому в любой момент ровно одна страница является текущей, текущая страница считается активной, а также поток, связанный с этой страницей, считается активный.
Для каждого Flow вы определяете множество страниц, на которых ваши объединенные страницы могут обрабатывать полный разговор по темам, для которых предназначен этот поток. Каждый поток имеет специальную стартовую страницу. Когда поток изначально становится активным, стартовая страница становится текущей. При каждом повороте диалога текущая страница либо остается прежней, либо переходит на другую страницу. Эта концепция позволит вам создавать более крупных агентов со многими страницами и несколькими поворотами разговора.
Страницы содержат выполнения (статические диалоги ввода и/или веб-перехватчики), параметры и обработчики состояний . Управление разговором происходит через обработчики состояний, что позволяет создавать различные маршруты перехода для перехода на другую страницу Dialogflow CX, в том числе делать его условным (для ветвления разговоров).
Состояние разговора контролируется путем обработки переходов между страницами с тремя различными типами маршрутов:
- Маршруты намерений : когда намерение должно соответствовать (например, изменение страницы в зависимости от того, что говорит конечный пользователь). (Синие линии на визуальной схеме.)
- Маршруты условий : когда необходимо проверить условие (например, изменение страницы на основе определенных параметров, хранящихся в сеансе) (оранжевые линии на визуальной диаграмме).
- Обработчики событий : когда должно быть обработано определенное резервное событие (например, обработка отсутствия ввода или совпадения, чтобы устранить неоднозначность конечного пользователя в отношении маршрута намерения или условия) (зеленые линии на визуальной диаграмме).
Высказывания разговора (т. е. контент или ответ пользователю) определяются выполнением, которое может быть статическим или динамическим:
- Статическое выполнение : когда предоставляется статический ответ на выполнение.
- Динамическое выполнение : когда веб-перехватчик выполнения вызывается для динамических ответов.
Для нашего розничного бота мы создадим несколько маршрутов намерений и предоставим несколько статических ответов на выполнение ввода , которые будут представлены пользователю, как только страница будет активирована. Позже мы создадим параметры с маршрутами условий для сбора информации, необходимой вам для оформления заказа на товары.
Маршруты намерений страницы
Создание страниц в начальном процессе по умолчанию
Вот блок-схема запуска по умолчанию:
Давайте щелкнем это вместе:
- Нажмите «Создать» > «Запуск по умолчанию».
- Нажмите Стартовую страницу
- Нажмите значок + рядом с пунктом «Маршруты».
- Добавить redirect.artists.overview
- Прокрутите вниз до перехода и перейдите к потоку каталога .
- Нажмите « Сохранить».
- Повторите вышеуказанные шаги для
redirect.product.overview
и остальных 11 строк из этой таблицы:
Страница (в потоке) | Маршруты > Цель | Маршруты > Переход к |
Начинать | | - |
Начинать | | Поток: Каталог |
Начинать | | Поток: Каталог |
Начинать | | Поток: Каталог |
Начинать | | Поток: Каталог |
Начинать | | Поток: Каталог |
Начинать | | Поток: Каталог |
Начинать | | Поток: Служба поддержки клиентов |
Начинать | | Поток: Служба поддержки клиентов |
Начинать | | Поток: Служба поддержки клиентов |
Начинать | | Поток: Мой заказ |
Начинать | | Поток: Мой заказ |
Начинать | | Поток: Мой заказ |
Начинать | | Страница: Завершить сеанс |
Процесс запуска по умолчанию будет работать так же, как меню параметров при звонке в колл-центр. Однако в этом виртуальном агенте он обучается на естественном языке с обучающими фразами в намерениях. Таким образом, взаимодействие осуществляется посредством разговора, а не опций DTMF, и является более естественным и человечным.
Создание страниц в потоке каталога
Следующая расшифровка чата относится к потоку Каталога:
> "Hi"
"Welcome, I am the virtual agent of G-Records, a fictional rock label.
You can order artists merchandise, ask questions about your order or shipping,
and I can tell you more which artists are currently signed with us. How can I help?"
> "Which bands are signed with this record label?"
"The following bands are signed with G-Records:
Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
From which of these artists would you like to order merchandise?"
> "Alice Googler"
"You want to rock with Alice Googler merchandise. Awesome!
We sell shirts, music or the tour movie.
Which merchandise item do you want?"
"(Suggestion chips: [Shirts] [Music] [Tour Movie])"
> "I would like to buy a Shirt"
"Do you want a longsleeve or a t-shirt?"
"(Suggestion chips: [T-shirt, Longsleeve, Price?])"
> "What's the price difference?"
"A t-shirt costs $25 and a longsleeve costs $30.
Do you want a longsleeve or a t-shirt?"
> "A t-shirt",
"What shirt size do you want?"
"(Suggestion chips: [XS, S, M, L, XL, 2XL, 3XL])"
> "M"
"A T-shirt of Alice Googler size: M costs $25. Shall I continue to order?"
Диалог будет другим, если вы выберете «Музыка» или «Тур-фильм» . Для музыки диалог будет выглядеть следующим образом:
> "Music"
"We have a Greatest Hits Album or the Live Album. Which one do you want?"
"(Suggestion chips: [Greatest Hits, Live, Price?])"
> "The Live Album"
"Do you want this album on CD or MP3?"
"(Suggestion chips: [CD, MP3])"
> "What's the price difference?"
"A CD costs $15. The digital album on MP3 costs $10.
Do you want this album on CD or MP3?"
> "Digital Album",
"The Digital Album: Alice Googler - Live costs $10. Shall I continue to order?"
Для Tour Movie диалог будет выглядеть так:
> "Tour Movie"
"The Tour Movie of G's N' Roses costs $25. Shall I continue to order?
Вот блок-схема всех страниц каталога:
Обратите внимание на сложность этого потока:
- Я мог бы пропустить вопрос «Какие артисты» и сразу же спросить «Какие товары доступны» .
- Из стандартного стартового процесса я мог бы спросить: «Я хочу купить футболку The Google Dolls» или «Я хочу что-нибудь купить». Это означает, что виртуальный агент будет задавать дополнительные вопросы, чтобы заполнить слоты для этих необходимых параметров. Он переходит прямо на страницу продукта.
- Диалоговое окно «Цена» происходит со страницы «Цена», которая будет использоваться повторно.
- Хотя диалог в фильме «Тур» выглядит как самый простой диалог, на самом деле мы сделаем с ним что-то особенное. Мы будем повторно использовать эту часть диалога, чтобы конечные пользователи также могли ввести ее напрямую для одного из других продуктов, если они специализируются на всей информации сразу:
> "I want The Goo Fighters longsleeve size S."
"The longsleeve of The Goo Fighters size S costs $30. Shall I continue to order?"
Давайте сначала начнем с соединения страниц.
- Нажмите «Создать» > «Каталог».
- Нажмите Стартовую страницу
- Нажмите значок + рядом с пунктом «Маршруты».
- Добавить redirect.artists.overview
- Прокрутите вниз до пункта «Переход» , выберите «Страница» и выберите: + новая страница.
- Используйте название страницы:
Artist Overview
и нажмите «Сохранить».
Теперь давайте завершим остальную часть потока:
- Предыдущие шаги можно повторить со следующими страницами, намерениями и достижениями. Возьмите на себя этот стол. Страница — это страница, которую вы выберете в потоке, Маршруты > Переход к — это новый поток или страница, которую вы создадите и на которую перейдете.
Страница (в потоке) | Маршруты > Цель | Маршруты > Переход к |
Начало каталога | | Обзор исполнителя |
Начало каталога | | Продукт |
Начало каталога | | Обзор продукта |
Начало каталога | | Обзор продукта |
Начало каталога | | Рубашки |
Начало каталога | | Музыка |
Начало каталога | | Завершить сеанс |
Начало каталога | | Конечный поток |
Обзор исполнителя | | Обзор продукта |
Теперь продолжим и добавим больше статических выполнений.
- В потоке каталога щелкните страницу «Обзор исполнителя» .
- Нажмите «Изменить выполнение» в разделе «Выполнение записи» .
- Используйте следующие статические выполнения ( говорит агент ):
-
The following bands are signed with G-Records: Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
- Нажмите «Сохранить».
- В потоке каталога щелкните страницу «Обзор продукта» .
- Нажмите «Изменить выполнение» в разделе «Выполнение записи» .
- Используйте следующее статическое выполнение ( говорит агент ):
-
We sell shirts, music or the tour movie.
- Нажмите « Сохранить ».
Параметры страницы
Параметры используются для сбора и ссылки на значения, предоставленные конечным пользователем во время сеанса. Каждый параметр имеет имя и тип сущности. @Artist
и @Merch
— минимальные параметры, которые нам необходимо собрать, чтобы сделать заказ товара. Для футболок или лонгсливов вам также нужно собрать @ShirtSize
, а если вы хотите заказать музыку, вам также понадобятся @Carrier
и @Album
name.
Эти параметры необходимо будет пометить как обязательные . И как только это потребуется, вы захотите предоставить специальные подсказки, чтобы запомнить вашего конечного пользователя, чтобы предоставить правильные ответы, чтобы можно было собрать эти параметры. В Dialogflow CX есть несколько механизмов, которые могут вам в этом помочь.
Например, вы можете предоставить собственные статические сообщения о выполнении в разделе «Параметры» . Если параметр является обязательным, то будут показаны выполнения этих параметров. Эти ответные сообщения будут добавлены в очередь ответов . Во время хода агента можно (а иногда и желательно) вызвать несколько исполнений, каждое из которых может генерировать ответное сообщение. Dialogflow сохраняет эти ответы в очереди ответов . Чтобы узнать больше о жизненном цикле страницы и порядке, в котором эти выполнения будут добавлены в очередь ответов, прочтите документацию страницы Dialogflow CX .
Создание параметров на странице «Обзор исполнителя»
Давайте определим некоторые параметры страницы:
- В потоке каталога щелкните страницу «Обзор исполнителя» .
- Нажмите + в блоке «Параметры» . Добавьте параметр исполнителя :
- Отображаемое имя:
artist
- Тип объекта:
@Artist
- Обязательно: Проверить
- Редактировать в журнале: проверить
- Теперь мы добавим несколько сообщений о выполнении пользовательских параметров. Если параметр исполнителя еще не собран виртуальным агентом, конечный пользователь получит этот ответ агента, добавленный в очередь ответов:
From which of these artists would you like to order merchandise?
- Добавьте второй вариант диалога, который предоставляет богатые фишки предложений. Нажмите «Добавить диалог» и используйте этот код (в формате JSON ):
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
Можно обрабатывать различные резервные запросы на выполнение в зависимости от количества попыток, которые ваш конечный пользователь пытался ответить на них. Вы можете сделать это с помощью обработчиков событий параметров . На выбор доступны различные встроенные обработчики событий, такие как «Недопустимые параметры» , «Слишком длинные высказывания» , «Нет ввода» , «Нет ввода с первой попытки» , «2-я попытка » или «Нет совпадения» . Разница между отсутствием ввода и отсутствием совпадения заключается в том, что без ввода пользователь никогда не предоставлял ответ, тогда как при отсутствии совпадения пользователь предоставил ответ, но Dialogflow CX не мог намеренно сопоставить его со страницей.
- Прокрутите вниз до раздела «Обработчики событий повторного запроса» .
- Нажмите «Добавить обработчик событий» и выберите событие:
No-match default
- Используйте следующее выполнение статического текста события:
I missed that. Please, specify the artist. You can choose between: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?
- Нажмите «Сохранить».
- Нажмите «Добавить обработчик событий» и выберите событие:
No-input default
- Используйте следующее выполнение статического текста события:
I am sorry, I could understand the artist's name. You can choose between Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?
- Нажмите «Сохранить».
Маршруты условий страницы
Параметры очень эффективны в сочетании с условными маршрутами страниц . Когда условие оценивается как истинное, будет вызван связанный маршрут страницы. Условием может быть: Параметр равен определенному значению , Параметр не может отсутствовать , Форма заполнена и многое другое. Дополнительную информацию о параметрах и условиях можно найти в документации Dialogflow CX.
Для нашего виртуального розничного агента нам нужно будет собрать последовательность параметров, поэтому нам нужно будет создать условие, чтобы проверить, была ли заполнена «форма». Форма — это список параметров, которые необходимо получить от конечного пользователя для страницы. Виртуальный агент взаимодействует с конечным пользователем в течение нескольких сеансов разговора, пока не соберет все необходимые параметры формы, которые также называются параметрами страницы.
Dialogflow CX автоматически устанавливает значения параметров, предоставленные конечным пользователем во время заполнения формы. Чтобы проверить, заполнена ли полная форма текущей страницы, используйте следующее условие: $page.params.status = "FINAL"
Создание условных маршрутов на странице «Обзор исполнителя»
Давайте создадим условный маршрут, который перейдет на следующую страницу, как только исполнитель станет известен:
- На странице «Обзор исполнителя» нажмите значок «+» в разделе « Маршруты» .
- Прокрутите вниз до раздела «Условие» .
- Выберите хотя бы один (ИЛИ)
- Далее напишем выражение, которое
- Параметр:
$page.params.status
- Оператор:
=
- Значение:
"FINAL"
- Теперь мы создадим на маршруте конкретное статическое сообщение о выполнении, подтверждающее выбор конечного пользователя. Прокрутите вниз до блока «Выполнение» и напишите следующие сообщения о выполнении:
-
$session.params.artist, great choice! Rock on!
-
You want to rock with $session.params.artist merchandise. Awesome!
- Если условие истинно, вы должны перейти на страницу обзора продукта . Прокрутите вниз до раздела «Переход» и перейдите на следующую страницу:
Product Overview
- Нажмите « Сохранить ».
Создание маршрутов на странице «Обзор продукта»
Теперь, когда мы знаем, как создавать параметры и условные маршруты, давайте создадим дополнительные параметры для следующих страниц:
Обзор продукта
- Создайте параметр
artist
на странице обзора продукта :
- Отображаемое имя:
artist
- Тип объекта:
@Artist
- Обязательно: Проверить
- Редактировать в журнале: проверить
- Первоначальное задание:
From which of these artists would you like to order merchandise?
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
- Обработчик событий >
No-match default
:To buy merchandise you can choose between the following artists: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?
- Пользовательская полезная нагрузка:
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
- Обработчик событий >
No-input default
:To buy merchandise you can choose between the following artists: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist were you trying to mention?
- Пользовательская полезная нагрузка:
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
- Создайте параметр
merch
:
- Отображаемое имя:
merch
- Тип объекта:
@Merch
- Обязательно: Проверить
- Редактировать в журнале: проверить
- Выполнение:
Which merchandise item do you want?
- Нажмите: Добавить опцию диалога > Пользовательская полезная нагрузка :
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Shirts"
},
{
"text": "Music"
},
{
"text": "Tour movie"
}
]
}
]
]
}
- Обработчик событий >
No-match default
- Выполнение обработчика событий:
We sell Shirts, Music or the Tour movie. Which of these items do you want?
- Пользовательская полезная нагрузка:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Shirts"
},
{
"text": "Music"
},
{
"text": "Tour movie"
}
]
}
]
]
}
- Обработчик событий >
No-input default
- Выполнение обработчика событий:
I couldn't understand which merchandise item you wanted to buy. You can choose between: Shirts, Music or the Tour movie. Which item do you want?
- Пользовательская полезная нагрузка:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Shirts"
},
{
"text": "Music"
},
{
"text": "Tour movie"
}
]
}
]
]
}
- Создайте маршрут, который будет переходить на страницу продукта , когда указан
artist
и предоставленmerch
.
- Состояние:
- Соответствовать каждому правилу (И)
- Выражение:
$session.params.artist != null
- Выражение:
$session.params.merch != null
- Выполнение:
Alright! $session.params.merch of $session.params.artist, let's go!
- Переход: Страница:
Product
- Создайте маршрут, когда пользователь говорит «Рубашки».
- Намерение: redirect.shirts
- Переход: Страница:
Shirts
- Создайте маршрут, когда пользователь говорит «Музыка».
- Намерение: redirect.music
- Переход: Страница:
Music
- Создайте маршрут, когда пользователь запрашивает информацию о ценах.
- Намерение: redirect.price
- Переход: Создать новую страницу:
Price
Когда вы установите вышеуказанную конфигурацию, вы увидите визуализацию, похожую на картинку ниже. Обратите внимание, что маршруты намерений на схеме обозначены синим цветом, а маршруты условий — оранжевым. Хотя это и не показано, обработчики событий обозначены зеленым цветом, а при переходе на страницу нескольких типов маршрутов линия становится серой.
К настоящему моменту вы узнали, как создавать потоки , сущности , намерения и страницы с обработчиками состояний, такими как: маршруты намерений и условные маршруты на основе параметров . Позже в этой лабораторной работе мы будем использовать условное ветвление при выполнении, чтобы предоставлять различные диалоги на основе входных данных.
Вы можете использовать следующие конфигурации для завершения работы нашего виртуального агента.
Страница рубашек:
- Создайте следующие конфигурации на странице «Рубашки» :
- Выполнение заявки:
Do you want a longsleeve or a t-shirt?
- Выполнение записи. Пользовательская полезная нагрузка:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
},
{
"text": "Price?"
}
]
}
]
]
}
- Создайте Intent Route :
redirect.price
с переходом на страницуPrice
. - Создайте следующий параметр:
- Параметр:
merch
— Тип сущности:@Merch
,Required
иRedact in log
- Параметр > Обработчик событий >
No-match default
- Параметр > Выполнение обработчика событий:
You can choose between a t-shirt or a longsleeve. Which of these do you want?
- Параметр > Выполнение обработчика событий. Пользовательские полезные данные:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
}
]
}
]
]
}
- Параметр > Обработчик событий >
No-input default
- Параметр > Обработчик событий. Выполнение:
I couldn't understand if you want the t-shirt or the longsleeve. Which of these do you want?
- Параметр > Выполнение обработчика событий. Пользовательские полезные данные:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
}
]
}
]
]
}
- Нажмите на выполнение записи и прокрутите вниз до «Наборы параметров» . Каждый раз, когда страница «Рубашки» становится активной, параметр категории будет установлен на рубашки :
Параметр | Ценить |
| |
- Добавьте условный маршрут:
- Соответствовать хотя бы одному правилу (ИЛИ)
- Выражение:
$session.params.merch = "T-shirt"
- Выражение:
$session.params.merch = "Longsleeve"
- Переход на новую страницу:
Shirt Size
Страница с ценами:
Поскольку сообщения о ценах будут зависеть от выбранного товара или категории (музыка или рубашки), мы исправим эту часть позже в лаборатории. Просто ввести заполнитель на данный момент более чем достаточно.
- Создайте следующие конфигурации на странице цен :
- Выполнение заявки:
PRICE TODO
Поскольку вы можете запросить цену из разных мест диалога, он всегда должен дать вам ответ и вернуть вас к предыдущей части диалога, чтобы продолжить заказ. В дереве диалогов есть 5 мест, через которые вы можете получить информацию о ценах. (Рубашка, Размер рубашки, Музыка, Оператор, а также прямой маршрут через намерение), поэтому для возврата нам понадобятся несколько условных маршрутов:
- Добавьте условный маршрут:
- Соответствовать каждому правилу (И)
- Выражение:
$session.params.category = "shirts"
- Выражение:
$session.params.merch = "null"
- Переход на новую страницу:
Shirts
- Добавьте условный маршрут:
- Соответствовать каждому правилу (И)
- Выражение:
$session.params.category = "shirts"
- Выражение:
$session.params.size = "null"
- Переход на новую страницу:
Shirt Size
- Добавьте условный маршрут:
- Соответствовать каждому правилу (и)
- Выражение:
$session.params.category = "music"
- Выражение:
$session.params.album = "null"
- Переход на новую страницу:
Music
- Добавьте условный маршрут:
- Соответствовать каждому правилу (и)
- Выражение:
$session.params.category = "music"
- Выражение:
$session.params.merch = "null"
- Переход на новую страницу:
Carrier
- Добавьте условный маршрут:
- Соответствовать каждому правилу (и)
- Выражение:
$session.params.category = "null"
- Переход на новую страницу:
Product Overview
Страница размера рубашки:
- Создайте следующие конфигурации на странице размера рубашки :
- Выполнение входа:
What shirt size do you want?
- Вход выполнение пользовательской полезной нагрузки:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- Создайте маршрут намерения :
redirect.price
с переходом на страницуPrice
. - Создайте следующий параметр:
- Параметр:
shirtsize
- Тип объекта:@ShirtSize
-Required
,Redact In Log
- Параметр> Обработчик событий>
No-match default
- Параметр> Обработчик событий:
Please tell me the shirt size, such as XL.
- Параметр> Обработчик событий выполнение пользовательской полезной нагрузки:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- Параметр> Обработчик событий>
No-input default
- Параметр> Обработчик событий:
I couldn't understand the shirt size. What size do you want?
- Параметр> Обработчик событий выполнение пользовательской полезной нагрузки:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- Добавьте условный маршрут:
- Соответствовать каждому правилу (и)
- Выражение:
$page.params.shirtsize != "null"
- Переход на страницу:
Product
Страница музыки:
- Создайте следующие конфигурации на странице музыки :
- Entry Fulfillment:
We have a Greatest Hits Album or the Live Album. Which one do you want?
- Вход выполнение пользовательской полезной нагрузки:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
},
{
"text": "Price?"
}
]
}
]
]
}
- Создайте маршрут намерения :
redirect.price
с переходом на страницу:Price
. - Создайте следующий параметр:
- Параметр:
album
- Entity Type:@Album
-Required
,Redact In Log
- Параметр> Обработчик событий>
No-match default
- Параметр> Обработчик событий:
You can choose between Greatest Hits and Live Album. Which of these do you want?
- Параметр> Обработчик событий выполнение пользовательской полезной нагрузки:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
}
]
}
]
]
}
- Параметр> Обработчик событий>
No-input default
- Параметр> Обработчик событий:
I couldn't understand if you want the album: Greatest Hit or Live. Which of these do you want?
- Параметр> Обработчик событий выполнение пользовательской полезной нагрузки:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
}
]
}
]
]
}
- Нажмите на выполнение входа и прокрутите вниз до пресетов параметров , каждый раз, когда страница музыки становится активной, параметр категории будет установлен на музыку :
Параметр | Ценить |
| |
- Добавьте условный маршрут:
- Соответствовать каждому правилу (и)
- Выражение:
$page.params.album != "null"
- Переход на страницу:
Carrier
Страница перевозчика:
- Создайте следующие конфигурации на странице носителей :
- Вход Fulfillment:
Do you want this album on CD or MP3?
- Вход выполнение пользовательской полезной нагрузки:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "MP3"
},
{
"text": "Price?"
}
]
}
]
]
}
- Создайте маршрут намерения :
redirect.price
, который переходит на страницуPrice
. - Создайте следующий параметр:
- Параметр:
merch
- Тип объекта:@Merch
-Required
,Redact In Log
- Параметр> Обработчик событий>
No-match default
- Параметр> Обработчик событий:
Do you want a physical CD or the digital album?
- Параметр> Обработчик событий исполнение: Пользовательская полезная нагрузка:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "Digital Album"
}
]
}
]
]
}
- Параметр> Обработчик событий>
No-input default
- Параметр> Обработчик событий
I couldn't understand if you mean CD or MP3. Which one do you want?
- Параметр> Обработчик событий исполнение: Пользовательская полезная нагрузка:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "MP3"
}
]
}
]
]
}
- Добавьте условный маршрут:
- Соответствовать каждому правилу (и)
- Выражение:
$page.params.merch != "null"
- Переход на страницу:
Product
Страница продукта:
- Создайте следующие параметры:
Параметр DisplayName | Параметр Тип объекта | Чеки |
| | Требуется, отредактировать в журнале |
| | Требуется, отредактировать в журнале |
- Параметр художника нуждается в следующем первоначальном выполнении приглашения, которое будет показано, когда художник не известен.
You didn't mention which artist you are interested in. You can ask me to buy the $session.params.merch of the artist you like or ask which artists we signed. How can I help?
{
"richContent": [
[
{
"options": [
{
"text": "Which artists?"
}
],
"type": "chips"
}
]
]
}
- Также добавьте обработчик событий
No-input default
в выполнение:I couldn't understand what you just said. Ask me which artists are signed.
- И обработчик событий
No-match default
с выполнением:I missed that. Please ask me which artists are signed.
- Параметр Merch также нуждается в обработчиках событий для воспроизведения.
- Добавьте обработчик событий
No-input default
:I couldn't understand what you just said. Which merchandise item do you want?
- И обработчик событий
No-match default
с выполнением:I missed that. Which merchandise item do you want?
Следующий маршрут будет переходить на страницу подтверждения, когда художник известен, и пользователь выбирает «туристический фильм».
- Добавьте условный маршрут:
- Соответствовать каждому правилу (и)
- Выражение:
$session.params.artist != null
- Выражение:
$session.params.merch = "Tour Movie"
- ПРЕДУПРЕТЫ ПРЕДУПРЕЖДЕНИЯ Добавить параметр>
price = 25
- Переход на новую страницу:
Confirmation
Следующий маршрут будет переходить на страницу подтверждения, когда художник известен, и пользователь выбирает «футболку», и выбрался размер рубашки.
- Добавьте условный маршрут:
- Пользовательское выражение:
$session.params.artist != null AND $session.params.merch = "T-shirt" AND $session.params.shirtsize != null
- ПРЕДУПРЕТЫ ПРЕДУПРЕЖДЕНИЯ Добавить параметр>
price = 25
- Переход на страницу:
Confirmation
Следующий маршрут будет переходить на страницу подтверждения, когда художник известен, и пользователь выбирает «Longleeve», и размер рубашки выбран.
- Добавьте условный маршрут:
- Пользовательское выражение:
$session.params.artist != null AND $session.params.merch = "Longsleeve" AND $session.params.shirtsize != null
- ПРЕДУПРЕТЫ ПРЕДУПРЕЖДЕНИЯ Добавить параметр>
price = 30
- Переход на страницу:
Confirmation
Следующий маршрут будет перейти на страницу подтверждения, когда художник известен, и пользователь выбирает «CD» также имя альбома выбрано.
- Добавьте условный маршрут:
- Пользовательское выражение:
$session.params.artist != null AND $session.params.merch = "CD" AND $session.params.album != null
- ПРЕДУПРЕТЫ ПРЕДУПРЕЖДЕНИЯ Добавить параметр>
price = 15
- Переход на страницу:
Confirmation
Следующий маршрут будет переходить на страницу подтверждения, когда артист известен, и пользователь выбирает «цифровой альбом», а имя альбома выбрано.
- Добавьте условный маршрут:
- Пользовательское выражение:
$session.params.artist != null AND $session.params.merch = "Digital Album" AND $session.params.album != null
- ПРЕДУПРЕТЫ ПРЕДУПРЕЖДЕНИЯ Добавить параметр>
price = 10
- Переход на страницу:
Confirmation
Далее мы теперь сделаем несколько расширенных условий с подсказками, которые обнаруживают недостающую информацию. Следующий маршрут вернется на страницу музыки, когда артист известен, и пользователь выбирает «CD» или «цифровой альбом», но название альбома не было выбрано.
- Добавьте условный маршрут:
- Пользовательское выражение:
$session.params.artist != null AND ($session.params.merch = "CD" OR $session.params.merch = "Digital Album") AND $session.params.album = null
- Выполнение:
I would also need to know which album you would like to buy!
- Переход на страницу:
Music
И последний маршрут будет переходить на страницу подтверждения, когда художник известен, и пользователь выберет «футболку» или «Longsleeve», но когда размер футболки не был выбран.
- Добавьте условный маршрут:
- Пользовательское выражение:
$session.params.artist != null AND ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve") AND $session.params.shirtsize = null
- Выполнение:
I would also need to know which shirt size you need!
- Переход на страницу:
Shirt Size
В следующей части лаборатории мы будем использовать условные выполнения, чтобы дать различные сообщения выполнения в зависимости от ввода.
7. Условные ответы
Некоторые ответы возвращают другой диалог на основе ввода, диалоги будут отключены, мы называем эти условные ответы . Это может стать интересным, когда вы не используете выполнения веб-крючков, где условные ответы были определены на заднем плане. Пример может выглядеть так:
if [condition]
[response]
elif [condition]
[response]
elif [condition]
[response]
else
[response]
endif
- Примером [условия] может быть:
$session.params.user-age >= 21
. Он использует аналогичное форматирование, как условия в маршрутах. - [Ответ] принимает статический текстовый ответ
- Условные ответы всегда начинаются с
if
-
elif
иelse
блоки являются необязательными
Dialogflow CX также может использовать встроенные системные функции для использования. Например, чтобы форматировать дату или время, или для отображения текущего времени ( $sys.func.NOW()
)
Давайте завершим поток каталога , установив страницы подтверждения и цен .
Страница подтверждения:
Теперь мы создадим страницу подтверждения. У него есть следующие требования:
- Если Merch - это CD или цифровой альбом . Мы покажем следующие поля в подтверждении: артист , торговля , альбом и цена .
- Если товар -футболка или Longsleeve . Мы покажем следующие поля в подтверждении: художник , торговля , размер и цена .
- Иначе (и, таким образом, если Merch - это туристический фильм ). Мы покажем следующие поля в подтверждении: художник , торговля и цена .
- Нажмите на страницу подтверждения .
- Нажмите «Редактировать исполнение»> «Ответы агента»> «Добавить параметр диалога» > «Условный ответ» :
if ($session.params.merch = "CD" OR $session.params.merch = "Digital Album")
The $session.params.merch: $session.params.artist - $session.params.album costs $$session.params.price. Shall I continue to order?
elif ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve")
A $session.params.merch of $session.params.artist size: $session.params.shirtsize costs $$session.params.price. Shall I continue to order?
elif $session.params.merch = "Tour Movie"
The $session.params.merch of $session.params.artist costs $$session.params.price. Shall I continue to order?
else
It looks like something went wrong with your order. You can say "Reset", to restart the order process.
endif
- Create the following Custom payload:
- Custom payload:
{
"richContent": [
[
{
"options": [
{
"text": "Yes, confirm"
}
],
"type": "chips"
}
]
]
}
Next, create two intent routes:
confirm.proceed.order
transitions to:Order Process
Flow.decline.proceed.order
transitions toEnd Flow
When the user declines the order, and does not want to proceed the order process, we will have to transition back to the welcome page, but all the parameters have to be cleared. We can do this by specifically setting null to all the possible parameters. You can do this with Parameter presets.
- In the decline.proceed.order intent route, scroll down to Parameter presets and add the following parameters:
Parameter | Value |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Notice that we have created an additional parameter called restart
. If this parameter is present, the Default Start Flow, should know to continue the conversation by showing a customized message.
- Click on the Default Start Flow, Start Page, and create another Conditional Route:
$session.params.restart = "true"
- Fulfillment:
"Welcome back, as the virtual agent of G-Records, I can help you order artists merchandise, you can ask questions about your order or shipping, and I can tell you more which artists are currently signed with us. How can I help?"
- Custom payload:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Which artists?"
},
{
"text": "Which products?"
},
{
"text": "About my order..."
}
]
}
]
]
}
- Select the Start Page and click on the
redirect.end
intent. Create the following fulfillment:Thank you for contacting G-Records! Have a nice day!
Price Page:
Let's also fix the Price TODOs. The price information will be static for now. Click on the Price Page in the Catalog Flow, and use the following entry fulfillment:
- Delete the Agent Says entry fulfillment.
- Create a new Conditional Response:
if $session.params.category = "shirts"
A t-shirt costs $25 and a longsleeve costs $30.
elif $session.params.category = "music"
A CD costs $15. The digital album on MP3 costs $10.
else
A t-shirt costs $25 and a longsleeve costs $30. A CD costs $15 and a digital album on MP3 $10. In case you are interested in the Tour Movie, that one is $25.
endif
Well done, by now you completed the Catalog flow. Your flow should look similar to this diagram:
8. Wrapping up the agent
We are almost at the end of this lab. Let's configure the last flows together, and take in practice all the new things that we have learned.
Creating the My Order Flow
- Go to the My Order Flow, and create the following intent transitions:
Page (In Flow) | Routes > Intent | Routes > Transition To |
My Order Start |
| My Order |
My Order Start |
| My Order Status |
My Order Start |
| My Order Cancellation |
My Order Start |
| End Session |
My Order Start |
| End Flow |
My Order |
| My Order Status |
My Order |
| My Order Cancellation |
Default Start Flow |
| Flow: My Order |
Default Start Flow |
| Flow: My Order |
- Let's create the following entry fulfillment for the My Order Page:
- Entry fulfillment:
I can look up the status of your order, or I can cancel an order.
- In the My Order Page create the following parameter:
- Displayname:
ordernumber
- Entity Type:
@OrderNumber
- Required: checked
- Initial prompt fulfillment:
What's the order number? For example ABCD123.
- Event Handler:
No-match default
:To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- Event Handler:
No-input default
:I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- Create the following conditional route:
- Customize Expression:
$page.params.status = "FINAL"
- Fulfillment:
And do you want to Cancel your order, or should I look up the status?
- Click on Add state handler > Event Handlers and create the Event Handler:
No-input default
- Fulfillment:
I'm sorry, what was that? Would you like me to cancel an order or look up the status?
- Custom payload:
{
"richContent": [
[
{
"options": [
{
"text": "Status"
},
{
"text": "Cancel"
}
],
"type": "chips"
}
]
]
}
- Create the Event Handler:
No-match default
- Fulfillment:
Would you like me to cancel an order or lookup the status?
- Custom payload:
{
"richContent": [
[
{
"options": [
{
"text": "Status"
},
{
"text": "Cancel"
}
],
"type": "chips"
}
]
]
}
- In the My Order Status Page create the following parameter:
- Displayname:
ordernumber
- Entity Type:
@OrderNumber
- Required checked
- Initial prompt fulfillment:
What's the order number? For example ABCD123.
- Event Handler:
No-match default
:To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- Event Handler:
No-input default
:I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- In the My Order Status Page create the following conditional route:
- Customize Expression:
$session.params.ordernumber != null
- Fulfillment:
Your order $session.params.ordernumber has been shipped, it can take up to approx 2 weeks before you will receive your items.
- Add dialogue option > Text:
Is there anything else I can help you with?
- In the My Order Cancelation Page create the following parameter:
- Displayname:
ordernumber
- Entity Type:
@OrderNumber
- Required checked
- Initial prompt fulfillment:
What's the order number? For example ABCD123.
- Event Handler:
No-match default
:To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- Event Handler:
No-input default
:I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- In the My Order Cancelation Page create the following conditional route:
- Customize Expression:
$session.params.ordernumber != null
- Fulfillment:
Your order $session.params.ordernumber has been canceled.
- Add dialogue option > Text:
Is there anything else I can help you with?
- Test the flow and create the following two test scenarios:
>"About my order"
>"ABCD123"
>"Status"
And:
>"What's the status of order DEFG222"
- Select the Start Page and click on the
redirect.end
intent. Create the following fulfillment:Thank you for contacting G-Records! Have a nice day!
- Select the Start Page and click on the
redirect.home
intent. Create the following parameter preset:restart = true
Default Negative intents (Fallback)
When you create a virtual agent, a default negative intent is created for you. You can add training phrases to this intent that act as negative examples that will trigger a No-match event. There may be cases where end-user input has a slight resemblance to training phrases in normal intents, but you do not want these inputs to match any normal intents.
- Try in the simulator:
I don't like Alice Googler
.
You will see that the virtual agent answers with the Product Overview Page, to continue ordering Alice Googler merchandise. However, your end user does not like that artist. Let's use the Default Negative Intent for this.
- Go to Manage > Intents and select the Default Negative Intent.
- Add the following training phrases that will trigger the No-match event.
I don't like Alice Googler
I am not a fan of G's N' Roses
I can't stand the music of the Google Dolls
- Hit Save and test the following sentence in the simulator:
I am really not a fan of the Goo Fighters
This time the No-match
event was triggered, you stayed on the Start Page.
Default Fallback Messages
- Click the Default Start Flow, select the
sys.no-input-default
event handler.
The No-input fallback basically means: No text or speech answers were detected. Likely no answers were given, or the system couldn't hear it. Therefore, let's make the fallback messages more specific. Use the tab key, to create alternative dialogues:
- Remove all answers, and add these text dialogues:
I'm sorry, I didn't receive an answer. Can you say it again?
I missed your answer, can you say it again?
Sorry, I didn't hear anything. Can you say it again?
I couldn't hear what you were saying, what was that?
I'm sorry, I missed your answer. What were you trying to say?
Don't forget to click Save.
- Click the Default Start Flow, select the
sys.no-match-default
event handler.
The No Match fallback basically means: Text or speech answers were detected but nothing in Dialogflow CX got matched.
- Remove all answers, and add these text dialogues:
Sorry, I didn't get that. Can you please rephrase?
I'm sorry, I don't understand. Can you please rephrase?
I don't understand, please rephrase.
Sorry, I didn't get that. What was that?
I didn't get that, can you please rephrase?
Don't forget to click Save.
- It's advised to repeat these steps for the Catalog, My Order, Order Process and Customer Care flows.
Here's a tip: when creating fallback messages, make them more explicit, by rephrasing the previous question or by mentioning an example. You could create these type of No-match and No-input events on Page level when creating parameters. In our labs, we have already done this.
Creating the Order Process Flow
- Go to the Order Process Flow, and create the following intent transitions:
Page (In Flow) | Routes > Intent | Routes > Transition To |
Order Process Start |
| End Session |
Order Process Start |
| End Flow |
Order Process Start |
| New Page: Shipping Details |
- Let's create the following entry fulfillment for the Shipping Details Page:
- Entry fulfillment:
To complete your order I will first need to collect your shipping details.
- Create the following parameters:
These parameters will make use of built-in system entities. System entity support differs for each language. See the docs for more information.
Parameter Display name | Entity | Required? | Initial prompt fulfillment | No-match default | No-input default |
| @sys.person | Required |
|
|
|
| @sys.person | Required |
|
|
|
| @sys.address | Required |
|
|
|
| @sys.any | Required |
|
|
|
| @sys.geo-city | Required |
|
|
|
| @sys.geo-country | Required |
|
|
|
| @sys.email | Required |
|
|
|
- Create the following conditional route:
- Customize Expression:
$page.params.status = "FINAL"
- Transition to new Page:
Payment Details
- Create the following entry fulfillment.
Let's fake it that this virtual agent makes use of Google Pay. Don't worry this tutorial won't make real transactions. Create the following entry dialogues:
- Agent Says:
Alright $session.params.firstname! We will make use of Google Pay, that's connected to your email account: $session.params.email.
- Conditional Response
if $session.params.merch != "Digital Album"
Shipping costs an additional 5 dollars. This will make the total price $$sys.func.TO_TEXT($sys.func.ADD($session.params.price, 5)).
Your merchandise will be shipped to:
$session.params.firstname $session.params.lastname
$session.params.address
$session.params.zipcode $session.params.city
$session.params.country
To continue the order process please explicitly say "I confirm". Do you want to confirm your $session.params.artist $session.params.merch order?
else
The total costs will be: $$session.params.price.
After purchasing the digital album, you will receive an email with the download link.
To continue the order process please explicitly say "I confirm".
Do you want to confirm your $session.params.artist $session.params.merch order?
endif
- Создать следующий маршрут намерения
- Намерение:
confirm.proceed.order
- Агент говорит:
Thank you for your order! Your merchandise will be shipped today!
- Добавить параметр диалога> Текст:
Here's the order number: ABCD123
. - Добавить параметр диалога> Текст:
Have a good day!
- Переход:
End Session
- Выберите страницу начала и нажмите на намерение
redirect.end
. Создайте следующее выполнение:Thank you for contacting G-Records! Have a nice day!
- Выберите страницу начала и нажмите на
redirect.home
намерение. Создайте следующий параметр Preset:restart = true
Потрясающий! К настоящему времени у нас есть полностью работающий ритейлер Realworld Chatbot! В следующей лаборатории мы проверим, насколько хорошо работает виртуальный агент!
9. Проверьте свой виртуальный агент
Вы можете использовать встроенный симулятор для проверки диалогов вашего виртуального агента. Преимущество тестирования потоков в симуляторе состоит в том, что вы увидите хороший обзор потоков, страниц, параметров и событий (DTMF), которые симулятор собирал во время прохождения ваших потоков. Это делает тестирование проще, чем тестирование непосредственно в интеграции, поскольку эти типы информации будут скрыты от конечного пользователя. Даже можно создать тестовые примеры, сохранить и повторно использовать эти тестовые примеры. Это имеет большой смысл, поскольку, когда вы поддерживаете или редактируете свои потоки с течением времени, и вы хотите быть уверенным, что ни одно из ваших изменений не прервело вашу предыдущую работу.
Также возможно экспортировать и импортировать ранее проведенные тестовые примеры, сохраняя тесты в Google Cloud Storage или Local. Экспорт теста загрузит файл Blob. Чтобы узнать больше о симуляторе и тестовых случаях, ознакомьтесь с документами симулятора / тестовых примеров .
Перед созданием некоторых тестовых случаев давайте сначала завершим остальную часть нашего виртуального агента:
Создание потока обслуживания клиентов
- Перейдите к потоку обслуживания клиентов и создайте следующие переходы намерения:
Страница (в потоке) | Маршруты> намерение | Маршруты> Переход на |
Начало обслуживания клиентов | | Перевозки |
Начало обслуживания клиентов | | Возвращать деньги |
Начало обслуживания клиентов | | Обмен |
Начало обслуживания клиентов | | Конечный поток |
Начало обслуживания клиентов | | Завершить сеанс |
- Создайте следующую запись для страницы доставки :
-
Shipping physical merchandise items can take up to 2 weeks.
-
Is there anything else I can help you with?
- Создайте следующую заявку на страницу возврата :
-
We offer free returns and refunds. We provide one free return label for each order. You can use it within 30 days from receiving your order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.
-
Is there anything else I can help you with?
- Создайте следующую запись для страницы обмена :
-
If you would like to change your item for a different one, please return your unwanted item and place a new order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.
-
Is there anything else I can help you with?
- Выберите страницу начала и нажмите на намерение
redirect.end
. Создайте следующее выполнение:Thank you for contacting G-Records! Have a nice day!
- Выберите страницу начала и нажмите на
redirect.home
намерение. Создайте следующий параметр Preset:restart = true
Создание тестовых случаев
- Нажмите кнопку тестового агента в правой части экрана.
Когда вы впервые открываете симулятор, вам необходимо выбрать среду агента и активный поток. В большинстве случаев вы должны использовать проектную среду и по умолчанию.
- Тип:
Hi
- Спросите:
Which artists are signed with your label?
- Скажи:
The Google Dolls
- Скажи:
I am interested in buying a shirt
- Скажи:
A t-shirt
- Скажи:
Medium
- Теперь нажмите кнопку «Сохранить тестовый пример». Который вы можете найти в верхней части симулятора (рядом со стрелкой Refo, и сбросить иконку сброса Trash Bin)
- Дайте ему следующие детали:
- Имя тестирования корпуса:
Buy Google Dolls t-shirt size M
- Теги: #Catalog, #Shirts, #Футболка, #Thegoogledolls
- Нажмите «Сохранить».
Давайте создадим больше тестовых случаев.
- Сначала очистите текущий диалог, нажав на значок Reset (Thrash Bin).
- Создайте следующие тестовые примеры:
Купите футболку Alice Googler:
>"Buy the Alice Googler t-shirt."
>"XL"
- Имя тестирования:
Buy the Alice Googler t-shirt
- Теги:
#catalog, #shirts, #t-shirt, #AliceGoogler
Купите размер футболки M: (обратите внимание, название художника не было упомянуто, но вы хотите пропустить обзор групп, обзор продуктов, рубашки и страницы размера рубашки)
>"Buy a t-shirt size M"
>"The Google Fighters"
- Имя тестового чехла:
Buy a t-shirt size M
- Теги:
#catalog, #shirts, #t-shirt, #TheGoogleFighters
- Описание: (ПРИМЕЧАНИЕ Имя художника не было упомянуто, но вы хотите пропустить обзор групп, обзор продуктов, рубашки и страницы размера рубашки)
Купить музыку n 'n' roses (обратите внимание, что это пропустит обзор групп и страницу обзора продуктов)
>"Purchase music of G's N' Roses"
>"Live"
>"CD"
- Тестовое название примера:
Purchase music of G's N' Roses
- Теги:
#catalog, #music, #CD, #GsNRoses, #live
- Описание: (Обратите внимание, что это пропустит обзор групп и страницу обзора продуктов)
Проверьте информацию о цене:
>"Which products"
>"Shirts"
>"What's the price difference?"
>"Longsleeve"
>"What does it cost?"
>"M"
>"The Google Dolls"
>"No"
>"Which bands"
>"The Gooo Fighters"
>"Music"
>"How much does it cost?"
>"Greatest Hits"
>"What's the price difference?"
>"Mp3"
>"No"
>"I want to buy the tour movie"
>"Alice Googler"
>"Yes"
- Тестовое имя корпуса:
Price info
- Теги:
#catalog, #music, #tourmovie, #shirts
- Описание: Информация о цене тестирования в различных пунктах в диалоге
Проверка предварительно записанные тестовые примеры
- Выберите «Управление» > «Тестовые случаи» в главном меню диалога слева.
- Выберите все тестовые примеры и нажмите кнопку «Запустить » над таблицей.
Dialogflow CX запустит все выбранные тестовые примеры против записи, которая была сохранена как «золотой тест», если результаты такие же, как вы ее сохранили, то тесты проходят. - Что -то изменилось в потоках, таких как страницы, которые не настроены правильно, или намерения, которые направили вас на неправильные страницы, тогда тесты потерпят неудачу.
- В симуляторе задайте следующий вопрос:
How long will shipping take?
- Обратите внимание на результат и сохраните тестовый пример в качестве
Shipping
с тегом:#shipping
. - Перейдите на панель «Управление»> «Тестовые случаи» и нажмите кнопку «Запустить» в правом верхнем углу сетки, чтобы запустить только тестовый пример
Shipping
.
Этот тест должен пройти.
- Вернитесь к потоку обслуживания клиентов, выберите « Пуск » и нажмите заголовок маршрутов .
Это покажет экран с сеткой, которая показывает все маршруты.
- Удалить
redirect.shipping.info route
- Перейдите на панель «Управление»> «Тестовые случаи» и нажмите кнопку «Запустить» в правом верхнем углу сетки, чтобы запустить только тестовый пример
Shipping
.
Этот тест должен потерпеть неудачу.
- Вы можете нажать на неудачный тест, чтобы увидеть детали сбоя.
В этом случае тест не удался с приведенным сообщением об ошибке:
Page: Page mismatch:
Expected: Shipping
Actual: Start Page
Причина этого в том, что страница больше не существует в потоке. Мы ожидали страницы Shipping
, но вместо этого мы никогда не уезжали с Start
страницы. (или ваши конечные пользователи получат резервное сообщение.)
Другими словами, это пропущенный запрос, ложно -отрицательный результат теста. Тест не удался. Мы ожидали страницы доставки , но ничего не произойдет, или было показано запасное сообщение.
- Вернитесь к потоку обслуживания клиентов и добавьте
redirect.shipping.info
в качестве маршрута намерения, на стартовую страницу. Не забудьте перейти на страницу доставки и нажмите «Сохранить» . - В симуляторе запишите следующий тестовый пример:
I want to swap my item
, сохраните этот тестовый пример какSwapping
#swapping
. - Open Manage> intents> redirect.refund.info и добавьте следующую учебную фразу:
I want to swap this item for a refund
Без этой учебной фразы, когда пользователь попросит изменить элемент для возврата, он достиг бы redirect.swapping.info намерения, но мы не хотим давать информацию об изменении элементов, мы хотим дать информацию о возмещении.
- Создайте следующий тестовый пример Golden:
I want to swap this item for a refund
в симуляторе и сохранить этот тестовый пример в качествеSwap for Refund
#refund
- Вернитесь к Manage> intents> redirect.refund.info намерения и удалите, как
I want to swap this item for a refund
. - Вернитесь к управлению> тестовыми случаями , выберите обмен на тест на возврат и запустите его.
Ваш последний тест не удался с приведенным ниже сообщением об ошибке:
If you would like to change your item for a different one, please return your unwanted item and place a new order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.`
Is there anything else I can help you with?
Page: Page mismatch:
Expected: Refund
Actual: Swapping
Другими словами, это пропущенный понятный запрос, ложно -положительный результат теста. Тест не удался. Мы ожидали страницы возврата , но страница обмена стала активной.
Покрытие
В Dialogflow CX охват тестирования является мерой, используемой для описания степени, в которой диалог виртуального агента (страницы и намерения) выполняется при запуске конкретного набора тестов. Виртуальный агент с высоким тестовым покрытием, измеренный в процентах, имел больше своих диалогов, выполненных во время тестирования, что предполагает, что у него более низкая вероятность содержать незамеченные ошибки (например, пропущенные запросы) по сравнению с виртуальным агентом с низким тестовым покрытием.
- Чтобы просмотреть отчет о покрытии тестирования для всех тестовых случаев, нажмите «Покрытие» .
- Нажмите на переходы вкладок.
Это покажет вам тестовое покрытие для всех переходов страниц.
- Нажмите на вкладку .
Это покажет вам тестовое покрытие для всех намерений.
Поздравляем, к настоящему времени вы построили и протестировали полный пример реального мира бота -ритейлера! Давайте перейдем на следующую лабораторную страницу, чтобы прочитать вывод и найти несколько удобных ссылок!
10. Заключение
Dialogflow CX - это разговорная платформа ИИ (CAIP) для создания виртуальных агентов, таких как чат или голосовые боты. Dialogflow CX дает вашей команде ускорить создание разговоров на уровне предприятия с помощью визуальных строителей ботов, многократных намерений и способности учитывать многократные разговоры.
В этом коделабе вы узнали, как построить реального розничного виртуального агента розничной торговли. Мы обратились к следующим концепциям:
- Потоки
- Параметры, индивидуальные и системные объекты
- Страницы
- Государственные обработчики, такие как маршруты намерения и маршруты состояния
- Статические сообщения о выполнении и условные ответы
- Запасные намерения
- Симулятор, тестовые примеры и покрытие
Ссылки
Чтобы узнать больше о Dialogflow CX, посмотрите на следующие блоги и документацию!