简要总结
Channel Routing
这页说明书在讲一个叫“通道路由”的魔法规则。想象一下,你有很多条不同的电话线(比如微信、QQ、短信),还有一个聪明的机器人朋友。这个规则就是告诉机器人:谁从哪条电话线给你发消息,你就必须从哪条电话线回消息回去,不能弄错线。这页还会告诉你,怎么设置让机器人认识不同的朋友,并且记住和每个朋友的聊天内容。
五岁小孩版解释
通道和路由是什么?
想象一下,你的机器人朋友有很多个“电话”,比如 WhatsApp、Telegram、Discord 这些。每个电话就是一个“通道”。路由规则很简单:消息从哪个通道来,回复就自动回到哪个通道去。机器人自己不能选通道,这个规则是固定的,由管机器人的大人来设置。
几个重要的名字
我们来认识几个名字,这就像给东西贴标签:
- 通道:就是不同的“电话”类型,比如
whatsapp、telegram、discord。 - 账号:有时候一个“电话”类型里,你可能有不止一个号码,每个号码就是一个“账号”。
- 默认账号:如果大人没有特别说明用哪个号码发消息,机器人就会用这里设置的默认号码。
- AgentId(机器人身份):你可以把它想成是机器人的一个“大脑”或“工作间”。不同的机器人身份有不同的记忆和知识。
- SessionKey(会话钥匙):这是用来存放你和机器人聊天记录的小盒子钥匙。不同的聊天(比如私聊、群聊)会用不同的钥匙,这样记忆就不会混在一起。
聊天记忆盒子怎么分?
机器人用“会话钥匙”来分开记住不同的聊天:
- 私聊:所有和你一对一私聊的朋友,可能共用一个主要的记忆盒子。钥匙样子像
agent:main:main。 - 群聊和频道:每个不同的群或频道,都有自己单独的记忆盒子。钥匙里会写明是哪个通道、哪个群,比如
agent:main:telegram:group:-1001234567890。 - 话题和子讨论:在一些应用里(像 Slack、Discord),群里的一个小话题或一个讨论串,也会有自己更小的记忆盒子。钥匙会在群聊钥匙后面再加一部分,比如
:thread:987654。
主要私聊路由的固定规则
有一个特殊情况:当设置让所有私聊都共用主记忆盒子时,为了防止别人的私聊消息覆盖掉“主人”的回复路线,机器人会很聪明:
- 如果大人在设置里只明确允许了一个“主人”发消息。
- 而现在发私聊消息的人不是这个“主人”。
- 那么,机器人会记下这条消息,但不会改变主记忆盒子里“最后回复路线”的记录。
最重要的:怎么给消息选机器人?(路由规则)
当一条消息从任何通道发来时,机器人会按照下面的顺序,像查名单一样,决定由哪个“机器人身份”(哪个大脑)来回复:
- 精确朋友匹配:先看是不是和某个特定的朋友(或群)绑定了。
- 话题继承匹配:如果不是,看看是不是属于某个大话题的一部分。
- 服务器+身份匹配:(主要是Discord)看看是不是来自某个服务器,并且有特定身份。
- 服务器匹配:(主要是Discord)看看是不是来自某个服务器。
- 团队匹配:(主要是Slack)看看是不是来自某个团队。
- 账号匹配:看看是不是来自某个特定的电话号码(账号)。
- 通道匹配:看看是不是来自某个类型的电话(通道),不管哪个号码。
- 默认机器人:如果上面都找不到,就交给设置好的默认机器人,或者列表里的第一个。
要小心的是:如果一条规则里同时要求匹配朋友、服务器等好几个条件,那么必须全部符合才行。
广播群组(让多个机器人一起回复)
通常一条消息只由一个机器人回复。但有个叫“广播群组”的功能,可以破例。比如在一个微信群里,当机器人被@时,它可以同时让“阿尔弗雷德”和“贝尔贝尔”两个机器人身份都来回复。 大人需要在配置里写明,对哪个群或哪个人,启用哪几个机器人。
配置长什么样?
管机器人的大人会写一个配置清单,主要两部分:
agents.list:这里列出所有可用的机器人身份,给它们起名字,比如“客服”。bindings:这里写“匹配规则”,把不同的通道、账号、朋友或群,和上面某个机器人身份连起来。例如:所有来自 Slack 团队 T123 的消息,都交给“客服”机器人处理。
聊天记录存在哪里?
机器人和你的所有聊天记录,都会以文件的形式保存在电脑的一个文件夹里(默认在 ~/.openclaw 下面)。每个机器人身份都有自己的文件夹,里面有一个 sessions.json 文件就是记忆盒子。大人也可以指定存到别的地方。
网页聊天的小特点
通过网页和机器人聊天时,它会自动连接到你当前选中的那个机器人身份,并且使用这个机器人的主记忆盒子。所以,你在网页上能看到这个机器人在其他所有通道(比如微信、Telegram)上聊天的上下文,全都在一起,很方便。
回复时会带上上下文
当你在聊天里回复某条之前的消息时,机器人很贴心:
- 它会知道你在回复哪条消息(
ReplyToId),那条消息的内容(ReplyToBody)和是谁发的(ReplyToSender)。 - 它会把“正在回复……”这样的信息,也加到它看到的消息里。
- 这个好习惯在所有通道(电话)上都是一样的。