Кейс / Транскрипты без хаоса

Как я собрал устойчивый конвейер транскриптов из Plaud в Notion

Этот проект начинался не как большая архитектурная история, а как очень практическая задача: перестать терять ценность в транскриптах и сводках, которые копятся быстрее, чем успеваешь их разобрать. Хотелось не просто перенести данные из Plaud в Notion, а собрать контур, в котором записи, summaries и структура базы живут предсказуемо и не рассыпаются после первых же десятков файлов.

Поэтому кейс получился не про «подключили интеграцию и забыли», а про реальную инженерную доводку. Мне пришлось отдельно разруливать дубли, пересобирать связи между сущностями, править структуру базы и смотреть на UX как на часть самой системы. В итоге получился устойчивый конвейер транскриптов, а не красивая схема на один показ.

Режим работы

Автосинк

Серверный контур регулярно проверяет новые записи и переносит их в Notion без ручного копипаста.

Критичный слой

Дедуп + структура

Стабильность здесь держится не на одном запросе к API, а на правильной модели данных и сверке по исходной записи.

Критерий готовности

Автономно

Контур считается готовым, когда переживает кривые форматы, дубли и ночные падения без постоянного ручного присмотра.

Задача

С чего всё началось на практике

Мне нужна была не просто выгрузка текста из одного сервиса в другой. Нужна была система, в которой запись делается «на руке», а дальше транскрипты и summaries оказываются в моём рабочем центре данных без ручной возни.

Plaud удобен как устройство, но закрыт как контур

Внутри Plaud мне нравились запись, расшифровка и вариативные summary. Но экспорт по одному файлу, ручное копирование текста и постоянные переходы между сервисами — это не система, а серия повторяющихся действий.

Notion уже был моим центром контекста

Если разговор связан с проектом, клиентом или заметкой, мне важно быстро дать ссылку, связать запись с задачей и продолжить работу уже внутри единой базы, а не держать знания по разным закрытым коробкам.

Инженерный контекст

Почему здесь вообще появился «серый» API

Это не главный headline кейса, но без этого инженерного слоя история была бы нечестной. Официальная дорожка автоматизации меня не устраивала, а потребность в рабочем sync-контуре никуда не исчезала.

Официального пути было недостаточно

У Plaud была скорее закрытая логика доступа к интеграциям и путь через Zapier, который не решал мою задачу так, как хотелось: предсказуемо, полно и без лишней прослойки между источником и моей базой.

Решение нашлось через неофициальный контур

Я опирался на веб-версию Plaud, найденные API-эндпоинты, токен доступа и готовую техническую основу из открытого репозитория. Это дало старт, но не дало готовую систему — дальше началась настоящая доводка.

Разбор реальности

Где красивый прототип начал ломаться

На старте всё выглядело просто: забрать transcript и summary, создать страницы в Notion, включить автоматический sync. На практике система быстро показала, что данные живут в нескольких форматах и не обязаны лежать там, где ты их ожидаешь.

content_list вместо ожидаемых полей

У части записей контент лежал не в старых полях, а внутри content_list с data_link, а иногда ещё и в gzip-варианте. Формально данные есть, но путь к ним совсем неочевидный.

Частичная загрузка вместо полной записи

Первый рабочий прототип умел создавать страницы и заголовки, но сам контент приезжал неполно или не приезжал вовсе. То есть витрина была, а продукта ещё не было.

Старая и новая логика одновременно

Как только данные поехали, вскрылась следующая проблема: смешение legacy relation-полей и нативной иерархии sub-items внутри Notion. Две модели рядом быстро начинают умножать хаос.

Дубли как свойство процесса

Один transcript мог иметь несколько summary с одинаковыми названиями. Если строить ключи по названиям, система либо схлопывает варианты, либо плодит лишние сущности не туда, куда нужно.

Архитектурное решение

Что я поменял в модели данных, чтобы контур стал устойчивым

Главный перелом здесь произошёл не на уровне UI, а на уровне контракта данных. Пока база допускает две параллельные логики, каждое следующее исправление только увеличивает хрупкость.

Transcript стал parent-объектом

Я стандартизировал основную запись как parent-сущность, вокруг которой строится остальная структура. Это убрало двусмысленность в том, что считать главным объектом в базе.

Summary-варианты стали sub-items

Вместо смешения кастомных relation и параллельных связей я привёл summaries к нативной иерархии Notion. Так модель стала читаемой и для системы, и для человека.

Legacy-поля пришлось вычищать

Старые поля и переходные связи нельзя было просто «оставить на всякий случай». Пока они существуют рядом с новой схемой, база продолжает расходиться в поведении и отображении.

Миграция структуры была частью решения

Здесь было мало просто придумать новую схему. Нужно было пересобрать связи между сущностями, сохранить корректные parent/sub-item отношения и привести базу к одному источнику правды.

Схема структуры базы транскриптов Plaud в Notion после миграции

Дедупликация

Почему дубли здесь были не мелочью, а отдельной инженерной задачей

Если в Plaud у одной записи несколько summary-вариантов с одинаковыми названиями, наивная логика ключей быстро ломает порядок. Поэтому дедуп пришлось собирать не по внешней красоте, а по «истине» исходной системы.

Сверка по file ID

Я опирался на идентичность записи в Plaud, а не на красивое имя summary. Именно это позволило отделять реальные варианты от мусора, накопленного предыдущими проходами.

Глобальный dedupe-pass

Чтобы не лечить симптомы по одной карточке, я прогнал отдельный проход дедупликации, архивировал лишнее и пересобрал связи так, чтобы итоговая структура совпадала с реальным источником данных.

Ложные дубли пришлось учитывать отдельно

Одинаковые заголовки summary не означают одинаковые сущности. Поэтому критерии сравнения пришлось делать строже, иначе система продолжала бы плодить неверные совпадения.

UX как часть инженерии

Почему форматирование и вид страницы здесь так же важны, как и sync

Когда в Notion вместо нормального текста приезжает сырой markdown со звёздочками, качество продукта падает мгновенно. В этом кейсе UX был не украшением после технической части, а частью самой инженерной работы.

Сырой markdown пришлось превратить в rich text

Я добавил нормальный рендер для жирного текста, ссылок, заголовков и других блоков, чтобы записи читались как готовый рабочий материал, а не как полуразобранный технический дамп.

Типы документов стали визуально понятнее

Иконки, структура полей и аккуратная иерархия нужны не для красоты ради красоты. Это помогает быстрее понять, что перед тобой: основная запись, summary-вариант или технический шум.

Outline-шум ушёл из клиентского слоя

Технические outline-записи не должны конкурировать с основными документами за внимание. Я убрал этот шум из того слоя, который реально используется в работе.

Хороший UX снижает стоимость ошибки

Когда база читается предсказуемо, проще заметить сбой, проверить корректность структуры и доверять системе в ежедневной работе. Поэтому UX здесь напрямую влияет на устойчивость контура.

Схема пути транскрипта от аудио в Plaud до структурированной записи в Notion

Критерий готовности

Когда такой контур вообще можно считать готовым

Для меня интеграция считается завершённой не в момент, когда данные однажды поехали. Готовность наступает тогда, когда система живёт без постоянного чата рядом и выдерживает нормальную реальность.

  1. 1.
    Sync вынесен в отдельный серверный контур, который регулярно проверяет новые записи и не зависит от ручного запуска.
  2. 2.
    Есть защита от параллельных прогонов, чтобы один и тот же процесс не начинал плодить дубли сам по себе.
  3. 3.
    Есть healthcheck и понятный режим наблюдения, чтобы сбой не оставался невидимым до того момента, когда база уже испорчена.
  4. 4.
    Модель данных переживает кривые форматы, нестабильные поля и появление новых записей без ручной правки после каждого edge case.

Итог

Что получилось в результате

На выходе у меня получилась не демонстрация на один созвон, а рабочий контур, в котором запись улетает в Plaud, сервер проверяет новые материалы, а дальше я уже живу внутри Notion, не теряя контекст между разговором и дальнейшей работой с ним.

Транскрипты и summary приезжают в предсказуемой структуре

Основная ценность здесь не просто в автоматическом переносе, а в том, что записи и их варианты больше не рассыпаются по разным логикам внутри базы.

Данные можно сразу использовать в проектах

Если запись относится к клиенту, задаче или личному исследованию, я не возвращаюсь в Plaud за исходником. Нужный материал уже лежит в моём рабочем центре данных.

Система не держится на разовом ручном усилии

После стабилизации контура важным результатом стала именно повторяемость: новые записи проходят тот же путь без постоянной ручной доводки каждой партии данных.

Кейс показывает общий инженерный принцип

Если где-то есть ручная боль, закрытый сервис и ценный поток данных, часто можно собрать устойчивый рабочий контур — но только если серьёзно отнестись к структуре, дедупу и автономности.

Источник

Полный разбор этой истории — в статье

Если нужен более подробный рассказ про сам ход работы, «серый» API, модель данных, дедупликацию и критерий автономности, лучше открыть исходную статью, на которой основан этот кейс.

Кейсы

Связанные кейсы

Все кейсы

Если у вас тоже есть ручной контур, который пора собрать нормально

Я обычно начинаю не с абстрактной интеграции, а с реального процесса: где у вас теряется контекст, на каком шаге появляется ручная рутина и что именно должно жить автономно. После этого можно собрать рабочую систему под ваш стек, а не под универсальную презентацию.

© 2026 ИП Пименов Сергей Викторович
ИНН 616271176890
ОГРН 316619600255641