@acedatacloud/skills 2026.703.14 → 2026.703.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acedatacloud/skills",
3
- "version": "2026.703.14",
3
+ "version": "2026.703.16",
4
4
  "description": "Agent Skills for AceDataCloud AI services — music, image, video generation, LLM chat, web search. Compatible with Claude Code, GitHub Copilot, Gemini CLI, OpenAI Codex, and 30+ AI coding agents.",
5
5
  "keywords": [
6
6
  "agent-skills",
@@ -4,8 +4,10 @@ description: Publish posts to your Blogger blog and read your blogs / posts via
4
4
  when_to_use: |
5
5
  Trigger when the user wants to publish a post to their Blogger blog,
6
6
  list their blogs, list / read posts on a blog, or update an existing
7
- post. The connector grants the Blogger scope (read + write); confirm
8
- before publishing publicly (you can insert as a draft first).
7
+ post. The connector grants the Blogger scope (read + write). When the
8
+ user asks to "publish" / "post" / "发布" / "发出去", publish it LIVE
9
+ (isDraft=false) directly — only stage a draft when the user explicitly
10
+ asks for a draft or says they want to review it first.
9
11
  connections: [google/blogger]
10
12
  allowed_tools: [Bash]
11
13
  license: Apache-2.0
@@ -32,7 +34,11 @@ curl -sS -H "Authorization: Bearer $GOOGLE_BLOGGER_TOKEN" \
32
34
 
33
35
  ## Publish a post
34
36
 
35
- **Confirm before publishing publicly.** Use `?isDraft=true` to stage a draft.
37
+ When the user asks to publish / post / 发布 / 发出去, publish it **live**
38
+ with `?isDraft=false` (the default below) — do NOT silently save a draft
39
+ and stop. Only pass `?isDraft=true` when the user explicitly asks for a
40
+ draft or to review before going public. After publishing, always report
41
+ the returned live `url` back to the user.
36
42
 
37
43
  ```bash
38
44
  BLOG_ID="1234567890"
@@ -64,5 +70,11 @@ curl -sS -H "Authorization: Bearer $GOOGLE_BLOGGER_TOKEN" \
64
70
 
65
71
  - **Enable the Blogger API** on the Google Cloud project backing the OAuth
66
72
  client, or calls 403 with `accessNotConfigured`.
73
+ - A `403 "Method doesn't allow unregistered callers"` means the request
74
+ carried no token (empty `$GOOGLE_BLOGGER_TOKEN`) — ask the user to
75
+ (re)connect the Blogger connector, don't blame their Google Cloud setup.
76
+ - An empty `{"kind":"blogger#blogList"}` (no `items`) means the connected
77
+ Google account owns no blog — tell the user to create one at blogger.com
78
+ or reconnect with the account that has the blog.
67
79
  - `content` must be HTML; passing raw Markdown will render literally.
68
80
  - Paginate with `&pageToken=$PAGE_TOKEN` from the previous `.nextPageToken`.
@@ -0,0 +1,109 @@
1
+ ---
2
+ name: telegram-bot
3
+ description: Publish to your Telegram channel/group via a bot using the official Telegram Bot API — send text or photo posts, edit and delete messages, and verify the bot's access to a chat. Use when the user wants to broadcast to a Telegram channel/group with a bot token (BotFather), cross-post an article, or manage the bot's posts. Distinct from the personal-account Telegram connector.
4
+ when_to_use: |
5
+ Trigger when the user wants a Telegram BOT to post to their channel / group:
6
+ send a text or photo message, edit or delete a message, or check that the bot
7
+ is an admin of the target chat. Auth is a bot token from @BotFather; the bot
8
+ must be an admin (with post rights) in the target channel/group. This acts as
9
+ the bot, so confirm the text and target chat_id before sending publicly.
10
+ connections: [telegrambot]
11
+ allowed_tools: [Bash]
12
+ license: Apache-2.0
13
+ metadata:
14
+ author: acedatacloud
15
+ version: "1.0"
16
+ ---
17
+
18
+ Call the **official Telegram Bot API** with `curl + jq`. The bot token is
19
+ injected as `$TELEGRAMBOT_BOT_TOKEN`; an optional default target chat is
20
+ `$TELEGRAMBOT_CHAT_ID` (e.g. `@your_channel` or a numeric id). Base URL:
21
+ `https://api.telegram.org/bot$TELEGRAMBOT_BOT_TOKEN/<METHOD>`.
22
+
23
+ Every response is JSON `{"ok":true,"result":...}` on success, or
24
+ `{"ok":false,"error_code":<n>,"description":"<msg>"}` on failure — always check
25
+ `.ok` and show `description` verbatim. Common failures: `401 Unauthorized` = bad/
26
+ revoked token (reconnect the connector), `400 Bad Request: chat not found` = wrong
27
+ chat_id, `403 Forbidden: bot is not a member of the channel chat` / `... need
28
+ administrator rights` = add the bot to the channel as an admin with post rights,
29
+ `429` with `parameters.retry_after` = rate-limited, wait that many seconds.
30
+
31
+ `chat_id` is `@channelusername` (public) or the numeric id (private channels/
32
+ groups, often negative like `-1001234567890`). Resolve/verify it with `getChat`.
33
+
34
+ ## Step 1 — verify the bot + target
35
+
36
+ ```bash
37
+ BOT="https://api.telegram.org/bot$TELEGRAMBOT_BOT_TOKEN"
38
+ curl -sS "$BOT/getMe" | jq '{ok, bot: .result.username, name: .result.first_name}'
39
+ # confirm the bot can post to the target chat (must be admin in the channel):
40
+ CHAT="${TELEGRAMBOT_CHAT_ID:-@your_channel}"
41
+ curl -sS -G "$BOT/getChat" --data-urlencode "chat_id=$CHAT" \
42
+ | jq '{ok, type: .result.type, title: .result.title, error: .description}'
43
+ ```
44
+
45
+ ## Send a text post
46
+
47
+ **Confirm the text and target chat with the user before posting publicly.** Text
48
+ is 1-4096 chars. Use `parse_mode=HTML` (simplest) or `MarkdownV2`.
49
+
50
+ ```bash
51
+ CHAT="${TELEGRAMBOT_CHAT_ID:-@your_channel}"
52
+ curl -sS -G "$BOT/sendMessage" \
53
+ --data-urlencode "chat_id=$CHAT" \
54
+ --data-urlencode "text=<b>Hello</b> from the bot 👋 #ai" \
55
+ --data-urlencode "parse_mode=HTML" \
56
+ --data-urlencode "disable_web_page_preview=false" \
57
+ | jq '{ok, message_id: .result.message_id, error: .description}'
58
+ ```
59
+
60
+ The public post URL for a channel is `https://t.me/<channelusername>/<message_id>`.
61
+
62
+ - **HTML mode** supports `<b> <i> <u> <s> <a href> <code> <pre> <blockquote>`.
63
+ Escape literal `< > &` as `&lt; &gt; &amp;`.
64
+ - **MarkdownV2** requires escaping `_ * [ ] ( ) ~ \` > # + - = | { } . !` with `\`.
65
+ - Always send `text` via `--data-urlencode` so newlines/Cyrillic/emoji aren't mangled.
66
+
67
+ ## Send a photo with caption
68
+
69
+ ```bash
70
+ CHAT="${TELEGRAMBOT_CHAT_ID:-@your_channel}"
71
+ curl -sS -G "$BOT/sendPhoto" \
72
+ --data-urlencode "chat_id=$CHAT" \
73
+ --data-urlencode "photo=https://cdn.example.com/pic.jpg" \
74
+ --data-urlencode "caption=<b>Caption</b> text" \
75
+ --data-urlencode "parse_mode=HTML" \
76
+ | jq '{ok, message_id: .result.message_id, error: .description}'
77
+ ```
78
+
79
+ `photo` accepts an HTTPS URL (≤5 MB, Telegram fetches it), a Telegram `file_id`,
80
+ or an uploaded file. Caption is 0-1024 chars. For an album use `sendMediaGroup`.
81
+
82
+ ## Edit / delete a message
83
+
84
+ ```bash
85
+ # edit text (same chat_id + message_id)
86
+ curl -sS -G "$BOT/editMessageText" \
87
+ --data-urlencode "chat_id=$CHAT" --data-urlencode "message_id=123" \
88
+ --data-urlencode "text=Updated text" --data-urlencode "parse_mode=HTML" \
89
+ | jq '{ok, error: .description}'
90
+
91
+ # delete a message
92
+ curl -sS -G "$BOT/deleteMessage" \
93
+ --data-urlencode "chat_id=$CHAT" --data-urlencode "message_id=123" \
94
+ | jq '{ok, error: .description}'
95
+ ```
96
+
97
+ `deleteMessage` works for the bot's own channel posts within 48 hours (and needs
98
+ `can_delete_messages`/post rights).
99
+
100
+ ## Gotchas
101
+
102
+ - **The bot must be added to the channel/group as an admin** with post rights, or
103
+ sends return `403`. `getChat` first to confirm access.
104
+ - Channel numeric ids are large negative numbers (`-100...`); prefer `@username`
105
+ for public channels.
106
+ - Free broadcast limit is ~30 msg/s; space out bulk sends or you'll hit `429`
107
+ (respect `parameters.retry_after`).
108
+ - This is the **bot** speaking (not your personal account) — for reading your own
109
+ DMs / groups as yourself, use the `telegram` (MTProto) connector instead.