[Из песочницы] Реализуем аналог Apple iCloud Voicemail c использованием свободных грамматик от Яндекса

Введение:


Некоторое время назад всеми уважаемая яблочная компания анонсировала тестирование нового сервиса Apple iCloud Voicemail.

80b5c61c7be24afbbe97b806b5704067.png

Ну и что же в этом такого, спросите вы. Давайте разберемся.
Компания Apple давно славилась тем, что возвращала интерес к давно забытым технологиям. Не забывая на этом хорошенько заработать. Так родились iPad, iWatch и т.д. Технологией голосовой почты давным давно никто не пользуется. Хотя почти у каждого из нас на мобильном телефоне висит по умолчанию сервис голосовой почты.

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

В нашей стране никто так особенно и не привык пользовать голосовую почту, а вот в США она была стандартом де-факто. Лет 10 назад все западные компании, устанавливающие телефонную станцию в России, обязательно требовали и установку голосовой почты.

Так что-же придумали купертинцы сейчас?

Описание сервиса


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

Что же это меняет? Да все! Вы звоните на офисный или мобильный телефон — абонент занят, не отвечает или недоступен, вам предлагается оставить голосовое сообщение. Вы проговариваете произвольный текст, система распознает этот произвольный текст и посылает хозяину почтового ящика по смс. Хозяин ящика получает смс, видит номер звонившего, распознанный текст и реагирует на него. Хозяину голосовой почты больше не надо помнить номер дозвона до сервиса голосовой почты, пароль входа, структуру меню и т.д. Ему больше не надо тратить время на прослушивание самого сообщения. Очень часто там одни гудки или ни о чем не говорящие фразы. Владельцу такого сервиса достаточно пробежать глазами по тексту и принять решение о реакции на оставление сообщения. Т.е. все становится гораздо удобнее для пользования, чем раньше.

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

Т.е. мы можем видеть, что за технологией скрывается очень большое будущее в плане экономии времени и звонящему и владельцу сервиса голосовой почты. При этом за фасадом технологии скрываются еще плюсы для IT. Эту систему почти не надо администрировать, как это было раньше с системами голосовой почты. Итого на лицо предпосылки новой революции.

Что-же является сердцем такой технологии? Это конечно распознавание по свободным грамматикам. Apple использует Siri, которая основана на технологии ASR (Automatic Speech Recognition) компании Nuance. Это такой древний вендор ASR/TTS технологии.

Google сделал сначала свое распознавание для Андроид телефонов. Распознавание облачное и с API для разработчиков. Рассчитанную, в первую очередь, на разработчиков мобильных приложений. Ну и со схемой монетизации конечно. И Яндекс конечно же не остался в стороне: свой продукт Яндекс назвал Cloud SpeechKit. Он умеет распознавать свободную речь и переводить ее в текст, и у него тоже есть API.

Что же касается русского языка, то на самом деле и Google распознает русский язык, и есть еще куча других мелкий вендоров в интернете, которые тоже распознают русский язык. На самом деле это не очень уж сложно делать. Nuance начал это делать много лет назад. Собственно Яндекс уникален не этим. У Яндекс есть несколько очень важных опций. Во-первых, это Яндекс SpeeckKit, который распознает адреса очень качественно, практически на 100%. Очевидно, за этим кроется наработанный материал проекта Яндекс.Карты. Во-вторых, у Яндекса есть SpeechBox — это то, чего нет и наверное никогда не будет у Google и других облачных сервисов. То есть что важно для данного решения, для минимизации задержки распознавания и соблюдения требований безопасности — можно поставить локальный сервер и организовать распознавание по свободным грамматикам без выхода в интернет.

Разработка сервиса


Общее описание
Теперь собственно про разработку аналога такой революционной идеи от Apple. В наличии имелся корпоративный IVR производства Avaya под названием Avaya Aura Experience Portal 7.0.1. Особенностью данной системы является способность подключаться к email серверам и sms агрегаторам. Ну и наличие легко используемой внутренней базы данных.

Задача посылать текст именно по смс не стояла, потому как это денег стоит и плюс к тому требует обслуживать это смс подключение. С email на самом деле все работает так же как и с смс. Как только сообщение доставляется до почтового адреса, сразу же на мобильном телефоне push notification об этом говорит. Все остальное в разработке похожее. Можно еще использовать email2sms. Ну это для тех, кому точно хочется получить текст именно по смс. Кстати email2sms заодно разберется с кодировкой.

Использовать Avaya IVR не обязательно, просто он был под рукой. Можно то же написать на Genesys GVP, Cisco IVR, Asterisk, Freeswitch или даже 3CX. Однако и для Genesys и для Cisco сделать голосовое приложение, которое потом будет отсылать результат по email, потребует установки нескольких серверов. В случае же с Avaya достаточно поставить виртуальную машину на 2 ядра и 4 GB RAM, и она все сможет делать: и голосовой вызов принять, и распознавание в облаке провести, и email или смс послать.

В случае же с Астериском можно реализовать сервис через протокол MRCP v2. Email также можно послать.

Схема приложения
Описание приведено для Avaya IVR, так как прототип был написан именно для него. Для прототипа приложения был использовал облачный HTTP коннектор. Причина следующая: облачный MRCP для Avaya не работает, так как Avaya IVR предназначен для корпоративной среды и у него нет возможности правильно подставлять IP адрес для RTP при прохождении NAT для MRCP. В теории можно выделить отдельный интерфейс для MRCP и подключить на него публичный IP, но такой возможности не имелось. Локальный MRCP поставить также не было возможности. Для ASR на свободных грамматиках требуется большое количество оперативной памяти. Таких ресурсов в наличии не имелось.

Для Астериска проще использовать облачный MRCP. В нем можно вручную подставить публичный IP при прохождении NAT для SDP в MRCP клиенте.

Приложение было разработанно на Avaya Aura Orchestration Designer 7.0. Это дизайнер приложения для Avaya IVR. Данный продукт базируется на Eclipse и является его плагином.

Вот общий вид приложения:

image

При использовании HTTP коннектора, в отличии от MRCP, приходится использовать функцию Record вместо Prompt&Collect, обычных для механизмов сбора контента в IVR. Конечно есть некое различие. При использовании MRCP распознавание начинает непосредственно с начала речи. В случае HTTP коннектора и Record приходится сначала собрать всю запись сообщения, потом его перекачать через интернет в облако, а затем распознать. Реально это вносит задержку пару секунд. Но в нашем случае это неважно. Потому что для того, кто оставляет сообщение, эта задержка не важна. Ему ждать необязательно. Он после оставления сообщения кладет трубку, а IVR приложение продолжает свою работу, завершая распознавание и отсылая результат по email. И в данном конкретном приложении нам не важно сколько времени займет распознавание. Никто этого не заметит и никому это не повредит.

При начале записи произносится фраза: «Вас приветствует голосовая почта. Этот абонент не может ответить на ваш звонок. Оставьте пожалуйста сообщение и его текст будет доставлен абоненту по email».

Блок Record записывает голос и кладет его в некий временный файл, имя которого кладется в переменную Record.value. Далее запускается Yandex HTTP коннектор, который отправляет данный временный файл в облако, согласно API, и получает распознанный текст. Данный коннектор не является стандартным для IVR и написан целиком на Java. Далее результат отправляется в блок Data, где вычисляется длительность сообщения в секундах и запрашивается база данных на предмет соответствия номера, куда был направлен оригинальный вызов, а также email, куда требуется посылать письмо с результатом.

e5a81532b466430087315a29fc2e07c1.jpg

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

8edb85400b004f04b06bfabf3b7eb670.jpg

Собственно все. Это даже удивительно, как такое революционное решение может быть так просто реализовано.

© Habrahabr.ru