Install
openclaw skills install draft-routerRoutes Telegram draft messages with inline buttons to archive, add to memory, create tasks, or run as prompts.
openclaw skills install draft-routerRoute incoming drafts via Telegram inline buttons. Forwards messages get three action options.
# Make executable
chmod +x /home/node/.openclaw/workspace/skills/draft-router/draft-router.js
Auto-detects drafts by header pattern: DRAFTS | YYYY-MM-DD HH:MM ---
// From an OpenClaw agent
const router = require('./skills/draft-router/draft-router.js');
// Check if message is a draft
if (router.isDraftMessage(messageText)) {
const result = router.handleDraft(messageText, 'drafts-app');
// Send via Telegram with buttons
message.send({
to: chatId,
message: result.text,
buttons: result.buttons
});
}
| Button | Action |
|---|---|
| 🧠 Knowledge | Appends to MEMORY.md with timestamp and source |
| 📦 Archive | Saves to memory/drafts-archive/archived/ |
| ✅ Tasks | Adds to SESSION-STATE.md as an active task |
| ▶️ Run as Prompt | Prepares for execution; asks qualifying questions one at a time |
workspace/
├── skills/draft-router/
│ ├── SKILL.md
│ └── draft-router.js
└── memory/
└── drafts-archive/
├── archived/ # Archived drafts
├── prompts/ # Drafts marked for prompt execution
└── processed/ # Knowledge additions
Callbacks use format: draft:{id}:{action}
// Parse callback
callback_data.split(':') // ['draft', 'id', 'action']
// Execute
const result = router.handleCallback(draftId, action);
Add to your agent's routing logic:
// When message is forwarded or has draft content
if (isForwarded || message.text.includes('#draft')) {
const router = require('../skills/draft-router/draft-router.js');
const result = router.handleDraft(message.text, message.from);
return {
message: result.text,
buttons: result.buttons
};
}