社交渠道
广播/社交动态集成。与聊天频道不同,这类集成有两个特点:消息通常是公开的,且代理通常充当发布者,而非双向响应者。
构建说明: 精简版默认构建不包含社交渠道。如需使用,请使用
--features channels-full(包含所有渠道)或特定的功能标志(例如--features channel-twitter)进行构建。预构建的二进制文件默认不包含这些渠道。完整的构建选项表请参阅 Channels → Overview。
Twitch
Twitch 聊天是基于 IRC 的轻量适配器。使用 --features channel-twitch 构建,或通过 --features channels-full 将其包含在内;精简的默认构建不包含它。
在 Twitch 别名下配置 enabled、bot_username、oauth_token 以及要加入的频道。mention_only 为可选项,默认为 false。最小实例如下:
[channels.twitch.default]
enabled = true
bot_username = "zeroclaw_bot"
oauth_token = "replace-with-twitch-token"
channels = ["zeroclaw_channel"]
mention_only = true
[peer_groups.twitch_default]
channel = "twitch.default"
external_peers = ["zeroclaw_user"]
- **身份验证:**使用机器人账户的 Twitch 用户访问令牌,并授予
chat:read和chat:edit权限。配置 Twitch CLI 后,以该账户登录并运行twitch token -u -s 'chat:read chat:edit'生成令牌,然后通过受保护的配置入口存储该令牌。如果省略所需的oauth:前缀,ZeroClaw 会去除该值的首尾空白并添加此前缀。 - 频道:
channels中的条目可以包含开头的#;如果缺少,ZeroClaw 会添加它,并将频道名称规范化为小写。 - **入站和出站:**频道消息会在同一频道中回复。
mention_only = true会忽略未提及bot_username的频道消息。如果 Twitch 将非频道 IRCPRIVMSG发送到机器人登录名,ZeroClaw 会回复该发送者;适配器不会配置单独的私信传输。 - **格式:**Twitch 回复使用纯文本,并会拆分以适应 IRC 帧。Markdown 格式不会保留。
- **速率限制:**该适配器会直接写入 IRC
PRIVMSG帧,并且没有 Twitch 专用的速率限制器或 HTTP429退避机制。请将代理的发帖频率控制在 Twitch Chat 的限制范围内,并在源头对突发式工作流进行限流。
Bluesky(AT 协议)
入站发送方会根据为绑定代理解析出的对等集合进行限制,该集合来自代理所属的 peer_groups 配置。匹配时会去除开头的 @,并对通道的原生发送方标识符执行不区分大小写的比对。空集合会拒绝所有人;包含 "*" 的集合会接受所有人;否则仅接受列出的外部对等方(以及对等代理)。这与网关配对(gateway.require_pairing)不同,后者验证的是 HTTP/WebSocket 客户端,而非聊天通道的发送方。
为 bluesky 配置的对等组会将 channel 设为 bluesky,在 external_peers 中列出允许的发送者(对于 bluesky,为发送者的句柄或 DID(DID 在句柄重命名后仍然有效);["*"] 表示接受任何人),可选地为跨 agent 分发命名对等 agents,设置 ignore 黑名单,以及 output_modality(mirror、voice 或 text)。字段参考见 对等组。
在何处设置:
- 认证: Bluesky 应用密码(不是你的真实密码)。在设置中创建一个。
- 入站: 仅来自对等节点的
mention和reply通知。 - 出站: 300 字符的帖子;更长的回复会自动分段。
- 协议: 通过
atrium-apicrate 实现的 AT 协议。
对等节点条目可以是句柄(handle),也可以是 DID。如果希望该条目在账户自行更名后仍然有效,请优先使用 DID。
每次轮询都会先遍历所有未读通知直至末尾,然后才投递其中任何一条。因此,遍历过程中若中途失败,就不会投递任何通知,并在下一次轮询时重试整个范围。这是以短暂延迟换取不重复投递已获取页面的做法:一条智能体已经回复过的通知,比晚五秒才回复的通知更糟。
Nostr
入站发送方会根据为绑定代理解析出的对等集合进行限制,该集合来自代理所属的 peer_groups 配置。匹配时会去除开头的 @,并对通道的原生发送方标识符执行不区分大小写的比对。空集合会拒绝所有人;包含 "*" 的集合会接受所有人;否则仅接受列出的外部对等方(以及对等代理)。这与网关配对(gateway.require_pairing)不同,后者验证的是 HTTP/WebSocket 客户端,而非聊天通道的发送方。
nostr 的对等组将 channel 设置为 nostr,在 external_peers 中列出允许的发送者(对于 nostr,是发送者的十六进制公钥;["*"] 表示接受任何人),可选地为跨代理调度命名对等 agents,一个 ignore 阻止列表,以及一个 output_modality(mirror、voice 或 text)。字段参考请参阅 Peer Groups。
在何处设置:
- 身份验证: 原始私钥(
nsecbech32 或十六进制格式)。 - 入站消息: kind-1(文本)、kind-4(DM,NIP-04)和 kind-1059(礼品包装,NIP-17)。
- 出站: 相同类型。Zap 处理功能处于实验阶段。
- 中继: 代理会连接到所有列出的中继;使用 3–5 个以确保可靠性。如果省略
relays,ZeroClaw 将连接到一组内置的常用公共中继。
Twitter / X
入站发送方会根据为绑定代理解析出的对等集合进行限制,该集合来自代理所属的 peer_groups 配置。匹配时会去除开头的 @,并对通道的原生发送方标识符执行不区分大小写的比对。空集合会拒绝所有人;包含 "*" 的集合会接受所有人;否则仅接受列出的外部对等方(以及对等代理)。这与网关配对(gateway.require_pairing)不同,后者验证的是 HTTP/WebSocket 客户端,而非聊天通道的发送方。
twitter 的 peer group 将 channel 设置为 twitter,在 external_peers 中列出允许的发送者(对于 twitter,即 Twitter/X 的 @username;["*"] 接受任何人),可选地为跨 agent 分发命名 peer agents、设置 ignore 屏蔽列表,以及 output_modality(mirror、voice 或 text)。字段参考请参见 Peer Groups。
在何处设置:
- 鉴权: 仅支持 Twitter API v2 OAuth 2.0 Bearer Token。
- 入站: 通过 Filtered Stream 端点提及。
- **出站:**帖子、回复、主题。
- 注意: 免费层的速率限制非常严格,几乎无法正常使用。请据此规划预算。
入站发送方会根据为绑定代理解析出的对等集合进行限制,该集合来自代理所属的 peer_groups 配置。匹配时会去除开头的 @,并对通道的原生发送方标识符执行不区分大小写的比对。空集合会拒绝所有人;包含 "*" 的集合会接受所有人;否则仅接受列出的外部对等方(以及对等代理)。这与网关配对(gateway.require_pairing)不同,后者验证的是 HTTP/WebSocket 客户端,而非聊天通道的发送方。
一个用于 Reddit 的对等组将 channel 设为 reddit,并在 external_peers 中列出允许的发送者(对于 Reddit,填写不带 u/ 前缀的 Reddit 用户名,不区分大小写;["*"] 表示接受任何人)。可选地,可以为对等体命名 agents 以进行跨代理分发,设置 ignore 屏蔽列表,并设置 output_modality(mirror、voice 或 text)。字段说明请参见 Peer Groups。
在何处设置:
- 认证: 采用带刷新令牌的 OAuth 2.0。可使用 script 类型的 Reddit 应用,通过
password或code流程生成令牌。 - Inbound: 未读收件箱,包括提及、评论回复和私信。每条消息都必须来自同行。
- **出站:**帖子、评论、私信。
subreddits 限定某个条目_可能来自_哪里;对等节点集合(peer set)决定_谁_可以发送条目。两者同时生效,且互不替代。私信(DM)不携带 subreddit,因此 subreddits 无法对其过滤,对等节点集合是唯一的把关条件。
安全地运营社交媒体渠道
公共社交网络上的机器人会吸引对抗性输入。两个预防措施:
- 限制代理响应的对象。 通过对等组(按渠道,见上文)对入站发送者进行限制:空的对等集合会拒绝所有人,
["*"]则接受任何人。此规则适用于所有社交渠道,因此已启用但未配置对等组的渠道将不会响应任何人,直到你填充该对等组为止。 - 将自主级别保持在
Supervised或更低。 处于Full自主级别的面向公众的代理实际上等同于一个公开的 shell。对于面向公众的通道,应在全局工具策略配置中限制工具范围,而不要期望使用每通道的tools_allow(不存在这样的每通道字段)。
速率限制
不同频道的速率限制处理方式有所不同。Twitch 直接写入 IRC PRIVMSG 帧,且没有适配器专用的限流器。如果持续触发速率限制,请从源头降低代理的发布频率,而不要依赖按频道配置的流式传输参数(这些频道都不提供草稿更新间隔,其架构有意保持最小化)。