SuperAPI AI 工具集

draft-message

办公与效率

查看项目

更新于 10-16 02:02

技能介绍

用途

draft-message 用于在 AI 智能体起草了消息、但需要人工在发送前审阅的场景。它把草稿发送到用户自己的 Telegram「Saved Messages」(收藏夹,即每个账号内置的私密自聊会话,会自动同步到所有客户端),由用户自行复制粘贴到目标聊天并发送。

何时用草稿、何时直接发送

  • 智能体自主撰写的长消息或多段消息:用草稿,让人先过目。
  • 措辞敏感的消息(招聘、解雇、合同条款):用草稿,一个错别字或错名字代价很高。
  • 语气重要的回复(面向同级或外部方):用草稿,AI 生成语气可能微妙偏差。
  • 简短确认、状态更新、例行回复:直接发送,草稿的摩擦大于价值。
  • 自动通知、告警、定时提醒:直接发送,无需人工介入。
  • 时间紧迫、草稿→审阅→发送往返太慢:直接发送,接受风险。

不确定时默认用草稿:用户一键即可发送,但发错的消息无法直接撤回。

为什么用 Saved Messages 而非 MTProto 云草稿

官方 Telegram 客户端存在一个已知且未修复的竞态条件(tdesktop#29111,已关闭为「not planned」):本地空草稿状态会静默覆盖通过 SaveDraftRequest 从其他授权推送的云草稿。实践中曾观察到服务器确认了草稿,但用户输入框仍为空。Saved Messages 完全绕开该问题——完整 HTML 格式得以保留,且 Telegram 原生在 iOS、Android、Desktop、Web 各端输入框之间复制粘贴会保留富文本。

使用前检查

起草前先验证会话已授权(不只是文件存在):

bun "$SCRIPT" check-auth

若返回 EXPIRED,先运行 /tlg:setup。

使用方式:tg-cli.ts draft

/usr/bin/env bash << 'DRAFT_EOF'
ROOT="$(cc-plugin-root tlg)"
SCRIPT="$ROOT/scripts/tg-cli.ts"

# 起草纯文本消息,标注目标为某群组
bun "$SCRIPT" draft -1003958083153 "Plain text draft goes here"

# 起草 HTML 格式消息
bun "$SCRIPT" draft --html -1003958083153 "<b>Bold heading</b>

Body text with <code>inline code</code> and a <a href=\"https://example.com\">link</a>."

# 起草并标注目标为某用户
bun "$SCRIPT" draft @someusername "Quick question: does this framing land right?"
DRAFT_EOF

recipient 参数仅用于标注 Saved Messages 中草稿的横幅,并非实际目的地。消息始终发往已授权账号自己的 Saved Messages。该标注帮助用户识别每条累积草稿对应的目标聊天。

在 Saved Messages 中的呈现

每次起草会发送两条消息:

  1. 标题横幅——<b>Draft → <chat name></b>(若无法解析聊天名,则回退为原始 recipient 标识符)。
  2. 正文——按请求格式化的草稿内容。

标题与正文分开,用户可只长按正文、点复制,干净地粘贴到目标聊天输入框,无需裁剪横幅。

AI 智能体工作流

  1. 在回复中撰写消息。
  2. 调用 draft 命令——消息落入用户的 Saved Messages,而非目标聊天。
  3. 告知用户:「Draft for <chat name> saved to your Saved Messages. Open Saved Messages → long-press the body → Copy → paste into the target chat's compose area → review → send.」
  4. 用户执行复制粘贴,始终既是发送者也是最终审阅者。
  5. 如需修改,在目标聊天输入框中发送前完成。

草稿是审阅者的安全网——在 AI 撰写与人工发布之间刻意留出停顿。

参数

  • recipient(string/int):目标聊天 ID/用户名,仅用于标注 Saved Messages 横幅。
  • message(string):草稿文本(必填)。
  • --html(flag):将消息按 HTML 解析(加粗/代码/链接)。
  • -p/--profile(string):账号配置(默认 eon)。

行为细节

  • 草稿是追加而非替换。每次调用发送一对新的(标题、正文)到 Saved Messages,旧草稿仍显示在上方,用户可按位置判断最新一条。
  • 长草稿自动分段。正文按约 3900 纯字符自动切分(Telegram 硬上限 4096)。切分边界优先使用 ━━━━━━━━━━━━━━ 分隔符,其次段落换行,再次行换行。每个续段标注 <i>(Part N/M)</i>。完整算法见 send-message SKILL.md 的「Auto-split for long messages」。
  • 格式端到端保留:HTML 输入 → 渲染的 Saved Messages 条目 → 复制 → 目标聊天输入框中渲染粘贴。
  • 无云草稿竞态:Saved Messages 是普通聊天,消息经正常同步路径传播,不受本地空草稿覆盖缺陷影响。
  • 对目标聊天静默:目标聊天中无人被通知或看到任何迹象,只有用户手动粘贴并发送后目标才会知晓。

反模式

  • 消息简短且模板化时仍起草:浪费用户时间,本可直接发送并在输入框编辑。
  • 快速连续起草多条:Saved Messages 变成过期草稿墙,难以分辨哪条是当前草稿。
  • 对时间紧迫的告警(宕机、故障)使用草稿:用户可能数小时后才打开 Saved Messages。
  • 声称草稿「已发送到群组」:应明确区分「Draft saved to Saved Messages for your review」与「Message sent」。
  • 忘记告知用户粘贴到目标聊天:若用户不知下一步,草稿会永远留在 Saved Messages。

错误处理

  • Cannot find any entity:用户名/聊天 ID 有误。标注回退为原始标识符,草稿仍会保存到 Saved Messages。
  • Session expired:会话失效。运行 /tlg:setup。

与其他 TLG 技能的关系

  • send-message:无需人工审阅时使用;包含对已发送消息的编辑与补充规范。
  • draft-message(本技能):需要发送前人工审阅时使用。
  • search-messages:起草回复前查看现有聊天上下文时有用。

执行后反思

技能完成后检查:草稿是否落入 Saved Messages(请用户确认);用户是否成功粘贴到目标聊天(若粘贴时格式损坏,报告具体客户端 iOS/Android/Desktop/Web,以便在行为细节中补充客户端特定说明);草稿是否比直接发送更合适(若用户未编辑即复制粘贴发送,说明草稿多余,下次类似消息可考虑直接发送)。仅在问题真实且可复现时才更新此 SKILL.md。

限制

本技能依赖已授权的 Telegram 会话与 tlg 插件脚本;recipient 仅作标注,不决定发送目的地;草稿不会自动发送,需用户手动复制粘贴并发送;长消息分段阈值与格式保留效果受 Telegram 客户端行为影响。