Message Push 是一个用于主动向 IM 渠道发送消息的技能,可以向群组或个人用户推送消息,而无需等待对方先发来消息。
用途 该技能用于识别用户的推送意图,例如“把这条消息发到运维群”“私聊告诉 Alice……”“把这个摘要发到 #general”“在飞书上通知团队”“转发到聊天 oc_xxx”等。当用户提出发送、发布、通知、转发或告知某人消息的请求时,可使用该技能完成主动推送。
主要能力
- 主动向 IM 群组或个人用户发送消息。
- 通过 GET /api/channels 发现可用渠道,并确认渠道是否存在、是否支持发送。
- 通过 POST /api/send 发送消息,请求字段包括 channel、chatId 和 text,其中 text 支持 Markdown。
- 发送成功返回 200 { "ok": true };失败时可根据 HTTP 状态码处理:404 表示渠道未找到,501 表示渠道不支持主动发送,503 表示当前没有可用的渠道适配器。
- 支持渠道包括 feishu、dingtalk、wecom、slack、telegram、discord。
- 提供各平台查找 chatId 的常见方式:飞书为群设置中的群 ID(以 oc_ 开头);Slack 为 URL 中的频道 ID(C 前缀)或私聊用户 ID(U 前缀);Telegram 为消息事件中的 Chat ID(群组为负数);Discord 为 URL 或开发者模式中的频道 ID;钉钉为 webhook 或 API 中的会话 ID;企业微信为 API 中的 Chat ID。
- 如果用户以名称而非 ID 引用群组,可检查 memory/groups/ 中的群组记忆文件,群组键格式为 {channel}-{chatId}。
使用方式 发送工作流如下:
- 识别目标——根据用户请求确定渠道名称和 chatId。
- 发现可用渠道——调用 GET /api/channels 确认渠道存在且支持发送。
- 撰写消息——起草文本内容,遵循 im-adapter 格式指南。
- 与用户确认——如果是首次向该会话发送,展示草稿并请求批准。
- 发送消息——调用 POST /api/send,传入 channel、chatId 和 text。
- 报告结果——告知用户发送成功或失败。
发送 API 示例:
curl -X POST http://localhost:$PORT/api/send
-H "Content-Type: application/json"
-d '{
"channel": "feishu",
"chatId": "oc_xxxx",
"text": "Hello from the bot!"
}'
请求字段:
- channel:字符串,必填,渠道名称,如 feishu、dingtalk、wecom、slack、telegram、discord。
- chatId:字符串,必填,目标平台上的聊天/群组/会话 ID。
- text:字符串,必填,消息内容,支持 Markdown。
响应:
- 200 { "ok": true }:消息发送成功。
- 404:渠道未找到(请检查可用渠道)。
- 501:渠道不支持主动发送。
- 503:没有可用的渠道适配器。
发现可用渠道: curl http://localhost:$PORT/api/channels 返回示例: { "channels": [ { "name": "feishu", "canSend": true }, { "name": "slack", "canSend": true } ] }
错误处理 如果发送失败,检查 HTTP 状态码:
- 404:运行 GET /api/channels,并告知用户实际可用的渠道。
- 501:说明目标渠道适配器不支持主动发送。
- 503:告知用户当前没有正在运行的 IM 适配器。
适用场景 适用于需要主动推送消息到 IM 渠道的场景,例如向运维群发送通知、私聊告知某人信息、将摘要发布到频道、在飞书上通知团队、转发消息到指定聊天等。
限制
- 首次向新会话发送前应始终与用户确认。
- 私聊时需确保接收方此前已与机器人互动(多数平台有此要求)。
- 消息应保持简洁,遵循 im-adapter 格式指南。
- 如果用户只说“发到群里”而未指定具体群组,应检查当前会话上下文或询问用户。
- 各平台 chatId 格式不同,需按平台方式获取。
- 部分渠道可能不支持主动发送,需通过 GET /api/channels 确认。