Как стать автором
Обновить

Запись разговоров на мобильных

Время на прочтение7 мин
Количество просмотров73K

Тут на МВидео выложили статью про 10 лучших приложений для записи звонков на смартфонах, а на 4pda выложили статью, что Гугл совсем запрещает запись звонков на Андроиде. Тема мне близка, т.к. недавно занимался разработкой приложения для записи звонков и все вышло не так как хотелось. Что и как - далее подробно.

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

Кто я? Что я? Я разработчик, занимаюсь разработкой сервиса виртуальной АТС для корпоративных клиентов. И, конечно, есть клиенты, у которых есть не только офисные работники, которым достаточно поставить стационарные SIP-телефоны или раздать в офисе/складе/магазине SIP-DECT-трубки.

В чем проблема?

Есть менеджеры "в полях". Которые весь день на объектах, в разъездах. И постоянно на созвоне. На созвоне с клиентами, партнерами, офисным бекендом. С точки зрения шефа эти менеджеры на мобильниках немного бесконтрольны. И хотелось бы знать с кем они разговаривают, как долго и о чем. Чисто хотя бы чтобы после разруливать конфликты проще было, кто что кому обещал или нет сделать. Обычно запись звонка, прослушанная обеими сторонами совместно, резко проясняет ситуацию. Хотя по разному бывает?

В общем, служебную запись звонков менеджеров в разъездах сделать не повредит.

Какие варианты решения? Разные операторы связи и виртуальных АТС предлагают и FMC, и SIP-клиент, более продвинутые - ВАТС сразу с симками.

Какой еще есть вариант?

И, конечно, можно использовать приложение для записи. Для корпоративных клиентов есть облачные сервисы. Вы ставите на смартфон приложение, которое записывает звонок и передает его в облако. Затем вы смотрите в веб-интерфейсе отчеты по звонкам и слушаете записанные звонки со всех смартфонов подключенных к сервису. Удобно? Вполне.

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

Во-первых, Android и iPhone. Могу быть не точен, но iPhone не записывает звонки. Вероятно, так было изначально, ориентир на приватность-конфиденциальность-защиту. Видел заметку, что где-то просочились скрины каких-то бизнес-функций для Айфона и вот там есть запись звонков. Но правда или нет, достоверно не знаю, может быть кто-то в комментариях прояснит тему.

Для Андроида все немного проще. Андроид был 4, 5, 6, 7, 8, 9, 10 и вот сейчас 11-я версия платформы, 12 на подходе. Гугл с каждой версией платформы меняет свою политику, делая ее более "строгой". Т.е. многие приложения записи работали легко на 4,5,6 версиях, а вот позднее стали записывать только при определенных условиях, либо переставали записывать вовсе.

При каких условиях могли записывать? Например, выбор другого источника звука. Т.е. в Андроиде есть LINE, и есть MIC. Вроде с 7 версии Андроид использовать LINE уже не получится, т.к. будет только либо один канал (исходящий, т.е. ваша речь) либо тишина во время записи телефонного разговора. А если выставить MIC, то можно записать, что идет с микрофона и если ваш собеседник громко говорит, то микрофон уловит это с динамика или громкой связи и запишет. Прикольно, не так ли?

Почему свое приложение?

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

Чтобы точно записывались звонки, то вооружившись Android Studio и Asus ZenPhone на Android 6, написали совместно с коллегой (мы ж программисты...) первый вариант своего приложения для записи звонков. Все работало отлично, но...

Но Android 6 уже устарел в 2019 году, кругом был Android 7, 8, набирал обороты Android 9. У клиентов, которым я дал потестировать приложение, был уже не тот Андроид что у меня. Тут стало понятно, что с LINE больше не запишешь. И почему не всякий смартфон порекомендуешь. Нюансов добавляет то, что даже рабочая модель смартфона может проапгрейдиться до следующего Андроида и потерять возможность записывать звонки. Т.е. доступные Android API станут нефункциональными.

Тут, пожалуйста, дальше читайте выразительно с придыханием: "это был жесткий облом!"

На самом деле были еще варианты.

Какие были требования к приложению для записи?

1. Собственно запись телефонного разговора.

2. Отслеживание событий звонка: начало, ответ, завершение.

3. Загрузка записанных звонков на сервер.

4. Понятный интерфейс.

Как видите, приложение не умело первый пункт - запись звонков. Ок.

С событиями в Андроид, конечно, тоже песня еще та. Их нет. Есть состояния. Во всех исходниках на гитхабе, которые работают с телефонией есть примерно один и тот же код, который переводит изменения состояния телефона в события. Т.е. например, телефон перешел из состояния покоя в состояние RINGING - значит в этот момент мы должны сделать все, что надо сделать на старт звонка. да это все обернуто в вашу функцию onStartCall ))

И еще прикол: вы не поймаете стандартным средством момент ответа на исходящий звонок, вопрос на Stackoverflow висит уже не первую пятилетку.

Ок, худо-бедно, второй пункт из требований программно сделать можно. Как собственно и 3.

Что все-таки делать с записью?

Кто-то скажет: "О, так можно же еще и рутовать устройства, там запись работает".

Да, возможно можно. Но очень хотелось бы, чтобы пользователь купил смартфон (возможно из какого-то рекомендованного списка), поставил приложение, сделал пару простых настроек, и вуаля! у него все работает: звонки записываются, передаются в CRM, отчеты строятся.

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

Так ведь есть же смартфоны со встроенной функцией записи?

Да, есть смартфоны, которые умеют записывать звонки штатной звонилкой, даже если у них Андроид 7, 8, 9 и 10. Это смартфоны брендов Oppo, Tecno, Realme. Т.е. штатная звонилка записывает разговор и складывает его в директорию.

У этих смартфонов свои оболочки - ColorOS, HiOS, Realme UI.

Для некоторых смартфонов Huawei и Honor можно использовать хаки с 4pda и также активировать функцию записи разговоров.

Сначала я не рассматривал такой вариант. Хотелось, чтобы одно приложение и звонки записывало, и передавало события по звонку и записи на сервер. Но если мы откажемся от одной функции, это же не значит, что мы совсем ничего делать не будем?

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

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

Фиксация данных по звонку в CRM позволяет проанализировать работу менеджера: с кем разговаривал, когда и как долго, запись - о чем шел разговор. Конечно, приложение должно быть сервисом, который будет постоянно висеть и слушать события звонка. На некоторых оболочках происходит принудительная выгрузка из памяти резидентных сервисов, поэтому может понадобиться установить особое разрешение для приложения в режиме энергосбережения.

callagent

Результат всех моих изысканий и проб - в открытом доступе на гитхабе приложение callagent. Написано на Kotlin.

Простая схема работы callagent
Простая схема работы callagent
Интерфейс callagent
Интерфейс callagent

Здесь еще скриншоты: https://github.com/antirek/callagent/blob/main/screenshots.md

Что делает callagent?

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

Что такое события и данные по звонку?

Это данные в формате JSON. События (events) - это начало звонка, ответ, завершение звонка.

Данные по звонку (calldata) - это все данные по звонку: время начала, длительность, номер звонящего (формируется по завершению звонка).

Как работает приложение?

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

По завершению звонка приложение формирует данные по звонку (calldata) и также отправляет на сервер.

Затем находит в указанной директории запись звонка (запись делается штатными средствами прошивки) и тоже отправляет на сервер.

Что делать с этими данными?

В репо есть пример сервера. Т.е. вы можете получить данные на сервере и обработать как вам надо.

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

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

И так что в итоге?

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

Репозиторий callagent

Репозиторий callagent: https://github.com/antirek/callagent

В репозитории исходники приложения в открытом доступе, вы можете скачать готовую apk или собрать свою apk-шку из исходников.

В репо есть также список смартфонов, которые точно записывают разговоры.


P.S. В общем, эта заметка - сбор моих немногочисленных знаний по этой теме, приобретенных в попытке разобраться с записью звонков и сделать свое приложение записи. Не сильно разбираюсь в Android API, возможно что-то можно было бы сделать иначе.

Надеюсь, кому-то будет интересно и полезно. Вопросы, идеи, мысли буду рад обсудить - или в комментариях, или в телеграм-группе https://t.me/callagent

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

Неудобно, что записи на мобильных идут в одноканальном режиме. Может быть на каких-то смартфонах можно и двухканальную запись включить? Двухканальную запись было бы удобно отправить в Яндекс на распознавание диалога и получение записанного диалога в тексте.


Презентация callagent на Asterconf 2021, посмотреть презентацию.

Ссылки на заметки, которые побудили переложить свой опыт на хабр:

МВидео: 10 приложений для записи звонков

4PDA: Google окончательно запрещает пользователям записывать звонки. Почему?

Теги:
Хабы:
Всего голосов 14: ↑14 и ↓0+14
Комментарии63

Публикации

Истории

Работа

Swift разработчик
31 вакансия
iOS разработчик
24 вакансии

Ближайшие события