Содержание

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

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

Введение

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


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


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

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

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

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

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

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

Основной функционал ZiaxFlow

Настройка внешних каналов

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


Подключение Агента к телефонному каналу (VoIP)

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

  • Имя канала;
  • Голос бота (мужской или женский);
  • Скорость;
  • Чувствительность распознавания (бот показывает оптимальные результаты при чувствительности распознавания 0.9);
  • Количество определений тишины (по умолчанию данное количество равно 3 и после того, как бот трижды скажет "можете говорить погромче, я вас не слышу", он положит трубку);
  • Время ответа клиента (то есть временной промежуток, в течение которого клиент может озвучивать свою фразу; если клиент заканчивает фразу раньше, чем указано во времени ответа, то система определяет это через параметр "Время определения тишины");
  • Время определения тишины (то есть временной промежуток между молчанием клиента и фразой робота "можете говорить погромче, я вас не слышу"; это таймер для определения конца фразы);
  • Функция автообзвона для агентов исходящей линии;
  • "Record call" - функция записи телефонных разговоров;
  • Прерывывание - возможность прерывания ответной фразы робота во время диалога;
  • Агент для канала VoIP (для выбора доступны только агенты, в настройках которых предусмотрено взаимодействие с каналом VoIP);
  • Описание канала (поле для внесения необходимого описания канала).

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

Подключение Агента к каналу Telegram

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

  • Имя канала
  • Token (Поле для вашего token'a, который создается в Telegram через BotFather с помощью команды "/token")
  • Агент для канала Telegram (для выбора доступны только агенты, в настройках которых предусмотрено взаимодействие с каналом Telegram)
  • Описание канала (поле для внесения необходимого описания канала)

Подключение Агента к каналу Яндекс.Алиса

В настройках канала Яндекс.Алиса пользователь может задать

  • Имя канала
  • Агент для канала Яндекс.Алиса (для выбора доступны только агенты, в настройках которых предусмотрено взаимодействие с каналом Яндекс.Алиса, важно учитывать, что для прохождения модерации необходимо в агента добавить ответы на запросы «Помощь» и «Что ты умеешь»?),
  • Описание канала (поле для внесения необходимого описания канала)

Подключение Агента к каналу Bitrix

В настройках канала Яндекс.Алиса пользователь может задать

  • Имя канала
  • Агент для канала Bitrix (для выбора доступны только агенты, в настройках которых предусмотрено взаимодействие с каналом Bitrix)
  • Описание канала (поле для внесения необходимого описания канала)

Подключение Агента к каналу LiveTex

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

  • Имя канала
  • Token (Token можно скопировать в личном кабинете LiveTex на странице "Настройки бота")
  • Avatar URL являетcя необязательным полем
  • Поле URL формулируется автоматически системой после выбора агента
  • Агент для канала LiveTex (для выбора доступны только агенты, в настройках которых предусмотрено взаимодействие с каналом LiveTex)
  • Важно учитывать при создании интента на канале с переводом на оператора, что логика устроена следующим образом: если не указан оператор (поле ID) (или указан некорректно) обращение будет направлено на доступного оператора

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

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

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

Исключение: у интента (намерения) 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 имеется функционал, позволяющий признать интент успешным, поле “считать интент успешным” находится непосредственно под полем “название”. Признание интента успешным предполагает, что диалог, дошедший до данного интента, признается удачным и отображается в истории в качестве такового. Если галочка в поле “считать интент успешным” не стоит, значит, данный интент успешным не признается, и диалог, дошедший до данного интента, отображается в истории как неудачный.


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

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

Закрытый интент

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

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

НАПОЛНЕНИЕ ФРАЗАМИ В ЗАКРЫТОМ ИНТЕНТЕ должно происходить осознанно, каждую фразу желательно подготовить. Лучше всего убрать все данные которые не несут смысловую нагрузку для данного интента. Также нужно стараться следить за тем, чтобы обучающие фразы в разных интентах, которые входят в один контекст, не имели дублей или слишком близкого смысла. В противном случае, после обучения, вы получите не правильную классификацию интентов внутри данного контекста.

Открытый интент

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

Файловый интент

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

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

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

Для корректной работы на текстовых каналах установлены следующие ограничения:

Telegram

  • Максимальный размер файла не более 50 МБ
  • Поддерживаемые форматы:
    • документы: txt, pdf, doc, docx, rtf
    • изображения: jpg, png, gif, svg, webp
    • аудио: mp3, wav, flac
    • видео: webm, mp4, mov, wmv, avi, mkv
  • Пересылка сообщений от групп и пользователей запрещена

Webim

  • Максимальный размер файла не более 10 МБ
  • Поддерживаемые форматы:
    • документы: doc, docx, rtf, txt, pdf
    • изображения: png, jpg, jpeg, gif, webp
    • аудио: oga, ogg

Viber

  • Максимальный размер файла не более 200 МБ
  • Поддерживаемые форматы:
    • документы: doc, docx, txt, rtf, pdf
    • изображения: jpg, png, gif, svg, webp
    • аудио: mp3, ogg, wav, oga, flac
    • видео: webm, mp4, mov, wmv, avi, mkv

VK

  • Максимальный размер файла не более 50 МБ
  • Поддерживаемые форматы:
    • документы: doc, docx, rtf, txt, pdf
    • изображения: jpg, png, gif, svg, webp
    • аудио и видео форматы не поддерживаются
  • ВАЖНО! В чат важно отправлять по одному файлу
  • Пересылка сообщений от групп и пользователей запрещена

Как отмечалось выше, система 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}). Данная конструкция позволяет не только извлечь параметр, но и произнести его так, как это необходимо в разговорной речи.

Параметр param.original записывает параметр, сказанным пользователем, в оригинальном виде. Параметр param.receive представляет собой уже преобразованную системой форму параметра.

Подробнее разберем на примерах

Пример 1 (Параметр "Дата")

Фраза: "забронировать квартиру с четырнадцатого апреля по 15 апреля"

-data.original " четырнадцатого апреля" и "15 апреля" соответственно

-data.receive "14.04.2022" и "15.04.2022" соответственно

Пример 2 (Параметр "Город")

Фраза "Интересует адрес офиса в Москве"

-city.original "Москве"

-city.receive "Москва"

Пример 3 (Параметр "Город")

Фраза: "Нужен адрес офиса в Питере"

-city.original "Питере"

-city.receive " Санкт-Петербург

Пример 4 (Параметр "Время")

Но, к примеру, если сказанная форма пользователем совпадает с преобразованной то param.original и param.receive совпадают

Фраза: "Нужно заехать в 12:00"

-time.original "12:00"

-time.receive "12:00"

Примечание: Когда вы размечаете параметр во фразе для обучения, обратите внимание, что робот будет искать параметр именно в том месте, где вы его указали, то есть в начале предложения, в середине или в конце.

Робот не извлечет параметр в случае, если во фразах для обучения у вас, к примеру, указано "мне имя иван дали" (где "иван" - параметр), а клиент формулирует свой ответ следующим образом: "мне дали имя иван".

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

Совет 1: При обучении интента, содержащего параметры, внимательно отнеситесь ко фразам для обучения. В одной и той же фразе меняйте местоположение параметра. Например, указывайте не только "мне имя иван дали", но и "мне дали имя иван","имя иван мне дали".

Совет 2: При обучении интента, содержащего только параметры без вспомогательных слов (без лингвистики), помните, что приоритет будет иметь тот, который в списке параметров стоит первым. Например, сначала Вы добавили параметр date, а затем time. В первую очередь, робот начнет искать во фразе собеседника date, а уже затем time.

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

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

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

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



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

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

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

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

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

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


Автоинформирование

Роботы Ziax могут не только принимать входящие звонки, но и осуществлять исходящие. Для того, чтобы использовать робота для исходящего обзвона, его необходимо подключить к голосовому (voip) каналу в модуле "Настройки ботов". Во время настройки не забудьте указать в поле "Автообзвон (автодозвон)" значение "да", иначе робот не будет отображаться в выпадающем списке при создании задания для автоинформирования.

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

Файл включает такие поля, как

  • id_client (поле обязательное для заполнения; у каждого клиент должен быть уникальный id)
  • fio (поле заполнять не обязательно; оно подлежит заполнению в случае, если во время обзвона требуется озвучивать имя клиента)
  • phone_id (поле обязательное для заполнения; значение данного поля всегда 1)
  • tel (поле обязательное для заполнения, где указывается номер абонента, которому необходимо позвонить)
  • timezone (поле обязательное для заполнения, где указывается часовой пояс абонента, которому необходимо позвонить; по умолчанию - 3)
  • tag1-tag15 (поля заполнять не обязательно; они подлежат заполнению в случае, если во время диалога необходимо озвучивать какие-либо данные для клиента (например, срок истечения срока действия полиса)

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

Задание для автоинформирования включает

  • название
  • время работы (день недели и часы работы)
  • канал, с которого будут осуществляться звонки
  • количество линий, которое будет задействовано
  • количество попыток дозвона
  • временной интервал между попытками дозвониться клиенту
  • указание канала VoIP, которого предстоит использовать для осуществления звонков
  • файл формата csv, содержащий данные для обзвона (номер телефона клиента, id клиента и т.д)

После того, как все данные указаны, задание необходимо сохранить, и оно отобразится непосредственно во вкладке автоинформирование со статусом "Создано" и кнопкой "Запустить". Соответственно, после запуска задания робот начинает обзвон клиентов.

Примечание

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

На текстовых каналах реализована исходящая рассылка сообщений. Метод отправки сообщение через API представлен в разделе "Работа с API" под названием "Отправка исходящего текстового сообщения"

На текущий момент поддерживаются мессенджеры:

  • Telegram

Работа с API

Через API можно осуществлять управление системой, а также получать доступ к NLU, если вам необходимо подключать свой текстовый канал к ZIAX.

Метод работы с NLU:

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

URL для запроса(Метод POST):

https://example.ru/channel/api/{id_agent}

Вместо example.ru используйте ваше доменное имя или IP адрес.

{id_agent} - идентификатор агента. Его можно посмотреть либо в адресной строке, либо в настройках агента.

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

Headers:
Сontent-type: text/json
Authorization: {API KEY}

{API KEY} - Ключ авторизации агента. Его можно найти в настроках агента в разделе ZIAXFLOW (см. скриншот)

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

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

Ответ:

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

В случае, если во время диалога параметры не были извлечены, значение parameters остается пустым.

Методы API личного кабинета:

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

URL для API версия 1:

https://example.ru/userapi/v1/

Авторизация:

Можно добавлять ключ пользователя в хедер, либо в GET параметр.

Пример ключа в Хедере:

					“Authorization: Bearer YOUR_API_TOKEN_HERE”
					

Пример ключа в GET параметре:

					curl -k https://example.ru/userapi/v1/test?api_token=YOUR_API_TOKEN_HERE
					

МЕТОД -> ПРОВЕРКА КЛЮЧА АВТОРИЗАЦИИ:

					Метод: GET
					URL: /userapi/v1/test
					CURL пример:
					curl -k https://ipaddr/userapi/v1/test?api_token=YOUR_API_TOKEN_HERE
					

ОТВЕТ:

					Auth successful. Email: test@test.ru
					

МЕТОД -> СОЗДАНИЕ ЗАДАНИЯ АВТОИНФОРМИРОВАНИЯ:

					Метод: POST
					Обязательный хедер: "Content-Type: application/json"
					URL: /userapi/v1/autocall/create
					CURL пример:
					curl -k -X POST -H "Content-Type: application/json" https://ipaddr/userapi/v1/autocall/create?api_token=YOUR_API_TOKEN_HERE
					

ТЕЛО ЗАПРОСА:

					{
					  "numbers": [
					    		{
					      		"num": "79990000000",
					      		"timezone": "+3",
					      		"fio": "роман",
					      		"id_client": "CL66575675",
					      		"tag1": "tag1",
					      		"tag6": "tag6",
					      		"tag15": "tag15"
					    		},
					    		{
					      		"num": "79993331177"
					    		}
					  	],
					  "settings": {
					    "name": "test",
					    "sip": "1",
					    "bot_id": "9",
					    "autostart": "0",
					    "all_time": "0",
					    "time": {
					      "Monday": {
					        "start": "09:00",
					        "end": "20:00"
					      },
					      "Tuesday": {
					        "start": "09:00",
					        "end": "20:00"
					      }
					    },
					    "lines": "6",
					    "attempts": "6",
					    "interval": "60"
					  }
					}
					

В параметре “numbers” у каждого обязательный параметр - “num”. Если не указан “timezone”, то подставляется “+3”, если не указан “id_client”, то в качестве “id_client” проставляется номер клиента. Должен быть хотя бы 1 номер, все необязательные поля могут отсутствовать, тогда они не добавятся в задачу на прозвон. Поля tag1 - tag15 могут присутствовать, максимальное количество “tagN” - 15 (начинается с 1)

В параметре "settings" обязательные параметры все, кроме "time", если параметр "all_time" = “1”

autostart - если указать “1”, то задание сразу запустится, если “0”, то присвоится статус “Создано”

all_time - если стоит “1”, то звонки будут идти в любое время, если “0”, то необходимо обязательно указывать параметр time, где мы задаем интервалы, в которые можно звонить.

sip - ID SIP учетной записи для исходящих звонков

id_client - если он не указан то подставляется номер телефона

bot_id - ID внешнего канала из меню “ВНЕШНИЕ КАНАЛЫ”, необходимо указывать тот внешний канал, который обрабатывает voip канал.

ОТВЕТ:

					{
					"status": "success",
					"id_job": "87",
					}
					

МЕТОД -> ЗАПРОС СТАТУСА И НАСТРОЕК ЗАДАНИЯ АВТОИНФОРМИРОВАНИЯ:

					Метод: GET
					URL: /userapi/v1/autocall/{id_job}
					CURL пример:
					curl -k https://ipaddr/userapi/v1/autocall/14?api_token=YOUR_API_TOKEN_HERE
					id_job - ID задания
					

ОТВЕТ:

					{"status":"success",
					"data":{
						"id":14,
						"settings":{"name":"test",
									"sip":1,
									"bot_id":9,
									"status":2,
									"time":{
									"Monday":{"start":"00:00","end":"23:59","check":"on"},
									"Tuesday":{"start":"00:00","end":"23:59","check":"on"},
									"Wednesday":{"start":"00:00","end":"23:59","check":"on"},
									"Thursday":{"start":"00:00","end":"23:59","check":"on"},
									"Friday":{"start":"00:00","end":"23:59","check":"on"},
									"Saturday":{"start":"00:00","end":"23:59","check":"on"},
									"Sunday":{"start":"00:00","end":"23:59","check":"on"}},
									"lines":6,
									"attempts":6,
									"interval":60
									}
							}
					}
					

МЕТОД -> ЗАПРОС СТАТУСА КЛИЕНТА В ЗАДАНИИ АВТОИНФОРМИРОВАНИЯ:

					Метод: GET
					URL: /userapi/v1/autocall/{id_job}/{id_client}
					CURL пример:
					curl -k https://ipaddr/userapi/v1/autocall/5/79998883322?api_token=YOUR_API_TOKEN_HERE

					id_job - ID задания
					id_client - ID клиента
					

ОТВЕТ:

					{"status":"success",
					"data":{
							"job_id":15,
							"timezone":"+3",
							"fio":"",
							"id_client":"79998883322",
							"next_call_date":"1970-01-01 00:00:00",
							"attempts":0,
							"status":0,
							"busy":0
							}
					}
					

МЕТОД -> ОТПРАВКА ИСХОДЯЩЕГО ТЕКСТОВОГО СООБЩЕНИЯ:

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

					 Метод: POST
					 URL: /userapi/v1/bot/message
					 CURL пример:
					 curl -i -X POST \
					-H "Content-Type:application/json" \
					-H "Authorization:Bearer your_user_api_key_here" \
					-d \
					'{"channel_id":"30","user_id":"123123123","text":"тестовое сообщение"}'
					'https://example.ru/userapi/v1/bot/message'
					

channel_id - ID канала

user_id - ID пользователя телеграм (в системе Ziax user_id можно найти в истории агента в созданном чате бота и нужного пользователя)

ОТВЕТ:

						{"status":"success"
						}
						

МЕТОД -> СКАЧИВАНИЕ АУДИОЗАПИСИ ПО ID ДИАЛОГА

Этот метод используется для того, чтобы скачать аудиозапись разговора с роботом. Если авторизация пройдена успешно и файл существует, то сразу начнется скачивание

					 Метод: GET
					 URL: /userapi/v1/get_record_voip
					 Пример URL для скачивания файла:
					 https://example.ru/userapi/v1/get_record_voip?api_token=token_example&chat_id=1665998272.2
					 

api_token - токен пользователя системы который имеет доступ к агенту запись разговора которого мы собираемся скачивать

chat_id - ID диалога

id_job -> settings -> status - 1-создано, 2-запущено, 3-остановлено, 4- закончено

МЕТОД -> ЗАПРОС ВНЕШНИХ КАНАЛОВ:

					Метод: GET
					URL: /userapi/v1/bot/
					CURL пример:
					curl -k https://ipaddr/userapi/v1/bot/?api_token=YOUR_API_TOKEN_HERE
					

ОТВЕТ:

					{"status":"success",
					"data":[
							{"id":9,"name":"bot 1","channel":0},
							{"id":11,"name":"bot 2","channel":5},
							{"id":12,"name":"bot 3","channel":4},
							{"id":13,"name":"bot 4","channel":9}
							]
					}
					

id - ID внешнего канала в системе

name - название внешнего канала в системе

channel - ID типа внешнего канала

СПИСОК ID ВНЕШНИХ КАНАЛОВ:
1 - Telegram
2 - Api
3 - Vk
4 - Viber
5 - Яндекс Алиса
6 - WebWidget
7 - LiveTex
8 - Webim
9 - RTU-Text
10 - VoIP

МЕТОД -> ЗАПРОС ВНЕШНИХ КАНАЛОВ ПО ТИПУ КАНАЛА:

					Метод: GET
					URL: /userapi/v1/bot/{channel}
					CURL пример:
					curl -k https://ipaddr/userapi/v1/bot/1?api_token=YOUR_API_TOKEN_HERE
					

ОТВЕТ:

					{"status":"success",
					"data":[
							{"id":9,"name":"bot 1","channel":1}
							]
					}
					

Следует учесть, что при запросе API выводится список всех каналов, т.к. API имеет доступ на любой внешний канал

next_call_date - время следующего звонка
status - статус звонка, совершенного по указанному номеру: 0-не было звонка, 1-не успешно, 2-успешно, 3-не звонить
attempts - количество совершенных попыток дозвона
busy - совершается ли звонок по этому номеру в данный момент: 0-нет, 1-идет

МЕТОД -> ЗАПРОС SIP АККАУНТОВ:

					Метод: GET
					URL: /userapi/v1/sip/
					CURL пример:
					curl -k https://ipaddr/userapi/v1/sip/?api_token=YOUR_API_TOKEN_HERE
					

ОТВЕТ:

					{"status":"success",
					"data":[
							{"id":1,"name":"221"}
							]
					}
					

МЕТОД -> ЗАПРОС СПИСКА ДИАЛОГОВ В ИСТОРИИ АГЕНТА:

						Метод: POST
						URL: /userapi/v1/history/search
						CURL пример:

						curl -i -X POST \
						   -H "Authorization:Bearer YOUR_API_TOKEN_HERE" \
						   -H "Content-Type:application/json" \
						   -d \
						'{"agent_id":3, "from":"2020-12-10 00:00:00", "to":"2020-12-23 23:59:59"}' \
						 'https://ipaddr/userapi/v1/history/search'
					

ПАРАМЕТРЫ ЗАПРОСА
agent_id - идентификатор агента
from - дата и время начала диалога
to - дата и время окончания диалога

ОТВЕТ:

						{
							"status":"success",
							"data":[
									{
										"chat_id":"1608629540.2",
										"date_time":"22.12.2020 12:32:22",
										"phone":"205",
										"duration":86,
										"redirect":""
										"successfully": 1,
										"status": "success"
									},
									{
										"chat_id":"1608629588.8",
										"date_time":"23.12.2020 12:00:00",
										"phone":"205",
										"duration":8,
										"redirect":"201"
										"successfully": 0,
										"status": "интент не найден"
									}
									]
						}
					

ПАРАМЕТРЫ ОТВЕТА
date_time - дата и время начала диалога
phone - номер клиента, если есть
duration - продолжительность диалога, если есть
redirect - перевод звонка, если есть
successfully - успешность диалога, 0 - неуспешный, 1 - успешный
status - ошибки в диалоге, success - ошибок не было или будет написано название ошибки

МЕТОД -> ЗАПРОС ДИАЛОГА В ИСТОРИИ АГЕНТА:

						Метод: POST
						URL: /userapi/v1/history/show
						CURL пример:

						curl -i -X POST \
						   -H "Authorization:Bearer YOUR_API_TOKEN_HERE" \
						   -H "Content-Type:application/json" \
						   -d \
						'{"chat_id":"1608629540.2"}' \
						 'https://ipaddr/userapi/v1/history/show'
					

ПАРАМЕТРЫ ЗАПРОСА
chat_id - идентификатор диалога. Если в ID есть символ "\", то его нужно обязательно отправлять в экранированном виде.

ОТВЕТ:

						{
						"status": "success",
						"data": {
							"date_time": "05.08.2022 07:11:28",
							"phone": "205",
							"duration": 25,
							"redirect": "301",
							"successfully": 0,
							"status": "success",
							"history": [
									  {
										"datetime": "05.08.2022 07:11:28",
										"user": "start",
										"intent_id": null,
										"intent_name": ""
										},
									  {
										"datetime": "05.08.2022 07:11:28",
										"agent": "Скажи 123. твой номер 205.",
										"intent_id": 3317,
										"intent_name": "Default Welcome Intent"
										},
									  {
										"datetime": "05.08.2022 07:11:37",
										"user": "123",
										"intent_id": null,
										"intent_name": ""
										},
									  {
										"datetime": "05.08.2022 07:11:37",
										"agent": "скажи еще раз 123",
										"intent_id": 3319,
										"intent_name": "123 START"
										},
									  {
										"datetime": "05.08.2022 07:11:43",
										"user": "123",
										"intent_id": null,
										"intent_name": ""
										},
									  {
										"datetime": "05.08.2022 07:11:43",
										"agent": "контекст 123",
										"intent_id": 3321,
										"intent_name": "контекст 123"
										},
									  {
										"datetime": "05.08.2022 07:11:52",
										"user": "Оператора",
										"intent_id": null,
										"intent_name": ""
										},
									  {
										"datetime": "05.08.2022 07:11:52",
										"agent": "оператор",
										"intent_id": 3322,
										"intent_name": "оператор"
										}
									],
							}
						}

					

ПАРАМЕТРЫ ОТВЕТА
date_time - дата и время начала диалога
user - текст сообщения от человека
agent - текст ответа от агента
phone - номер клиента, если есть
duration - продолжительность диалога, если есть
redirect - перевод звонка, если есть
successfully - успешность диалога (0-неудачный; 1-успешный)
status - ошибка распознавания
intent_id - ID интента
intent_name - название интента

Команды для ATC

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

  • hangup - закончить звонок
  • redirect - перевести звонок на нужный номер (!!!ВАЖНО!!! переводе звонка на другой номер используется событие SIP REFER. Нужно чтобы ваша телефонная станция поддерживала данный функционал и он был разрешен)
  • long - ожидать от клиента длинной фразы (обычно используется с открытыми интентами)

WebHook

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


URL, на который будет направляться JSON из компонента WebHook, следует указывать в настройках агента, а название используемой Вами функции - в поле Action компонента WebHook. Название функции определяется пользователем самостоятельно.

Необходимо учитывать, что значения полей Action и Payload Data, отправляются с таким же регистром, каким вы его написали.


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

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

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

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

Формат ответа:

Если через Webhook не нужно передавать данные обратно роботу то ответный запрос выглядит так:

				        
						{
  						"speech": ["Здравствуйте, откуда вас забрать?"],
						}
					

Всегда в ответе нужно возвращать "speech", если его не нужно менять,то подставляйте в ответ его из запроса.

Если через Webhook роботу нужно передать другую ответную фразу, дополнительные контексты, параметры и команду для телефонии то ответный запрос выглядет так:

				        
						{
  						"pbx":{"action":"redirect","action_data":"400"},
  						"parameters": {
                 						"testname": "nametest",
                 						"testname.receive":"nametest",
                 						"testname.original":"nametest"
                						},
  						"speech": ["Здравствуйте, откуда вас забрать?"],
  						"context": [
              						{"name":"name","lifespan":0},
              						{"name":"age","lifespan":10}
             						]
						}
					

Если какое-то значение передавать не нужно, то не указывайте его в ответе.

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

"pbx":

Данный компонент отвечает за управление звонка в телефонном канале и концом сессии для канала Yandex.Алиса. Обязательными параметрами для pbx в телефонном канале являются action и action_data. Поле action может принимать значения: redirect, hangup и long.

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

ВАЖНО - если в канале Yandex.Алиса вы передаете параметр PBX(должно быть пустой строкой -> "pbx":""), то в ответном сообщении в Yandex.Алиса уйдет параметр "end_session" в значении "true" и сессия закончится.

"parameters":

При добавлении параметров в сессию диалога, которые можно буде потом использовать в ответных фразах или также передавать через другие Webhook-и нужно к каждому значению параметра "testname" обязательно добавлять следующие параметры:

  • "testname" - название параметра и его значение
  • "testname.receive" - название параметра .receive и его значение
  • "testname.original" - название параметра .original и его значение

ВАЖНО - вы можете, переопределить или добавить параметр в сессии. Удалить параметр нельзя.

Можно передавать несколько разных параметров сразу:

				        
						{
  						"parameters": {
                 						"balance": "15",
                 						"balance.receive":"15 руб.",
                 						"balance.original":"пятнадцать рублей",
                 						"name": "Иван",
                 						"name.receive":"Иван",
                 						"name.original":"Ваня"
                						},
						"speech": ["Здравствуйте, откуда вас забрать?"],
						}
					
"speech":

Этот параметр нужно указывать при изменении текст ответа робота, если этот параметр будет присутствовать в ответе, то вместо текста внутри интента будет возвращен человеку текст который указан в этом поле.

"context":

Данное поле вносит изменения в отслеживаемые контексты в сессии диалога. Указывать можно несколько контекстов, обязательные поля для каждого контекста

  • "name" - название контекта, может быть такое же что уже присутствует в сесии
  • "lifespan" - время жизни контекста, если поставить 0, то контекст удалиться из сессии, если он уже в ней был.
Добавление кнопок для каналов Яндекс Алиса и Telegram

Для каналов Яндекс Алиса и Telegram реализована функция добавления кнопок по средством инструмента WebHook. Ниже представлены примеры ответов в формате json.

"buttons":

Поле в запросе отвечающее за передачу кнопок для канала указанного в сhannel (Яндекс Алиса - Alice; Телеграм - Telegram). Со структурой данных для кнопок можно ознакомиться в документации к Яндекс Алисе и Telegram. Передавать поле channel обратно необязательно, т.к. кнопки из поля buttons автоматически привязываются к каналу из поля channel.

Пример запроса с данными для Яндекс Алиса
				        
					    { 
					    "speech":["успешно"],
					    "buttons":[
					   	  {
					         "payload":{
					            "command":"привет"},
					         "title":"Перейти на основной сайт",
					         "url":"https://ziax.ru/"
					      },
					      {
					         "payload":{
					            "command":"пока"},
					         "title":"Скажет пока"
					      }
		   				 ]
						}
					

ВАЖНО!Для канала Яндекс Алиса обязательно нужно использовать поле "command" в поле "payload", именно значение поля "command" будет отправленно в систему NLU, если это поле не указать, то произойдет ошибка. С информацией можно ознакомиться в документации к Яндекс Алисе.

Пример запроса с данными для Telegram
				        
				   		{
				   		"speech":["успешно"],
						"buttons":{
						      "inline_keyboard":[
						         [{"callback_data":"привет",
						           "text":"привет",
						           "url":"https://ziax.ru/"}],
						         [{"callback_data":"пока",
						           "text":"пока"}],
						         [{"callback_data":"как дела",
						           "text":"как дела"}]
							      ]
							   }
							}
					

Универсальные вебхуки (поставляются с системой)

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

Функции вебхуков:

  • start - позволяет только создать таблицу (см. Отчеты => NPS), куда будут записываться необходимые статусы из интентов с вебхуком status
  • startStatus - позволяет как создать таблицу (см. Отчеты => NPS), так и записать необходимый статус
  • startTellTag - позволяет создать таблицу(см. Отчеты => NPS), куда будут записываться необходимые статусы из интентов с вебхуком status, а также произнести данные из полей tag1-tag15 таблицы, загруженной в задание для Автоинформирования
  • startTellTagStatus - позволяет создать таблицу (см. Отчеты => NPS), записать необходимый статус и произнести данные из полей tag1-tag15 таблицы, загруженной в задание для Автоинформирования
  • status - позволяет записать в таблицу необходимый статус
  • tellTag - позволяет произнести данные из полей tag1-tag15 таблицы, загруженной в задание для Автоинформирования
  • tellTagStatus - позволяет произнести данные из полей tag1-tag15 таблицы, загруженной в задание для Автоинформирования, и записать в таблицу (см. Отчеты => NPS) необходимый статус
  • receive1 - receive10 - позволяет записать в указанное поле таблицы (например, receive1) фразу, сказанную клиентом
  • answer1-answer10 - позволяет записать в указанное поле таблицы (например, answer1) цифру, сказанную клиентом (например, баллы при NPS-обзвоне)

Название вебхука указывается в поле Action Интента. Заполнение полей Payload Data:name и Payload Data:value зависит непорсдественно от вебхука.

Правила заполнения полей для вебхуков:

  • start - в поле Action указывается название вебхука. В поле Payload при необходимости можно добавить параметр gettags = yes, в таком случае при исходящием обзвоне, все не пустые теги из строчки с клиентом в таблице задания на автообзвон, установятся как параметры сессиии и их можно будет указывать в любой ответной фразе робота, как обычный параметр (например {tag3})
  • startStatus - в поле Action указывается название вебхука, в поле Payload Data:name - status, в Payload Data:value - статус, который необходимо записать в таблицу (например, Клиент прослушал первое сообщение). Во второй строке в поле Payload Data:name - receive, в Payload Data:value - поле таблицы, куда необходимо записать статус (например, receive1). В поле Payload при необходимости можно добавить параметр gettags = yes, в таком случае при исходящием обзвоне, все не пустые теги из строчки с клиентом в таблице задания на автообзвон, установятся как параметры сессиии и их можно будет указывать в любой ответной фразе робота, как обычный параметр (например {tag3})
  • startTellTag - в поле Action указывается название вебхука, в ответной фразе робота в отдельных строках записываются тэги, которые необходимо озвучить
  • startTellTagStatus - в поле Action указывается название вебхука, в ответной фразе робота в отдельных строках записываются тэги, которые необходимо озвучить, в поле Payload Data:name - status, в Payload Data:value - статус, который необходимо записать в таблицу (например, Клиент прослушал первое сообщение). Во второй строке в поле Payload Data:name - receive, в Payload Data:value - поле таблицы, куда необходимо записать статус (например, receive1)
  • status - в поле Action указывается название вебхука, в поле Payload Data:name - status, в Payload Data:value - статус, который необходимо записать в таблицу (например, Клиент прослушал первое сообщение). Во второй строке в поле Payload Data:name - receive, в Payload Data:value - поле таблицы, куда необходимо записать статус (например, receive1)
  • tellTag - в поле Action указывается название вебхука, в ответной фразе робота в отдельных строках записываются тэги, которые необходимо озвучить
  • tellTagStatus - в поле Action указывается название вебхука, в ответной фразе робота в отдельных строках записываются тэги, которые необходимо озвучить, в поле Payload Data:name - status, в Payload Data:value - статус, который необходимо записать в таблицу (например, Клиент прослушал первое сообщение). Во второй строке в поле Payload Data:name - receive, в Payload Data:value - поле таблицы, куда необходимо записать статус (например, receive1)
  • receive1 - receive10 - в поле Action указывается название вебхука
  • answer1-answer10 - в поле Action указывается название вебхука, параметру обязательно необходимо дать название score

Примеры оформления:

Вебхук start

Вебхук startStatus

Вебхук starTellTag

Вебхук starTellTagStatus

Вебхук status

Вебхук tellTag

Вебхук tellTagStatus

Вебхуки receive1-receive10

Вебхуки answer1-answer10

Sys.name, sys.number

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

В текстовых каналах sys.number отсутствует, в переменную sys.name записывается логин пользователя. Следует учитывать, что переменная sys.name в текстовом канале Я.Алиса подставляется из user_id , в канале Telegram из username.

ВАЖНО. Переменные sys.name и sys.number невозможно изменить с помощью webhook, данные переменные будут проигнорированны.

Обучение

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


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

Тест

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

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

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


История

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


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



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

Кластеризация

Ответы пользователей,  которые система не распознала, попадают в Default Fallback Intent.   Функция кластеризации в платформе ZIAX представляет собой алгоритм тематической группировки нераспознанных фраз за определенный период.


Изначально группы могут представлять собой массивные объемы данных, которые далее для ясности можно разбить на подтемы. С каждым этапом разбивки темы становятся точнее, система формирует название-ключевые слова для каждой из групп. На любом этапе тему можно как разбить дальше, дойдя до конечного варианта, так и собрать обратно до верхнего уровня. На любом этапе данные группы можно выгрузить в формате csv.


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

Приложение

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

Описание

Пример

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

sys.name

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

ваня

иван

sys.numbers

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

23

23

двадцать три

23

единица

1

2-ка

2

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.07.1987

25.07

25.07.2020

25/07/1987

25.07.1987

25,07,1987

25.07.1987

25

25.01.2020

25 07 1987

25.07.1987

25 декабря

25.12.2020

25 декабря 2018

25.12.2018

12.12.90

12.12.1990

12.12.20

12.12.2020

12 мая 2012

12.05.2012

двадцать пятое мая 2012

25.05.2012

через день

10.02.2020

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

01.03.2020

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

24.04.2020

декабрь

01.12.2020/31.12.2020

декабрь 2018

01.12.2018/31.12.2018

2020

01.01.2020/31.12.2020

сегодня

09.01.2020

завтра

10.01.2020

вчера

08.01.2020

позавчера

07.01.2020

послезавтра

11.01.2020

sys.date_interval

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

с 1 мая 2019 по 19 июля 2019

01.05.2019/19.07.2019

с 1 мая по 19 июля

01.05.2021/19.07.2021

с 1 по 19

01.09.2021/19.09.2021

1 - 19

01.09.2021/19.09.2021

1 июля - 19

01.07.2021/19.07.2021

1.08 - 19.09

01.08.2021/19.09.2021

1.08-19.09

01.08.2021/19.09.2021

1-19

01.09.2021/19.09.2021

1-19 мая

01.05.2021/19.05.2021

с первого до восьмого августа

01.08.2021/08.08.2021

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

sys.phone-number-fed

Извлекаются 11-значные федеральные номера телефона

+7(987)3337777

+79873337777

7-987-333-77-77

+79873337777

9873337777

+79873337777

89873337777

+79873337777

7(987)333-77-77

+79873337777

+7(987)333-77-77

+79873337777

sys.VIN_number

Извлекаются вин-номера автомобилей

XXX12345678910111

XXX12345678910111

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

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

ChangeLOG

Версия 2.0.8

  • Добавили новый канал WEB виджет
  • Добавили возможность в VOIP канале при переводе через новое плечо указывать транк для перевода звонка
  • Оптимизация работы
  • Исправление ошибок

Версия 2.0.7

  • Добавили функцию кластеризации нераспознанных запросов
  • Добавили интеграцию с голосовым движком ЦРТ
  • Добавили возможность менять позицию интентов в списке
  • Доработали интеграцию с чат платформой LiveTex
  • Добавили возможность выгрузки стенограммы в CSV формате
  • Исправили ошибки в работе
  • Дообучили некоторые сущности

Версия 2.0.6

  • Добавили интеграцию с чат каналами в КЦ РТУ АТМОСФЕРА
  • Доработали интеграцию с Яндекс.Алиса
  • Добавили новые методы API
  • Доработали модуль Аудит
  • Добавили прямой переход на нужную страницу в сущностях
  • Исправили ошибки в работе
  • Дообучили некоторые сущности

Версия 2.0.5

  • Добавили работу с файлами во входящих сообщениях в текстовых каналах
  • Добавили сохранение ID пользователей текстовых каналов в историю
  • Добавили интерфейс управления лицензиями
  • Дополнительные фильтры в истории агента
  • Убрали отчет CDR из меню Отчеты
  • Исправили ошибки
  • Изменили вывод истории диалогов в API(добавили ID и названия интентов)

Версия 2.0.4

  • Переписали плагины для MRCP сервера
  • Добавили возможность использовать движок распознавания речи ZIAX ASR
  • Увеличили производительность NLU
  • Изменили формат взаимодействия с кнопками в текстовых каналах через интеграцию посредством WebHook
  • Исправили ошибки

Версия 2.0.3

  • Изменили схему сохранение сущностей
  • Дообучили сущность date_interval
  • Изменили схему создания каналов для модуля автообзвона
  • Добавили возможность указывать во внешнем канале тип записи разговора для voip
  • Изменили схему перевода звонков в voip канале (SIP REFER)

Версия 2.0.2

  • Исправили ошибки
  • Добавили системную сущность date_interval
  • Ускорили работу NLU
  • Переписали интеграцию с WEBim на APIv2
  • Добавили отчет по вызовам интентов

Версия 2.0.1

  • Исправили ошибки
  • Добавили новые фильтры в истории агентов
  • Ускорили работу NLU
  • Дообучили системные сущности date и time
  • Добавили канал чат-платформы bitrix24
  • Изменили название меню “Настройки ботов” на “Внешние каналы”, теперь в системе нет ботов, есть только Агенты. И привязка агентов производится в меню "Внешние каналы".

Версия 2.0.0

  • Рефакторинг внутренних модулей системы
  • Изменили метод API NLU (URL и название параметров)
  • Добавили шину событий для обмена данными между модулями
  • Добавили параметр AI Deep, более глубокое обучение агента на предобученной модели
  • Исправили ошибки в работе некоторых модулей
  • Увеличили производительность движка NLU
  • Добавили возможность обрабатывать DTMF во время звонка

Версия 1.7.5

  • Добавили метод запроса истории диалогов в API
  • Исправили ошибки в работе
  • Увеличили производительность классификации интентов

Версия 1.7.4

  • Изменена схема обучения агентов с загрузкой данных в оперативную память
  • Увеличена производительность системы
  • Добавлена возможность прерывания речи робота
  • Обновлен плагин MRCP
  • Обновлен интерфейс настройки интента для канала Яндекс.Алиса
  • Переписан алгоритм импорта агентов
  • Добавлена автоматическая предобработка сохранямого текста во фразах для обучения (удаление специальных символов)
  • Дообучены некоторые сущности
  • Исправлены ошибки

ZIAX ASR

Высокоэффективный голосовой модуль, предназначнный для распознавания речи в телефонном канале. Решение обладает знанием характеристик передающей среды и помагает решать задачи шумоочистки и улучшения качества речевых сигналов, а также оценивать их пригодность для последующего использования в системах автоматического распознавания речи и голоса. Точность распознавания составляет 85%. Голосовой модуль ZIAX ASR предназначен для работы следующих систем: голосовое управление, голосовые команды, голосовой ввод текста, голосовой поиск. Кроме того, разработанное решение может быть применимо для IVR, голосовых чат-ботов, написания стенограмм, диктовки текста, речевой аналитики.

Ключевые функции ZIAX ASR

  • Распознавание речи по заданным характеристикам
  • Указание таймеров для отслеживания состояния сессии
  • Определение конца фразы
  • Определение голосовой активности
  • Постобработка распознанного текста

Документация на ПО ZIAX ASR

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