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

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