Настройка AIVR
AIVR (англ. Artificial Intelligence Voice Responder) - интерактивный голосовой автоответчик с распознаванием голоса. Система способна вести диалог с абонентом в соответствии с заданной логикой. Логика диалога настраивается через веб-интерфейс. В данном материалы мы изучим интерфейс и базовые настройки бота.
Интерфейс бота разделён на 2 основных блока:
Диалоги - здесь вы найдёте логи всех диалогов бота. Правила - этот раздел посвящён логике бота, её структуре и настройке.
Разверните разделы кликом на значке +, чтобы увидеть их содержимое. Разберём подробнее эти блоки.
Диалоги
Раздел диалоги представлен списком состоявшихся диалогов бота. Имена элементов списка состоят из номера диалога, даты и времени диалога и номера телефона (или IP-адреса, если источником связи был веб-интерфейс) абонента. Кликом по элементу списка вы откроете подробную информацию о нём.
Интерфейс диалога
Шапка диалога содержит мета-информацию о нём. Ниже расположен скрипт разговора, сформированный на основе результатов распознавания.
Элементы скрипта разговора:
- Клиент - распознанный запрос абонента.
- Ответ робота - То, что бот ответил абоненту
- Сработавшее правило - Правило логики бота, инициировавшее ответ. Обратите внимание, если вы измените правило, то в этом блоке будет отображаться ответ бота в соответствии с текущими правилами. Однако блок "Ответ робота" всегда останется неизменным. Таким образом удобно отслеживать изменения логики работы бота на основе старых диалогов.
- Время начала воспроизведения и Время завершения воспроизведения - тайминги речевой активности. Удобны для отслеживания скорости синтеза и продолжительности произнесения ответа ботом.
Интерактивные элементы интерфейса диалога
Создание нового правила на основе ответа абонента
Кликните на зелёный плюсик рядом с ответом абонента, чтобы открыть упрощённый интерфейс создания нового правила. Эта опция удобна для быстрого дополнения логики бота на основе не отвеченных запросов из истории диалогов. Ниже мы подробнее разберём процесс создания новых правил.
Редактирование текущего правила на основе ответов бота
Клик на значок ручки в разделе "Правило" откроет упрощённый интерфейс для его редактирования.
Правила
В разделе "Правила" вы найдёте описание логики работы в виде древовидной структуры и возможности для её редактирования. Кликните непосредственно на ссылке "Правила", чтобы увидит весь сценарий диалога робота.
Разворачивая элементы сценария кликом по + рябом с ними, вы можете увидеть дочерние правила. Клик по самому правилу откроет подробную информацию о нём.
Пара слов о терминологии
- В работе мы используем термин "Контекст". Под контекстом мы подразумеваем набор (иначе, список) правил, произошедших от одного родителя и находящихся на одном уровне. Правила в одном контексте считаются сёстрами и, как правило, объединены одной тематикой. У каждого контекста, кроме базового, есть родительское правило, которое находится в родительском контексте. Так же вы можете встретить фразы типа "Бот находится в таком-то контексте". Это означает, что сработало родительское правило и следующий ответ абонента будет обрабатываться правилами "такого-то контекста".
- Базовый контекст - список правил самого верхнего уровня. Как правило, он содержит правила наиболее общей тематики, именно в него вернётся бот, если не найдёт подходящего правила в текущем контексте. Часто вы можете обнаружить самым первым правилом "^Входящий звонок:\s+(.*)" (для автоответчика) или "^Звонок по номеру:\s+(.*)" (для исходящего обзвона). Это "техническое правило" инициализирует бота, а "базовый контекст" следует прямо за ним.
Правила сценария диалога
Разберём подробнее структуру интерфейса правила:
- Родительский вопрос. Содержит ссылку на "родительское правило". Подробнее в разделе 3.2.1
- Бот. Указывает к какому боту относится правило. В одном аккаунте может быть несколько ботов.
- Название. Просто название правило. Влияет только на отображение правила в древовидной структуре сценария.
- Текст вопроса. Обязательный элемент и основное условия выполнения правила. Должен содержать текст или регулярное выражение, на которое среагирует текущее правило. Подробнее о создании текста вопроса мы разберём позднее.
- Текст ответа. Обязательный элемент. Должен содержать текст, который будет синтезирован и произнесён роботом в случае выполнения условия "Текст вопроса".
- Перейти в контекст. Итогом выполнения правила может быть переход к другому (не дочернему). Такое правило должно принадлежать текущему боту и содержать собственные дочерние элементы.
- Порядок сортировки. Определяет, какое правило сработает, если запрос абонента соответствует условиям (текстам вопроса) сразу нескольких правил одного уровня.
- Ссылка на пользователя указывает на профиль автора правила.
- Дата создания. Здесь всё понятно.
Отдельно необходимо упомянуть интерактивный элемент интерфейса правила "Правило сработало на фразах (показать)". Клик на этом элементе выведет список фраз из истории диалогов бота, соответствующих условию (текст вопроса) текущего правила. Это удобно для проверки созданного вами правила. Обратите внимание, если ваш бот имеет долгую историю диалогов, то поиск соответствий может потребовать некоторого времени.
Создание и редактирование правил сценария диалога
В интерфейсе правила вы найдёте три основных кнопки для настройки вашего бота: "Добавить", "Редактировать" и "Удалить".
- Кнопка "Добавить" инициирует создание нового правила через дублирование текущего. То есть открывается интерфейс создания правила и доступные поля заполняются данными из текущего правила.
- А "Редактировать" открывает интерфейс для изменения параметров текущего правила.
Интерфейсы для создания и редактирования правил соответствуют основному интерфейсу правила, появляется только одно новое поле "Примечание". Его содержимое не влияет на работу правила.
Порядок сортировки Вы свободны в указании любых значений в поле "Порядок сортировки". Однако мы рекомендуем следовать нескольким простым принципам, чтобы избежать проблем:
- Чем шире правило - тем оно "тяжелее", тем больше число в поле "Порядок сортировки" и ниже его позиция в списке.
- Универсальные правила, например ".*" или "^\s*$", должны иметь максимальный порядок сортировки. Мы используем 10000.
- Как правило, для рядовых элементов контекста мы используем порядок сортировки в сотнях: 100, 200, 300 и т.д. Это позволяет добавлять новые элементы без обновления порядка сортировки всего списка, например, 150, 175 и т.д.
Родительские и дочерние правила.
Линейная логика подразумевает последовательное выполнение предопределённых команд. При таком подходе подходе все команды по отношению друг к другу являются предыдущими и последующими или родительскими и дочерними. Отсутствие родителя означает, что правила находиться в "основном контексте" или на первой линии. Наличие родительского правила означает, что, помимо основного основного условия "текст вопроса", должно быть выполнено дополнительное условие - следование за родителем. Родственные связи правил изображаются вложенностью в древовидном интерфейсе сценария диалога: дочерние элементы "вложены" в родительские и разворачиваются нажатием на кнопку +.
Переход в контекст
Итогом выполнения правила может быть переход ни только к дочерним, но и к любому другому произвольному правилу. Его можно указать в поле "Переход в контекст". Есть несколько условий:
- Такое правило должно принадлежать текущему боту и содержать собственные дочерние элементы.
- Переход выполняется последним в списке действий для текущего правила. То есть сначала будет произнесён текст и т.д. и последним будет переход.
- Переход по сути подменяет дочерние элементы. Дело в том, что целевое для переходя правило вообще не играет роли: его условия не выполняются, текст не произносится и т.д., просто вслед за выполнением текущего правила мы начинаем выполнять дочерние правила от целевого.
- Если указан переход, то собственные дочерние элементы игнорируются.
Используя наследование и переходы можно создавать сценарии диалогов практически любой сложности, в том числе зацикленные. Кроме того, использование переходов сэкономит вам существенное кличество времени на дублировании идентичных правил для разных ветвей диалога.
Создание текста вопроса
Поле "текст вопроса" содержит условия обработчика результатов распознавания речи абонента. Если обработчик находит совпадение с указанным условием, то правило срабатывает. Можно выделить 4 основных инструмента для формирования условий обработчика, но все они взаимодополняющий друг-друга и пересекаются.
Простой текст
Просто укажите текст, на который должен среагировать бот. В данном случае происходит поиск по полному, добуквенному соответствию.
Варианты
Расширьте вариативность поиска, добавив варианты текста в одно правило. Варианты указываются в скобках и разделяются символом |. Пример: (каша|крупа|ячмень|греча). Правило сработает, если обработчик встретит в ответе абонента любое из слов. Можно значительно расширить выборку, если убрать окончания слов. Например, правило (каш|круп|ячмен|греч) сработает в том числе и на словоформы "гречка", "кашица" и т.д.
Макросы
Мы создали несколько универсальных "текстов вопроса", которые могут существенно упростить вам создание вашего бота. Соответствующие им реакции абонентов встречаются чаще всего. Просто добавьте их в поле "текст вопроса" в квадратных скобках и вам не потребуется тратить время на создание сложных регулярных выражений.
Диалоговые макросы [hello] - Приветствие. Включает в себя самые популярные варианты старта телефонного разговора, в том числе "Алло", "Слушаю" и т.д. [yes] - Да. Позитивный ответ во всём его многообразии. В том числе макрос защищён от "Да нет" и других противных исключений [no] - Нет. Негативный ответ. [dnu] - Не понял. Макрос сработает, если абонент как-либо выразил непонимание. [nothear] - Не слышу. Реагирует на "плохо слышно", "ничего не слышу" и т.д.
Для обзвона [ivr] - Автоответчик. Макрос сработает, если обнаружит в тексте ключевые фразы, типичные для автоответчиков и IVR. [ntg] - Не туда попали. [busy] - Занят. "Сейчас занят", "Мне некогда", "Перезвоните" и т.д.
Регулярные выражения
Регулярки - это просто и удобно. В них нет ничего страшного. Мы изучим самые основные
1. Символы Этот класс регулярных выражений используется для обозначения различных элементов текста, в том числе букв, цифр, пробелов и спецсимволов. Чаще всего используются: . - любой символ (...) - группа, может содержать любой набор символов \s - пробел \S - не пробел
2. Кванторы Нужны для обозначения количества символов * - 0 или больше + - 1 или больше ? - 0 или 1
Пример:
.* - любое количество любых символов \s+ - 1 или более пробелов соедини\S*\s+(меня\s+)?с\s+директором - "меня" может быть или не быть, конструкция \S*\s+ означает "любое количество непробельных символов и 1 или больше пробелов"
Пара слов о ".*" Правил на одном уровне может быть любое количество, однако не стоит надеяться, что вы сможете охватить все возможные варианты ответа абонента. Если бот не найдёт в ответе абонента соответствий текущему набору правил, то он вернётся в базовый контекст (на самый верхний уровень) и повторит поиск по нему. Если вы не хотите, чтобы бот возвращался в начало пути, то используйте универсальное правило ".*". Это регулярное выражение означает просто "любые символы в любом количестве", используйте его как условие для завершающего правила контекста, чтобы обеспечить порядок наследования структуры диалога. Внимание! Данное правило срабатывает всегда и должно быть последним в контексте! Укажите ему максимальный порядок сортировки!