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

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

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

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

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

Цели

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

Предварительные условия

Архитектура

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

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

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

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

    Перейдите в консоль 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. В разделе «Агенты» нажмите > Копировать имя . Сохраните это имя, так как вы будете использовать его при настройке приложения Chat.

Создайте приложение чата и подключите его к агенту 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. В разделе «Функциональность» выберите «Получать сообщения 1:1» и «Присоединяться к группам и групповым беседам» .
    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 интерпретирует естественный язык пользователя и выдает собственный ответ на естественном языке на каждом этапе разговора. Этот пример разговора основан на предварительно созданном агенте под названием «Путешествия: прокат автомобилей» .

Диалог Объяснение
Конечный пользователь: Здравствуйте.
Агент: Привет! Я виртуальный агент по прокату автомобилей. Я могу помочь вам забронировать новый автомобиль напрокат. Как я могу помочь вам сегодня?
  1. Вызывается маршрут намерения приветствия по умолчанию в 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.
Агент: Грузовик с тарелками стоит 50,33 доллара в день. Он вмещает 4 человек и оснащен AM/FM-радио. Хотите перейти к оплате?
Конечный пользователь: Да, пожалуйста.
  1. Маршрут намерения $session.params.vehicle_type="Cymbal Truck" сопоставляется, и параметр Vehicle_model заполняется.
  2. Сеанс перейдет на страницу подтверждения тарелки .
  3. На странице «Подтверждение Cymbal Truck» есть запись о выполнении («The Cymbal Truck стоит 50,33 доллара США в день...»), которая добавляется в очередь ответов.
  4. Агент отправляет очередь ответов конечному пользователю.
  5. Ответ пользователя соответствует маршруту small_talk.confirmation.yes .
Агент: Какой тип карты вы будете использовать?
Конечный пользователь: Альтострат
Агент: Пожалуйста, введите номер карты.
Конечный пользователь: 1234 1234 1234 1234
Агент: Какое имя на карточке?
Конечный пользователь: Чарли
Агент: Какой адрес для выставления счета?
Конечный пользователь: бул. Амфибия, 1800. Маунтин-Вью, Калифорния
Агент: Какой почтовый индекс для выставления счетов?
Конечный пользователь: 94045
Агент: Вы заберете тарелку в Лас-Вегасе 05.03.2024, 12:00:00, и отвезете ее, 15.03.2024, 12:00: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 в сообщении чата. Если сообщение содержит косую черту , вместо нее используется значение 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, ответьте одной пользовательской полезной нагрузкой 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 в разных облачных проектах, вы можете настроить промежуточный сервер для облегчения соединения. Чтобы узнать, как это сделать, см. этот пример интеграции Chat для Dialogflow CX на GitHub.

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

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

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

Очистить

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

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

    Зайдите в диспетчер ресурсов

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