Аудиобейдж и речевая аналитика в помощь отделу продаж

Аудиобейдж и речевая аналитика в помощь отделу продаж

9 января 2025

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

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

i в круге

Бейдж, бедж, бадж, бейджик (англ. badge — произносится как «бэдж») — это бирка или элемент униформы в виде значка или карточки, предназначенный для идентификации носителя.

Для записи диалогов разработано мобильное приложение для Android и iOS по выгрузке данных через USB с аудиобейджа на смартфон и далее со смартфона на файловый сервер. Аппаратный аудиобейдж представляет из себя диктофон в корпусе бейджика на пиджаке работника. Бейдж заряжается постоянным током при подключении к USB. Доступ к файлам на диктофоне осуществляется через тот же USB-интерфейс — диктофон работает как обычная флешка. Для подключения диктофона к смартфону необходим кабель-переходник, который поддерживает передачу данных, иначе телефон не обнаруживает внешнее запоминающее устройство. Печально, что некоторые производители указывают, что переходник поддерживает передачу данных, хотя это не так. Нам пришлось перебрать несколько кабелей для Android, прежде чем найти рабочий. В первый раз проблема ввела в ступор: то ли диктофон не работает, то ли в смартфоне проблема, раз устройство не обнаруживается. Для iOS переходник подошел сразу.

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

Гран аудиобейдж
Тыльная сторона аудиобейджа с USB-разъемом

Приложение создавалось для двух мобильных платформ. Для Android обычно пишут на Java и Kotlin, для iOS — на Swift. Дабы сэкономить ресурсы выбрали MAUI от Microsoft — кроссплатформенный фреймворк разработки мобильных и настольных приложений. Это следующая итерация старого-доброго Xamarin, который больше не поддерживается.

Android

В Multi-platform App UI можно писать как общий код, так и платформозависимый через использование директив #if android и #if ios. Также через директивы можно указать версии используемой системы на устройстве. Разработка велась итеративно — сначала для Android, потом для iOS, что привело к некоторым проблемам в дальнейшем, такова кроссплатформенная мобильная разработка. Но пойдем по порядку: прежде всего, необходимо было получить доступ к файлам на диктофоне. Android опять усилил безопасность, и приложению Gran QM необходимо запрашивать доступ к любой папке вне файловой «песочницы». Поэтому точно будет платформозависимый код. В Android открываем файловый менеджер, где можно выбрать папку, к которой монтируется корень флешки аудиобейджа.

Intent intent = new Intent("android.intent.action.OPEN_DOCUMENT_TREE");
Microsoft.Maui.ApplicationModel.Platform.CurrentActivity.StartActivityForResult(intent, 1);

Нам нужно выбрать условие, при котором задается корень. Клик по кнопке в качестве условия был не интересен. Во-первых, при старте приложения можно узнать подключенные USB-устройства через UsbManager — для этого дополнительные права не нужны. Тут же можно отфильтровать устройства по производителям, чтобы предотвратить ложные срабатывания из-за подключения обычной флешки. А во-вторых, активировать окно сразу при подключении устройства: не надо вручную писать циклы прослушивания подключений. Класс BroadcastReceiver умеет реагировать на создание Intent. Поэтому создаем класс с наследованием от BroadcastReceiver и в нем фильтруем события подключения и отключения USB-устройств. После этого захваченное аудио по нажатию на большую кнопку копируется во внутреннюю память приложения, в «песочницу», так сказать.

Затем занялись дизайном. Сделали просто, плоско — как вы любите. Пришлось повозиться с созданием большой кнопки посередине экрана, поскольку похожий элемент управления отсутствует в стандартной библиотеке графических элементов. И, забегая вперед, — под iOS изображения в формате PNG отказывались отображаться. Поэтому в проект сразу добавляем SVG, несмотря на то, что Android справляется с обоими форматами.

Гран носитель подключен
Гран уведомления
Гран обратная связь
Гран настройки

Что же касается переноса данных с диктофона на смартфон и далее со смартфона на FTP-сервер, заминку может вызвать необходимость посчитать количество переданных мегабайт, поскольку стандартная Stream.Copy измерять не позволяет. Поможет создание собственного метода копирования в потоке CreateFileFromStream. К сожалению, потребовалось писать платформозависимый код и логику копирования дублировать в iOS с ее спецификой, в частности, из-за необходимости выполнять перенос аудиофайлов в фоновом режиме, когда копирование файлов запущено, а приложение свернуто.

Статус переноса данных выводится в уведомлениях смартфона. Под Android документация более полная у Xamarin, чем у MAUI, но все старые примеры рабочие. Для iOS вышло посложнее — уведомления нельзя изменить после отображения, а изменение срабатывает как новое уведомление. Так что пришлось добавить задержку между отображением уведомлений в UNTimeIntervalNotificationTrigger.CreateTrigger. Инструкция по работе с уведомлениями iOS в документации MAUI отсутствует, поэтому использовали документацию Swift.

После уведомлений самое время заняться правами под разные ОС. Для этого есть кроссплатформенная проверка Permissions.RequestAsync<>. Проверка подключения к FTP-серверу и само подключение через Wi-Fi или мобильный интернет также кроссплатформенное. Разрешение использовать мобильные данные можно дать в меню настроек.

IEnumerable<ConnectionProfile> profiles = Connectivity.Current.ConnectionProfiles;

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

iOS

Скругления углов UI-элементов типа Frame работают по-разному. В iOS можно выполнить скругление до полного соединения середин сторон по прямой, то есть придать элементу форму ромба. В Android скругление задается максимум до 90 градусов, что придает рамке форму круга. Для единообразия дизайна на обеих платформах пришлось заменять Frame на новый тип Border. Под iOS текстовые виджеты не умеют просчитывать авторазмер по содержимому: текст на новой строке обрезается, если не входит в видимую область. Помогло строгое указание высоты контейнеров и разбиение строк на отдельные Span.

Восклицательный знак в заштрихованном круге

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

Более серьезной проблемой оказалось отслеживание подключения и отключения диктофона от телефона. В iOS нет возможности отслеживать такие события без встроенного в аудиобейдж чипа авторизации Apple MFi, подтверждающего подлинность устройства. Стоит сказать, что чип отсутствовал. В политике Apple отслеживание без чипа было описано как нарушение безопасности, несмотря на отслеживание в штатном файловом менеджере. Apple предлагает поделиться способом реализации через отправку разработчика на курсы корпорации под подписку о неразглашении. Не наш случай, поэтому обошлись ручным выбором папки аудиобейджа при нажатии на кнопку.

MAUI — удобное средство для разработки простых приложений. Но специфичный функционал требует знания особенностей платформ Android и iOS, что, к сожалению, снижает пользу от кроссплатформенности.