Files
obsidian-notif/plan.md
T

1050 lines
34 KiB
Markdown
Raw Permalink Normal View History

2026-06-27 15:05:31 +08:00
План создания Obsidian-плагина напоминаний
Определить базовую концепцию
Плагин: Obsidian Notify Reminders.
Основные возможности:
создавать напоминания из заметок;
хранить список активных напоминаний;
отправлять уведомления через разные сервисы;
поддерживать шаблоны настроек для Telegram, ntfy и других провайдеров;
показывать историю отправленных/пропущенных уведомлений.
Форматы напоминаний в заметках
Поддержать несколько вариантов, чтобы плагин был удобен в разных стилях работы.
Пример inline-синтаксиса:
- [ ] Позвонить врачу @remind(2026-07-01 10:30)
Пример с сервисом:
- [ ] Проверить сервер @remind(2026-07-01 09:00, ntfy)
Пример через YAML/frontmatter:
reminders:
- title: Оплатить хостинг
at: 2026-07-05 12:00
notify: telegram
Пример через code block:
```reminder
title: Сделать бэкап
at: 2026-07-01 23:00
notify: ntfy
priority: high
Архитектура плагина
Основные модули:
ReminderParser
Ищет напоминания в markdown-файлах.
ReminderStore
Хранит нормализованные напоминания, их статус, id заметки, строку, дату, канал уведомления.
Scheduler
Проверяет, какие напоминания пора отправить.
NotificationProvider
Общий интерфейс для разных сервисов.
TelegramProvider
Отправка сообщений через Telegram Bot API.
NtfyProvider
Отправка уведомлений через ntfy topic.
WebhookProvider
Универсальная отправка на произвольный HTTP endpoint.
SettingsTab
UI настроек внутри Obsidian.
TemplatesManager
Готовые шаблоны конфигураций для сервисов.
Интерфейс провайдера уведомлений
Все сервисы должны работать через единый контракт:
interface NotificationProvider {
id: string;
name: string;
send(payload: NotificationPayload, config: ProviderConfig): Promise<void>;
test(config: ProviderConfig): Promise<TestResult>;
}
Payload:
interface NotificationPayload {
title: string;
message: string;
sourceFile?: string;
sourceLine?: number;
priority?: "low" | "normal" | "high";
url?: string;
}
Поддерживаемые сервисы на первом этапе
MVP:
Telegram;
ntfy;
generic webhook;
локальное Obsidian notice-уведомление.
Позже можно добавить:
Discord webhook;
Slack webhook;
Gotify;
Pushover;
Email/SMTP;
Matrix;
Signal через bridge;
Home Assistant webhook.
Шаблоны настроек
В настройках плагина сделать раздел: Notification Templates.
Пример шаблона для Telegram:
{
"id": "telegram-default",
"provider": "telegram",
"name": "Telegram Bot",
"config": {
"botToken": "123456:ABCDEF...",
"chatId": "123456789",
"parseMode": "Markdown"
},
"messageTemplate": "*{{title}}*\n\n{{message}}\n\nSource: {{file}}"
}
Пример для ntfy:
{
"id": "ntfy-default",
"provider": "ntfy",
"name": "ntfy.sh topic",
"config": {
"serverUrl": "https://ntfy.sh",
"topic": "my-obsidian-reminders",
"token": ""
},
"headers": {
"Priority": "{{priority}}",
"Tags": "calendar,obsidian"
},
"messageTemplate": "{{title}}\n{{message}}\n{{file}}"
}
Пример для self-hosted ntfy:
{
"id": "ntfy-self-hosted",
"provider": "ntfy",
"name": "Self-hosted ntfy",
"config": {
"serverUrl": "https://notify.example.com",
"topic": "personal",
"token": "tk_xxxxxxxxx"
}
}
Пример для webhook:
{
"id": "webhook-default",
"provider": "webhook",
"name": "Generic Webhook",
"config": {
"url": "https://example.com/reminder",
"method": "POST",
"headers": {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
},
"body": {
"title": "{{title}}",
"message": "{{message}}",
"file": "{{file}}",
"time": "{{time}}"
}
}
}
**
Переподключение /5
План создания Obsidian-плагина
Определить цель плагина
Плагин для Obsidian должен позволять создавать напоминания из заметок и отправлять уведомления во внешние сервисы:
Telegram
ntfy
Discord webhook
Slack webhook
Email через SMTP или внешний API
Webhook для любых кастомных сервисов
Рабочее название: Obsidian Reminders Notifier.
Основные функции
Создание напоминаний
Поддержать несколько способов задания напоминаний:
- [ ] Позвонить врачу @remind(2026-07-01 10:00)
---
reminder:
at: 2026-07-01 10:00
title: Позвонить врачу
notify:
- telegram
- ntfy
---
> [!reminder]
> date: 2026-07-01 10:00
> message: Проверить отчет
Также можно добавить команду через Command Palette:
Create reminder
Create reminder from selected text
Show upcoming reminders
Test notification service
Хранилище напоминаний
На первом этапе лучше хранить напоминания в JSON-файле внутри .obsidian/plugins/plugin-name/data.json.
Пример структуры:
{
"reminders": [
{
"id": "rem_001",
"notePath": "Tasks/Health.md",
"line": 12,
"title": "Позвонить врачу",
"message": "Позвонить врачу",
"scheduledAt": "2026-07-01T10:00:00+08:00",
"services": ["telegram", "ntfy"],
"status": "pending",
"createdAt": "2026-06-27T12:00:00+08:00"
}
]
}
Статусы:
pending
sent
failed
snoozed
cancelled
Парсер напоминаний в заметках
Сделать модуль, который сканирует markdown-файлы и ищет напоминания.
Поддерживаемые форматы:
@remind(2026-07-01 10:00)
@remind(tomorrow 09:00)
@remind(+2h)
@remind(next monday 14:30)
Для начала можно реализовать только ISO/простые даты, а позже добавить natural language parsing.
Планировщик
Плагин должен периодически проверять ближайшие напоминания.
Логика:
при запуске Obsidian загрузить список напоминаний;
каждые 30-60 секунд проверять, есть ли просроченные pending;
отправить уведомление в выбранные сервисы;
записать результат отправки;
при ошибке повторить через заданный интервал.
Важно: Obsidian не всегда открыт. Поэтому стоит явно указать ограничение: напоминания отправляются, только когда Obsidian запущен. Для полноценной
Переподключение /5
Сначала быстро сверю актуальную базу по Obsidian plugin API, чтобы план не опирался на устаревшие привычки. Потом соберу практичный roadmap с архитектурой, шаблонами сервисов и идеями расширения.
Использовано Context7 интеграциюResolve library id
Query docs
План плагина Obsidian Reminders + Notifications
Цель MVP
Сделать плагин, который позволяет создавать напоминания прямо из Obsidian и отправлять уведомления во внешние сервисы: Telegram, ntfy, Discord/Webhook, email через SMTP/API, Slack/Webhook и другие через универсальный HTTP Webhook.
Основные сценарии
Создать напоминание из командной палитры.
Создать напоминание из выделенного текста.
Распознать напоминание из Markdown-синтаксиса, например:- [ ] Позвонить врачу ⏰ 2026-07-01 09:30
Посмотреть список активных напоминаний.
Отложить, выполнить, удалить или повторить напоминание.
Отправить уведомление в один или несколько сервисов.
Техническая основа
Использовать стандартный Obsidian plugin scaffold: manifest.json, main.ts, styles.css.
Основной класс плагина наследует Plugin.
В onload():загрузить настройки через loadData();
зарегистрировать команды через addCommand();
добавить страницу настроек через PluginSettingTab;
запустить планировщик напоминаний.
В onunload():остановить таймеры;
сохранить состояние;
освободить ресурсы.
Структура данных
interface Reminder {
id: string;
title: string;
body?: string;
dueAt: string;
sourceFile?: string;
sourceLine?: number;
completed: boolean;
repeat?: RepeatRule;
channels: string[];
createdAt: string;
updatedAt: string;
}
Настройки:
interface PluginSettings {
defaultChannels: string[];
scanVaultOnStartup: boolean;
reminderSyntax: string;
notificationProviders: NotificationProviderConfig[];
}
Архитектура модулей
main.ts
Жизненный цикл плагина, команды, инициализация.
settings.ts
UI настроек.
reminder-store.ts
Хранение напоминаний через loadData() / saveData().
parser.ts
Поиск напоминаний в Markdown.
scheduler.ts
Проверка ближайших напоминаний.
providers/telegram.ts
providers/ntfy.ts
providers/webhook.ts
providers/discord.ts
providers/base.ts
Общий интерфейс отправки уведомлений.
Интерфейс провайдера
interface NotificationProvider {
id: string;
name: string;
send(message: NotificationMessage): Promise<void>;
test(): Promise<void>;
}
Шаблоны настроек сервисов
Telegram Bot
{
"type": "telegram",
"name": "Personal Telegram",
"enabled": true,
"botToken": "123456:ABCDEF_TOKEN",
"chatId": "123456789",
"parseMode": "Markdown"
}
ntfy
{
"type": "ntfy",
"name": "Phone ntfy",
"enabled": true,
"serverUrl": "https://ntfy.sh",
"topic": "my-obsidian-reminders",
"token": "",
"priority": "default"
}
Discord Webhook
{
"type": "discord",
"name": "Discord reminders",
"enabled": true,
"webhookUrl": "https://discord.com/api/webhooks/...",
"username": "Obsidian Reminder"
}
Generic Webhook
{
"type": "webhook",
"name": "Custom service",
"enabled": true,
"method": "POST",
"url": "https://example.com/reminder",
"headers": {
"Authorization": "Bearer TOKEN",
"Content-Type": "application/json"
},
"bodyTemplate": {
"title": "{{title}}",
"body": "{{body}}",
"dueAt": "{{dueAt}}",
"sourceFile": "{{sourceFile}}"
}
}
Настройки UI
На странице настроек стоит сделать:
список подключенных сервисов;
кнопку “Add provider”;
выбор шаблона: Telegram, ntfy, Discord, Webhook;
кнопку “Test notification”;
настройку синтаксиса напоминаний;
интервал проверки;
дефолтные каналы уведомлений;
экспорт/импорт конфигурации без секретов.
Команды Obsidian
Create reminder
Create reminder from selection
Show upcoming reminders
Scan current note for reminders
Scan vault for reminders
Send test notification
Snooze selected reminder
План разработки
Подготовить scaffold плагина.
Реализовать настройки и хранение данных.
Сделать модель напоминаний.
Добавить ручное создание напоминаний.
Реализовать scheduler.
Добавить ntfy provider как самый простой.
Добавить Telegram provider.
Добавить generic webhook provider.
Сделать парсер Markdown-напоминаний.
Добавить UI списка напоминаний.
Добавить тестовые уведомления.
Подготовить документацию и примеры конфигов.
Собрать релиз для Obsidian community plugins.
Идеи для улучшения
Поддержка повторяющихся напоминаний: каждый день, каждую неделю, по cron-like правилу.
Snooze: отложить на 5 минут, 1 час, завтра утром.
Уведомление до события: за 10 минут, за час, за день.
Интеграция с Daily Notes.
Син
Переподключение /5
План Плагина
Определить концепцию
Рабочая идея: Obsidian-плагин для напоминаний, который хранит задачи/напоминания внутри vault и отправляет уведомления во внешние сервисы: Telegram, ntfy, Discord, email/webhook и т.п.
Основные сценарии:
создать напоминание из заметки;
создать напоминание через команду Obsidian;
указать дату, время, повтор, текст и канал уведомления;
получить уведомление в выбранном сервисе;
видеть список активных/прошедших напоминаний.
Выбрать формат напоминаний
Возможные варианты:
- [ ] Позвонить врачу 🔔 2026-07-01 10:00 #reminder
Или YAML/frontmatter:
reminders:
- title: Позвонить врачу
at: 2026-07-01T10:00:00+08:00
notify: telegram
repeat: none
Или отдельный JSON-файл плагина:
{
"reminders": [
{
"id": "rem_001",
"title": "Позвонить врачу",
"time": "2026-07-01T10:00:00+08:00",
"providers": ["telegram", "ntfy"],
"status": "pending"
}
]
}
Лучший вариант для старта: хранить внутреннее состояние через Obsidian loadData() / saveData(), а затем добавить парсинг Markdown-задач.
Создать базовую структуру плагина
Минимальные файлы:
manifest.json
package.json
tsconfig.json
esbuild.config.mjs
src/main.ts
src/settings.ts
src/reminders.ts
src/providers/
telegram.ts
ntfy.ts
webhook.ts
В main.ts:
загрузка настроек;
регистрация команд через addCommand;
регистрация вкладки настроек через PluginSettingTab;
запуск планировщика напоминаний;
остановка таймеров в onunload.
Команды Obsidian
Добавить команды:
Create reminder
Create reminder from selected text
Show active reminders
Snooze reminder
Test notification provider
Sync reminders from notes
Команда из выделенного текста должна брать текст задачи как заголовок напоминания.
Настройки плагина
В настройках нужны разделы:
общие настройки;
часовой пояс;
интервал проверки напоминаний;
сервис по умолчанию;
шаблоны уведомлений;
настройки провайдеров;
кнопка тестовой отправки.
Пример структуры настроек:
interface PluginSettings {
defaultProvider: "telegram" | "ntfy" | "webhook";
checkIntervalSeconds: number;
timezone: string;
providers: {
telegram?: TelegramSettings;
ntfy?: NtfySettings;
webhook?: WebhookSettings;
};
templates: NotificationTemplate[];
}
Шаблоны настроек уведомлений
Telegram
{
"name": "Telegram",
"enabled": true,
"botToken": "123456:ABCDEF",
"chatId": "123456789",
"messageTemplate": "🔔 Напоминание: {{title}}\nВремя: {{time}}\nЗаметка: {{note}}"
}
Отправка:
POST https://api.telegram.org/bot<BOT_TOKEN>/sendMessage
ntfy
{
"name": "ntfy",
"enabled": true,
"serverUrl": "https://ntfy.sh",
"topic": "my-reminders",
"token": "",
"priority": 3,
"tags": ["bell"],
"messageTemplate": "Напоминание: {{title}}"
}
Generic Webhook
{
"name": "Custom Webhook",
"enabled": true,
"url": "https://example.com/webhook",
"method": "POST",
"headers": {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
},
"bodyTemplate": {
"title": "{{title}}",
"message": "{{message}}",
"time": "{{time}}",
"note": "{{note}}"
}
}
Discord Webhook
{
"name": "Discord",
"enabled": true,
"webhookUrl": "https://discord.com/api/webhooks/...",
"messageTemplate": "🔔 **{{title}}**\n{{message}}\n{{note}}"
}
Архитектура провайдеров
Сделать общий интерфейс:
interface NotificationProvider {
id: string;
name: string;
send(reminder: Reminder, settings: unknown): Promise<void>;
test(settings: unknown): Promise<void>;
validate(settings: unknown): string[];
}
Тогда новые сервисы можно добавлять без переписывания ядра.
Планировщик напоминаний
Логика:
при запуске плагина загрузить все напоминания;
каждые N секунд проверять просроченные;
отправлять уведомление;
помечать как отправленное;
для повторяющихся напоминаний рассчитывать следующую дату;
хран
Переподключение /5
План создания Obsidian-плагина напоминаний
Определить MVP
Плагин должен уметь:
создавать напоминания из заметки;
хранить список активных напоминаний;
проверять наступление времени;
отправлять уведомление в выбранный сервис;
иметь настройки сервисов уведомлений;
содержать готовые шаблоны конфигураций для Telegram, ntfy и расширяемых HTTP/webhook-сервисов.
Базовая структура плагина
Стандартная структура Obsidian-плагина:
obsidian-reminders-notifier/
├─ manifest.json
├─ package.json
├─ esbuild.config.mjs
├─ tsconfig.json
├─ src/
│ ├─ main.ts
│ ├─ settings.ts
│ ├─ reminders/
│ │ ├─ reminder-store.ts
│ │ ├─ reminder-parser.ts
│ │ └─ scheduler.ts
│ ├─ providers/
│ │ ├─ notification-provider.ts
│ │ ├─ telegram-provider.ts
│ │ ├─ ntfy-provider.ts
│ │ └─ webhook-provider.ts
│ └─ templates/
│ └─ provider-presets.ts
└─ README.md
Модель данных
Напоминание:
interface Reminder {
id: string;
title: string;
body?: string;
dueAt: string;
sourceFile?: string;
sourceLine?: number;
providerIds: string[];
status: 'pending' | 'sent' | 'failed' | 'snoozed';
createdAt: string;
updatedAt: string;
}
Настройки провайдера:
interface NotificationProviderConfig {
id: string;
type: 'telegram' | 'ntfy' | 'webhook';
name: string;
enabled: boolean;
config: Record<string, string>;
}
Способы создания напоминаний
На старте лучше поддержать 3 варианта:
команда из Command Palette: Create reminder;
синтаксис прямо в заметке;
контекстное действие для выделенного текста.
Пример синтаксиса в Markdown:
- [ ] Позвонить врачу @remind(2026-07-01 09:00)
- [ ] Проверить сервер @remind(+2h) @notify(ntfy)
- [ ] Отправить отчет @remind(tomorrow 18:00) @notify(telegram,ntfy)
Планировщик
Внутри плагина нужен Scheduler, который:
при загрузке читает сохраненные напоминания через loadData();
периодически проверяет pending-напоминания;
отправляет уведомления через выбранные провайдеры;
помечает напоминание как sent или failed;
при выгрузке плагина очищает таймеры.
Для MVP хватит проверки раз в 30-60 секунд.
Провайдеры уведомлений
Общий интерфейс:
interface NotificationProvider {
type: string;
send(reminder: Reminder, config: Record<string, string>): Promise<void>;
test(config: Record<string, string>): Promise<void>;
}
Провайдеры:
Telegram: отправка через Bot API.
ntfy: отправка POST-запроса на topic.
Webhook: универсальный HTTP POST для Discord, Slack, Make, n8n, Home Assistant и подобных сервисов.
Шаблоны настроек
В настройках плагина сделать кнопку Add from template.
Примеры шаблонов:
Telegram
{
"type": "telegram",
"name": "Telegram Bot",
"config": {
"botToken": "123456:ABCDEF...",
"chatId": "123456789"
}
}
ntfy
{
"type": "ntfy",
"name": "ntfy.sh",
"config": {
"serverUrl": "https://ntfy.sh",
"topic": "my-obsidian-reminders",
"token": ""
}
}
Self-hosted ntfy
{
"type": "ntfy",
"name": "Self-hosted ntfy",
"config": {
"serverUrl": "https://ntfy.example.com",
"topic": "reminders",
"token": "tk_xxxxx"
}
}
Generic Webhook
{
"type": "webhook",
"name": "Generic Webhook",
"config": {
"url": "https://example.com/webhook",
"method": "POST",
"headers": "{\"Content-Type\":\"application/json\"}",
"bodyTemplate": "{\"title\":\"{{title}}\",\"body\":\"{{body}}\",\"dueAt\":\"{{dueAt}}\"}"
}
}
Настройки UI
В PluginSettingTab добавить:
список провайдеров;
включение/отключение каждого сервиса;
кнопку тестового уведомления;
импорт шаблона;
интервал проверки;
поведение после отправки: оставить, удалить, отметить выполненным;
timezone/формат даты;
дефолтный провайдер.
Команды Obsidian
Добавить команды:
Create reminder;
Show active reminders;
Snooze reminder;
Test notification providers;
Scan current note for reminders;
Scan vault for reminders.
Безопасность
Важно:
не логировать токены;
маскировать секреты в UI;
хранить настройки только локально;
предупреждать пользователя, что Telegram bot token и webhook URL являются чувствительными данными;
для webhook ограничить методы на POST/PUT, если не нужен полный контроль.
Тестирование
Проверить:
парсинг разных форматов дат;
отправку в Telegram;
отправку в ntfy;
работу без интернета;
повтор после ошибки;
перезапуск Obsidian;
изменение/удаление напоминаний в заметке;
поведение при неверных токенах.
**README и документа
Переподключение /5
План Создания Плагина Obsidian
Идея: плагин для напоминаний внутри Obsidian с отправкой уведомлений в Telegram, ntfy, Discord, Slack, email/webhook и другие сервисы
Переподключение /5
Ниже план создания Obsidian-плагина для напоминаний с отправкой уведомлений в Telegram, ntfy и другие сервисы.
Цель Плагина
Плагин для Obsidian, который позволяет создавать напоминания прямо из заметок, хранить их в vault/settings и отправлять уведомления через выбранные каналы:
Telegram Bot
ntfy
Webhook
Discord
Slack
Email через SMTP/API, опционально
локальные уведомления Obsidian
Рабочее название: Obsidian Reminder Notifier.
Основной Сценарий
Пользователь пишет в заметке:
- [ ] Позвонить врачу 🔔 2026-07-01 10:00 #reminder
или через команду:
/remind Завтра в 9:00 проверить бэкап
Плагин распознает напоминание, сохраняет его, в нужное время отправляет уведомление через выбранный сервис и может отметить задачу как выполненную, просроченную или отправленную.
Функции MVP
Создание напоминанийЧерез команду Obsidian: Create reminder
Через контекстное меню выделенного текста
Через синтаксис в Markdown
Через frontmatter, например:
reminder:
at: 2026-07-01 10:00
title: Проверить сервер
notify: telegram
Просмотр напоминанийОтдельная панель со списком активных напоминаний
Фильтры: сегодня, неделя, просроченные, выполненные
Переход к заметке-источнику
Отправка уведомленийTelegram
ntfy
Generic Webhook
Локальное уведомление внутри Obsidian
НастройкиВыбор часового пояса
Интервал проверки напоминаний
Канал уведомлений по умолчанию
Несколько профилей уведомлений
Тестовая отправка уведомления
Шаблоны конфигураций для сервисов
Хранение данныхНастройки через loadData() / saveData()
Напоминания можно хранить:в данных плагина
в Markdown-задачах
или гибридно: источник в Markdown, индекс в данных плагина
Архитектура
src/
main.ts
settings.ts
reminders/
ReminderParser.ts
ReminderStore.ts
ReminderScheduler.ts
ReminderView.ts
notifiers/
Notifier.ts
TelegramNotifier.ts
NtfyNotifier.ts
WebhookNotifier.ts
LocalNotifier.ts
templates/
telegram.ts
ntfy.ts
webhook.ts
utils/
dates.ts
validation.ts
Ключевые Компоненты
ReminderParser
Ищет напоминания в Markdown
Поддерживает даты:2026-07-01 10:00
tomorrow 9:00
через 2 часа
каждый понедельник 09:00, в будущем
ReminderStore
Хранит индекс напоминаний
Связывает напоминание с файлом и строкой
Отслеживает статусы: pending, sent, failed, done, `
Переподключение /5
Работал на протяжении 4m 15s
Ниже план создания Obsidian-плагина для напоминаний с отправкой уведомлений в Telegram, ntfy и другие сервисы.
Цель Плагина
Плагин для Obsidian, который позволяет создавать напоминания из заметок, командной палитры или настроек, а в нужное время отправляет уведомления через выбранные каналы: Telegram, ntfy, webhooks, email-провайдеры или другие интеграции.
Рабочее название: Obsidian Reminder Notifier.
Основные Возможности
Создание напоминаний:
через команду Obsidian: Create reminder;
из выделенного текста;
из строки в заметке, например:- [ ] Позвонить врачу @remind(2026-07-01 10:00)
через frontmatter:reminder:
at: 2026-07-01T10:00:00+08:00
title: Позвонить врачу
notify: telegram
Отправка уведомлений:
Telegram Bot API;
ntfy;
generic webhook;
Discord webhook;
Slack webhook;
Gotify;
Pushover;
Apprise как универсальный backend, если захочется поддержать много сервисов через один формат.
Управление напоминаниями:
список активных напоминаний;
отложить: 5 мин, 15 мин, 1 час, завтра;
отметить выполненным;
открыть связанную заметку;
повторяющиеся напоминания: daily, weekly, monthly, custom cron-like.
Шаблоны настроек:
встроенные примеры конфигурации для каждого сервиса;
кнопка “создать из шаблона”;
проверка подключения;
подсказки, какие поля обязательны.
Локальное хранение:
настройки через Obsidian loadData() / saveData();
напоминания можно хранить либо в data.json, либо прямо в markdown-заметках;
лучше поддержать оба режима: “из заметок” и “локальная база плагина”.
Архитектура
src/
main.ts
settings/
SettingsTab.ts
templates.ts
reminders/
ReminderParser.ts
ReminderStore.ts
ReminderScheduler.ts
ReminderModal.ts
ReminderListView.ts
notifiers/
Notifier.ts
TelegramNotifier.ts
NtfyNotifier.ts
WebhookNotifier.ts
DiscordNotifier.ts
GotifyNotifier.ts
utils/
date.ts
logger.ts
validation.ts
manifest.json
styles.css
Ключевые Модули
ReminderParser
ищет напоминания в markdown;
поддерживает remind(...), frontmatter и, возможно, Dataview-подобный синтаксис;
нормализует дату, текст, ссылку на файл, статус.
ReminderScheduler
при запуске плагина загружает будущие напоминания;
ставит таймеры через setTimeout;
периодически пересканирует vault;
учитывает, что Obsidian может быть закрыт: просроченные напоминания отправляются при следующем запуске.
ReminderStore
хранит созданные через UI напоминания;
синхронизирует состояние: выполнено, отложено, отправлено;
предотвращает повторную отправку одного и того же события.
Notifier
interface Notifier {
id: string;
name: string;
send(payload: NotificationPayload): Promise<void>;
test(config: unknown): Promise<void>;
}
SettingsTab
список каналов уведомлений;
добавление нового канала из шаблона;
включение/отключение каналов;
тестовая отправка;
выбор канала по умолчанию.
Примеры Шаблонов Настроек
Telegram:
{
"type": "telegram",
"name": "Telegram personal",
"enabled": true,
"botToken": "123456:ABCDEF_your_bot_token",
"chatId": "123456789",
"parseMode": "Markdown"
}
ntfy:
{
"type": "ntfy",
"name": "ntfy phone",
"enabled": true,
"serverUrl": "https://ntfy.sh",
"topic": "my-obsidian-reminders",
"token": "",
"priority": 3,
"tags": ["bell"]
}
Generic webhook:
{
"type": "webhook",
"name": "Custom webhook",
"enabled": true,
"url": "https://example.com/reminder",
"method": "POST",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
},
"bodyTemplate": {
"title": "{{title}}",
"message": "{{message}}",
"note": "{{notePath}}",
"time": "{{time}}"
}
}
Discord webhook:
{
"type": "discord",
"name": "Discord reminders",
"enabled": true,
"webhookUrl": "https://discord.com/api/webhooks/...",
"username": "Obsidian Reminder"
}
Gotify:
{
"type": "gotify",
"name": "Gotify server",
"enabled": true,
"serverUrl": "https://gotify.example.com",
"appToken": "YOUR_APP_TOKEN",
"priority": 5
}