Если вы хотите сопоставить динамические детали в пользовательском вводе, которые было бы трудно поддерживать в языковом объекте, вы можете использовать аннотации.

Аннотации в Teneo можно рассматривать как метки, которые прикрепляются к входам. Некоторые аннотации создаются Teneo автоматически, но вы также можете добавлять их динамически с помощью скриптов.

В качестве примера на этой странице мы будем использовать аннотации для «пометки» промо-кодов в пользовательском вводе. Эти промо-коды хранятся в глобальной переменной, и мы предполагаем, что эта переменная динамически заполняется через API или что-то подобное.

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

  1. Создайте глобальную переменную и заполните ее списком промокодов.
  2. Создайте глобальный прослушиватель, который будет прослушивать все вводимые пользователем данные, и сценарий, проверяющий каждое слово вводимых пользователем данных. Если слово есть в списке промокодов, к нему следует добавить аннотацию VALID_PROMO_CODE

Добавить глобальную переменную

Во-первых, нам нужно создать глобальную переменную, которая, как мы предполагаем, была динамически заполнена промо-кодами для бариста Longberry:

  1. Перейдите к решениям за кулисами, нажав «Решение» в правом верхнем углу.
  2. Нажмите «Глобальные» на панели слева.
  3. Перейдите в «Переменные».
  4. Добавьте новую переменную и дайте ей имя validPromoCodes.
  5. Затем присвойте ему это значение: ["mvkn","vuyo","2ppu","lqgp","ym5b","634q","g2gl"]
  6. Нажмите «Сохранить».

Добавьте сценарий аннотации в глобальный прослушиватель

Затем нам нужно настроить глобальный предварительный прослушиватель, чтобы мы могли аннотировать пользовательский ввод, прежде чем он будет проверен на соответствие триггерам потока и переходам.

  1. Нажмите на вкладку «Решение» в левом верхнем углу.
  2. Нажмите «Глобальные».
  3. Выберите «Слушатели».
  4. Перейдите к зеленому значку «Добавить», откройте раскрывающееся меню и выберите «Предварительный слушатель», чтобы добавить нового предварительного слушателя.
  5. Назовите его Find valid promotion codes. Затем нажмите стрелку влево вверху.
  6. Вставьте звездочку Клини * в поле условия. Это будет соответствовать всем, поскольку мы хотим проверить каждый ввод на наличие действительных промо-кодов.
  7. Добавьте следующий скрипт в поле Выполнить этот скрипт. (Подробнее о скрипте можно прочитать ниже):def n = _.sentenceCount // get the number of sentences // iterate through the sentences for (int si = 0; si < n; si++) { // iterate through each word in the sentence _.sentences[si].words.eachWithIndex { word, wordIndex -> if (validPromoCodes.contains(word.getOriginal().toString())) { // if lookup value is true then we annotate the 'range' that matched the list. _.inputAnnotations.add(_.createInputAnnotation("VALID_PROMO_CODE", si, [wordIndex] as HashSet, ["Promo code": word.getOriginal().toString()])) } } }
  8. Сохраните с помощью кнопки «Сохранить» в левом верхнем углу окна редактирования.
  9. Вернитесь в главное окно решения и перезагрузите движок в пробной версии.

Попробуйте и проверьте аннотации

Теперь мы аннотируем рекламные коды с помощью глобального предварительного прослушивателя, что означает, что языковые условия теперь могут использовать индивидуальную аннотацию %$VALID_PROMO_CODE для проверки того, содержит ли пользовательский ввод действительный промо-код.

Мы также можем проверить аннотацию на панели «Информация об ответе»:

  1. В главном окне решения откройте панель «Информация об ответе» с правой стороны.
  2. Введите mvkn в пробную версию. Это действительный промо-код, и он будет соответствующим образом аннотирован.
  3. На панели «Информация об ответе» в разделе «Сводка ввода» вы можете увидеть, что аннотировал Teneo, включая вашу настроенную аннотацию %$VALID_PROMO_CODE.

Если вы наведете курсор на аннотацию, вы получите дополнительную информацию (если она есть) из переменных аннотации.

Пояснение к скрипту

Давайте подробно рассмотрим скрипт, который мы использовали:

def n = _.sentenceCount // get the number of sentences 
// iterate through the sentences 
for (int si = 0; si < n; si++) { 
// iterate through each word in the sentence _.sentences[si].words.eachWithIndex { word, wordIndex -> 
if (validPromoCodes.contains(word.getOriginal().toString())) { 
// if lookup value is true then we annotate the 'range' that matched the list. _.inputAnnotations.add(_.createInputAnnotation("VALID_PROMO_CODE", si, [wordIndex] as HashSet, ["Promo code": word.getOriginal().toString()])) 
} 
} 
}

Вот что делает скрипт:

  1. Во-первых, мы получаем количество предложений на входе и перебираем предложения. Мы делаем это, потому что нам нужно указать номер предложения, когда мы добавляем аннотацию.
  2. Для каждого предложения мы перебираем его слова. Получаем слово и индекс слов. Это делается с помощью итератора eachWithIndex.
  3. Затем мы проверяем, существует ли слово в глобальном списке. Если это так, мы аннотируем слово в предложении в wordIndex и создаем переменную аннотации Promo code с найденным промокодом в качестве значения аннотации к Promo code, например:

Первоначально опубликовано на https://www.artificial-solutions.com 19 августа 2020 г.