betool спроектирован так, чтобы соответствовать требованиям GDPR без обходных решений: каждый доступ к контенту пользователя со стороны агента, принадлежащего другой организации, регистрируется, и каждая организация может просматривать свой собственный журнал.
Журнал доступа
Выделенная таблица записывает для каждого межтенантного доступа:
- Отметку времени
- Целевую организацию (чей контент был прочитан)
- Читающую организацию (как правило, поставщика)
- Пользователя, инициировавшего чтение
- Tool, через который прошло чтение
- Тип сущности (закрытый словарь:
contextдля разговора,scenarioдля бенчмарка) - Идентификатор прочитанной сущности (и конкретный exchange, когда чтение касается одной реплики)
Словарь сущностей закрыт на уровне базы данных (ограничение CHECK) и закрыт на уровне кода (белый список приложения). Добавление типа = новая миграция + обновление белого списка. Никаких неожиданных записей.
Право на доступ (статья 15)
Каждая организация может просматривать СВОИ СОБСТВЕННЫЕ журналы доступа в разделе Параметры организации → Конфиденциальность (секция Журнал доступа) или через:
GET /api/admin/me/supervisor-reads
Маршрут возвращает чтения в обратном хронологическом порядке (до 1 000 записей за вызов).
Никакого межорганизационного доступа к аудиту: поставщик никогда не видит журналы аудита клиента.
Право на удаление (статья 17)
Архитектура позволяет выполнять удаление корректно: все данные организации привязаны к её org_id (бизнес-таблицы, папки файлов, секреты), что позволяет выполнять точечное удаление — конкретного пользователя, конкретного разговора или всей организации — не затрагивая остальное.
Запросы на удаление (статья 17) обрабатываются нашей службой поддержки: напишите на contact@betool.fr с учётной записи администратора соответствующей организации.
Согласие и отзыв согласия на межтенантное чтение
По умолчанию согласие на межтенантное чтение установлено в FALSE. Администратор организации может включить его — и отозвать в любой момент — в разделе Параметры организации → Конфиденциальность.
- Отключено — по умолчанию. Поставщик не может получить доступ к какому-либо контенту этой организации. Следствие: межорганизационная поддержка по вопросам, касающимся контента, невозможна (структурная поддержка остаётся возможной).
- Включено — супервизор может читать разговоры организации для диагностики, при этом каждый доступ проходит аудит и доступен организации для просмотра.
Поставщик НЕ МОЖЕТ включить это согласие от имени клиента. Это фундаментальный тест: если поставщик может переключить его без действия клиента, архитектура нарушена.
Предохранитель деструктивных операций
Любая операция, которая уничтожает или заменяет контент (DELETE, REPLACE-IN-PLACE), отклоняется валидатором, если целевая организация не включила согласие на чтение. Причина: без видимости оператор вслепую предложил бы полезную нагрузку, которая перезаписала бы существующее.
Каскадный отказ при недоступности аудита
Если база данных аудита недоступна (инцидент инфраструктуры), любое межтенантное чтение отклоняется. Строгая политика: никакого чтения без следа.
Следствие на уровне кода: вызывающий код, перехватывающий исключение, должен повторно выбросить ошибку аудита до любой бизнес-обработки. Это инвариант, проверяемый бенчмарком безопасности.
Cookie-файлы согласия
Маркетинговый сайт (betool.ai) измеряет свою аудиторию с помощью Google Analytics 4 в режиме Consent Mode v2:
- По умолчанию все согласия Google (измерение, реклама) установлены в отказ: скрипт Google Analytics не загружается, и никакие аналитические cookie-файлы не устанавливаются.
- Скрипт загружается, а измерение включается только после вашего явного согласия на измерение аудитории в баннере.
- Вы можете отозвать это согласие в любой момент (Управление cookies в подвале сайта): измерение снова переходит в состояние отказа.
Рекламные согласия остаются в состоянии отказа: сайт не занимается рекламным таргетингом.