Dialogflow CX: создание виртуального агента розничной торговли

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 для вашего проекта.

  1. Выберите проект, для которого вы хотите включить API, и нажмите «Продолжить» .
  2. Сверните меню API и сервисов и нажмите «Создать учетные данные».
  3. Нажмите «Данные приложения».
  4. Скажите «Нет», я их не использую, поскольку вы пока не используете Kubernetes Engine, App Engine или Cloud Functions.
  5. Нажмите Готово

Настройка учетных данных

Создайте новый агент Dialogflow CX.

Чтобы создать новый агент Dialogflow CX, сначала откройте консоль Dialogflow CX:

  1. Выберите ранее созданный проект Google Cloud.
  2. Нажмите Создать агента .

Заполните форму для основных настроек агента:

  • Вы можете выбрать любое отображаемое имя.
  • В качестве местоположения выберите: us-central1
  • Выберите предпочитаемый часовой пояс.
  • Выберите англо-английский в качестве языка по умолчанию.

Нажмите Создать .

Создать агента

Хорошо, у нас все готово. Наконец-то мы можем приступить к моделированию нашего виртуального агента.

3. Потоки

Сложные диалоги часто включают в себя несколько тем разговора. В случае с чат-ботом, который мы создаем для G-Records, для продажи товаров группы, у нас будут диалоги о каталоге продукции, оплате, статусе заказа и вопросах обслуживания клиентов. Мы могли бы разделить эти темы разговоров на потоки.

Розничный поток

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

Потоки — это новая концепция Dialogflow CX. В Dialogflow Essentials есть концепция Mega Agents, которая чем-то похожа на Flows. Однако вы будете использовать Flows гораздо чаще.

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

Давайте пойдем и создадим несколько потоков.

Создание потоков

  1. В Dialogflow CX щелкните значок + > Создать поток .
  2. Укажите имя: Catalog и нажмите Enter.

Создайте поток

Ваш первый каталог потоков создан. Теперь создайте другие потоки:

  • Order Process
  • My Order
  • Customer Care

Потоки

Позже в этой лабораторной работе мы установим обработчики состояния страницы, это гарантирует, что в конечном итоге визуализация будет выглядеть следующим образом:

Потоки

Симулятор

В правой части консоли Dialogflow CX вы можете протестировать виртуальный агент с помощью встроенного симулятора. Вы можете протестировать разговор с начала разговора или с определенного потока.

  1. Нажмите кнопку «Агент тестирования» в правом верхнем углу экрана.
  2. В поле разговора с агентом напишите: Hello Виртуальный агент ответит текстом приветствия по умолчанию: Привет! Как я могу помочь?

Симулятор

Давайте изменим этот текст приветствия по умолчанию.

Стартовый процесс по умолчанию

Давайте начнем с создания Intent Route , который будет запускаться, как только вы поприветствуете виртуального агента.

  1. На левой боковой панели «Сборка» > «Потоки » нажмите «Запуск по умолчанию» и выберите узел «Начальное дерево».

Откроется стартовая страница. Он автоматически выбрал стартовую страницу в разделе «Создать» > «Страницы» на боковой панели.

  1. В меню «Пуск» > «Маршруты» нажмите «Добро пожаловать по умолчанию» .

Намерение классифицирует намерение конечного пользователя для одного хода разговора. В Dialogflow CX намерения могут быть частью обработчика состояния для маршрутизации следующей активной страницы или выполнения.

  1. Удалите все записи «Говорит агент» и добавьте этот новый текст:

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?

Чтобы упростить общение, нам также понадобятся кнопки быстрого ответа/чипы предложений.

  1. Нажмите «Добавить диалог» > «Пользовательские полезные данные» и используйте приведенный ниже фрагмент кода.
  2. Используйте приведенный ниже фрагмент кода в качестве пользовательской полезной нагрузки и нажмите «Сохранить» .

Чтобы узнать больше о пользовательских полезных нагрузках, загляните в документацию .

{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Which artists?"
            },
            {
              "text": "Which products?"
            },
            {
              "text": "About my order..."
            }
          ]
        }
      ]
    ]
  }

Приветственное намерение по умолчанию

  1. Продолжайте и проверьте намерение приветствия в симуляторе.

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

  1. На левой боковой панели нажмите «Управление» > «Интеграции» .
  2. Выберите Dialogflow Messenger и нажмите «Подключиться» .
  3. Во всплывающем окне нажмите « Включить» .

Интеграция включена

Появится еще одно всплывающее окно, на этот раз с интеграционным кодом JavaScript, который вы можете вставить на свой веб-сайт, чтобы интегрировать компонент Dialogflow Messenger на свой веб-сайт. Поскольку веб-сайта у нас пока нет, протестируем виртуальный агент прямо в инструменте.

Dialogflow Messenger Попробовать сейчас

  1. Нажмите ссылку «Попробовать сейчас» .
  2. Нажмите на значок чат-бота в правом нижнем углу, чтобы открыть окно чата. Напишите Hello чтобы начать разговор.

Dialogflow Messenger Попробовать сейчас

На данный момент, когда вы нажимаете на фишки с предложениями, виртуальный агент не поймет, что вы имеете в виду. Это потому, что наш виртуальный агент еще не переключается между состояниями. Мы можем сделать это в Dialogflow CX с помощью Pages . Давайте продолжим лабораторную работу, сначала создадим несколько Entities и Intents .

4. Типы сущностей

Типы сущностей используются для управления извлечением данных из ввода конечного пользователя. Типы сущностей Dialogflow CX очень похожи на типы сущностей Dialogflow ES. Dialogflow предоставляет предопределенные системные объекты, которые могут соответствовать многим распространенным типам данных. Например, существуют системные сущности для сопоставления дат, времени, цветов, адресов электронной почты и т. д. Вы также можете создавать свои собственные объекты для сопоставления пользовательских данных.

Давайте начнем с подготовки всех пользовательских объектов, прежде чем мы сможем разработать страницы в потоке. Мы создадим следующие сущности:

Объекты диалогового потока

Создание сущностей

Давайте создадим сущность Artist .

  1. Нажмите «Управление» > «Типы объектов».
  2. Нажмите + Создать
  • Отображаемое имя: Artist
  • Сущности:
  • The Google Dolls (синоним: Google Dolls )
  • The Goo Fighters (синоним: Goo Fighters )
  • G's N' Roses (с синонимом: Gs and Roses )
  • Alice Googler
  • Нажмите «Дополнительные параметры» и установите флажок «Нечеткое сопоставление» . (Если вы напишете название группы неправильно, оно все равно может соответствовать нужному объекту.)
  • В дополнительных параметрах также проверьте «Редактировать в журнале» . (Если вы напишете название группы неправильно, оно будет исправлено в журнале.)
  1. Нажмите «Сохранить».

Нам также понадобится сущность для товара :

  1. Нажмите «Управление» > «Типы объектов».
  2. Нажмите + Создать
  • Отображаемое имя: Merch
  • Сущности:
  • T-shirt
  • Longsleeve (синоним: Longsleeve shirt )
  • Tour Movie
  • Digital Album (с синонимом: MP3 Album , MP3 )
  • CD (с синонимами Disc , Physical CD )
  1. Нажмите «Сохранить».

Нам также понадобится сущность для альбома :

  1. Нажмите «Управление» > «Типы объектов».
  2. Нажмите + Создать
  • Отображаемое имя: Album
  • Сущности:
  • Live
  • Greatest Hits (с синонимом: Hits )
  1. Нажмите «Сохранить».

Нам также понадобится сущность для размеров одежды:

  1. Нажмите «Управление» > «Типы объектов».
  2. Нажмите + Создать
  • Отображаемое имя: ShirtSize
  • Сущности:
  • XS (с синонимом: Extra Small )
  • S (с синонимом: Small )
  • M (с синонимом: Medium )
  • L (с синонимом: Large )
  • XL (с синонимом: Extra Large )
  • 2XL (синоним: Extra Extra Large )
  • 3XL
  1. Нажмите «Сохранить».

И сущность для номеров заказов , которые обычно состоят из 4 букв и цифр и 3 цифр. (например, ABCD123)

  1. Нажмите «Управление» > «Типы объектов».
  2. Нажмите + Создать
  • Отображаемое имя: OrderNumber
  • Объекты регулярного выражения
  • Объект: [AZ]{4}[0-9]{3}
  1. Нажмите «Сохранить».

Конфигурация вашей сущности должна выглядеть примерно так:

@Художник: Тип сущности @Artist

@Мерч: Тип объекта @Merch

@Альбом: Тип объекта @Album

@ShirtSize: Тип сущности @ShirtSize

@Номер заказа: Тип сущности @OrderNumber

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

5. Намерения

Намерение классифицирует намерение конечного пользователя для одного хода разговора. В Dialogflow CX они были значительно упрощены. Он больше не является строительным блоком диалогового управления. Dialogflow CX использует намерения только в соответствии с тем, что говорят пользователи. В Dialogflow ES приходилось все привязывать к намерению (параметры, события, выполнение и т. д.). Намерения в Dialogflow CX содержат только обучающие фразы и поэтому могут использоваться повторно. Он больше не контролирует разговор. Таким образом, процесс создания намерений будет простым:

Обучающие фразы в намерениях могут использовать сущности для извлечения «переменных» входных данных, поэтому рекомендуется заранее создавать типы сущностей, что мы и делали на предыдущей странице лабораторных шагов.

Создание намерений

Давайте начнем с подготовки всех намерений, прежде чем мы сможем разработать страницы в потоке.

  1. Нажмите «Управление» > «Намерения» .
  2. Нажмите + Создать.

Используйте следующие детали:

  • Отображаемое имя 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

Тренировочные фразы

  1. Нажмите Сохранить .
  1. Теперь продолжим и создадим все остальные намерения. Используйте свое воображение, чтобы придумать больше обучающих фраз. Лучшей практикой было бы иметь как минимум 10 обучающих фраз для каждого намерения, чтобы охватить различные способы, которыми пользователь может вызвать это намерение. Для целей этой лабораторной работы меньшее количество тоже вполне подойдет.

Несколько вещей, на которые стоит обратить внимание:

  • Обратите внимание: когда вы вводите обучающую фразу, Dialogflow CX автоматически аннотирует ваши объекты. Если этого не происходит, возможно, вам придется обновить свою сущность (добавив синоним) или вручную аннотировав обучающую фразу.
  • Более короткие обучающие фразы. Система NLU Dialogflow также может работать с более короткими обучающими фразами, и мы привели здесь несколько примеров.
  • Перетренированность: слишком много тренировочных фраз для намерения может привести к перетренированности и менее желаемому результату. Лучше всего использовать итеративное и инкрементальное тестирование и добавлять обучающие фразы в случае, если намерение не совпадает.

Отображаемое имя

Тренировочные фразы

redirect.product.overview

"Which products do you sell?", "What merchandise items do you have?", "What are you selling?", "What are the items?", "Which products?" "What merchandise?", "Please tell me what you have"

confirm.artists.overview

"Yeah, let me buy merchandise", "Yes, I want to purchase something", "Yes, I would like to order merchandise from Alice Googler" (Примечание: Алиса Гуглер должна быть признана субъектом @Artist!) , "Ok, let's buy stuff."

redirect.price

"How much does a t-shirt cost?", "What's the price for the tour movie?", "The album is how much?", "I want to know the price of a longsleeve shirt", "What's the price difference?", "What does each product costs?", "What does it cost?", "What is the price?"

redirect.product

"Tour movie", "I am interested in a t-shirt", "Can I buy a digital album?", "I want the CD", "I want to buy something", "Can I purchase a record?", "I want to buy a t-shirt size M of The Google Dolls", "Can I purchase the Alice Googler digital album?"

redirect.product.of.artist

"Yeah, let's shop", "Give me merch of Alice Googler", "Shirts of The Google Dolls that would be nice.", "Yes", "I want The Goo Fighters stuff", "Yes, I want to order merchandise", "Yep, give me items of G's N' Roses", "Go for it", "Anything Alice Googler", "I am a G's N' Roses fan!", "Google Dolls", "Yes of The Google Dolls"

redirect.shirts

"Shirts", "I want to buy shirts", "I am interested in shirts", "I want a shirt", "Shirts of G's N' Roses please", "Give me shirts of the Google Dolls", "I want to buy shirts of Alice Googler"

redirect.music

"Music", "I want to buy music", "I am interested in music", "Give me music of the Goo Fighters", "Music of Goo Fighters please", "Interested in buying the Alice Googler album", "Purchase Alice Googler music"

redirect.album

"Hits", "Live Album", "I want the Greatest Hits Digital Album", "Give me the Greatest Hits CD", "Hits on MP3"

redirect.shirt.size

"XS", "I have M", "I want Large", "My size is 3XL", "Extra Large is the size"

redirect.my.order

"About my order", "I have a question about my order", "My order is ABCD123, I have a question about my order."

status

redirect.my.order.status

redirect.my.order.canceled

"I want to cancel my order", "I want to cancel order ABCD123", "Please cancel order ABCD123", "Undo my order", "Stop my order", "Cancel"

redirect.shipping.info

"How long will it take?", "How long is shipping?", "How long does shipping take?", "When will I receive it?"

redirect.refund.info

"I want a refund.", "Can I get a refund", "I want to return the CD", "I want to return my t-shirt"

redirect.swapping.info

"I want to swap my item", "Can I change my t-shirt for a larger size?", "Can I change my product?", "I want to swap the CD"

redirect.order.process

"I want to buy a t-shirt of the Google Dolls, size S", "Let me buy the digital CD of Alice Googler", "Get me the tour movie of G's N' Roses", "Buy a longsleeve shirt of The Goo Fighters", "Purchase the Alice Googler t-shirt", "Please order me the Google Dolls CD"

confirm.proceed.order

"Yes", "Yes, please continue", "Yes order", "I want to order", "Yeah", "Yep", "I confirm", "Agree", "Go ahead", "Order", "Buy it", "Purchase", "Okay"

decline.proceed.order

"No", "I rather not", "I don't want it anymore", "Don't order", "Stop", "Not anymore", "Nope", "Go back", "Reset", "Decline", "I don't need it"

redirect.home

"Go back", "Home", "Help", "What else can I ask", "Restart", "Can you tell me what I can order?", "What questions can I ask", "I need help", "Advice please", "Hi", "Hello", "Good day!"

redirect.end

"No that's it, goodbye", "Bye", "Cheers", "End", "That's it", "No more questions", "Exit", "Have a good day", "End Call", "Close"

Теперь, когда наши повторно используемые элементы (потоки, сущности и намерения) подготовлены, мы можем объединить их, создав страницы и обработчики состояний.

6. Страницы и обработчики состояний

Разговор Dialogflow CX (сеанс) можно описать и визуализировать как конечный автомат . Возьмем, к примеру, торговый автомат, его можно смоделировать как конечный автомат. Он имеет следующие состояния: «Ожидание монет», «Выбрать конфету», «Дать конфету» и, учитывая набор входных данных, он перемещается между этими состояниями. Например, вставка монеты переводит торговый автомат из режима «Ожидание монет» в режим «Выбор конфет». Страницы — это то, как мы можем моделировать эти состояния для виртуального агента Dialogflow CX.

Когда конечный пользователь взаимодействует с Dialogflow CX в беседе, беседа перемещается со страницы на страницу, поэтому в любой момент ровно одна страница является текущей, текущая страница считается активной, а также поток, связанный с этой страницей, считается активный.

Для каждого Flow вы определяете множество страниц, на которых ваши объединенные страницы могут обрабатывать полный разговор по темам, для которых предназначен этот поток. Каждый поток имеет специальную стартовую страницу. Когда поток изначально становится активным, стартовая страница становится текущей. При каждом повороте диалога текущая страница либо остается прежней, либо переходит на другую страницу. Эта концепция позволит вам создавать более крупных агентов со многими страницами и несколькими поворотами разговора.

Страницы содержат выполнения (статические диалоги ввода и/или веб-перехватчики), параметры и обработчики состояний . Управление разговором происходит через обработчики состояний, что позволяет создавать различные маршруты перехода для перехода на другую страницу Dialogflow CX, в том числе делать его условным (для ветвления разговоров).

Состояние разговора контролируется путем обработки переходов между страницами с тремя различными типами маршрутов:

  • Маршруты намерений : когда намерение должно соответствовать (например, изменение страницы в зависимости от того, что говорит конечный пользователь). (Синие линии на визуальной схеме.)
  • Маршруты условий : когда необходимо проверить условие (например, изменение страницы на основе определенных параметров, хранящихся в сеансе) (оранжевые линии на визуальной диаграмме).
  • Обработчики событий : когда должно быть обработано определенное резервное событие (например, обработка отсутствия ввода или совпадения, чтобы устранить неоднозначность конечного пользователя в отношении маршрута намерения или условия) (зеленые линии на визуальной диаграмме).

Высказывания разговора (т. е. контент или ответ пользователю) определяются выполнением, которое может быть статическим или динамическим:

  • Статическое выполнение : когда предоставляется статический ответ на выполнение.
  • Динамическое выполнение : когда веб-перехватчик выполнения вызывается для динамических ответов.

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

Маршруты намерений страницы

Создание страниц в начальном процессе по умолчанию

Вот блок-схема запуска по умолчанию:

Связанные страницы каталога

Давайте щелкнем это вместе:

  1. Нажмите «Создать» > «Запуск по умолчанию».
  2. Нажмите Стартовую страницу
  3. Нажмите значок + рядом с пунктом «Маршруты».
  4. Добавить redirect.artists.overview
  5. Прокрутите вниз до перехода и перейдите к потоку каталога .
  6. Нажмите « Сохранить».
  7. Повторите вышеуказанные шаги для redirect.product.overview и остальных 11 строк из этой таблицы:

Страница (в потоке)

Маршруты > Цель

Маршруты > Переход к

Начинать

Default Welcome Intent

-

Начинать

redirect.artists.overview

Поток: Каталог

Начинать

redirect.product.overview

Поток: Каталог

Начинать

redirect.shirts

Поток: Каталог

Начинать

redirect.music

Поток: Каталог

Начинать

redirect.product

Поток: Каталог

Начинать

redirect.product.of.artist

Поток: Каталог

Начинать

redirect.refund.info

Поток: Служба поддержки клиентов

Начинать

redirect.shipping.info

Поток: Служба поддержки клиентов

Начинать

redirect.swapping.info

Поток: Служба поддержки клиентов

Начинать

redirect.my.order

Поток: Мой заказ

Начинать

redirect.my.order.canceled

Поток: Мой заказ

Начинать

redirect.my.order.status

Поток: Мой заказ

Начинать

redirect.end

Страница: Завершить сеанс

Маршруты стартовой страницы по умолчанию

Процесс запуска по умолчанию будет работать так же, как меню параметров при звонке в колл-центр. Однако в этом виртуальном агенте он обучается на естественном языке с обучающими фразами в намерениях. Таким образом, взаимодействие осуществляется посредством разговора, а не опций 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?"

Давайте сначала начнем с соединения страниц.

  1. Нажмите «Создать» > «Каталог».
  2. Нажмите Стартовую страницу
  3. Нажмите значок + рядом с пунктом «Маршруты».
  4. Добавить redirect.artists.overview
  5. Прокрутите вниз до пункта «Переход» , выберите «Страница» и выберите: + новая страница.
  6. Используйте название страницы: Artist Overview и нажмите «Сохранить».

Теперь давайте завершим остальную часть потока:

  1. Предыдущие шаги можно повторить со следующими страницами, намерениями и достижениями. Возьмите на себя этот стол. Страница — это страница, которую вы выберете в потоке, Маршруты > Переход к — это новый поток или страница, которую вы создадите и на которую перейдете.

Страница (в потоке)

Маршруты > Цель

Маршруты > Переход к

Начало каталога

redirect.artists.overview

Обзор исполнителя

Начало каталога

redirect.product

Продукт

Начало каталога

redirect.product.overview

Обзор продукта

Начало каталога

redirect.product.of.artist

Обзор продукта

Начало каталога

redirect.shirts

Рубашки

Начало каталога

redirect.music

Музыка

Начало каталога

redirect.end

Завершить сеанс

Начало каталога

redirect.home

Конечный поток

Обзор исполнителя

redirect.product.of.artist

Обзор продукта

Теперь продолжим и добавим больше статических выполнений.

  1. В потоке каталога щелкните страницу «Обзор исполнителя» .
  2. Нажмите «Изменить выполнение» в разделе «Выполнение записи» .
  3. Используйте следующие статические выполнения ( говорит агент ):
  • The following bands are signed with G-Records: Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
  1. Нажмите «Сохранить».
  2. В потоке каталога щелкните страницу «Обзор продукта» .
  3. Нажмите «Изменить выполнение» в разделе «Выполнение записи» .
  4. Используйте следующее статическое выполнение ( говорит агент ):
  • We sell shirts, music or the tour movie.
  1. Нажмите « Сохранить ».

Параметры страницы

Параметры используются для сбора и ссылки на значения, предоставленные конечным пользователем во время сеанса. Каждый параметр имеет имя и тип сущности. @Artist и @Merch — минимальные параметры, которые нам необходимо собрать, чтобы сделать заказ товара. Для футболок или лонгсливов вам также нужно собрать @ShirtSize , а если вы хотите заказать музыку, вам также понадобятся @Carrier и @Album name.

Эти параметры необходимо будет пометить как обязательные . И как только это потребуется, вы захотите предоставить специальные подсказки, чтобы запомнить вашего конечного пользователя, чтобы предоставить правильные ответы, чтобы можно было собрать эти параметры. В Dialogflow CX есть несколько механизмов, которые могут вам в этом помочь.

Например, вы можете предоставить собственные статические сообщения о выполнении в разделе «Параметры» . Если параметр является обязательным, то будут показаны выполнения этих параметров. Эти ответные сообщения будут добавлены в очередь ответов . Во время хода агента можно (а иногда и желательно) вызвать несколько исполнений, каждое из которых может генерировать ответное сообщение. Dialogflow сохраняет эти ответы в очереди ответов . Чтобы узнать больше о жизненном цикле страницы и порядке, в котором эти выполнения будут добавлены в очередь ответов, прочтите документацию страницы Dialogflow CX .

Создание параметров на странице «Обзор исполнителя»

Давайте определим некоторые параметры страницы:

  1. В потоке каталога щелкните страницу «Обзор исполнителя» .
  2. Нажмите + в блоке «Параметры» . Добавьте параметр исполнителя :
  • Отображаемое имя: artist
  • Тип объекта: @Artist
  • Обязательно: Проверить
  • Редактировать в журнале: проверить
  1. Теперь мы добавим несколько сообщений о выполнении пользовательских параметров. Если параметр исполнителя еще не собран виртуальным агентом, конечный пользователь получит этот ответ агента, добавленный в очередь ответов:

From which of these artists would you like to order merchandise?

  1. Добавьте второй вариант диалога, который предоставляет богатые фишки предложений. Нажмите «Добавить диалог» и используйте этот код (в формате JSON ):
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}

Можно обрабатывать различные резервные запросы на выполнение в зависимости от количества попыток, которые ваш конечный пользователь пытался ответить на них. Вы можете сделать это с помощью обработчиков событий параметров . На выбор доступны различные встроенные обработчики событий, такие как «Недопустимые параметры» , «Слишком длинные высказывания» , «Нет ввода» , «Нет ввода с первой попытки» , «2-я попытка » или «Нет совпадения» . Разница между отсутствием ввода и отсутствием совпадения заключается в том, что без ввода пользователь никогда не предоставлял ответ, тогда как при отсутствии совпадения пользователь предоставил ответ, но Dialogflow CX не мог намеренно сопоставить его со страницей.

  1. Прокрутите вниз до раздела «Обработчики событий повторного запроса» .
  2. Нажмите «Добавить обработчик событий» и выберите событие: No-match default
  3. Используйте следующее выполнение статического текста события:

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?

  1. Нажмите «Сохранить».
  2. Нажмите «Добавить обработчик событий» и выберите событие: No-input default
  3. Используйте следующее выполнение статического текста события:

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?

  1. Нажмите «Сохранить».

Маршруты условий страницы

Параметры очень эффективны в сочетании с условными маршрутами страниц . Когда условие оценивается как истинное, будет вызван связанный маршрут страницы. Условием может быть: Параметр равен определенному значению , Параметр не может отсутствовать , Форма заполнена и многое другое. Дополнительную информацию о параметрах и условиях можно найти в документации Dialogflow CX.

Для нашего виртуального розничного агента нам нужно будет собрать последовательность параметров, поэтому нам нужно будет создать условие, чтобы проверить, была ли заполнена «форма». Форма — это список параметров, которые необходимо получить от конечного пользователя для страницы. Виртуальный агент взаимодействует с конечным пользователем в течение нескольких сеансов разговора, пока не соберет все необходимые параметры формы, которые также называются параметрами страницы.

Dialogflow CX автоматически устанавливает значения параметров, предоставленные конечным пользователем во время заполнения формы. Чтобы проверить, заполнена ли полная форма текущей страницы, используйте следующее условие: $page.params.status = "FINAL"

Создание условных маршрутов на странице «Обзор исполнителя»

Давайте создадим условный маршрут, который перейдет на следующую страницу, как только исполнитель станет известен:

  1. На странице «Обзор исполнителя» нажмите значок «+» в разделе « Маршруты» .
  2. Прокрутите вниз до раздела «Условие» .
  3. Выберите хотя бы один (ИЛИ)
  4. Далее напишем выражение, которое
  • Параметр: $page.params.status
  • Оператор: =
  • Значение: "FINAL"
  1. Теперь мы создадим на маршруте конкретное статическое сообщение о выполнении, подтверждающее выбор конечного пользователя. Прокрутите вниз до блока «Выполнение» и напишите следующие сообщения о выполнении:
  • $session.params.artist, great choice! Rock on!
  • You want to rock with $session.params.artist merchandise. Awesome!
  1. Если условие истинно, вы должны перейти на страницу обзора продукта . Прокрутите вниз до раздела «Переход» и перейдите на следующую страницу: Product Overview
  2. Нажмите « Сохранить ».

Параметры

Создание маршрутов на странице «Обзор продукта»

Теперь, когда мы знаем, как создавать параметры и условные маршруты, давайте создадим дополнительные параметры для следующих страниц:

Обзор продукта

  1. Создайте параметр 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"
      }
    ]
  ]
}
  1. Создайте параметр 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"
            }
          ]
        }
      ]
    ]
  }
  1. Создайте маршрут, который будет переходить на страницу продукта , когда указан artist и предоставлен merch .
  • Состояние:
  • Соответствовать каждому правилу (И)
  • Выражение: $session.params.artist != null
  • Выражение: $session.params.merch != null
  • Выполнение: Alright! $session.params.merch of $session.params.artist, let's go!
  • Переход: Страница: Product
  1. Создайте маршрут, когда пользователь говорит «Рубашки».
  • Намерение: redirect.shirts
  • Переход: Страница: Shirts
  1. Создайте маршрут, когда пользователь говорит «Музыка».
  • Намерение: redirect.music
  • Переход: Страница: Music
  1. Создайте маршрут, когда пользователь запрашивает информацию о ценах.
  • Намерение: redirect.price
  • Переход: Создать новую страницу: Price

Когда вы установите вышеуказанную конфигурацию, вы увидите визуализацию, похожую на картинку ниже. Обратите внимание, что маршруты намерений на схеме обозначены синим цветом, а маршруты условий — оранжевым. Хотя это и не показано, обработчики событий обозначены зеленым цветом, а при переходе на страницу нескольких типов маршрутов линия становится серой.

Начало потока каталога

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

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

Страница рубашек:

  1. Создайте следующие конфигурации на странице «Рубашки» :
  • Выполнение заявки: Do you want a longsleeve or a t-shirt?
  • Выполнение записи. Пользовательская полезная нагрузка:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
  1. Создайте Intent Route : redirect.price с переходом на страницу Price .
  2. Создайте следующий параметр:
  • Параметр: 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"
            }
          ]
        }
      ]
    ]
  }
  1. Нажмите на выполнение записи и прокрутите вниз до «Наборы параметров» . Каждый раз, когда страница «Рубашки» становится активной, параметр категории будет установлен на рубашки :

Параметр

Ценить

category

shirts

  1. Добавьте условный маршрут:
  • Соответствовать хотя бы одному правилу (ИЛИ)
  • Выражение: $session.params.merch = "T-shirt"
  • Выражение: $session.params.merch = "Longsleeve"
  • Переход на новую страницу: Shirt Size

Страница с ценами:

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

  1. Создайте следующие конфигурации на странице цен :
  • Выполнение заявки: PRICE TODO

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

  1. Добавьте условный маршрут:
  • Соответствовать каждому правилу (И)
  • Выражение: $session.params.category = "shirts"
  • Выражение: $session.params.merch = "null"
  • Переход на новую страницу: Shirts
  1. Добавьте условный маршрут:
  • Соответствовать каждому правилу (И)
  • Выражение: $session.params.category = "shirts"
  • Выражение: $session.params.size = "null"
  • Переход на новую страницу: Shirt Size
  1. Добавьте условный маршрут:
  • Соответствовать каждому правилу (и)
  • Выражение: $session.params.category = "music"
  • Выражение: $session.params.album = "null"
  • Переход на новую страницу: Music
  1. Добавьте условный маршрут:
  • Соответствовать каждому правилу (и)
  • Выражение: $session.params.category = "music"
  • Выражение: $session.params.merch = "null"
  • Переход на новую страницу: Carrier
  1. Добавьте условный маршрут:
  • Соответствовать каждому правилу (и)
  • Выражение: $session.params.category = "null"
  • Переход на новую страницу: Product Overview

Страница размера рубашки:

  1. Создайте следующие конфигурации на странице размера рубашки :
  • Выполнение входа: What shirt size do you want?
  • Вход выполнение пользовательской полезной нагрузки:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
  1. Создайте маршрут намерения : redirect.price с переходом на страницу Price .
  2. Создайте следующий параметр:
  • Параметр: 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"
            }
          ]
        }
      ]
    ]
  }
  1. Добавьте условный маршрут:
  • Соответствовать каждому правилу (и)
  • Выражение: $page.params.shirtsize != "null"
  • Переход на страницу: Product

Страница музыки:

  1. Создайте следующие конфигурации на странице музыки :
  • 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?"
            }
          ]
        }
      ]
    ]
  }
  1. Создайте маршрут намерения : redirect.price с переходом на страницу: Price .
  2. Создайте следующий параметр:
  • Параметр: 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"
            }
          ]
        }
      ]
    ]
  }
  1. Нажмите на выполнение входа и прокрутите вниз до пресетов параметров , каждый раз, когда страница музыки становится активной, параметр категории будет установлен на музыку :

Параметр

Ценить

category

music

  1. Добавьте условный маршрут:
  • Соответствовать каждому правилу (и)
  • Выражение: $page.params.album != "null"
  • Переход на страницу: Carrier

Страница перевозчика:

  1. Создайте следующие конфигурации на странице носителей :
  • Вход Fulfillment: Do you want this album on CD or MP3?
  • Вход выполнение пользовательской полезной нагрузки:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "MP3"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
  1. Создайте маршрут намерения : redirect.price , который переходит на страницу Price .
  2. Создайте следующий параметр:
  • Параметр: 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"
            }
          ]
        }
      ]
    ]
  }
  1. Добавьте условный маршрут:
  • Соответствовать каждому правилу (и)
  • Выражение: $page.params.merch != "null"
  • Переход на страницу: Product

Страница продукта:

  1. Создайте следующие параметры:

Параметр DisplayName

Параметр Тип объекта

Чеки

artist

@Artist

Требуется, отредактировать в журнале

merch

@Merch

Требуется, отредактировать в журнале

  1. Параметр художника нуждается в следующем первоначальном выполнении приглашения, которое будет показано, когда художник не известен. 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.
  1. Параметр 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?

Следующий маршрут будет переходить на страницу подтверждения, когда художник известен, и пользователь выбирает «туристический фильм».

  1. Добавьте условный маршрут:
  • Соответствовать каждому правилу (и)
  • Выражение: $session.params.artist != null
  • Выражение: $session.params.merch = "Tour Movie"
  • ПРЕДУПРЕТЫ ПРЕДУПРЕЖДЕНИЯ Добавить параметр> price = 25
  • Переход на новую страницу: Confirmation

Следующий маршрут будет переходить на страницу подтверждения, когда художник известен, и пользователь выбирает «футболку», и выбрался размер рубашки.

  1. Добавьте условный маршрут:
  • Пользовательское выражение: $session.params.artist != null AND $session.params.merch = "T-shirt" AND $session.params.shirtsize != null
  • ПРЕДУПРЕТЫ ПРЕДУПРЕЖДЕНИЯ Добавить параметр> price = 25
  • Переход на страницу: Confirmation

Следующий маршрут будет переходить на страницу подтверждения, когда художник известен, и пользователь выбирает «Longleeve», и размер рубашки выбран.

  1. Добавьте условный маршрут:
  • Пользовательское выражение: $session.params.artist != null AND $session.params.merch = "Longsleeve" AND $session.params.shirtsize != null
  • ПРЕДУПРЕТЫ ПРЕДУПРЕЖДЕНИЯ Добавить параметр> price = 30
  • Переход на страницу: Confirmation

Следующий маршрут будет перейти на страницу подтверждения, когда художник известен, и пользователь выбирает «CD» также имя альбома выбрано.

  1. Добавьте условный маршрут:
  • Пользовательское выражение: $session.params.artist != null AND $session.params.merch = "CD" AND $session.params.album != null
  • ПРЕДУПРЕТЫ ПРЕДУПРЕЖДЕНИЯ Добавить параметр> price = 15
  • Переход на страницу: Confirmation

Следующий маршрут будет переходить на страницу подтверждения, когда артист известен, и пользователь выбирает «цифровой альбом», а имя альбома выбрано.

  1. Добавьте условный маршрут:
  • Пользовательское выражение: $session.params.artist != null AND $session.params.merch = "Digital Album" AND $session.params.album != null
  • ПРЕДУПРЕТЫ ПРЕДУПРЕЖДЕНИЯ Добавить параметр> price = 10
  • Переход на страницу: Confirmation

Далее мы теперь сделаем несколько расширенных условий с подсказками, которые обнаруживают недостающую информацию. Следующий маршрут вернется на страницу музыки, когда артист известен, и пользователь выбирает «CD» или «цифровой альбом», но название альбома не было выбрано.

  1. Добавьте условный маршрут:
  • Пользовательское выражение: $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», но когда размер футболки не был выбран.

  1. Добавьте условный маршрут:
  • Пользовательское выражение: $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 - это туристический фильм ). Мы покажем следующие поля в подтверждении: художник , торговля и цена .
  1. Нажмите на страницу подтверждения .
  2. Нажмите «Редактировать исполнение»> «Ответы агента»> «Добавить параметр диалога» > «Условный ответ» :
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
  1. Create the following Custom payload:
  • Custom payload:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "Yes, confirm"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}

Next, create two intent routes:

  1. confirm.proceed.order transitions to: Order Process Flow.
  2. decline.proceed.order transitions to End 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.

  1. In the decline.proceed.order intent route, scroll down to Parameter presets and add the following parameters:

Parameter

Value

artist

null

merch

null

shirtsize

null

category

null

album

null

price

null

restart

true

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.

  1. 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..."
            }
          ]
        }
      ]
    ]
  }
  1. 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

Conditional Responses

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

  1. Go to the My Order Flow, and create the following intent transitions:

Page (In Flow)

Routes > Intent

Routes > Transition To

My Order Start

redirect.my.order

My Order

My Order Start

redirect.my.order.status

My Order Status

My Order Start

redirect.my.order.canceled

My Order Cancellation

My Order Start

redirect.end

End Session

My Order Start

redirect.home

End Flow

My Order

redirect.my.order.status

My Order Status

My Order

redirect.my.order.canceled

My Order Cancellation

Default Start Flow

redirect.my.order.canceled

Flow: My Order

Default Start Flow

redirect.my.order.status

Flow: My Order

  1. 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.
  1. 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?
  1. 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?
  1. 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"
      }
    ]
  ]
}
  1. 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"
      }
    ]
  ]
}
  1. 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?
  1. 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?
  1. 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?
  1. 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?
  1. Test the flow and create the following two test scenarios:
>"About my order"
>"ABCD123"
>"Status"

And:

>"What's the status of order DEFG222"
  1. 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!
  2. 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.

  1. 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.

  1. Go to Manage > Intents and select the Default Negative Intent.
  2. 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
  1. 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

  1. 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:

  1. 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.

  1. 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.

  1. 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.

  1. 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

  1. Go to the Order Process Flow, and create the following intent transitions:

Page (In Flow)

Routes > Intent

Routes > Transition To

Order Process Start

redirect.end

End Session

Order Process Start

redirect.home

End Flow

Order Process Start

confirm.proceed.order

New Page: Shipping Details

  1. 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.
  1. 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

firstname

@sys.person

Required

What's your first name?

I'm sorry I missed that. What's the first name?

I'm sorry, I didn't understand. What's the first name?

lastname

@sys.person

Required

What's your last name?

I'm sorry I missed that. What's the last name?

I'm sorry, I didn't understand. What's the last name?

address

@sys.address

Required

What's your address?

I missed that. What's the address?

I'm sorry, I didn't understand. What's the address?

zipcode

@sys.any

Required

What postal code or zipcode do you have?

I'm sorry, what's the zip or postal code? For example: 1234AB or 10001.

I'm sorry, I didn't understand. What's the zip or postal code? For example: 1234AB or 10001.

city

@sys.geo-city

Required

What's the name of the city?

I missed that, what's the name of the city?

I'm sorry, I didn't understand. What's the name of the city?

country

@sys.geo-country

Required

What's the name of the country?

I missed that, what's the name of the country?

I'm sorry, I didn't understand. What's the name of the country?

email

@sys.email

Required

Lastly, what's your email address?

I am sorry. What's the email address? For example name@domain.com.

I am sorry, I didn't understand. What's the email address? For example name@domain.com.

  1. Create the following conditional route:
  • Customize Expression: $page.params.status = "FINAL"
  • Transition to new Page: Payment Details
  1. 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
  1. Создать следующий маршрут намерения
  • Намерение: 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
  1. Выберите страницу начала и нажмите на намерение redirect.end . Создайте следующее выполнение: Thank you for contacting G-Records! Have a nice day!
  2. Выберите страницу начала и нажмите на redirect.home намерение. Создайте следующий параметр Preset: restart = true

Потрясающий! К настоящему времени у нас есть полностью работающий ритейлер Realworld Chatbot! В следующей лаборатории мы проверим, насколько хорошо работает виртуальный агент!

9. Проверьте свой виртуальный агент

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

Также возможно экспортировать и импортировать ранее проведенные тестовые примеры, сохраняя тесты в Google Cloud Storage или Local. Экспорт теста загрузит файл Blob. Чтобы узнать больше о симуляторе и тестовых случаях, ознакомьтесь с документами симулятора / тестовых примеров .

Перед созданием некоторых тестовых случаев давайте сначала завершим остальную часть нашего виртуального агента:

Создание потока обслуживания клиентов

  1. Перейдите к потоку обслуживания клиентов и создайте следующие переходы намерения:

Страница (в потоке)

Маршруты> намерение

Маршруты> Переход на

Начало обслуживания клиентов

redirect.shipping.info

Перевозки

Начало обслуживания клиентов

redirect.refund.info

Возвращать деньги

Начало обслуживания клиентов

redirect.swapping.info

Обмен

Начало обслуживания клиентов

redirect.home

Конечный поток

Начало обслуживания клиентов

redirect.end

Завершить сеанс

Поток обслуживания клиентов

  1. Создайте следующую запись для страницы доставки :
  • Shipping physical merchandise items can take up to 2 weeks.
  • Is there anything else I can help you with?
  1. Создайте следующую заявку на страницу возврата :
  • 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?
  1. Создайте следующую запись для страницы обмена :
  • 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?
  1. Выберите страницу начала и нажмите на намерение redirect.end . Создайте следующее выполнение: Thank you for contacting G-Records! Have a nice day!
  2. Выберите страницу начала и нажмите на redirect.home намерение. Создайте следующий параметр Preset: restart = true

Создание тестовых случаев

  1. Нажмите кнопку тестового агента в правой части экрана.

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

  1. Тип: Hi

Поток обслуживания клиентов

  1. Спросите: Which artists are signed with your label?
  2. Скажи: The Google Dolls
  3. Скажи: I am interested in buying a shirt
  4. Скажи: A t-shirt
  5. Скажи: Medium
  6. Теперь нажмите кнопку «Сохранить тестовый пример». Который вы можете найти в верхней части симулятора (рядом со стрелкой Refo, и сбросить иконку сброса Trash Bin)

Поток обслуживания клиентов

  1. Дайте ему следующие детали:
  • Имя тестирования корпуса: Buy Google Dolls t-shirt size M
  • Теги: #Catalog, #Shirts, #Футболка, #Thegoogledolls
  1. Нажмите «Сохранить».

Давайте создадим больше тестовых случаев.

  1. Сначала очистите текущий диалог, нажав на значок Reset (Thrash Bin).
  2. Создайте следующие тестовые примеры:

Купите футболку 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
  • Описание: Информация о цене тестирования в различных пунктах в диалоге

Проверка предварительно записанные тестовые примеры

  1. Выберите «Управление» > «Тестовые случаи» в главном меню диалога слева.
  2. Выберите все тестовые примеры и нажмите кнопку «Запустить » над таблицей.

Dialogflow CX запустит все выбранные тестовые примеры против записи, которая была сохранена как «золотой тест», если результаты такие же, как вы ее сохранили, то тесты проходят. - Что -то изменилось в потоках, таких как страницы, которые не настроены правильно, или намерения, которые направили вас на неправильные страницы, тогда тесты потерпят неудачу.

Тестовые случаи

  1. В симуляторе задайте следующий вопрос: How long will shipping take?
  2. Обратите внимание на результат и сохраните тестовый пример в качестве Shipping с тегом: #shipping .
  3. Перейдите на панель «Управление»> «Тестовые случаи» и нажмите кнопку «Запустить» в правом верхнем углу сетки, чтобы запустить только тестовый пример Shipping .

Этот тест должен пройти.

  1. Вернитесь к потоку обслуживания клиентов, выберите « Пуск » и нажмите заголовок маршрутов .

Это покажет экран с сеткой, которая показывает все маршруты.

  1. Удалить redirect.shipping.info route
  2. Перейдите на панель «Управление»> «Тестовые случаи» и нажмите кнопку «Запустить» в правом верхнем углу сетки, чтобы запустить только тестовый пример Shipping .

Этот тест должен потерпеть неудачу.

  1. Вы можете нажать на неудачный тест, чтобы увидеть детали сбоя.

В этом случае тест не удался с приведенным сообщением об ошибке:

Page: Page mismatch:
Expected: Shipping
Actual: Start Page

Причина этого в том, что страница больше не существует в потоке. Мы ожидали страницы Shipping , но вместо этого мы никогда не уезжали с Start страницы. (или ваши конечные пользователи получат резервное сообщение.)

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

  1. Вернитесь к потоку обслуживания клиентов и добавьте redirect.shipping.info в качестве маршрута намерения, на стартовую страницу. Не забудьте перейти на страницу доставки и нажмите «Сохранить» .
  2. В симуляторе запишите следующий тестовый пример: I want to swap my item , сохраните этот тестовый пример как Swapping #swapping .
  3. Open Manage> intents> redirect.refund.info и добавьте следующую учебную фразу: I want to swap this item for a refund

Без этой учебной фразы, когда пользователь попросит изменить элемент для возврата, он достиг бы redirect.swapping.info намерения, но мы не хотим давать информацию об изменении элементов, мы хотим дать информацию о возмещении.

  1. Создайте следующий тестовый пример Golden: I want to swap this item for a refund в симуляторе и сохранить этот тестовый пример в качестве Swap for Refund #refund
  2. Вернитесь к Manage> intents> redirect.refund.info намерения и удалите, как I want to swap this item for a refund .
  3. Вернитесь к управлению> тестовыми случаями , выберите обмен на тест на возврат и запустите его.

Ваш последний тест не удался с приведенным ниже сообщением об ошибке:

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 охват тестирования является мерой, используемой для описания степени, в которой диалог виртуального агента (страницы и намерения) выполняется при запуске конкретного набора тестов. Виртуальный агент с высоким тестовым покрытием, измеренный в процентах, имел больше своих диалогов, выполненных во время тестирования, что предполагает, что у него более низкая вероятность содержать незамеченные ошибки (например, пропущенные запросы) по сравнению с виртуальным агентом с низким тестовым покрытием.

  1. Чтобы просмотреть отчет о покрытии тестирования для всех тестовых случаев, нажмите «Покрытие» .
  2. Нажмите на переходы вкладок.

Это покажет вам тестовое покрытие для всех переходов страниц.

Переходы покрытие

  1. Нажмите на вкладку .

Это покажет вам тестовое покрытие для всех намерений.

Намерения охват

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

10. Заключение

Dialogflow CX - это разговорная платформа ИИ (CAIP) для создания виртуальных агентов, таких как чат или голосовые боты. Dialogflow CX дает вашей команде ускорить создание разговоров на уровне предприятия с помощью визуальных строителей ботов, многократных намерений и способности учитывать многократные разговоры.

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

  • Потоки
  • Параметры, индивидуальные и системные объекты
  • Страницы
  • Государственные обработчики, такие как маршруты намерения и маршруты состояния
  • Статические сообщения о выполнении и условные ответы
  • Запасные намерения
  • Симулятор, тестовые примеры и покрытие

Окончательный результат

Ссылки

Чтобы узнать больше о Dialogflow CX, посмотрите на следующие блоги и документацию!