12 unversioned skills now versioned at 1.0.0: agent-communication, ascii-video, external-reasoning-augmentation, jotty-notes-api, minecraft-modpack-server, obsidian, pokemon-player, powerpoint, social-search, songwriting-and-ai-music, workspace-context-organization, youtube-content Total repo: 141 skills across all profile scopes
98 lines
5.2 KiB
Markdown
98 lines
5.2 KiB
Markdown
---
|
|
name: txt-dad
|
|
description: "Use when the user says 'text dad <message>' or asks to send a quick message to dad. Pushes the message to dad's Telegram DM via the active profile's Telegram gateway."
|
|
version: 1.1.0
|
|
author: Hermes Agent
|
|
license: MIT
|
|
platforms: [linux]
|
|
metadata:
|
|
hermes:
|
|
tags: [telegram, notify, family, send-message]
|
|
related_skills: []
|
|
---
|
|
|
|
# Text Dad via Telegram
|
|
|
|
## Overview
|
|
|
|
One-way notification path: the user says "text dad - hey" (or any "text dad <message>" / "tell dad <message>" variant), and the agent pushes that message to dad's Telegram DM. No reply path is expected — this is a one-shot send, not a conversation bridge.
|
|
|
|
Underlying mechanism: `hermes send --to telegram:<chat_id> "<message>"` — a scriptable CLI that hits the Telegram Bot API REST endpoint directly using the active profile's Telegram credentials. No running gateway required; it reuses whatever Telegram creds the current profile has configured.
|
|
|
|
This skill is profile-agnostic. It does not hardcode a profile. It uses whatever Telegram bot the active session's profile is configured with.
|
|
|
|
## When to Use
|
|
|
|
- User says "text dad <message>", "tell dad <message>", "message dad <message>", "send dad <message>"
|
|
- User asks to notify dad / ping dad on Telegram
|
|
- Any variant where the intent is a one-way push to dad's phone
|
|
|
|
Don't use for:
|
|
- Two-way conversation (not wired — see "Responding back" note below)
|
|
- Sending to anyone other than dad (different chat_id)
|
|
- Long content (>4096 chars — Telegram's per-message limit); split or summarize first
|
|
|
|
## Dad's chat_id
|
|
|
|
`1544075739`
|
|
|
|
This is the numeric Telegram user ID configured as `TELEGRAM_HOME_CHANNEL` in the dev profile. It is a DM chat (same as user ID for private chats).
|
|
|
|
See `references/cross-profile-setup.md` for the full dev+openz architecture.
|
|
|
|
## Steps
|
|
|
|
1. Extract the message text from the user's request. Strip the leading trigger phrase ("text dad", "tell dad", "message dad", "send dad", optional dash/colon). Trim whitespace.
|
|
- Completion criteria: you have a non-empty `message` string that is just what Zoe wants to say.
|
|
|
|
2. If the message is empty, ask Zoe what to send. Do not send a blank message.
|
|
|
|
3. Prepend the sender tag so dad knows who it's from. The final text sent to Telegram is:
|
|
```
|
|
from Zoe: <message>
|
|
```
|
|
For example, if Zoe says "text dad - hey", send "from Zoe: hey". The "from Zoe: " prefix is always added by this skill; never include it in the extracted message, and never strip it out.
|
|
|
|
4. Send via the active profile's Telegram gateway:
|
|
```bash
|
|
hermes send --to telegram:1544075739 "from Zoe: <message>"
|
|
```
|
|
- The command exits 0 on success, 1 on delivery failure, 2 on usage/config error.
|
|
- Completion criteria: command printed "sent" and exit code 0.
|
|
|
|
5. Confirm to the user with one short line, e.g. "Sent to dad on Telegram." Do not echo the message back or add preamble.
|
|
|
|
## Exact command
|
|
|
|
Replace `<message>` with the extracted text. Keep it a single shell argument (the terminal tool handles quoting):
|
|
|
|
```
|
|
hermes send --to telegram:1544075739 "from Zoe: <message>"
|
|
```
|
|
|
|
If the message contains double quotes or shell metacharacters, use the terminal tool's shell quoting (single-quote the whole argument, escape internal single quotes as `'\''`).
|
|
|
|
## Common Pitfalls
|
|
|
|
1. **No Telegram creds in the active profile.** `hermes send` uses whatever `TELEGRAM_BOT_TOKEN` the current profile has. If the profile has no Telegram bot configured, delivery fails with exit 1. Ensure the profile running this skill has a valid `TELEGRAM_BOT_TOKEN` and that dad's chat_id is in that bot's `TELEGRAM_ALLOWED_USERS` (or the bot allows all users).
|
|
|
|
2. **Empty or whitespace-only message.** Telegram rejects empty text. Always extract and validate before sending.
|
|
|
|
3. **Message too long.** Telegram Bot API caps text at 4096 chars. For longer content, either truncate with an ellipsis note or split into multiple `hermes send` calls. The CLI does not auto-split for you.
|
|
|
|
4. **Trigger phrase left in the message.** If the user says "text dad - hey", send "from Zoe: hey", not "from Zoe: text dad - hey". Strip the trigger, keep the prefix.
|
|
|
|
5. **Expecting a reply.** This is one-way. If dad replies on Telegram, that reply lands in the Telegram gateway's normal inbound session for that bot — nothing forwards it back to the session that sent the text. Do not promise the user a reply path.
|
|
|
|
6. **Treating "dad" as configurable.** This skill is hardcoded to dad's chat_id for this household. Generalizing to other recipients requires their numeric Telegram user IDs and their own entry in the profile's allowlist.
|
|
|
|
## Responding back (not supported)
|
|
|
|
There is no reply path wired here. A Telegram reply from dad goes into the Telegram gateway's session as a normal inbound message to that bot — nothing forwards it to the Open WebUI session that sent the text. The user (daughter) should not expect to receive dad's responses through this skill. If two-way texting is later needed, the realistic path is giving the daughter her own Telegram bot (separate profile, separate token, native two-way).
|
|
|
|
## Verification Checklist
|
|
|
|
- [ ] Trigger phrase stripped from the message
|
|
- [ ] Message non-empty
|
|
- [ ] `hermes send --to telegram:1544075739 "from Zoe: <message>"` exits 0
|
|
- [ ] User gets a one-line confirmation, no echo of the message |