"Большой Брат следит за тобой" Джордж Оруэлл "1984"

Зачем все это?

Современное время очень динамичное и когда ты о чем-то думаешь напряженно, то внешние раздражители частично не достигают цели. И тогда, подойдя к точке интеграции с курьером, коллегой, да и что-ж (не будем кривить душой) и с семьей тоже, обнаруживается, что ты что-то важное забыл. Хорошо если тебя спросили по email/смс/Whatsapp/telegram и т.д. А если голосом? И тут историю не поднимешь, чтобы не ударить в грязь лицом. Хотя почему? Можно подумать и над этим вопросом.

Постановка задачи

Задумавшись над вопросом создания истории собственных разговоров по телефону, обнаружилось, что ничего нереального нет. Все технологии уже есть, осталось их только объединить. И если большая часть компонентов используется в серьезном Enterprise, то это не значит, что нельзя найти их Open Source аналоги. Или использовать Shareware продукты с trial лицензиями.

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

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

Ну а как будет записываться, это уже не очень важно. Можно тотально. Т.е. все разговоры. И далее система должна присылать транскрипцию разговоров например по email. Ну или складировать куда-то. Второй вариант - по запросу. Т.е. если вы считаете после (ключевая фраза "после") разговора, что данный разговор надо сохранить, то можно дать команду и разговор пост-фактом будет "записан" и транскрибирован. Ну записан он конечно должен быть раньше, но просто запись должна быть поднята и транскрибирована.

Архитектура решения

Визуализировав задачу, давайте взглянем на варианты. Наипростейшим вариантом является конечно Астериск. Но в плане записи. Астериск может писать раздельные каналы в файлы. С целью манипуляции файлами, отправки на транскрибацию, интеграцию с email, контроля вызова, создания запросов на транскрибацию по запросу есть много других вариантов. Кто-то возможно скажет, что все это можно реализовать на Астериске. Ну таких гуру в стране одной руки хватит посчитать. И автор не в их числе. Ну а других интеллектуальных систем на рынке много. Почти у каждого серьезного вендора есть подобные системы. Например у Cisco, Genesys, Avaya и т.д. Есть и великое множество Российских систем. Под рукой был в наличии Experience Portal версии 7.1 компании Avaya. Поэтому выбор пал на него. Но это не значит, что нельзя использовать другое оборудование. Данная система умеет работать с Java (это для создание коннектора на систему транскрибирования), имеет коннектор с Email. Это значит, что полученные результаты можно отослать по email. Ну и имеет встроенную базу данных, что позволит не зависеть от сессии и проводить работы с записями в off-line режиме.

Итак вызов должен проходить транзитом через Астериск, там записываться в дуплексном режиме, далее попадать на Experience Portal, который должен связывать разговор, абонента, время с записью на астериске и после разговора отсылать ее для транскрибирования. А после получения транскрибирования отсылать результаты по email соответствующему абоненту. Ну и собственно сам транскрибатор. Наипростейшим вариантом является Яндекс Cloud Speech Kit. У Google есть также облачное API для транскрибирования русского языка. Качество у обоих вполне достойное. Сравнение можно посмотреть тут.

Реализация

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

Если в двух словах:

  1. Вызов попадает в АТС и маршрутизируется в Астериск

  2. Астериск делает дуплексную запись и маркирует ее с префиксом номер абонента A. Запись складывается на расшаренную папку.

  3. Далее вызов переводится на Experience Portal.

  4. Experience Portal делает Bridged Transfer на абонента B. Данная функция позволяет обработать вызов после его завершения.

  5. После завершения вызова Experience Portal по номеру абонента А ищет в расширенной папке с записями последний вызов с таким префиксом. Находит вызов и отправляет по очереди каждый канал на транскрибирования в Яндекс или Гугл.

  6. Experience Portal смотрит в своей базе какому email соответствует номер абонента B и отсылает ему результаты транскрибации.

Ну и напоследок. Что делать с мобилками?

Вопрос конечно не праздный. Все нынче говорят по мобилкам. В случае Android получить доступ к записям можно и сделать данный сервис на приложении Android можно. Странно, что никто не сделал. С IOS сложнее. Запись сделать можно только на своем клиенте.

Есть еще вариант - это перенаправить вызов на свою АТС с мобилки и оттуда обратно на мобилку. Тут есть тонкость. При переводе вызова с АТС на мобилку, согласно Закону о Связи, передать оригинальный АОН первого вызова нельзя. Поэтому можно доставить оригинальный АОН через тот-же Experience Portal например на Telegram или по Push. Это тоже все многократно проверено и надежно работает.

Ну или все вызовы пропускать через АТС (можно сделать свою собственную АТС в облаке и прикрутить ее например к Megafon Connect.

Чтобы эта статья не показалась "Сферическим конем в вакууме"

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

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