Предпросмотр файлов
прямо в карточке сделки
Глазик у каждого вложения в ленте amoCRM: клик — и PDF, картинка, таблица или документ открываются в модалке без скачивания. Браузер делает максимум сам; сервер подключается только там, где без него нельзя.
Что это и из чего состоит
Wexus Looker — виджет для amoCRM. Он добавляет кнопку-«глазик» рядом с каждым вложением в ленте сделки или контакта. Клик по глазику открывает модалку предпросмотра: файл можно посмотреть сразу, не скачивая на диск и не открывая сторонние программы.
Система состоит из двух частей и одного принципа:
- Живёт в том же окне, что и amoCRM (не iframe): следит за лентой, врезает глазики,
рисует модалку. Один файл
script.js(~270 КБ), все зависимости встроены. - Файл вложения браузер качает сам, из хранилища amo — под сессией пользователя. Виджету не нужны пароли и токены: их в коде просто нет.
- PDF, картинки, текст, markdown рендерятся прямо в браузере — ни один байт не покидает компьютер пользователя.
- Office-файлы браузер показать не умеет — их обрабатывает наш сервис
wexus-oko.naithon.one(Node + LibreOffice в Docker, за nginx). - Старые форматы (
.doc .xls .ppt …) конвертируются в PDF прогретым пулом LibreOffice — за полсекунды, и PDF возвращается в браузер. - Современные (
.docx .xlsx .pptx .csv) показывает Microsoft Office viewer: сервер на 5 минут публикует файл по одноразовому адресу, откуда его забирает Microsoft.
Принцип: данные идут по самому короткому из возможных путей. Большинство кликов вообще не доходит до нашего сервера; на сервер уходят только форматы, которые иначе не показать, — и это честно описано в политике конфиденциальности.
Четыре участника, три потока
Браузер пользователя — центр системы: он забирает файл из хранилища amo и сам решает, рендерить локально или звать конвертер. Зелёный поток — локальные данные, жёлтый — наш сервер, красный — Microsoft viewer.
Что происходит за полсекунды
От клика по глазику до картинки в модалке. Маршрут выбирается по расширению файла — единственная таблица соответствия в fileUtils.js.
Куда уходит файл — по формату
Главное продуктовое решение системы. Цвет слева: зелёный — не покидает браузер, жёлтый — наш сервер транзитом, красный — обрабатывает Microsoft.
Эшелоны защиты и прогретый пул
Сервис публичный (авторизация — по Origin кабинета amoCRM/Kommo), поэтому вход охраняет эшелон лимитов, а конвертирует — тёплый пул LibreOffice: полсекунды на типичный документ вместо запуска офиса с нуля.
Повторное открытие — мгновенно
Сессионный LRU-кэш в памяти вкладки (100 МБ · 16 записей): три слоя перехватывают маршрут на разной глубине. Кэшируются байты, а не ссылки — память освобождается честно.
Эндпоинты и хранилища
Один домен за nginx, контейнер опубликован только на loopback — снаружи всё ходит через TLS-фронт.