Как устроена приватность
Про приватность все пишут одно и то же, и проверить это обычно нельзя. Поэтому здесь не обещания, а устройство: где что лежит, куда уходит интернет и какие три вещи вы можете проверить сами, не веря нам на слово.
Три проверки, которые делаются за минуту
Начнём с них, потому что всё остальное на этой странице — слова, а это факты, которые вы получите на своём телефоне.
1. Включите авиарежим
После первой загрузки речевой модели приложение работает полностью офлайн. Карточки, заметки, напоминания, распознавание записей — всё продолжает работать без сети. Если бы данные уходили на сервер, в авиарежиме приложение сломалось бы.
2. Посмотрите расход трафика
Настройки Android → приложения → Sales Assistant → передача данных. Вы увидите расход в момент скачивания речевой модели и не увидите больше почти ничего. Ни фонового обмена, ни отправки «телеметрии».
3. Выгрузите историю и откройте файлы
Экспорт кладёт всё в выбранную вами папку обычными Markdown-файлами: файл на клиента, файл на каждый звонок, заметку и сообщение. Откройте их блокнотом. Это все ваши данные в форме, которую мы не можем ни забрать, ни закрыть.
Формат этой папки описан и открыт, а к нему есть читалка на Python, которой приложение не нужно вовсе: github.com/TimurTsedik/obsidian-writer-and-reader. Обещание «данные останутся у вас» проверяется этим за пару минут.
Сервера нет — это не позиция, а устройство
Фраза «мы не смотрим ваши данные» подразумевает, что данные где-то лежат и кто-то теоретически может на них посмотреть. У нас другой случай: серверной части у продукта не существует. Смотреть негде и некому.
Из этого следует и неприятное для нас: мы не можем восстановить вашу историю, если вы потеряете телефон. Поэтому в приложении есть экспорт — это ваша страховка, а не наша.
Единственный выход в интернет
Приложение обращается в сеть за одним: скачать модель распознавания речи. Это Whisper от OpenAI в сборке whisper.cpp, качается из репозитория huggingface.co/ggerganov/whisper.cpp — официального, от автора whisper.cpp, под лицензией MIT. Скачивается один раз, дальше распознавание идёт на самом телефоне, и аудио никуда не передаётся.
В настройках выбирается одна из пяти моделей, лесенкой по мощности телефона: от tiny на 32 МБ до large-v3 на 1,08 ГБ. Размер стоит иметь в виду, если качаете с мобильного интернета.
У каждой модели в приложении прописана контрольная сумма, и скачанный файл с ней сверяется. Это защищает не только от битой загрузки: сумма зашита в само приложение, а не приходит вместе с файлом, поэтому подменить модель по дороге не получится.
Других адресов в приложении нет. Ссылки на WhatsApp и Telegram, которые вы видите в карточке, — это не обращения по сети, а команда телефону открыть соответствующее приложение, как если бы вы нажали ссылку сами.
Что где лежит
- Записи звонков
- Приложение само не записывает разговоры. Оно находит файлы, которые сделал встроенный диктофон вашего телефона, в папке, которую вы указали, и копирует их себе. Копия нужна, чтобы запись не пропала, когда вы почистите папку диктофона. Копия лежит в приватном хранилище приложения — туда другие приложения доступа не имеют. Удалили клиента — копия удалена вместе с ним. Удалили приложение — удалено всё.
- Оригиналы записей
- Остаются там, где их оставил диктофон. Приложение копирует, а не переносит, и чужие файлы не удаляет. Если вы удалили клиента и хотите, чтобы записи разговора не было нигде, оригинал придётся удалить самому.
- Расшифровки, заметки, карточки, напоминания
- В приватном хранилище приложения на телефоне.
- Сообщения из мессенджеров
- Попадают в карточку через доступ к уведомлениям, который вы включаете сами. Текст сохраняется на телефоне, рядом с остальной историей клиента.
Разрешения — по одному
- Микрофон
- Только для голосового итога: вы наговариваете вывод после разговора, приложение превращает его в текст. Откажете — итог можно набрать руками.
- Состояние телефона
- Чтобы понять, что звонок закончился, и предложить записать итог. Откажете — итог добавляется вручную.
- Уведомления
- Чтобы показывать напоминания. Без него напоминания видны только внутри приложения.
- Доступ к уведомлениям
- Так сообщения из WhatsApp, Telegram и SMS попадают в карточку клиента. Отдельное разрешение, включается вручную в системных настройках. Не включите — приложение работает, просто переписки в карточке не будет.
- Точные будильники и автозапуск
- Чтобы напоминание сработало вовремя и пережило перезагрузку телефона.
- Интернет
- Скачать речевую модель. Один раз.
Чего приложение не просит
Это, пожалуй, показательнее списка выше.
- Доступа к хранилищу телефона. Ни широкого, ни какого-либо ещё. Папку с записями вы выбираете системным диалогом и отдаёте приложению ровно её одну — ко всем остальным файлам доступа нет.
- Доступа к контактам. Разрешения на чтение адресной книги в приложении нет. Когда вы добавляете клиента, открывается системный выбор контакта, и приложение получает только того, кого вы выбрали.
- Журнала звонков и SMS. Приложение не читает историю вызовов.
Резервные копии Android
Android умеет сам, без участия разработчика, отправлять данные приложений в резервную копию Google Drive. Для приложения, которое хранит записи разговоров с клиентами, это было бы прямым противоречием всему сказанному выше.
Поэтому автоматическое резервное копирование в приложении отключено: allowBackup=false в манифесте. Ваши карточки, заметки и записи в гугловское облако не уезжают.
Ни аналитики, ни рекламы
В приложении нет библиотек аналитики, сбора сбоев и рекламы. Не «отключены», а не подключены: ни Firebase, ни Crashlytics, ни счётчиков посещаемости. Обратная сторона честная — мы не видим, где приложение падает, и узнаём об этом только из ваших писем.
Чего это не защищает
Страница, где написано только хорошее, читается как реклама. Поэтому границы.
- Доступ к уведомлениям по своей природе широкий. Android не умеет выдать приложению уведомления только от одного мессенджера — система показывает слушателю все. Наше приложение первой же строкой отбрасывает всё, что пришло не от настроенных вами мессенджеров, но само разрешение вы выдаёте широкое. Это плата за то, чтобы переписка попадала в карточку, и вы вправе на неё не соглашаться.
- Разблокированный телефон в чужих руках. Если человек держит ваш разблокированный телефон, он видит всё, что видите вы. Никакая архитектура от этого не спасает — спасает блокировка экрана.
- Оригиналы записей вне приложения. Мы отвечаем за свою копию. За файл, который лежит в папке диктофона, отвечает диктофон.
- Законность записи разговоров. Приложение не записывает звонки, но раскладывает записи, сделанные вашим телефоном. Соблюдение местных законов о записи разговоров остаётся на вас.