ARTICLE · 1089274
OpenClaw 外部会话投递实战:用 conversations 工具把结果发到微信/飞书/Discord
为什么需要「外部会话投递」
sessions_send 解决的是 OpenClaw 内部多个 Agent 会话之间的协作;但很多时候,你要的不是让另一个 AI 接着干,而是把结果直接送到真人所在的聊天群/私聊——比如把每日报表发到微信、把告警推到飞书群、把长文丢进 Discord 频道。
这类「对外投递」由 conversations_* 系列工具负责,它和 sessions_* 的关键区别是:
| 维度 | sessions_send | conversations_send / turn |
|------|---------------|---------------------------|
| 目标 | 本网关内的 Agent 会话(模型上下文) | 外部频道上的真实对话(微信/飞书/Discord 等) |
| 是否运行 AI | 会,目标会话的 Agent 会接管 | 否,只是把消息送出去 |
| 典型用途 | 跨会话委派、回收子 Agent 结果 | 通知真人、对外群发、把成品发到群里 |
一句话:sessions_send 找 AI 接着干,conversations_send 找人看结果。
第一步:拿到会话地址 conversations_list
投递前必须先知道「发给谁」。conversations_list 会列出当前已接入频道下的外部对话,返回稳定的 conversationRef(形如 conv_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)。
# 列出某频道下的会话(按需加 channel / query 过滤)
conversations_list channel=openclaw-weixin limit=20返回示例(节选):
{
"conversationRef": "conv_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6",
"title": "产品",
"channel": "openclaw-weixin"
}注意: conversationRef是稳定且唯一的投递地址,建议把它记到USER.md或记忆里,后续脚本/定时任务直接复用,不用每次重新查。
第二步:单向投递 conversations_send
拿到 conversationRef 后,用 conversations_send 即可单向发送,不会触发本地 Agent 跑一轮:
conversations_send \
conversationRef=conv_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 \
message="今日 OpenClaw 发文已完成:https://zyker.cn/archives/xxx/"它是「发完即走」,适合:
定时任务的产出通知(每天 03:00 发文后自动推链接到微信)
告警/异常播报
把一段长文/链接丢进指定群
第三步:发完等人回 conversations_turn
有些场景你要的不是一个公告,而是一问一答——比如「把这个问题丢到飞书群,等负责人回复后再继续」。这时用 conversations_turn:
conversations_turn \
conversationRef=conv_xxx \
message="服务器 502 了,你那边能看到 nginx 日志吗?" \
timeoutSeconds=120它会把消息送出去,阻塞等待该会话的关联入站回复,回复内容直接回到当前执行上下文,而不是另开一个 Agent 轮次。超时无回复则返回空,你可以据此走兜底逻辑。
conversations_turn的回复「回到这里」,意味着它可以嵌进脚本化的工作流里:发问 → 拿答案 → 继续处理。这是它和 conversations_send最本质的差异。
实战组合:定时发文后自动推链接到微信
把上面三步拼进一个自动化产物(例如每日发文 cron 的收尾动作),伪代码逻辑:
1. 写稿 → 存 content-bank/YYYY-MM-DD-<slug>.md
2. 调用发布脚本生成静态页,拿到线上 URL
3. conversations_send 把 "新文已发布:<URL>" 推到微信「产品」会话关键点:第 3 步的 conversationRef 来自首次 conversations_list 的结果,写死在自动化配置里即可,不必每次动态查询。
常见坑
- 发错人
: conversations_list的title未必唯一,多个群同名时务必用conversationRef而非标题匹配。
- 把 conversations 当 sessions 用
:想让 AI 接着干,要用 sessions_send;conversations_send发出去后不会有 Agent 接管。
- turn 等不到回复
:外部真人可能不在线, timeoutSeconds要设合理上限,并在超时后走兜底(如转人工或写日志)。
- 渠道未接入
: conversations_list返回空,通常是该频道还没在网关里配置/登录,先确认 channel 状态,而不是怀疑工具坏了。
小结
conversations_list:查地址,拿到 conversationRef。
conversations_send:单向广播,发完即走。
conversations_turn:发问并等真人回复,可嵌入自动化流程。
对外投递用 conversations_*,对内委派用sessions_*——别混。
把这三类工具分清,你的 OpenClaw 就从「只会自己干」进化成「能干完还知道通知谁」,真正的闭环才算合上。
关注公众号,获取更多 OpenClaw 实操技巧