بنقرة واحدة
glassclaw
Send interactive cards to Telegram users via Glass Claw — forms, dashboards, maps, tables, and more.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Send interactive cards to Telegram users via Glass Claw — forms, dashboards, maps, tables, and more.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
| name | glassclaw |
| description | Send interactive cards to Telegram users via Glass Claw — forms, dashboards, maps, tables, and more. |
| homepage | https://glassclaw.app |
| metadata | {"openclaw":{"requires":{"bins":["node"]},"install":[{"id":"noble-ciphers","kind":"node","packages":["@noble/ciphers"],"label":"Install Glass Claw dependencies"}]}} |
Glass Claw lets you send interactive cards to Telegram — forms, dashboards, maps, and more.
The glassclaw tool is at {baseDir}/tools/glassclaw.js
Before sending any cards, complete these steps once:
/apikey. They should copy the key and give it to you.node {baseDir}/tools/glassclaw.js config set apiKey <the key from step 1>
The Telegram bot token is auto-detected from ~/.openclaw/openclaw.json. If it's not there, set it manually:
node {baseDir}/tools/glassclaw.js config set telegram.botToken <your bot token>
All config is stored in ~/.glassclaw/glassclaw.json.setup with the user's chat ID before sending the first card. This sends a button the user taps once to complete setup. See {baseDir}/instructions/getting-started.md for details.The tool is invoked via CLI:
node {baseDir}/tools/glassclaw.js <command> [--param value ...]
| Command | Required params | Description |
|---|---|---|
setup | --chatId --userId | One-time key exchange for private chats |
create_card | --chatId --userId --title --payloadFile | Create card and send button to chat |
update_card | --surfaceId --userId --payloadFile | Update existing card |
delete_card | --surfaceId | Delete a card |
poll_response | --surfaceId --userId | Wait for form submission (30s long-poll) |
get_account | (none) | Check tier and usage limits |
Add --group true to create_card/update_card/poll_response for group chats (skips encryption).
{"version":"v0.9","createSurface":{"surfaceId":"hello"}}
{"version":"v0.9","updateComponents":{"surfaceId":"hello","components":[{"id":"root","component":"Column","children":["header","btn"]},{"id":"header","component":"GlassHeader","title":"Hello!","subtitle":"Your first Glass Claw card"},{"id":"btn","component":"GlassButton","children":["btn-text"],"variant":"filled","action":{"name":"tap"}},{"id":"btn-text","component":"Text","text":"Tap me"}]}}
node {baseDir}/tools/glassclaw.js create_card \
--chatId 123456789 \
--userId 123456789 \
--title "Hello" \
--payloadFile hello.jsonl
Follow these rules to create the best experience for users:
Use cards when they add value. Cards are great for dashboards, forms, maps, tables, and anything with rich visuals or interactive input. But if a simple text reply answers the user's question, just respond normally — don't create a card for a one-line answer. Cards should enhance the experience, not slow it down.
Never share card URLs directly. Cards are delivered as buttons inside Telegram — the create_card tool handles this automatically. Never paste a card URL into the chat. Card URLs only work inside Telegram's mini-app viewer and may be encrypted.
Use multi-page navigation for lists with details. When showing a list of items where each item has more content to show (emails, orders, products, files), ALWAYS use GlassNavigator to let the user tap an item and navigate to a detail page. Never cram all detail content into a single scrolling page. See {baseDir}/templates/list-with-details.md for the pattern.
After receiving a form submission, confirm the details with the user before taking action. When you receive form data (via direct message or poll_response), summarize what the user submitted and ask for confirmation. Do NOT immediately act on the submission (e.g., don't book a reservation, send an email, or make a purchase without the user confirming first).
Pick the right template. Before building a card from scratch, check {baseDir}/templates/ for a ready-made pattern:
list-with-details.md pattern (multi-page)contact-form.md, feedback-form.md, dinner-reservation.mddashboard.mdorder-tracker.mdmenu.mdtodo-list.mdpricing-table.mdEvery component in the JSONL payload MUST follow these rules. The tool will reject payloads that violate them:
"id" and "component" fields — NOT "type""children" must be an array of string IDs, NOT nested objects{"literalString": "..."}"version": "v0.9"createSurface uses "surfaceId" — NOT "id"{{name}} renders literally. Substitute real values into the JSONL before sending."txt-body" not "body", "btn-submit" not "submit", "chk-milk" not "milk"{baseDir}/instructions/getting-started.md{baseDir}/instructions/card-management.md{baseDir}/instructions/form-responses.md{baseDir}/instructions/group-chats.md{baseDir}/instructions/tiers.md{baseDir}/templates/Component reference: Read the full doc for any component you plan to use — each file has properties, examples, and a full working card. Do NOT use the catalog JSON files (catalogs/*.json) as format reference.
Layout & basic (free): {baseDir}/components/free/
| Component | What it does |
|---|---|
| Column | Vertical stack — use as root container |
| Row | Horizontal stack |
| Divider | Horizontal line separator |
| Text | Text block (variants: body, h3, caption) |
| Icon | Material Symbols icon |
| Image | Image from URL |
| GlassButton | Tappable button — filled or outlined, triggers actions |
| GlassNavigator | Wraps a component to make it tappable for page navigation |
| GlassCarousel | Swipeable multi-page container |
| GlassHeader | Title + subtitle header bar |
| GlassListItem | List row with icon, primary/secondary text, trailing |
| GlassBadge | Small colored label |
Premium (Pro tier): {baseDir}/components/premium/
| Component | What it does | Best for |
|---|---|---|
| GlassInput | Text input field | Forms — names, emails, search |
| GlassTextarea | Multi-line text input | Forms — messages, comments |
| GlassSelect | Dropdown picker | Forms — choosing from options |
| GlassCheckbox | Checkbox with label | Forms — toggles, agreements |
| GlassSwitch | Toggle switch | Settings, on/off controls |
| GlassRating | Star rating (1-N) | Reviews, feedback |
| GlassSlider | Range slider with live value | Amounts, percentages |
| GlassStat | Single metric with trend arrow | KPIs, dashboard numbers |
| GlassGauge | Circular progress ring | Percentages, scores, load |
| GlassBarChart | Horizontal bar chart | Comparisons, rankings |
| GlassProgress | Horizontal progress bar | Completion, loading |
| GlassBento | 2-column grid layout | Dashboards with multiple stats |
| GlassCallout | Alert/notice banner | Warnings, tips, info |
| GlassCard | Card with image, title, children | Product cards, profiles |
| GlassMap | Google Maps embed | Locations, directions |
| GlassTimeline | Vertical event timeline | Order tracking, milestones |
| GlassTable | Data table with rows/columns | Pricing, comparisons, data |
| GlassCodeBlock | Syntax-highlighted code | Code snippets, configs |
Choose the right component for the job. For example: showing a percentage? Use GlassGauge, not Text. Tracking an order? Use GlassTimeline, not a list. Comparing values? Use GlassBarChart, not a table.
setup once per new user in private chats before sending cards. Group chat cards skip setup.poll_response if the user explicitly lets you know they've submitted the form. See {baseDir}/instructions/form-responses.md.{baseDir}/templates/ before building a card from scratch. Copy a template and customize it — this is faster and avoids format mistakes.