Содержание

Документация - ZiaxFlow

Введение

ZiaxFlow - это система, направленная на автоматизацию рутинных действий операторов, ZiaxFlow применяет машинное обучение для распознавания речи. Робот способен анализировать и понимать намерения человека, а также выделять данные, которые заложены во фразе собеседника.

ZiaxFlow применяет контекстно-интентую систему при разработке логики роботов. Интент (от англ. intent - намерение) - это основное звено в логике, которое позволяет судить о намерении пользователя сделать что-либо (например, задать вопрос). Интенты объединяются контекстами, контекст представляет собой связующее звено между интентами.

В данной документации вы можете ознакомиться с процессом эксплуатации системы. Если у вас есть вопросы, на которые в данной документации нет ответов, то вы можете задать их, написав нам на почту support@ziax.ru Спасибо!

Возможности системы

  • Работает в контекстно-интентной модели
  • Извлекает данные из фраз пользователей
  • Интегрируется с внешними системами с помощью WEB-хуков
  • Возможность управления звонками

При размещении платформы ZiaxFlow на marketplace cloud.yandex.ru для входа в систему по умолчанию используется

  • логин: admin@ziax.ru
  • пароль: 00p4qvUe1nlclqPJfDYk

В Яндекс.облаке хранится ключ, который необходимо ввести во вкладке “Настройка системы” “Auth Key”, а также “Folder id”. Эти параметры дают возможность использовать в качестве голосового движка для бота Yandex Speech Kit.

Документация - ZiaxFlow

Настройка ботов

  • Бот - это непосредственно та программа, которая автоматически или по заданному расписанию выполняет определенные действия.
  • ZiaxFlow - это бот, осуществляющий и принимающий звонки.
  • ZiaxFlow автоматизирует деятельность человека.
  • Для того, чтобы настроить бота, необходимо зайти в меню “настройка бота”, а затем нажать кнопку “добавить бота”.

В "настройках бота" пользователь может задать

  • имя бота,
  • голос бота (мужской или женский),
  • скорость,
  • чувствительность распознавания (бот показывает оптимальные результаты при чувствительности распознавания 0.9),
  • количество определений тишины (по умолчанию данное количество равно 3 и после того, как бот трижды скажет "можете говорить погромче, я вас не слышу", он положит трубку),
  • время ответа клиента (то есть временной промежуток, в течение которого клиент может озвучивать свою фразу)
  • время определения тишины (то есть временной промежуток между молчанием клиента и фразой робота "можете говорить погромче, я вас не слышу").

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

Понятие контекстов и правила их использования

Контекст - это связующее звено между интентами (намерениями). У каждого интента (намерения) есть два контекста:

  • Входящий контекст
  • Исходящий контекст

Исключение: у интента (намерения) Default Welcome Intent отсутствует входящий контекст; исходящий контекст можно как задать, так и не задавать его. В случае, если для Default Welcome Intent задан исходящий контекст с временем жизни больше 0, при следующем запросе система будет искать интенты (намерения) в заданном контексте.

В данном случае в интенте Default Welcome Intent задан исходящий контекст start (время жизни 15) и ответная фраза “здравствуйте, вы позвонили в логистическую компанию ланкс, как я могу к вам обращаться”, соответственно, в дальнейшем диалоге, используя входящий контекст start, вы сможете ответить на поставленный вопрос. Например, меня зовут Иван, мое имя Иван, я Иван и т.д


Контексты можно удалять. Удаление осуществляется в случае, если

  • Заданное вами время жизни контекста закончилось
  • В исходящих контекстах вы задали время жизни ноль

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

В свою очередь, входящий контекст может быть только один, тогда как количество исходящих - не ограничено.

Если система не находит ни одного подходящего интента (намерения) в текущих контекстах, она автоматически ищет интенты, у которых входящие контексты отсутствуют. Если система не находит интентов с пустыми входящими контекстами, то в качестве результата выводится Default Fallback Intent.

По умолчанию в Default Fallback Intent закреплены такие ответы бота как “последняя фраза мне не ясна, скажите, пожалуйста, погромче другими словами”, “скажите, пожалуйста, громче предыдущую фразу, не совсем понятно”, “можете сказать то же самое другими словами и, пожалуйста, погромче”. Система ZiaxFlow достаточно гибкая, и пользователь имеет возможность не только использовать изначально добавленные фразы, но и самостоятельно настраивать Default Fallback Intent в зависимости от контекста диалога.

Так, например, боту не удалось понять намерение клиента в разговоре, где нужно узнать его номер телефона, клиент попал в Default Fallback Intent, и, казалось бы, должен был услышать что-то вроде “я вас не понимаю”, но при этом бот отвечает “скажите, пожалуйста, ваш номер телефона”. Таким образом, использование фраз, более привычных для повседневной человеческой речи, позволяет боту скорректировать диалог, а клиенту не забыть вопрос, который ему задан, и донести необходимую информацию.

Очередность выдачи того или иного ответа в Default Fallback Intent зависит от времени жизни контекста. Бот озвучит ответ, закрепленный для того контекста, чье время жизни на данный момент больше, чем у других.


Понятие интентов и правила их использования

Интент - это основное звено в логике системы, которое представляет собой намерение пользователя что-либо сделать (например, в интенте “Имя” пользователь может одновременно совершить два действия: получить ответ на вопрос, поставленный в Default Welcome Intent, а также задать новый либо уточняющий вопрос в поле “ответные фразы”).



В системе ZiaxFlow имеется функционал, позволяющий признать интент успешным, поле “считать интент успешным” находится непосредственно под полем “название”. Признание интента успешным предполагает, что диалог, дошедший до данного интента, признается удачным и отображается в истории в качестве такового. Если галочка в поле “считать интент успешным” не стоит, значит, данный интент успешным не признается, и диалог, дошедший до данного интента, отображается в истории как неудачный.


Существует два типа интентов:

  • Закрытый интент (по умолчанию)
  • Открытый интент

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

Стоит заметить, что существует специальное поле, куда помещаются фразы, а именно поле “фразы, по которым будет отрабатывать интент”.

Открытый интент позволяет обработать не конкретные фразы, указанные пользователем, а любые фразы, которые будут сказаны человеком. Данный интент начинает работать в том случае, если на него имеется ссылка в закрытом интенте. Открытый интент чаще всего используется в том случае, если клиент должен ответить на поставленный вопрос в свободной форме.

Как отмечалось выше, система ZiaxFlow оперирует двумя видами интентов: закрытым и открытым, которые создаются пользователем, но при этом существуют также интенты по умолчанию, а именно, Default Welcome Intent и Default Fallback Intent.

В Default Fallback Intent пользователь попадает в том случае, если система не понимает, что было сказано (причиной подобной ситуации может являться низкое качество связи, некорректные фразы, которым не обучен бот и т.д). В Default Fallback Intent имеется специальная опция, позволяющая ограничить количество попаданий в данный интент, задается опция в поле “количество вызовов”, и, по сути, представляет собой время жизни интента.

Так, например, представим, что заданное количество вызовов - 2. Что же может произойти в данном случае? Система ZiaxFlow предупредит пользователя о том, что ей непонятны намерения человека, но лишь ограниченное количество раз, а затем совершит одно из установленных действий (action): redirect (перевод на оператора), hangup (конец диалога).

Параметры. Сущности

Параметры. В закрытом интенте существует возможность извлекать из фраз параметры.

В представленном примере используется параметр name (имена). Имя параметра необходимо написать самостоятельно. Для извлечения параметра следует создать сущность либо воспользоваться системными сущностями. Системные сущности подсвечиваются зеленым цветом, сущности, созданные пользователем, не подсвечиваются.

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

В случае, если вы хотите использовать параметр в поле ответа, нужно заключить его в знак {}, то есть, если имя параметра name, то ответная фраза будет выглядеть следующим образом: “Я правильно понял, что ваше имя {name}?”

В указанном случае параметр позволяет использовать не одно имя, предусмотренное в поле “фразы, по которым будет отрабатывать интент”, а любое необходимое имя.

Так, например, если в поле “фразы, по которым будет отрабатывать интент” пользователь указал имя Иван, но не выбрал параметр name, в ответе на вопрос, поставленный в Default Welcome Intent “Здравствуйте, вас приветствует логистическая компания Ланкс, как я могу к вам обращаться?”, система поймет только ту фразу, в которой будет содержаться имя Иван.

Если же пользователь выбрал параметр name и выделил во фразах имя Иван, то в дальнейшем при ответе на вопрос система будет искать любое имя, названное человеком.

В ответных фразах внутри параметра можно поставить вспомогательное слово .original ({city.original}), которое позволит вывести не сохраненный в сущностях синоним, а именно ту фразу, которая была сказана пользователем.

Например, в синонимах вы указали Магазин Дикси /Санкт-Петербург/, в ответных фразах “я правильно поняла, что адрес подачи {city}?”. В таком случае между ботом и клиентом возникнет следующий диалог:

-Здравствуйте, откуда вас забрать?
-Магазин дикси
-Я правильно поняла, что адрес подачи Магазин Дикси /Санкт-Петербург/?

Для того, чтобы слово /Санкт-Петербург/ при диалоге распознавалось, но бот его не произносил, необходимо использовать .original, то есть в синонимах следует указать Магазин Дикси /Санкт-Петербург/, а в поле ответные фразы - “я правильно поняла, что адрес подачи {city.original}?”

-Здравствуйте, откуда вас забрать?
-Магазин дикси
-Я правильно поняла, что адрес подачи магазин дикси?

Для того, чтобы бот произнес не нормализованный машинный параметр (например, {city}), а также не ту фразу, которую сказал пользователь (например, {city.original}), необходимо использовать .recieve (например, {city.recieve}). Данная конструкция позволяет не только извлечь параметр, но и произнести его так, как это необходимо в разговорной речи.

Сущности. Как уже говорилось выше, для создания параметра пользователю необходимы сущности. Сущности делятся на два вида:

  • Системные сущности (см. приложение)
  • Сущности, созданные пользователем

Сущности, создаваемые пользователем. Для того, чтобы создать сущность, необходимо найти на панели “сущности”, а затем “добавить сущность”.

После того как сущность добавлена, необходимо указать ее название, а также синонимы. Для примера создадим сущность “города”. В синонимы следует поместить те города, которые необходимы пользователю. Укажем Рязань, Саратов, Москву. Синонимы создаются в отдельном поле с одноименным названием. Для более точной работы системы синонимы нужно просклонять.



После самостоятельного добавления сущности, пользователь может воспользоваться ей в любом интенте в поле “параметры”.

В поле “параметры” имеется компонент “текст вопроса”, данный компонент позволяет оповестить пользователя о том, что он не назвал имя, город и т.д, то есть система не смогла извлечь из фразы параметры, необходимые для данного интента, поэтому задает уточняющий вопрос по тому параметру, который не смогла извлечь.

Голосовой и текстовые каналы

Система ZiaxFlow располагает возможностью использовать не только голосовой канал для осуществления контакта с роботом, но и текстовые каналы. На данный момент для коммуникации с чат-ботом в ZiaxFlow доступны такие популярные messangers, как Telegram и Viber, социальная сеть Вконтакте.

Для переключения между каналами существует специальная кнопка с соответствующим названием. Ответные фразы для голосового канала voip и текстовых каналов Telegram (Вконтакте, Viber) могут отличаться, тогда как “фразы, по которым будет отрабатывать интент” одинаковые.

Как в голосовом, так и в текстовых каналах имеется возможность выбрать необходимую временную зону (timezone), т.е. часовой пояс, чтобы осуществлять взаимодействие с пользователем, учитывая текущее время в его городе.


Работа с API

В ZiaxFlow также используется канал API, для осуществления доступа к системе через API необходимо сформировать запрос следующим образом:

URL для запроса:

http://IDADDR:8444/ 

Формат запросов:

Headers:
Сontent-type: text/json
Authorization: Key (Ключ авторизации агента)

Тело запроса:

{"speech":"ТЕКСТ ПОЛЬЗОВАТЕЛЯ","sessionId":"УНИКАЛЬНЫЙ ID СЕССИИ","time_zone":"+3"}

Ответ:

{"sessionId":"УНИКАЛЬНЫЙ ID СЕССИИ","speech":"ОТВЕТНАЯ ФРАЗА РОБОТА"}

Команды для ATC

Данный компонент позволяет выполнить одно из следующих действий:

  • hangup - закончить звонок
  • redirect - перевести звонок на нужный номер
  • long - ожидать от клиента длинной фразы (обычно используется с открытыми интентами)

WebHook

Компонент WebHook позволяет использовать данные из сторонних источников, то есть те данные, которые не были указаны в системе ZiaxFlow. Для того, чтобы получить информацию из WebHook, необходимо отправить запрос.

				       
					{
					"data": {
							"action": "start",
							"payload": [
								{"mail":"mail.yandex.ru"},
								]
							},
					"parameters": {},
					"session": "sip1544166348.4/207",
					"speech": ["Здравствуйте, откуда вас забрать?"],
					"user": "Иван",
					"query": "Здравствуйте",
					"context": [
								{"name":"name","lifespan":0},
								{"name":"age","lifespan":10}
								]
					}
		            

Расшифровка компонентов:

  • action - action из настроек intenta
  • payload - это данные, которые пользователь указывает в настройках интента
  • parameters - это те параметры, которые системы извлекла за время диалога (если параметры не были заданы, значение может оставаться пустым)
  • session - id текущей сессии
  • speech - ответ робота
  • user - имя пользователя
  • query - текст пользователя
  • context - текущие контексты диалога

Ответ на запрос:

Если пользователю необходимо изменить текст ответа или команду для АТС, то в ответе следует отдать системе следующие параметры:

				        
						{
						"pbx":{"action":"redirect","action_data":"400"},
						"speech":["пока"]
						}
					

Расшифровка компонентов:

  • pbx - команда для АТС , заданная в настройках интента
  • speech - ответ робота

Обязательными параметрами для pbx являются action и action_data. Action включает в себя: redirect, hangup и long.

  • redirect - перевод звонка (в action_data необходимо указать номер для перевода)
  • hangup - завершение звонка (action_data пустой)
  • long - команда для обработки длинного ответа (action_data пустой)

Если никаких изменений вносить не нужно, параметры остаются пустыми.

Следует сказать о том, что между командами для ATC и действиями из Webhook существует определенный приоритет, данный приоритет отдается командам для АТС, т.е. если в команде для АТС и в Webhook указаны разные action, отрабатывать будет действие из команды для АТС из настроек интента.

Стоит заметить, что с помощью Webhook можно управлять контекстами, а именно:

  • удалять контексты (в данном примере с помощью lifespan: 0 удален контекст name);
  • 												{
    												"speech":["ваше имя"],
    												"pbx": {
    													"action":"redirect",
    													"action_data":"115",
    													"context": [
    														{"name":"name","lifespan":0}, 
    														{"name":"age","lifespan":10}
    														]
    													}
    												}
    											
  • добавлять контексты (в данном примере добавлен контекст age);
  • 																{
    																"speech": ["ваше имя"],
    																"pbx": {
    																	"action": "redirect",
    																	"action_data": "115",
    																	"context": [
    																		{"name": "age","lifespan": 10}
    																		]
    																	}
    																}
    
    																	
  • увеличивать время жизни контекста.

Но, необходимо оговориться, что задействование контекстов с помощью Webhook не является обязательным.

Sys.name, sys.number

Sys.name, sys.number - это переменные каналов, которые генерируются системой автоматически (на данный момент в системе имеется два канала: voip - голосовой канал и telegram - мессенджер, текстовый канал). При использовании voip в качестве sys.number выступает номер телефона звонящего; sys.name зависит от совершаемого звонка. При входящих звонках sys.name соответствует номеру телефона звонящего, а при автообзвоне в переменную подставляется имя, которое загружено в таблицу для обзвона.

В текстовых каналах sys.number отсутствует, в переменную sys.name записывается логин пользователя.

Обучение

Для корректной работы система нуждается в обучении, которое происходит как автоматически при сохранении каждого нового интента, так и в ручном режиме в случае, когда это необходимо. Более того, в ручном режиме можно обучать либо каждый отдельный интент, либо всего агента целиком. Для обучения интента справа от него необходимо нажать фиолетовую иконку со стрелками.


Процесс обучения отражается в progress bar во вкладке ZiaxFlow (находится внизу левого меню).

Тест

После обучения системы следует провести тестирование внесенных изменений. Благодаря тестированию пользователь имеет возможность следить за работой системы последовательно на каждом этапе.

В связи с использованием в системе ZiaxFlow не одного, а нескольких типов каналов (голосовой, текстовые) при проведении тестирования необходимо выбрать нужный канал в выпадающем списке.

Также при выполнении тестирования имеется возможность внесения изменений в sys.name и sys.number (в голосовом канале) и sys.name (в текстовом канале). Эти данные заполнены по умолчанию, и самостоятельное их заполнение не является обязательным.


История

Компонент “история” непосредственно связан с компонентом “тест”. В истории сохраняются все проведенные пользователем тесты. Огромным преимуществом “истории” является возможность выведения на экран ошибок, которые показывают пользователю, в каком случае система отработала некорректно и по какой причине. Одна из основных ошибок связана с тем, что при ответе на вопрос человек использовал ту фразу, которой система не была обучена, именно поэтому следует обучить систему максимально возможному количеству слов и словосочетаний.


В системе предусмотрена возможность анализа произведенных звонков, то есть пользователь,имеющий доступ к “истории”, может самостоятельно оценить звонок как “успешный/неуспешный”, а также поставить соответствующий статус, а именно “исправленный/неисправленный”. Более того, пользователь вправе оставлять необходимые комментарии к совершенным звонкам и экспортировать (скачивать) таблицу с соответствующими результатами обзвона.



В компоненте “история” есть фильтр, позволяющий отсортировать историю по дате, по наличию ошибок, а также в “истории” отображается общее количество звонков, количество “успешных/неуспешных” звонков и процент успешности.

Приложение

Название сущности

Описание

Пример

Возвращаемый объект

sys.name

Извлекаются имена.

ваня

«иван»

sys.numbers

Извлекаются числа, которые отображаются в виде цифр.

23

«23»

sys.numbers_list

Извлекаются числа, которые отображаются в виде цифр, отличие sys.numbers от sys.numbers_list состоит в возвращаемом объекте, возвращаемый объект sys.numbers - строка, sys.numbers_list - массив

23 4

["23","4"]

sys.address_house

Извлекаются номера домов

24

“24”

56а

“56а”

56 а

“56а”

23/3

“23/3”


25 / 9

“25/9”

23 строение 5

“23 строение 5”

6 корпус 4

“6 корпус 4”

sys.email

Извлекается e-mail

user@example.com

"user@example.com"

sys.phone-number

Извлекается номер телефона, при этом пробелы, слеши и дефисы будут убраны

(123) 456 7890

"1234567890"

+1 (123) 456-7890

"+11234567890"

sys.time

Извлекает время, а также интервал времени

8 30

"8:30"

8:30

"8:30"

8

"8:00"

8 вечера

"20:00"

половина 8

"7:30"

половина 8 вечера

"19:30"

вечером

"18:00/23:00"

через час

"10:03"

через 2 часа

"11:03"

через 15 минут

"9:18"

через минуту

"9:04"

через пол часа

"9:33"

sys.osago_number

Извлекаются номера полисов ОСАГО

апр1234567890

"апр1234567890"

апр 1234567890

"апр1234567890"

АПР1234567890

"АПР1234567890"

АПР 1234567890

"АПР1234567890"

sys.last-name(ru)

Извлекаются фамилии

петров

"петров"

sys.date

Извлекаются даты, как в числовом, так и в текстовом выражении

25.07.1987

“25.7.1987”

25.07

“25.7.2019”

25/07/1987

“25.7.1987”

25,07,1987

"25.7.1987"

25

“25.1.2019”

25 07 1987

“25.7.1987”

25 декабря

“25.12.2019”

25 декабря 2018

“25.12.2018”

12.12.90

"12.12.1990"

12.12.20

"12.12.2020"

12 мая 12

"12.5.2012"

через день

"10.2.2019"

через 3 недели

"1.3.2019"

через 2,5 месяца

"24.4.2019"

декабрь

“01.12.2019/31.12.2019”

декабрь 2018

“01.12.2018/31.12.2018”

сегодня

”9.1.2019”

завтра

“10.1.2019”

вчера

“8.1.2019”

позавчера

“7.1.2019”

послезавтра

“11.1.2019”

sys.passport_series_RU

Извлекается серия паспорта

1111

1111

11 11

1111

1 1 1 1

1111

sys.passport_number_RU

Извлекается номер паспорта

111111

111111

111 111

111111

11 11 11

111111

sys.car_number_RU

Извлекаются государственные регистрационные номера автомобилей

в 001 вс 777

в001вс777

в001вс 777

в001вс777

в 0 0 1 вс 77

в001вс77

в001вс77

в001вс77

Видео примеры

Видео примеры

Ссылки на ресурсы