营销增长
需要向 Telegram 频道/群组发布消息、媒体…
用 Telegram Bot API 将文本、图片、文件、投票和营销模板发布到 Telegram 频道/群组,并支持编辑、删除、置顶、定时和多频道广播。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
需要向 Telegram 频道/群组发布特定
解决思路
- 加载凭据:依次执行 `source ~/.claude/.env.global 2>/dev/null`、`source .env 2>/dev/null`、`source .env.local 2>/dev/null`,检查 `TELEGRAM_BOT_TOKEN` 和 `TELEGRAM_CHAT_ID` 是否存在;缺失时输出创建机器人和查找 chat ID 的指引并退出。
- 通过 @BotFather 创建机器人:在 Telegram 搜索 @BotFather,发送 `/newbot`,设置 display name,设置以 `bot` 结尾的 username,复制返回的 API token 并保存为 `TELEGRAM_BOT_TOKEN` 到 `.env` 或 `~/.claude/.env.global`。
- 把机器人添加为目标频道或群组的管理员;可选通过 BotFather 执行 `/setdescription`、`/setabouttext`、`/setuserpic` 自定义机器人。
- 查找公开频道 chat ID:直接使用 `@channel_username` 格式。
- 查找私有频道或群组数字 chat ID:先把机器人加入并设为管理员,在频道/群组发一条消息,再运行 `curl -s "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getUpdates" | jq -r '.result[] | "\(.message.chat.id // .channel_post.chat.id) - \(.message.chat.title // .channel_post.chat.title)"' | sort -u`;私有 ID 为负数,例如 `-1001234567890`。
- 所有 Bot API 调用使用基础 URL `https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/{method}`;调用前先 source 环境变量:`source ~/.claude/.env.global 2>/dev/null`、`source .env 2>/dev/null`、`source .env.local 2>/dev/null`。
- 发送文本消息:`curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" -H "Content-Type: application/json" -d '{"chat_id": "'"${TELEGRAM_CHAT_ID}"'", "text": "Your message text here", "parse_mode": "HTML"}'`;检查返回 JSON 的 `ok: true`,保存 `message.message_id` 供后续编辑、删除、置顶。
- 发送 URL 图片:`curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendPhoto" -H "Content-Type: application/json" -d '{"chat_id": "'"${TELEGRAM_CHAT_ID}"'", "photo": "https://example.com/image.jpg", "caption": "Image caption with <b>HTML</b> formatting", "parse_mode": "HTML"}'`。
- 发送本地图片:`curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendPhoto" -F "chat_id=${TELEGRAM_CHAT_ID}" -F "photo=@/path/to/image.jpg" -F "caption=Image caption here" -F "parse_mode=HTML"`。
- 图片限制:最大 10 MB,且会被压缩;需要不压缩图片且最大 50 MB 时改用 `sendDocument`。
- 发送 URL 文档:`curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendDocument" -H "Content-Type: application/json" -d '{"chat_id": "'"${TELEGRAM_CHAT_ID}"'", "document": "https://example.com/report.pdf", "caption": "Download our latest report", "parse_mode": "HTML"}'`。
- 发送本地文档:`curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendDocument" -F "chat_id=${TELEGRAM_CHAT_ID}" -F "document=@/path/to/file.pdf" -F "caption=Here is the document" -F "parse_mode=HTML"`;文档最大 50 MB。
- 创建普通投票:`curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendPoll" -H "Content-Type: application/json" -d '{"chat_id": "'"${TELEGRAM_CHAT_ID}"'", "question": "What feature should we build next?", "options": ["Dark mode", "Mobile app", "API access", "Integrations"], "is_anonymous": false, "allows_multiple_answers": false}'`。
- 创建 quiz:`curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendPoll" -H "Content-Type: application/json" -d '{"chat_id": "'"${TELEGRAM_CHAT_ID}"'", "question": "Which programming language was created first?", "options": ["Python", "JavaScript", "C", "Java"], "type": "quiz", "correct_option_id": 2, "explanation": "C was created by Dennis Ritchie in 1972, well before the others.", "explanation_parse_mode": "HTML"}'`;问题 1-300 字符,2-10 个选项,每项 1-100 字符,解释 ≤200 字符。
- 添加 inline keyboard CTA:在 `sendMessage` JSON 中加入 `reply_markup.inline_keyboard`,每个内层数组是一行;每行保持 1-3 个按钮,单条消息最多 100 个按钮;按钮类型可用 `url`、`callback_data`、`switch_inline_query`。
- 编辑已发送消息:`curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/editMessageText" -H "Content-Type: application/json" -d '{"chat_id": "'"${TELEGRAM_CHAT_ID}"'", "message_id": MESSAGE_ID_HERE, "text": "Updated message text", "parse_mode": "HTML"}'`。
- 删除消息:`curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/deleteMessage" -H "Content-Type: application/json" -d '{"chat_id": "'"${TELEGRAM_CHAT_ID}"'", "message_id": MESSAGE_ID_HERE}'`。
- 置顶消息:`curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/pinChatMessage" -H "Content-Type: application/json" -d '{"chat_id": "'"${TELEGRAM_CHAT_ID}"'", "message_id": MESSAGE_ID_HERE, "disable_notification": true}'`。
- HTML 格式:设置 `"parse_mode": "HTML"`,使用 `<b>`、`<i>`、`<u>`、`<s>`、`<code>`、`<pre>`、`<a href="url">text</a>`、`<tg-emoji emoji-id="ID">emoji</tg-emoji>`、`<blockquote>`、`<tg-spoiler>`;把 `&` 转义为 `&`、`<` 转义为 `<`、`>` 转义为 `>`,标签必须正确闭合,未知标签会被剥离。
- MarkdownV2 格式:设置 `"parse_mode": "MarkdownV2"`,使用 `*bold*`、`_italic_`、`__underline__`、`~strikethrough~`、`` `code` ``、``` ```code block``` ```、`[text](url)`、`||spoiler||`、`>blockquote`;必须在代码块外转义 `_ * [ ] ( ) ~ > # + - = | { } . !`;因转义易错,多数场景优先 HTML。
- 格式技巧:用空行 `\n\n` 分隔区块;emoji 可直接使用;HTML 可组合如 `<b><i>bold italic</i></b>`;链接可隐藏为 `<a href="https://example.com">Click here</a>`;发送静默消息加 `"disable_notification": true`。
- 使用模板1产品公告:用 `sendMessage`,`parse_mode` 为 HTML,文本包含 🚀 标题、一句话价值、What's new 的 ✅ 功能-收益列表、目标用户/问题说明、`<a href="https://example.com">Try it now</a>`;加 inline keyboard:🔗 Try It Now 和 📖 Learn More。
- 使用模板2博客分享:用 `sendMessage` HTML,文本包含 📝 标题、2-3 句摘要和关键洞察、Key takeaways 的 🔹 列表、⏱ 阅读时长;加 📖 Read the Full Post 按钮。
- 使用模板3社区更新/Newsletter:用 `sendMessage` HTML,文本包含 📢 品牌周报和日期、产品更新、指标、Coming Up、Action Item、互动提问。
- 使用模板4产品发布带图:先用 `sendPhoto`,caption 用 HTML 包含 🎉 发布标题、一句话意义、🏷 优惠、⏰ 截止时间、链接;加多行 inline keyboard:🛒 Get It Now、🎥 Watch Demo、💬 Join Discussion。
- 使用模板5互动投票:用 `sendPoll`,问题如 “What should we focus on next? 🗳”,选项包含 Feature A/B/C 和 Something else (comment below!),`is_anonymous` 为 false,`allows_multiple_answers` 为 false。
- 使用模板6知识测验:用 `sendPoll`,设置 `type` 为 `quiz`,提供 `correct_option_id` 和 `explanation`,`explanation_parse_mode` 为 HTML,`is_anonymous` 为 false。
- 使用模板7活动/Webinar公告:用 `sendMessage` HTML,文本包含 🎙 标题、📅 日期、🕐 时间+时区、📍 地点、🎤 演讲者、What you'll learn 编号列表、🎁 Bonus、名额有限提示;加 📝 Register Now 和 📅 Add to Calendar 按钮。
- 定时发送方法1:用 `sleep` 延迟。例如算好发送时间后执行 `sleep 7200 && curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" ...`。
- 定时发送方法2:用 `at` 指定时间。创建 `/tmp/telegram_scheduled.sh`,在脚本里 source 环境变量并 curl,`chmod +x /tmp/telegram_scheduled.sh`,再执行 `echo "bash /tmp/telegram_scheduled.sh" | at 09:00 AM tomorrow`。
- 定时发送方法3:用 Cron 周期发送。备份 crontab:`crontab -l 2>/dev/null > /tmp/crontab_backup`;追加例如 `0 9 * * 1-5 source ~/.claude/.env.global && curl -s -X POST 'https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage' ...`;再 `crontab /tmp/crontab_backup`。
- 定时发送方法4:批量内容队列。定义 `messages` 数组,设置 `DELAY=86400`,遍历数组;首条后对后续消息先 `sleep ${DELAY}`,再逐条 `curl ... sendMessage`。
- 多频道广播:定义 `CHANNELS=("-1001234567890" "-1009876543210" "@public_channel")`,遍历每个 `CHAT_ID`,对每个频道执行 `sendMessage`,每条之间 `sleep 1` 以遵守限速。
- 获取频道信息:`curl -s "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getChat?chat_id=${TELEGRAM_CHAT_ID}" | jq .`。
- 获取成员数:`curl -s "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getChatMemberCount?chat_id=${TELEGRAM_CHAT_ID}" | jq .`。
- 设置频道描述:`curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/setChatDescription" -H "Content-Type: application/json" -d '{"chat_id": "'"${TELEGRAM_CHAT_ID}"'", "description": "Your channel description here (up to 255 characters)"}'`。
- 遵守速率限制:同一 chat 约 30 条/秒,但应远低于;不同 chat 总计约 30 条/秒;批量通知不超过 30 条/秒,广播时每条加 `sleep 1`;上传文件限制为文档 50 MB、图片 10 MB。
- 内容最佳实践:活跃频道每天 1-3 条,超过 5 条有被静音/退订风险;最佳时间为主要受众时区的 9-11 AM 和 6-8 PM;feed 帖子控制在 1000 字符内;带图帖子互动高 2-3 倍;关键点用粗体、列表便于扫描、链接放末尾;提问互动、每周用投票、及时回复评论;非紧急更新用 `disable_notification: true`;置顶重要公告并取消旧置顶;用 `disable_web_page_preview: true` 禁用链接预览。
- 发布流程:1 检查 `TELEGRAM_BOT_TOKEN` 和 `TELEGRAM_CHAT_ID`;2 用合适格式和模板生成内容;3 预览将发送的文本、inline keyboard 按钮、媒体 URL 或文件路径、目标 chat ID;4 让用户确认;5 执行 API 调用;6 报告响应,包括 `message_id`;绝不在未经用户明确确认时自动发布。
- 发送前收集需求:消息类型(文本/图片/文档/投票/测验)、内容、目标频道或群组、格式(默认 HTML)、CTA 按钮标签和 URL、媒体 URL 或本地路径、发送时间(立即/定时/周期)、是否静默通知。
- 如果用户提供博客 URL、文章或内容源,使用 `WebFetch` 获取内容并据此生成 Telegram 帖子。
- 错误处理:`401 Unauthorized` 通过 @BotFather 重新生成 token;`400 Bad Request: chat not found` 验证 chat ID 并把机器人加入频道;`403 Forbidden: bot is not a member` 重新把机器人加为管理员;`403 Forbidden: bot can't send messages` 授予 Post Messages 权限;`429 Too Many Requests` 等待响应中的 `retry_after` 秒;`400 Bad Request: can't parse entities` 检查格式、转义特殊字符或切到 HTML。始终检查 `ok`,若为 `false` 则向用户显示 `description` 并给出修复指导。
适用边界 · 注意事项
- 没有 Telegram 机器人、`TELEGRAM_BOT_TOKEN` 或 `TELEGRAM_CHAT_ID`,且无法把机器人设为目标频道/群组管理员时不适用。
- 需要 Telegram Bot API 内置定时器或复杂 callback/webhook 交互时,仅靠本技能不够,需要额外部署服务。
- 需要发布超过 50 MB 文件、绕过 Telegram 速率限制或平台规则时不适用。