builtbyxm298 downloadsSave messages, web pages, and attachments from nine chat channels into your local vault.
English | 简体中文
Omnichannel Diary saves messages, web pages, and attachments from chat platforms into a local Obsidian Vault. It supports WeChat, Feishu/Lark, DingTalk, WeCom, QQ, Slack, Telegram, Discord, and WhatsApp.
Version 0.4.x is an independent implementation. It does not contain source code from another Obsidian diary plugin and it has no AI provider, prompt, model, semantic routing, telemetry, account service, or hosted relay.
Omnichannel Diary/Daily/YYYY-MM-DD.md.Omnichannel Diary/Clippings, then filed by type: Articles, Social, Community, Documents, and PDFs. Each type can be turned off or given its own subfolder in Capture rules.Omnichannel Diary/Code Links/<Platform>, or do both. Bookmark-only mode never opens the target page.Omnichannel Diary/Attachments.client_id, bot message type, finished state, and the inbound context_token) required for mobile delivery.All folders and capture rules are configurable.
Optional remote search is off by default. When enabled, any connected channel can send search keyword or 查 关键词 — a space after the command is required, otherwise the message is saved as diary text. The plugin returns title, time, source, and path only. After confirm 1,3 or 确认 1,3, it packs those notes on this computer as Markdown, plain text, Word, or PDF and tries to send an openable file back through that channel. See Remote search and export.

查 GEO — keep a space after 查. The bot replies immediately, then lists title, time, source, and path.

确认 1 packs the selected note on this computer and sends an openable attachment back on WhatsApp.

The same confirmation on Feishu/Lark also returns an openable file through that channel.
See Supported clipping sources for the extraction method and limitations of each source family.
| Channel | Connection | Receive transport | Attachments |
|---|---|---|---|
| Official iLink/ClawBot QR authorization | HTTPS long polling | AES-decrypted image, file, video, and voice media | |
| Feishu / Lark | Official device registration or App ID/Secret | Official WebSocket SDK | Message resources downloaded through the official API |
| DingTalk | Client ID/Secret | Official Stream SDK | Text plus direct download resources supplied by the event |
| WeCom | Bot ID/Secret | Official bot WebSocket SDK | SDK download and AES decryption |
| App ID/Secret | Official QQ Bot Gateway SDK | Event attachment URLs | |
| Slack | Socket Mode app token and bot token | Socket Mode WebSocket | Authenticated private file URLs |
| Telegram | BotFather token | Bot API long polling | Photo, document, audio, voice, video, and animation |
| Discord | Bot token | Gateway v10 WebSocket | Message attachment URLs |
| Linked-device QR | Bundled Baileys Node transport | Image, document, audio, video, and sticker |
Platform access is subject to each platform's account eligibility and developer settings. Slack, Telegram, and Discord do not provide QR authorization for their official Bot APIs; their official developer tokens are required.
Copy exactly these three release assets to:
<Vault>/.obsidian/plugins/omnichannel-diary/
Required assets:
main.js
manifest.json
styles.css
Then reload Obsidian, open Settings → Community plugins, and enable Omnichannel Diary.
WhatsApp requires an installed Node.js 20.18 or later runtime. Its transport remains bundled in main.js, but runs as an isolated Node process so protocol failures cannot crash the Obsidian renderer. The plugin never downloads a runtime or executes a shell command; it launches only an allowlisted node / node.exe path with fixed arguments.
Open Settings → Omnichannel Diary.
The Storage & privacy page explains every local and network data boundary and can clear individual channel credentials.
data.json. WhatsApp linked-device credentials and isolated document/community browser profiles are stored below .channel-data. These local values are not additionally encrypted..channel-data runtime state and checks for allowlisted Node/browser executable paths. External processes are started with fixed argument arrays and without a shell.gzip and deflate responses use explicit stream decoders and are never treated as plugin archives.See Privacy and network access for the detailed list.
Requirements: Node.js 20.18 or later.
npm install
npm run verify
The production build is generated from src/main.js. Verification checks the independent unit tests and confirms that the runtime needs only the official Obsidian release assets.
manifest.json, package.json, and versions.json on the same version.npm ci && npm run verify.1.0.0 (no v prefix).main.js, manifest.json, and styles.css.main.js, manifest.json, and styles.css to the release.The repository must remain public and its source must correspond to the release bundle.
The 0.4.x codebase was designed from product requirements and public platform/API documentation. Its source tree, tests, UI, build, documentation, and generated bundle were written independently. See Clean-room record.
Omnichannel Diary is licensed under AGPL-3.0-only. Bundled third-party components retain their own licenses; see NOTICE.md.