Моя CRM в Obsidian на плагине Operon

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


В начале сентября я провёл в канале интерактив: предложил подписчикам написать в комментариях свою профессию и пообещал каждому прислать эскиз системы в Obsidian под его работу. Эскиз — это буклет на 3 страницы: какие разделы нужны хранилищу юриста, психолога или инженера, как между ними ходит информация и какими плагинами это собирается. Профессию назвали 20 человек. Каждому ушёл буклет в личку, дальше пошли переписки и записи на консультации. Через неделю я уже не помнил, кому что отправил и кому обещал ответить. До этого лидов я не вёл никак, их было мало и все помещались в голове. Отдельный сервис заводить не хотелось: задачи, клиентские проекты и заметки по встречам у меня и так в Obsidian. В этой статье расскажу, как я собрал CRM на плагине Operon и что в нём допилил. Следующие раунды интерактива буду объявлять в канале.

Моя CRM в Obsidian на плагине Operon - 1

Почему Operon

Operon — плагин для задач и проектов. Задача в нём бывает строкой с чекбоксом или отдельной заметкой, и одной командой одна форма превращается в другую. Над всеми задачами хранилища плагин строит сводные виды: таблицу, канбан, календарь, диаграмму Ганта.

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

В Bases с версии 1.14 тоже есть канбан, и воронку со стадиями там можно собрать самому. В Operon она есть сразу.

Карточка человека

На каждого, кто мне написал, заводится заметка в папке Люди/. Для Operon это задача-файл: во фронтматтере у неё operonId и status, а значит, она появляется на канбане и в таблицах.

---
operonId: z6s17jf
status: Консультация.Проведена
профессия: 
демо-кейс: 
links:
  - https://t.me/username
источник: Рекомендация
---

Под фронтматтером идут разделы.

  • «Что известно» — ссылки на заметки по человеку: исходные данные, план консультации, конспект, маршрут сборки системы;

  • «Задачи» — задачи по этому лиду или клиенту;

  • «Переписка» — выдержки из диалога, если к ним придётся вернуться.

CRM в Operon — карточка человека.png

Стадия подсказывает следующий шаг

Статус в Operon состоит из двух частей: имя воронки (в плагине она называется пайплайном) и стадия. У меня 3 воронки:

Воронка

Стадии

Лид

Новый, Буклет отправлен, Диалог, Отпал

Консультация

Запрос, Назначена, Проведена, Думает, Отвалилась

Проект

Диагностика, Проектирование, Смета, Сборка, Передача, Сопровождение, Закрыт, Завершён, Отвалился

Под каждую воронку свой канбан, колонки на нём совпадают со стадиями.

Лид становится клиентом, когда я меняю ему статус с Лид.Диалог на Консультация.Запрос. Карточка пропадает с канбана «Лиды» и появляется на канбане «Консультации». Отдельной операции переноса нет, файл остаётся на месте.

Типовые задачи вида «отправить буклет», «ответить», «напомнить о себе» я на людей не завожу: канбан их уже показывает. Карточка в колонке «Новый» значит, что буклет не отправлен. Карточка в колонке «Диалог» — ход за мной или пора написать. Поэтому в разделе «Задачи» живёт только то, что из стадии не следует. Например, собрать схему под профессию, которой нет в наборе буклетов.

Канбаны и таблицы

Канбаны: «Лиды», «Консультации», «Проекты». Открываю «Лиды», вижу, у кого какая стадия, и перетаскиваю карточку, когда что-то сдвинулось.

Для общего обзора есть заметка CRM.md с тремя таблицами Operon: клиенты в работе, лиды, архив. Таблица вставляется в заметку блоком кода со ссылкой на сохранённый пресет:

# 🤝 Клиенты
```operon-table
presetId: "tp_clients"
```
# 🎯 Лиды
```operon-table
presetId: "tp_leads"
```
# 📦 Архив
```operon-table
presetId: "tp_archive"
```

У каждого пресета свой фильтр по статусу. В «Лидах» статус содержит Лид. и не содержит Отпал. В «Клиентах» собраны статусы Проект. и Консультация. без финальных стадий. Финальные и отпавшие собраны в «Архиве». Архив вынесен в отдельную таблицу, потому что в одной таблице группы сортируются по порядку воронок, и закрытые проекты оказываются выше активных. CRM.md встроена в главную заметку бизнес-раздела, так что все люди видны с первого экрана.

Моя CRM в Obsidian на плагине Operon - 2

Ещё одна таблица живёт в заметке раунда интерактива. Её фильтр — поле «Источник» со значением Интерактив 2026-09-04. Она показывает всех, кто пришёл из раунда, с их стадиями, и заодно служит счётчиком: сколько получили буклет, сколько дошли до консультации.

Что я допиливал в Operon

Из коробки Operon закрыл канбаны, таблицы и воронки. Остальное пришлось настраивать и дописывать.

Свои поля

Для лида мне нужны профессия, буклет, который я ему отправил, и откуда он пришёл. Я завёл 3 поля: «Профессия», «Демо-кейс» и «Источник», и для каждого включил показ в редакторе задачи, в окне создания и на чипах. Ещё нужна ссылка на телеграм, но под неё своё поле не понадобилось. Кликабельной внешняя ссылка бывает только в системном поле Operon links, поэтому телеграм лежит там.

Ключ у поля «Источник» — leadSource. Слово source занято системной колонкой Operon, и под этим ключом своё поле не заводится. Во фронтматтере поле всё равно называется «источник»: видимое имя задаётся отдельно от ключа.

Чипы

Чип — это плашка с иконкой и значением поля. Панель свойств Obsidian я скрываю, внешне она мне не нравится, поэтому данные о человеке видны только чипами. С ними пришлось разбираться дольше всего.

Набор чипов в Operon настраивается отдельно для каждого места, где показывается задача: для карточки канбана, для строки задачи в заметке, для списков фильтров. Наверху заметки-задачи плагин выводит блок со списком её подзадач, и чипы там берутся из настроек списков фильтров.

Сначала на странице человека чипов было много. Читать их там незачем, всё то же самое есть в шапке ниже. Я оставил на странице один чип links со ссылкой на телеграм: по нему удобно кликнуть и сразу открыть переписку. На карточке канбана, наоборот, профессия видна текстом, а ссылка, демо-кейс и источник — иконками. Чип статуса там выключен: статус и так понятен по колонке.

Моя CRM в Obsidian на плагине Operon - 3
Моя CRM в Obsidian на плагине Operon - 4

Шапка карточки на Meta Bind

Менять данные через чипы неудобно в двух местах. Клик по чипу стадии листает стадии только внутри текущей воронки, и перевести лида в консультацию так нельзя, только через полный редактор задачи. А ссылку в чипе links нельзя поправить, только удалить и добавить заново.

Поэтому для правки у карточки есть шапка: строки с полями ввода плагина Meta Bind, которые пишут прямо во фронтматтер:

🎯 Стадия: `INPUT[inlineSelect(option(Лид.Новый), option(Лид.Буклет отправлен), option(Лид.Диалог), option(Лид.Отпал), option(Консультация.Запрос), option(Консультация.Назначена), option(Консультация.Проведена), option(Консультация.Думает), option(Консультация.Отвалилась), option(Проект.Диагностика), option(Проект.Проектирование), option(Проект.Смета), option(Проект.Сборка), option(Проект.Передача), option(Проект.Сопровождение), option(Проект.Закрыт), option(Проект.Завершён), option(Проект.Отвалился)):status]`
💼 Профессия: `INPUT[text:профессия]`
🗂 Демо-кейс: `INPUT[inlineListSuggester(option([[Юрист]]), option([[Психолог]]), option([[Инженер]])):демо-кейс]`
🌱 Источник: `INPUT[inlineSelect(option(Интерактив 2026-09-04), option(Входящий), option(Хабр), option(Telegram), option(Рекомендация)):источник]`
✈️ Телеграм: `INPUT[text:links[0]]`

В выпадающем списке «Стадия» лежат стадии всех трёх воронок, им я и перевожу человека из одной в другую. «Демо-кейс» — ссылка на буклет, который я ему отправил (в примере список сокращён, у меня там 24 профессии). «Телеграм» правит ссылку в links как обычный текст.

Шаблон новой карточки

Новую заметку в Люди/ создаёт Templater по шаблону папки:

<%*
const name = await tp.system.prompt("Имя человека");
if (name) await tp.file.rename(name);
-%>
---
operonId: <% Math.random().toString(36).slice(2,9) %>
status: Лид.Новый
профессия: 
демо-кейс: 
links: 
  - https://t.me/
источник: 
---

Ниже в шаблоне та же шапка на Meta Bind и пустые разделы.

В шаблоне 2 решения, до которых я дошёл не сразу.

  1. Имя спрашивается до отрисовки заметки. Если создать файл «Без названия» и переименовать его потом, виджеты Meta Bind перестают работать до переоткрытия вкладки. Поэтому шаблон сначала спрашивает имя и переименовывает файл, а потом выводит содержимое.

  2. operonId генерируется самим шаблоном. В документации Operon есть заглушка {{operonId}}, но плагин подставляет её только в своих командах. В шаблоне Templater она остаётся текстом, и заметка для Operon задачей не становится. Строка Math.random().toString(36).slice(2,9) выдаёт 7 случайных символов из цифр и латиницы, того же вида, что у плагина.

Редактор задачи в узком окне

Карточку человека удобно править в редакторе задачи Operon: слева поля, справа текст заметки. Когда окно Obsidian уже 980 пикселей, текст заметки ложится поверх панели полей и закрывает её шапку вместе с кнопкой, которая переключает поля и текст. Вернуться к полям становится нечем. Это чинит CSS-сниппет: он закрепляет шапку панели полей и опускает текст заметки ниже неё.

@media (max-width: 979px) {
  .operon-task-editor-shell.has-file-body .operon-task-editor-title-row {
    position: sticky;
    top: 0;
    z-index: 6;
    background: var(--background-primary);
  }

  .operon-task-editor-shell.has-file-body.is-file-body-visible .operon-task-editor-file-panel,
  .operon-task-editor-shell.has-file-body .operon-task-editor-file-panel-backdrop.is-visible {
    top: 46px;
  }
}

Для желающих: напоминания Operon в iPhone

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

У Operon есть напоминания: к задаче можно привязать время или правило вроде «за день до срока». Так я ставлю себе пинг лиду, которому пора написать. Чтобы напоминание пришло на iPhone, когда Obsidian закрыт, Operon записывает список ближайших напоминаний в файл, а быстрая команда iOS переносит их в стандартные Напоминания. Но этот файл плагин обновляет только на самом телефоне и только пока там открыт Obsidian. Поэтому файл вместо плагина пишет скрипт на Mac. Ограничение у схемы одно: пока Mac выключен или спит, файл не обновляется, и новые напоминания на iPhone не появляются.

Как это устроено.

  1. На Mac каждые 5 минут через launchd запускается скрипт на Python. Он обходит заметки хранилища и собирает открытые задачи с полями reminderDatetimes и reminderRules — и строки с чекбоксом, и задачи-файлы.

  2. Правила вида dateDue.1d скрипт пересчитывает в конкретное время: дата срока минус 1 день. В выдачу попадает окно от 3 дней назад до 7 дней вперёд.

  3. Результат пишется в файл .operon-mirror.json в корне хранилища в формате, который повторяет собственный файл Operon. Хранилище лежит в iCloud, и файл синхронизируется на iPhone.

  4. Утром автоматизация iOS запускает быструю команду. Она читает файл и добавляет задачи в список «Obsidian» в Напоминаниях.

Грабли плагина

  • Статус всегда выводится целиком: Лид.Диалог. Все воронки пишут стадию в одно поле status, и чтобы стадии разных воронок не путались, Operon добавляет к ним имя воронки. Так статус выглядит везде: на чипе карточки, в колонке таблицы, в выпадающем списке. В таблице колонка статуса из-за этого получается широкой, а Консультация.Отвалилась читается хуже, чем просто «Отвалилась». Настройки, которая прятала бы имя воронки, нет: я искал и в настройках, и в коде плагина. Оставил как есть. Одно поле на все воронки и даёт перевод лида в клиенты одной сменой статуса, и за это я готов терпеть длинные подписи.

  • Meta Bind не узнаёт значения с точками. Источник Интерактив 04.09.2026 виджет не сопоставлял с вариантом из списка: показывал пустое поле, а по клику подставлял первый вариант. С датой через дефисы, 2026-09-04, работает.

Что получилось

До сентября лиды у меня не велись никак. Теперь у каждого человека есть карточка, все они видны на одном канбане, и ни один не потерялся. По колонке «Диалог» видно, кому я должен ответ.

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

Больше разборов и кейсов — в моём тг-канале.

Автор: psheno322

Источник

Оставить комментарий