MailCopilot собирает небольшое количество анонимных диагностических данных и сведений об использовании, когда вы включаете переключатель Отправлять анонимную диагностику и сведения об использовании в Настройки → О программе. На этой странице описано ровно то, что собирается, и — что не менее важно — то, что не собирается никогда.
Что мы никогда не собираем
Ни при каких обстоятельствах MailCopilot не передаёт следующее:
- Текст ваших писем (тема, тело, вложения, черновики)
- Ваши email-адреса или адреса ваших контактов
- Имена и пути папок на вашем IMAP-сервере
- Имена файлов вложений
- Текст поисковых запросов
- Содержимое чатов с AI или AI-памяти
- Хосты серверов, порты или учётные данные
Как маршрутизируются данные
Вся телеметрия отправляется в Sentry — нашу платформу мониторинга ошибок и производительности. Когда вы выключаете переключатель в Настройках, конвейер обходится полностью — ничего не отправляется. Если включить отладочное логирование, те же события дополнительно появляются в локальном main.log, чтобы вы могли просмотреть, что именно было бы отправлено.
Анонимный идентификатор инсталляции
При первом запуске MailCopilot генерирует случайный UUID и сохраняет его в локальном конфигурационном файле. Этот UUID никогда не покидает ваше устройство. Вместо него передаётся SHA-256 хеш — обрезанный до 16 шестнадцатеричных символов — который мы называем install_id_hash. Он прикрепляется к каждому телеметрическому событию как Sentry user id, чтобы мы могли отвечать на вопросы вроде «сколько уникальных установок работает на версии X» или «на сколько пользователей повлиял краш Y — на одного или сотню». Хеш:
- Анонимен — не выводится из и не сопоставляется с email аккаунта, отпечатком устройства, IP-адресом или аппаратным идентификатором.
- Стабилен между релизами — одна и та же установка сохраняет тот же хеш при автообновлении приложения, поэтому метрики удержания переживают апдейты версий.
- Необратим — на нашей стороне нет способа сопоставить хеш обратно с UUID или вашим устройством.
- Сбрасывается при выключении телеметрии — переключение тумблера в Настройках в положение «выкл» немедленно очищает идентификатор у Sentry-клиента и останавливает дальнейшие передачи.
Мы используем этот идентификатор так же, как веб-аналитика использует анонимный visitor id: он позволяет считать уникальные инсталляции, а не общее число событий. Эта разница и есть причина, по которой телеметрия вообще полезна — без неё одна шумная установка выглядела бы так же, как сотня тихих.
События
Жизненный цикл приложения
| Событие | Тип | Агрегируется | Теги | Назначение |
|---|
app.session_started | event | нет | version, platform, theme, lang, accounts_count, install_id_hash | Один раз при запуске приложения. Несёт install_id_hash для DAU/MAU. |
app.session_ended | histogram | нет | reason, install_id_hash | Один раз при штатном завершении. value_ms = длительность сессии. |
app.updated | event | нет | from_version, to_version | Один раз после установки автообновлением новой версии. |
app.startup_ms | histogram | нет | accounts_count | Время от app.whenReady до первого видимого BrowserWindow. |
Сводка использования
| Событие | Тип | Агрегируется | Теги | Назначение |
|---|
usage.session_summary | event | нет | search_used, compose_used, snooze_used, read_later_used, ai_used, rules_used, templates_used, followup_used, install_id_hash | Битовая карта «какие фичи хотя бы раз использовали в сессии», на её конец. |
Онбординг
| Событие | Тип | Агрегируется | Теги | Назначение |
|---|
onboarding.wizard_opened | event | нет | first_run | Пользователь открыл мастер добавления аккаунта. |
onboarding.method_selected | event | нет | method | Пользователь выбрал OAuth или ручную IMAP/SMTP-настройку. |
onboarding.autoconfig_result | event | нет | success, provider | Завершилась автоконфигурация — нашли ли мы IMAP/SMTP-настройки? |
onboarding.connection_test_result | event | нет | kind, success, failure_kind | Завершился тест связи IMAP или SMTP. |
onboarding.google_oauth_result | event | нет | success, failure_kind | Завершился Google OAuth2-поток. |
onboarding.account_saved | event | нет | provider, auth_type | Учётные данные аккаунта записаны в keytar/electron-store. |
onboarding.first_headers_sync_completed | histogram | нет | provider, folder_count_bucket | Время от account_saved до завершения первой синхронизации заголовков (value_ms). |
onboarding.first_message_opened | event | нет | time_since_sync_bucket | Пользователь открыл своё первое письмо после входа в аккаунт. |
Написание
| Событие | Тип | Агрегируется | Теги | Назначение |
|---|
compose.opened | event | нет | source, has_draft | Окно написания открыто; отслеживается точка входа. |
Очередь отправки
| Событие | Тип | Агрегируется | Теги | Назначение |
|---|
send_queue.enqueued | event | нет | scheduled, send_and_archive, has_attachments, body_size_bucket | Исходящее письмо добавлено в send_queue (немедленно или по расписанию). |
send_queue.sent | histogram | нет | scheduled | Время от постановки в очередь до успешной доставки — SMTP для большинства аккаунтов, Microsoft Graph для Outlook (value_ms). |
send_queue.failed | event | нет | failure_kind | Попытка отправки окончательно провалилась (очередь сдалась). Покрывает оба пути: SMTP и Microsoft Graph. |
send_queue.retried | event | нет | attempt_number | Временная ошибка отправки — письмо переставлено в очередь. Покрывает оба пути: SMTP и Microsoft Graph. |
Предупреждения о неверном получателе
| Событие | Тип | Агрегируется | Теги | Назначение |
|---|
misdirection.prompted | event | нет | kind | В Compose показан диалог-предупреждение о возможной отправке не туда. |
misdirection.outcome | event | нет | outcome, kind | Пользователь отреагировал на это предупреждение. |
Шаблоны
| Событие | Тип | Агрегируется | Теги | Назначение |
|---|
template.applied | event | нет | var_count | Пользователь вставил шаблон в окно написания. |
Напоминания follow-up