Перейти к основному содержимому

Подключение Dialogflow для проекта на JAICF

подсказка
Dialogflow — облачный сервис распознавания естественного языка от Google.

Сервис позволяет интегрировать диалоговый пользовательский интерфейс в мобильное приложение, устройство, веб-приложение и др. В данной статье мы рассматриваем подключение Telegram для проекта на JAICF с использованием Dialogflow.

Чтобы подключить канал Dialogflow для проекта на JAICF, выполните следующие шаги:

  1. Подготовьте проект.
  2. Подключите канал.
  3. Настройте Dialogflow.
  4. Протестируйте навык.

Подготовка проекта

Перед подключением канала предварительно подготовьте проект JAICF:

  1. Укажите в файле build.gradle.kts в зависимостях настройки:
dependencies {
// ...
implementation("com.just-ai.jaicf:jaicp:$jaicfVersion")
implementation("com.just-ai.jaicf:google-actions:$jaicfVersion")
}
подсказка
  1. Сконфигурируйте в зависимости от способа подключения к платформе:
  • long polling — бот будет сам подключаться к серверу Just AI при взаимодействии с платформой. Простое решение, подходит для локальной разработки и отладки.

    Для этого способа укажите в файле JaicpPoller.kt ActionsFulfillmentDialogflow():

package com.just-ai.jaicf.template.connections

fun main() {
JaicpPollingConnector(
templateBot,
accessToken,
channels = listOf(
ChatApiChannel,
ChatWidgetChannel,
TelephonyChannel,
ActionsFulfillmentDialogflow()
)
).runBlocking()
}
  • webhook — по указанной ссылке бот будет принимать сообщения платформы. Необходимо конфигурировать для подключения в JAICP Cloud.

    Для этого способа укажите в файле JaicpServer.kt ActionsFulfillmentDialogflow():

package com.just-ai.jaicf.template.connections

fun main() {
JaicpServer(
botApi = templateBot,
accessToken = accessToken,
channels = listOf(
ChatApiChannel,
ChatWidgetChannel,
TelephonyChannel,
ActionsFulfillmentDialogflow()
)
).start(wait = true)
}

Подключение канала

Перейдите в проект JAICF на JAICP. Нажмите на панели управления Каналы → Входящие → Подключить канал. В разделе Голосовые Ассистенты выберите Dialogflow. Укажите название канала → нажмите Создать.

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

Настройка Dialogflow

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

Авторизуйтесь в консоли разработчика Dialogflow. Для начала нужно зарегистрироваться и создать нового агента, нажмите Create new agent.

Заполните поля:

  • Agent name — укажите название агента.
  • DEFAULT LANGUAGE — язык по умолчанию. После создания агента вы сможете добавить другие языки.
  • DEFAULT TIME ZONE — часовой пояс по умолчанию.

Нажмите Create.

Добавление интентов

Чтобы агент начал обрабатывать запросы необходимо добавить интенты (Intents). Интент — ключевая единица сервиса Dialogflow, объединяющая в себе набор фраз, намерение клиента и другую метаинформацию.

В агенте по умолчанию уже добавлены два интента:

  • Default Welcome Intent — приветствие и начало диалога;
  • Default Fallback Intent — активируется в случае, если ни один из других интентов не подходит.

Нажмите Intents на боковом меню. Так как у нас по умолчанию есть интент приветствия, добавим интент прощания. Для этого заполните поля:

  • Intent name — укажите здесь Bye.
  • В секции Training phrases укажите Bye и Goodbye.
  • В секции Fulfillment активируйте переключатели Enable webhook call for this intent и Enable webhook call for slot filling.

Далее нажмите Save. Следуя образцу добавьте все необходимые интенты для вашего сценария.

Интенты в сценарии проекта JAICF

Обратите внимание, что название интентов в Dialogflow и сценарии проекта JAICF должны совпадать:

state("bye") {
activators {
intent("<название интента Dialogflow>")
}

action {
reactions.sayRandom(
"название интента Dialogflow"
)
reactions.image("https://media.giphy.com/media/EE185t7OeMbTy/source.gif")
}
}

Исполнение

В консоли Dialogflow на левой панели нажмите Fulfillment. Здесь в секции Webhook вставьте вебхук, который был создан ранее при подключении канала на JAICP. Сохраните изменения.

Далее на левой панели нажмите Integrations, здесь активируйте интеграцию с Telegram.

Тестирование

Через несколько секунд вы сможете протестировать, как работает ваш навык. Для этого после завершения обучения нажмите Try it now на правой панели консоли Dialogflow. Укажите в поле одну из фраз активации, которые вы указали при создании навыка.

Нативные возможности канала

Хранение пользовательского контекста

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

fun main() {
JaicpServer(
botApi = templateBot,
accessToken = accessToken,
channels = listOf(
ActionsFulfillmentDialogflow(useDataStorage = true)
)
).start(wait = true)
}
подсказка
Запросы, приходящие из Dialogflow, будут содержать контекст пользователя.

Нативные реакции

JAICF предоставляет универсальные реакции, доступные во всех каналах, а также реакции, уникальные для Dialogflow. Чтобы использовать специфические реакции Dialogflow, используйте reactions.actions, например:

action {
reactions.say("Привет!")
reactions.actions?.addSimpleResponse("display text", "ssml of text")
}

Вы также можете напрямую обратиться к объекту с ответом через reactions.actions.response:

action {
val builder = reactions.actions?.response?.builder
builder?.add("Hello")
}

Ограничения канала

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

  1. Каждый ответ должен содержать хотя бы один текстовой элемент. Для этого нужно использовать реакцию say.
  2. Ответ может содержать максимум 1 изображение, аудио или другой медиаконтент.
  3. Ответ с изображением, аудио или медиаконтентом должен содержать кнопки. Для этого воспользуйтесь реакцией buttons.
предупреждение
При отправке изображения и текста порядок, в котором они будут выведены, может отличаться от порядка вызовов реакций.