languageDetector
Модуль languageDetector
определяет язык запроса пользователя и записывает двухбуквенный ISO-код языка в $session.language
.
Используйте этот модуль для разработки мультиязычных ботов. С помощью languageDetector
вы можете определять язык запросов и давать ответ в зависимости от значения $session.language
. Также модуль имеет гибкие настройки: вы можете указывать, в каких случаях нужно определять язык, настраивать логику и управлять методами определения языка.
Чтобы использовать languageDetector
:
- Добавьте в проект ключ для Detect Language API.
- Импортируйте модуль в сценарий.
Как работает модуль
Когда вы импортируете модуль languageDetector
, в сценарий добавляется обработчик preProcess
.
Работа модуля зависит от настроек, которые вы передали при импорте. Узнайте подробнее о настройках в статье Конфигурация.
Также вы можете посмотреть исходный код модуля в редакторе сценариев внутри раздела Зависимости.
Для каждого запроса бот проверяет, нужно ли определить язык. Если для запроса нужно определить язык:
-
Бот получает ISO-код языка запроса:
-
Если в запросе 5 или более слов, бот обращается к методу
$caila.detectLanguage
. Вы можете посмотреть список поддерживаемых языков на сайте FastText. -
Если в запросе меньше 5 слов, бот обращается к Detect Language API. Этот API лучше определяет язык в коротких текстах. Вы можете посмотреть список поддерживаемых языков на сайте Detect Language API.
предупреждениеЧтобы использовать API, добавьте в проект ключ.
-
-
Бот проверяет, входит ли язык в список целевых языков
targetLanguages
и нужно ли его заменить на родственный язык с помощью параметраsameGroupLanguageReplacement
.
Далее бот действует в зависимости от результатов:
- Если язык определен успешно, бот записывает ISO-код языка в
$session.language
. - Если язык не удалось определить, бот переходит в стейт из параметра
stateWithLanguageQuestion
. Если такой стейт не указан, бот указывает в$session.language
предыдущее значение с помощью параметраpreviousLanguagePreference
или язык по умолчанию изdefaultLanguage
.
Ключ Detect Language API
Если в запросе пользователя меньше 5 слов, бот обращается к Detect Language API.
Также если метод $caila.detectLanguage
определил язык не из списка targetLanguages
, бот еще раз пробует определить язык с помощью API.
Чтобы бот мог отправлять запросы к API, добавьте ключ в проект:
-
Зарегистрируйтесь в Detect Language API.
-
Получите API-ключ на сайте.
к сведениюПо умолчанию в Detect Language API вам доступен бесплатный тариф, у которого есть ограничения на количество запросов и объем данных.
-
В проекте JAICP перейдите в раздел Токены и переменные.
-
- Название —
getLanguageToken
. - Значение — API-ключ с сайта Detect Language API.
- Название —
Если вы не хотите использовать Detect Language API, в настройках модуля укажите true
для параметра onlyCailaMethod
. В этом случае бот всегда будет определять язык только с помощью $caila.detectLanguage
.
Импорт модуля
Импортируйте модуль в сценарий с помощью тега require
.
Вы можете передать настройки модуля через параметр injector
.
require: languageDetector/languageDetector.sc
module = sys.zb-common
injector = {
detectorMode: "every",
defaultLanguage: "ru"
}
Пример использования в сценарии
require: languageDetector/languageDetector.sc
module = sys.zb-common
injector = {
detectorMode: "default", # Бот определяет язык в первом и втором запросе.
defaultLanguage: "ru", # Язык по умолчанию — русский.
targetLanguages: ["ru", "en"], # Целевые языки — русский и английский.
detectorStates: ["/Complaint"], # Бот всегда определяет язык для стейта /Complaint.
stateWithLanguageQuestion: "/SelectLanguage", # Стейт с вопросом о языке.
stateForChangingLanguage: "/SpeakInOtherLanguage" # Стейт с интентом для смены языка.
}
theme: /
# ...
# Стейт с мультиязычным интентом.
# Стейт указан в detectorStates. Бот всегда определяет язык, если запрос попал в этот интент.
state: /Complaint
intent!: /жалоба
if: $session.language === "ru"
a: Нам очень жаль, что …
if: $session.language === "en"
a: We are very sorry that …
# Бот переходит в этот стейт, если он не смог определить язык.
# После этого стейта бот не будет определять язык. Исключение — /Complaint.
state: SelectLanguage
# Бот предлагает выбрать язык.
a: Выберите язык
state: Language
intent: /языки
# Бот извлекает язык из ответа и записывает в $session.language.
script:
$session.language = $parseTree._languages.name;
# Бот переходит в стейт, если пользователь просит говорить на другом языке.
# Пример запроса пользователя: «говори на русском».
# После этого стейта бот не будет определять язык. Исключение — /Complaint.
state: SpeakInOtherLanguage
intent!: /говори на другом языке
# Бот извлекает язык из запроса и записывает в $session.language
script:
$session.language = $parseTree._languages.name;