Создайте приложение Google Chat Dialogflow CX, которое понимает естественный язык и отвечает на него.

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

Например, представьте себе чат-приложение, которое помогает людям арендовать автомобили. Пользователь может написать: «Я хочу арендовать автомобиль». Чат-приложение может ответить вопросом вроде: «Где вы хотите забрать автомобиль?», что послужит началом диалога с пользователем, в котором чат-приложение понимает речь и отвечает ей при бронировании автомобиля.

Это лишь один пример. Приложения Dialogflow Chat полезны для любого вида взаимодействия. Если требуется естественная человеческая речь, вам понадобится приложение Dialogflow Chat. Готовые агенты помогут вам быстро начать работу и продемонстрируют возможности Dialogflow, например:

  • Забронировать авиабилеты
  • Запишитесь на прием к врачу
  • Заказать доставку еды
  • Ответьте на вопросы о каталоге розничной продукции, например, доступны ли товары в других цветах.
  • Готовая страница выбора агента Dialogflow.
    Рисунок 1. Выбор готового агента для приложения Dialogflow Chat.
  • Тестирование агента в Dialogflow CX.
    Рисунок 2. Тестирование агента в Dialogflow CX для проверки логики и конфигурации агента. На схеме показан последовательный набор тематических страниц, относящихся к конкретным этапам диалога, например, выбору места получения и возврата арендованного автомобиля, а также настройка логики, связывающей их. Диалог тестируется в симуляторе.
  • Настройка приложения Dialogflow Chat.
    Рисунок 3. Настройка приложения чата для обработки ответов с помощью агента Dialogflow CX на странице конфигурации API чата в консоли Google Cloud.
  • Тестирование приложения Dialogflow CX Chat
    Рисунок 4. Обсуждение бронирования автомобиля в аренду с помощью приложения Dialogflow Chat в Google Chat.

Цели

  • Настройте свою среду.
  • Создайте и разверните агента Dialogflow CX.
  • Создайте и разверните приложение чата на базе агента Dialogflow CX.
  • Протестируйте приложение «Чат».

Предпосылки

Архитектура

На следующей диаграмме показана архитектура приложения чата, созданного с помощью Dialogflow:

Архитектура чат-приложения, реализованная с помощью Dialogflow.

На предыдущей диаграмме пользователь, взаимодействующий с приложением Dialogflow Chat, имеет следующий поток информации:

  1. Пользователь отправляет сообщение в чате в приложение чата, либо в личном сообщении, либо в чат-пространстве.
  2. Виртуальный агент Dialogflow, который находится в Google Cloud, получает и обрабатывает сообщение для создания ответа.
  3. При желании, используя веб-перехватчик Dialogflow , агент Dialogflow может взаимодействовать с внешними сторонними службами, такими как система управления проектами или инструмент управления тикетами.
  4. Агент Dialogflow отправляет ответ обратно в службу приложения Chat в Chat.
  5. Ответ отправляется в чат.

Настройте среду

Перед использованием API Google необходимо включить их в проекте Google Cloud. Вы можете включить один или несколько API в одном проекте Google Cloud.
  1. В консоли Google Cloud включите API Google Chat и API Dialogflow.

    Включить API

  2. Подтвердите, что вы включаете API в правильном облачном проекте, затем нажмите Далее .

  3. Подтвердите, что вы включаете правильные API, затем нажмите Включить .

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

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

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

Вот как создать агент Dialogflow CX:

  1. В консоли Dialogflow CX откройте консоль Dialogflow CX. Выберите Меню > Dialogflow .

    Перейдите в консоль Dialogflow CX.

  2. Выберите проект Google Cloud. Чтобы найти свой проект, вам может потребоваться нажать «Все» и выполнить поиск.

  3. Теперь у вас есть возможность выбрать готовый агент или создать свой собственный. Если вы предпочитаете подробно изучить настройку агента позже, выберите один из готовых агентов . Они также помогут вам узнать о его возможностях.

    Чтобы выбрать готовый агент, выполните следующие действия:

    1. Нажмите Использовать готовые агенты .
    2. Выберите готового агента. Для этого руководства выберите «Путешествия: аренда автомобилей» .

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

    3. Нажмите Импортировать как агента .

    Чтобы создать собственного агента, выполните следующие действия:

    1. Нажмите Создать агента .
    2. Выберите «Автоматически сгенерировать» , чтобы создать агент хранилища данных , или выберите «Создать свой собственный» , чтобы создать другие типы агентов.

    Подробную инструкцию по созданию агента см. в разделе Создание агента Dialogflow CX .

  4. Настройте основные параметры агента:

    1. В поле Отображаемое имя введите отображаемое имя.
    2. Выберите предпочитаемое местоположение . Если вы хотите изменить дополнительные настройки местоположения , нажмите «Изменить» .
    3. Выберите предпочитаемый вами часовой пояс.
    4. Выберите язык по умолчанию для вашего агента. После создания агента изменить язык по умолчанию невозможно.
  5. Нажмите кнопку «Создать» . Dialogflow CX начнет создание агента, а затем отобразит начальный поток агента по умолчанию.

  6. При необходимости настройте агента. Подробное описание процесса настройки агента см. в статье Создание агента Dialogflow CX .

  7. В качестве наилучшей практики протестируйте агента:

    1. Нажмите Тестовый агент .
    2. Выберите Тестовый агент в среде .
    3. В разделе Окружение выберите Черновик .
    4. В разделе «Поток» выберите «Начать поток по умолчанию» .
    5. В разделе «Страница» выберите «Начальная страница» .
    6. В строке «Поговорить с агентом» введите Hello и нажмите Enter . Агент ответит, представившись.
    7. Завершите тест, проведя тестовую беседу .
  8. Агент Dialogflow CX создан. Вернитесь в консоль Dialogflow CX. Выберите « Меню > «Dialogflow CX» .

    Перейдите в консоль Dialogflow CX.

  9. В разделе «Агенты» нажмите > Копировать имя . Сохраните это имя, так как оно будет использоваться при настройке приложения «Чат».

Создайте приложение чата и подключите его к агенту Dialogflow

После создания агента Dialogflow CX выполните следующие действия, чтобы превратить его в приложение чата:

  1. В консоли Google Cloud перейдите в раздел Google Chat API. Найдите «Google Chat API» и нажмите «Google Chat API» , затем нажмите «Управление» .

    Перейти к API чата

  2. Нажмите «Конфигурация» и настройте приложение чата:

    1. В поле «Имя приложения» введите Dialogflow App .
    2. В поле URL аватара введите https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png .
    3. В поле Описание введите Responds to real human conversation .
    4. В разделе «Функциональность» выберите Присоединяйтесь к пространствам и групповым беседам .
    5. В разделе «Настройки подключения» выберите Dialogflow .
    6. В разделе «Настройки Dialogflow» выберите Dialogflow CX .
    7. В поле Имя ресурса агента или среды вставьте имя агента Dialogflow CX, скопированное вами в конце раздела Создание агента Dialogflow CX .
    8. Сделайте это приложение чата доступным для определенных людей и групп в вашем домене и введите свой адрес электронной почты.
    9. В разделе Журналы выберите Записывать ошибки в Журнал .
  3. Нажмите «Сохранить» .

Приложение Chat готово принимать и отвечать на сообщения в Chat.

Протестируйте приложение чата

Протестируйте приложение Dialogflow CX Chat, отправив ему сообщение в Google Chat.

  1. Откройте Google Chat, используя учетную запись Google Workspace, которую вы указали при добавлении себя в качестве доверенного тестировщика.

    Перейти в Google Чат

  2. Нажмите новый чат» .
  3. В поле Добавить 1 или более человек введите название вашего чат-приложения.
  4. Выберите приложение чата из результатов. Откроется личное сообщение.

  5. В новом прямом сообщении с приложением введите Hello и нажмите enter .

    Приложение Dialogflow Chat отвечает, представляя себя.

  6. Завершите тест, проведя тестовую беседу .

Пример тестового разговора

Чтобы протестировать приложение Dialogflow CX Chat в консоли Dialogflow CX или в Google Chat, проведите следующий диалог. Это объяснение поможет вам понять, как агент Dialogflow CX интерпретирует естественный язык пользователя и генерирует собственные ответы на естественном языке на каждом этапе диалога. Этот пример диалога основан на готовом агенте Travel: car rental .

Диалог Объяснение
Конечный пользователь: Здравствуйте
Агент: Здравствуйте! Я виртуальный агент по аренде автомобилей. Я могу помочь вам оформить новое бронирование. Чем я могу вам помочь сегодня?
  1. Вызывается маршрут Default Welcome Intent в Default Start Flow .
  2. Выполнение для этого обработчика состояний («Привет! Я...») добавляется в очередь ответов.
  3. Агент отправляет очередь ответов конечному пользователю.
Конечный пользователь: Я хотел бы арендовать автомобиль.
Агент: Где бы вы хотели забрать автомобиль?
  1. Маршрут намерения car_rental.reservation_create на стартовой странице совпадает.
  2. Сеанс перейдет на страницу «Место получения» .
  3. Форма страницы «Место получения» не заполнена, поэтому агент использует параметр pickup_location , чтобы подсказать пользователю («Где вы хотели бы забрать...»), который добавляется в очередь ответов.
  4. Агент отправляет очередь ответов конечному пользователю.
Конечный пользователь: Лас-Вегас
Агент: Хорошо, вас заберут из Лас-Вегаса.
Агент: Отличается ли место высадки от места получения?
  1. Вводимые конечным пользователем данные заполняют параметр pickup_location, запрошенный агентом на предыдущем этапе разговора.
  2. Маршрут намерения car_rental.return_different_location в потоке запуска по умолчанию совпадает.
  3. Маршрут заполнения формы на странице «Пункт самовывоза» оценивается и вызывается. Он содержит результат выполнения («Хорошо, ваш самовывоз...»), который добавляется в очередь ответов, а ссылки на его параметры преобразуются в фактические значения, предоставленные конечным пользователем.
  4. Сеанс переходит на страницу подтверждения местоположения .
  5. На странице подтверждения местоположения есть запись о выполнении («Место высадки отличается...»), которая добавляется в очередь ответов.
  6. Агент отправляет очередь ответов конечному пользователю.
Конечный пользователь: Да. Я оставлю машину в Лос-Анджелесе.
Агент: Хорошо, вас высадят в Лос-Анджелесе.
Агент: В какую дату и время вы хотели бы забрать автомобиль?
  1. Маршрут намерения car_rental.return_different_location в потоке запуска по умолчанию совпадает.
  2. Сеанс переходит на страницу «Место высадки» .
  3. Вводимые конечным пользователем данные заполняют параметр drop_off_location, запрошенный агентом на предыдущем этапе разговора.
  4. Маршрут заполнения формы на странице «Место высадки» оценивается и вызывается. Он содержит результат выполнения («Хорошо, ваш пункт высадки...»), который добавляется в очередь ответов.
  5. Сеанс переходит на страницу «Длительность аренды» .
  6. На странице «Продолжительность аренды» указаны неполные значения формы, поэтому пользователю предлагается ввести параметр pickup_date_time («В какую дату и время вы хотели бы забрать автомобиль...»), который добавляется в очередь ответов.
  7. Агент отправляет очередь ответов конечному пользователю.
Конечный пользователь: Я хотел бы забрать автомобиль 5 марта в полдень.
Агент: В какую дату и время вы хотели бы сдать автомобиль?
  1. Вводимые конечным пользователем данные заполняют параметр pickup_date_time, запрошенный агентом на предыдущем этапе разговора.
  2. На странице «Продолжительность аренды» отсутствует еще одно значение формы, поэтому пользователю предлагается ввести параметр drop_off_date_time («В какую дату и время вы хотели бы вернуть автомобиль...»), который добавляется в очередь ответов.
  3. Агент отправляет очередь ответов конечному пользователю.
Конечный пользователь: 15 марта в полдень.
Агент: Итак, для подтверждения:

Вы заберете автомобиль в Лас-Вегасе 05.03.2024 в 12:00:00 и вернете его в Лос-Анджелесе 15.03.2024 в 12:00:00.

Звучит верно?
  1. Вводимые конечным пользователем данные заполняют параметр drop_off_date_time, запрошенный агентом на предыдущем этапе разговора.
  2. Сеанс переходит на страницу подтверждения продолжительности аренды .
  3. На странице «Подтверждение длительности аренды» есть запись о выполнении («Таким образом, для подтверждения...»), которая добавляется в очередь ответов.
  4. Агент отправляет очередь ответов конечному пользователю.
Конечный пользователь: Да, спасибо.
Агент: Отлично! Теперь давайте выберем автомобиль.
Агент: Вам нужен автомобиль эконом-класса или класса люкс?
  1. Маршрут намерения small_talk.confirmation.yes на странице подтверждения продолжительности аренды совпадает.
  2. Агент подтверждает выбор пользователя сообщением («Отлично! Теперь давайте выберем...»), которое добавляется в очередь ответов.
  3. Сеанс переходит на страницу устранения неоднозначности транспортных средств .
  4. Форма страницы устранения неоднозначности транспортного средства не заполнена, поэтому агент использует параметр vehicle_type для запроса у пользователя («Вы предпочитаете эконом или люкс...»), который добавляется в очередь ответов.
  5. Агент отправляет очередь ответов конечному пользователю.
Конечный пользователь: Экономьте, пожалуйста.
Агент: Вам нужна машина с тарелками или грузовик с тарелками?
  1. Соответствует маршруту намерения $session.params.vehicle_type="economy_vehicle" .
  2. Сеанс переходит на страницу «Параметры экономики» .
  3. На странице «Параметры экономики» есть запись выполнения («Хотите ли вы...»), которая добавляется в очередь ответов.
  4. Агент отправляет очередь ответов конечному пользователю.
Конечный пользователь: Cymbal Truck.
Агент: Стоимость аренды Cymbal Truck составляет 50,33 доллара в сутки. Вмещает 4 человек и оснащена радиоприемником AM/FM. Хотите перейти к оплате?
Конечный пользователь: Да, пожалуйста.
  1. Маршрут намерения $session.params.vehicle_type="Cymbal Truck" сопоставляется, и параметр vehicle_model заполняется.
  2. Сеанс переходит на страницу подтверждения грузовика с тарелками .
  3. На странице «Подтверждение грузовика с цимбалами» есть запись о выполнении («Грузовик с цимбалами стоит 50,33 долл. США в день...»), которая добавляется в очередь ответов.
  4. Агент отправляет очередь ответов конечному пользователю.
  5. Ответ пользователя соответствует маршруту small_talk.confirmation.yes .
Агент: Какой тип карты вы будете использовать?
Конечный пользователь: Altostrat
Агент: Пожалуйста, введите номер карты.
Конечный пользователь: 1234 1234 1234 1234
Агент: Какое имя на карточке?
Конечный пользователь: Чарли
Агент: Укажите адрес для выставления счета.
Конечный пользователь: 1800 Amphibious Blvd., Маунтин-Вью, Калифорния
Агент: Какой почтовый индекс указан в счете?
Конечный пользователь: 94045
Агент: Вы заберёте Cymbal Car в Лас-Вегасе 05.03.2024 в 12:00 и вернёте его 15.03.2024 в 12:00. Стоимость поездки составит 175,38 долларов.
Агент: Спасибо за аренду у нас и желаю вам прекрасного дня!
  1. Сеанс переходит на страницу оплаты .
  2. Платежная форма не заполнена, поэтому агент запрашивает у пользователя параметры card_type , card_number , billing_name , billing_street_address и billing_zip_code («Какой тип карты будет...»), которые последовательно добавляются в очередь ответов и отправляются по мере ответа пользователя. Ответы пользователя задают значение каждого параметра.
  3. Сеанс переходит на страницу подтверждения аренды .
  4. На странице подтверждения аренды есть запись о выполнении («Хорошо, ваш самовывоз будет...»), которая добавляется в очередь ответов.
  5. Агент отправляет очередь ответов конечному пользователю.
  6. Сеанс переходит на страницу завершения сеанса .

Отправка сообщений с картами из Dialogflow

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

Следующий JSON-код показывает, как отправить сообщение карты в качестве пользовательской полезной нагрузки при выполнении заказа:

json

{
  'cardsV2': [{
    'cardId': 'createCardMessage',
    'card': {
      'header': {
        'title': 'A card message!',
        'subtitle': 'Sent from Dialogflow',
        'imageUrl': 'https://developers.google.com/chat/images/chat-product-icon.png',
        'imageType': 'CIRCLE'
      },
      'sections': [
        {
          'widgets': [
            {
              'buttonList': {
                'buttons': [
                  {
                    'text': 'Read the docs!',
                    'onClick': {
                      'openLink': {
                        'url': 'https://developers.google.com/workspace/chat'
                      }
                    }
                  }
                ]
              }
            }
          ]
        }
      ]
    }
  }]
}

Ограничения и соображения

  • События взаимодействия в чате имеют ограниченную поддержку, поэтому следует учитывать некоторые моменты:
    • Поддерживаются следующие типы событий взаимодействия :
      • MESSAGE
      • ADDED_TO_SPACE
      • CARD_CLICKED
    • Для событий MESSAGE или ADDED_TO_SPACE входные данные запроса, отправляемые агенту Dialogflow, соответствуют значению поля argumentText в сообщении Chat. Если сообщение содержит команду с косой чертой , вместо него используется значение text поля.
    • Для событий CARD_CLICKED входные данные запроса, отправляемые агенту Dialogflow, форматируются как CARD_CLICKED.functionName , где functionName соответствует значению поля function объекта Action , прикрепленного к интерактивному элементу карточки (например, к кнопке).
    • Полная полезная нагрузка JSON каждого события взаимодействия чата отправляется в Dialogflow как пользовательская полезная нагрузка в параметре запроса и может быть доступна с помощью веб-перехватчика Dialogflow, путем запроса значения поля WebhookRequest.payload .
  • Рекомендации по реагированию на слэш-команды и получению данных с карточек или диалогов :
    • Когда приложения Dialogflow Chat получают сообщение с командой, начинающейся с косой черты, входные данные запроса содержат только значение text поля. text поле начинается с имени команды, начинающейся с косой черты (например, /command ), которое можно использовать для настройки обнаружения агентом Dialogflow команды, начинающейся с косой черты.
    • Если агенту Dialogflow необходимо обработать полезную нагрузку JSON события взаимодействия чата , он может сделать это, используя веб-перехватчик Dialogflow для проверки пользовательской полезной нагрузки в параметре запроса.
    • Чтобы отобразить диалог из Dialogflow Agent, отправьте ответ с помощью одной пользовательской полезной нагрузки JSON, которая включает сообщение, содержащее ответ на действие DIALOG .
    • Для обработки данных, введенных с карт, агент Dialogflow может обнаруживать намерения, которые начинаются с текста CARD_CLICKED и отвечать одной пользовательской полезной нагрузкой JSON, содержащей соответствующее действие .
  • Предварительный просмотр ссылок не поддерживается.
  • Если агент Dialogflow отвечает только одним сообщением, оно отправляется в Google Chat синхронно. Если агент Dialogflow отвечает несколькими сообщениями, все сообщения отправляются в Chat асинхронно, путём вызова метода create ресурса spaces.messages в Chat API один раз для каждого сообщения.
  • При использовании интеграции Dialogflow CX с Chat агент Dialogflow и приложение Chat должны быть настроены в одном проекте Google Cloud. Если вам нужно настроить Dialogflow и Chat в разных проектах Google Cloud, вы можете настроить промежуточный сервер для обеспечения подключения. Чтобы узнать, как это сделать, ознакомьтесь с этим примером интеграции Chat для Dialogflow CX на GitHub.

Устранение неполадок

Когда приложение или карточка Google Chat возвращает ошибку, в интерфейсе Chat отображается сообщение «Что-то пошло не так» или «Не удалось обработать ваш запрос». Иногда в интерфейсе Chat не отображается сообщение об ошибке, но приложение или карточка Chat выдаёт неожиданный результат; например, сообщение может не появиться.

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

Уборка

Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, используемые в этом руководстве, мы рекомендуем вам удалить проект Cloud.

  1. В консоли Google Cloud перейдите на страницу «Управление ресурсами» . Выберите « Меню > «IAM и администрирование» > «Управление ресурсами» .

    Перейти к диспетчеру ресурсов

  2. В списке проектов выберите проект .
  3. В диалоговом окне введите идентификатор проекта, а затем нажмите кнопку «Завершить» , чтобы удалить проект.
  • Dialogflow CX использует подход, основанный на конечном автомате , для проектирования агентов Dialogflow, что обеспечивает чёткий и явный контроль над диалогом, улучшает взаимодействие с конечным пользователем и упрощает процесс разработки. При создании приложения Dialogflow Chat мы рекомендуем использовать Dialogflow CX.
  • Dialogflow ES — это еще один способ использования Dialogflow с приложением чата.