Сеть стоматологических клиник ежедневно выдаёт пациентам результаты компьютерной томографии (КТ). Это тяжёлые файлы — снимки и 3D-реконструкции на сотни мегабайт, а с ними персональные медицинские данные, которые по закону нельзя передавать за пределы РФ. Мы сделали для клиники два механизма, встроенных прямо в её Bitrix24: отправку писем с проверкой на соответствие 152-ФЗ и собственный загрузчик больших файлов в облако Bitrix24.
Задача
- Отправлять результат КТ пациенту письмом из Bitrix24 — по готовым шаблонам, с корректным отправителем и подставленными данными.
- Не нарушать 152-ФЗ: медицинские данные пациента не должны уходить на иностранные почтовые сервисы. Значит, перед отправкой нужно проверять, где «прописан» ящик получателя.
- Класть в письмо файлы КТ, которые не помещаются в стандартные ограничения — обычное CRM-поле и REST Bitrix24 не принимают такие объёмы.
Механизм 1. Письма с проверкой 152-ФЗ
Вебхук на PHP 8 (PHPMailer + Bitrix24 REST) вызывается роботом смарт-процесса «Отправка файлов клиентам». Он собирает письмо и решает, можно ли его отправить.

- Сбор письма. По элементу смарт-процесса берутся контакт и email пациента, карточка отправителя со своими SMTP-параметрами, ссылки на файлы и шаблон письма (BBCode → HTML с подстановкой «Имя клиента», темы, ссылок на файлы).
- Проверка на РФ. Определяем юрисдикцию почтового сервиса получателя — по списку доменов, зонам .ru / .рф / .su и GeoIP MX-хостов ящика (через ip-api). Российский сервис (mail.ru, Яндекс и т.п.) — отправляем, элемент переходит в статус «Успех».
- Если ящик иностранный — данные пациента не отправляются. Пациенту уходит письмо-заглушка, элемент переводится в «Провал», и менеджер видит, что нужно запросить российский адрес. Так соблюдается запрет на трансграничную передачу персональных данных.
Механизм 2. Загрузчик больших файлов в Bitrix24 Диск
Отдельное приложение Bitrix24 добавляет в карточку кастомное поле «Большие файлы» и вкладку-виджет. Оно решает проблему, с которой упирается штатный Bitrix24.

REST-метод disk.folder.uploadfile принимает файл только одним запросом, chunked/resumable-загрузки у него нет, а реальный потолок — около 1 ГиБ (это мы отдельно подтвердили обращением в техподдержку Bitrix24). Поэтому загрузчик работает в трёх режимах:
- До 950 МБ — браузер отправляет файл прямо на Диск по выданному uploadUrl, без нагрузки на сервер приложения.
- 950 МБ – 1 ГБ — браузер шлёт файл частями по 100 МБ на backend, тот собирает его и кладёт на Диск одним файлом. После загрузки сверяется реальный размер файла — неполные удаляются, битые файлы в CRM не попадают.
- Больше 1 ГБ — файл кладут штатным веб-загрузчиком Bitrix (он принимает любой размер) и привязывают к карточке через встроенный браузер по Диску («Выбрать с Диска»).
Для каждого файла формируется публичная ссылка (disk.file.getExternalLink) — именно она уходит в письмо пациенту. Список файлов, сроки хранения и автоудаление старых файлов (cron) ведутся в собственной таблице приложения.
Что было под капотом
- SMTP у каждого отправителя свой (хост, порт, логин, шифрование) — заведён в карточке смарт-процесса «Отправители».
- Аккуратно разобрали особенности Bitrix24 REST: списочные поля приходят как enum-ID, а не текст; режим шифрования выводится из порта (465 = SSL, 587/25 = STARTTLS). Тема письма собирается в коде и подставляется как обычный текст.
- Загрузка больших файлов проверена на практике: файл ~1,02 ГБ уходит одним запросом за ~7 минут, ровно 1 ГиБ уже отбивается — отсюда и пороги режимов.
Результат
- Клиника отправляет результаты КТ пациентам прямо из Bitrix24 — по шаблонам, в один шаг, без выгрузки файлов «на сторону».
- Соблюдается 152-ФЗ: письмо с медданными физически не уходит на иностранные почтовые сервисы, а спорные случаи явно попадают к менеджеру.
- Тяжёлые файлы КТ (сотни МБ, вплоть до ~1 ГБ) штатно доходят до пациента ссылкой на облако Bitrix24, а не «умирают» на лимитах загрузки.
Стек и технологии
PHP 8, PHPMailer, Bitrix24 REST (crm.item.*, disk.*), смарт-процессы и роботы Bitrix24, кастомный тип пользовательского поля и placement-приложение, GeoIP (ip-api), SQLite, cron. Проектирование сценариев, интеграция и разработка — студия Interland.
Клиент указан обезличенно по договорённости о конфиденциальности.