OpenClaw

OpenClaw Nextcloud Talk 渠道

企业平台
中等

将 OpenClaw 连接到 Nextcloud Talk,这是一个内置于 Nextcloud 生态系统中、注重隐私保护的企业通信平台。该集成采用基于 Webhook 的机器人架构 -- Nextcloud Talk 通过 Webhook 将消息事件发送到你的 Gateway,机器人再通过 Talk REST API 进行回复。这使你的 AI 助手能够在自托管的 Nextcloud 环境中参与私聊、群组对话,并对消息进行表情回应。

快速信息
难度中等
分类企业平台
支持功能数4 / 6

Nextcloud Talk 支持的功能

文本消息

支持

媒体与文件

支持

消息反应

支持

消息线程

不支持

语音消息

不支持

群聊

支持

Nextcloud Talk 前置条件

  • 一台 Nextcloud 服务器(v27.1+),具有管理员权限并已安装 Talk 应用
  • 一个共享密钥(40-128 个字符),用于 Webhook 签名验证
  • Gateway 的 Webhook 端点可从 Nextcloud 服务器访问(公网 URL 或内网地址)
  • 已安装并运行 OpenClaw Gateway
  • 已通过 'openclaw plugins install @openclaw/nextcloud-talk' 安装 Nextcloud Talk 插件

Nextcloud Talk 快速设置

1

安装 Nextcloud Talk 插件

运行 'openclaw plugins install @openclaw/nextcloud-talk' 为你的 Gateway 添加 Nextcloud Talk 支持。

2

在 Nextcloud 服务器上注册机器人

通过 SSH 登录到你的 Nextcloud 服务器,运行 OCC 命令:./occ talk:bot:install "OpenClaw" "<shared-secret>" "<webhook-url>" --feature reaction。将 <shared-secret> 替换为一个 40 个字符以上的强密钥,将 <webhook-url> 替换为 Gateway 的公网可访问 Webhook 端点(例如 https://gateway.example.com:8788/webhook)。

3

启用机器人并配置

在 Nextcloud Talk 中,进入房间设置并启用 OpenClaw 机器人。然后将渠道配置添加到 ~/.openclaw/openclaw.json 文件中,填写你的 baseUrl 和 botSecret。使用 'openclaw start' 启动 Gateway,并在房间中发送一条消息以验证连接。

Nextcloud Talk 配置示例

config.json
{
  "channels": {
    "nextcloud-talk": {
      "enabled": true,
      "baseUrl": "https://nextcloud.example.com",
      "botSecret": "your-shared-secret-min-40-chars",
      "dmPolicy": "pairing"
    }
  }
}

Nextcloud Talk 深入了解

架构概览

OpenClaw 通过 Talk Bot API(自 Nextcloud 27.1 起可用)与 Nextcloud Talk 集成。该架构基于 Webhook: 1. 使用 OCC 命令行工具在 Nextcloud 服务器上注册机器人,需提供共享密钥和 Webhook URL。 2. 当在已启用机器人的房间中发送消息时,Nextcloud Talk 会向配置的 Webhook URL 发送一个 HTTP POST 请求,携带消息负载,并使用共享密钥进行签名。 3. Gateway 验证 Webhook 签名,将消息交由你的 AI 代理处理,然后通过 Talk REST API 将回复发送回对话中。 这种设计意味着 Gateway 必须暴露一个可被 Nextcloud 服务器访问的 Webhook 端点。Webhook 监听器默认运行在 8788 端口,可通过 webhookPort 和 webhookHost 配置选项进行自定义。
Webhook URL 必须可从 Nextcloud 服务器访问。在本地开发时,可使用 ngrok 等隧道服务。
每次机器人安装会生成一个唯一的 URL 哈希值(bot-<hash>),作为消息的发送者 ID。

通过 OCC 注册机器人

Nextcloud Talk 机器人通过 OCC(Nextcloud 命令控制台)命令在服务器上注册。这是一个服务端操作,需要 SSH 或控制台访问权限。 安装机器人: ./occ talk:bot:install "OpenClaw" "<secret>" "<webhook-url>" --feature reaction 参数说明: • name(必填):显示为消息作者的名称(1-64 个字符) • secret(必填):用于 Webhook 签名验证的共享密钥(40-128 个字符) • url(必填):你的 Gateway Webhook 端点 URL • --feature:机器人功能 -- 使用 'reaction' 启用表情回应 • --no-setup:阻止管理员按房间切换机器人 其他常用 OCC 命令: • talk:bot:list -- 列出所有已安装的机器人 • talk:bot:remove <bot-id> -- 从特定对话中移除机器人 • talk:bot:setup <bot-id> <token> -- 在对话中启用机器人 • talk:bot:state <bot-id> <state> -- 更改机器人状态(0=已禁用,1=已启用,2=不可配置) • talk:bot:uninstall <id> -- 从服务器完全移除机器人
Terminal
./occ talk:bot:install "OpenClaw" "a]72@Bz&V!LKMO*xhQib7p^E%yzGMG(8a7Bp*x6o" "https://gateway.example.com:8788/webhook" --feature reaction
使用以下命令生成强共享密钥:openssl rand -base64 48
建议使用 --feature reaction 标志,以允许机器人通过表情回应消息。

私聊策略

私聊(DM)策略控制机器人如何处理一对一的私人对话。 **pairing(默认)** -- 未知发送者会收到一个配对码,必须验证后机器人才会回复。这是最安全的模式,需要用户明确授权。 **open** -- 任何给机器人发消息的用户都会收到回复。需要将 allowFrom 设置为 ["*"]。 **disabled** -- 机器人完全不响应私聊消息。 注意:Nextcloud Talk 机器人无法主动发起私聊 -- 用户必须先向机器人发送消息。allowFrom 字段匹配的是 Nextcloud 用户 ID(而非显示名称)。
openclaw.json
{
  "channels": {
    "nextcloud-talk": {
      "dmPolicy": "pairing",
      "allowFrom": ["user-id-1", "user-id-2"]
    }
  }
}
Nextcloud Talk 中的机器人无法主动发起私聊。用户必须先联系机器人才能开始对话。

房间配置

房间(群聊)策略控制机器人参与哪些对话以及如何触发。 **allowlist(默认)** -- 机器人仅在管理员通过房间设置明确启用的房间中响应。 可以使用 rooms 对象自定义各个房间的配置。每个房间通过其对话 token 标识,可以有独立的设置: • requireMention -- 设为 true 时,机器人仅在被 @提及时才回复(房间中的默认行为) • 未在配置中列出的房间使用默认房间设置 要查找房间的 token,请查看在 Nextcloud Talk 中查看房间时的 URL(例如 https://nextcloud.example.com/call/<token>)。
openclaw.json
{
  "channels": {
    "nextcloud-talk": {
      "groupPolicy": "allowlist",
      "rooms": {
        "abc123token": {
          "requireMention": true
        },
        "def456token": {
          "requireMention": false
        }
      }
    }
  }
}
房间管理员必须在房间设置中启用机器人,机器人才能接收消息。
在活跃的房间中使用 requireMention: true,以避免机器人回复每一条消息。

用于房间类型检测的 API 凭据

默认情况下,Nextcloud Talk 的 Webhook 负载不区分私聊消息和房间消息。若要启用准确的房间类型检测,可以提供 API 凭据。 当配置了 apiUser 和 apiPassword 后,Gateway 会进行额外的 API 调用,以判断收到的消息来自私聊还是群组对话。这使机器人能够正确应用不同的策略(dmPolicy 与 groupPolicy)。 在未配置 API 凭据的情况下,机器人会对所有消息采用统一策略,对于简单部署场景可能已经足够。
openclaw.json
{
  "channels": {
    "nextcloud-talk": {
      "apiUser": "bot-service-account",
      "apiPassword": "service-account-password",
      "apiPasswordFile": "/run/secrets/nc-api-password"
    }
  }
}
建议为 API 凭据创建一个专用的 Nextcloud 用户账号,而非使用管理员账号。
使用 apiPasswordFile 从文件(如 Docker secret)加载密码,避免将密码存储在配置文件中。
未配置 API 凭据时,机器人无法区分私聊和房间消息。这可能导致仅针对私聊的策略无法正常工作。

Webhook 配置

Gateway 会启动一个内置的 HTTP 服务器来接收来自 Nextcloud Talk 的 Webhook 事件。Webhook 监听器配置控制服务器的监听方式和位置。 **webhookPort**(默认:8788)-- Webhook HTTP 服务器的端口。 **webhookHost**(默认:0.0.0.0)-- 绑定的网络接口。使用 0.0.0.0 监听所有接口,或使用 127.0.0.1 仅监听本地。 **webhookPath** -- Webhook 端点的自定义 URL 路径。 **webhookPublicUrl** -- Nextcloud 用于访问 Webhook 的完整公网 URL。在反向代理或 NAT 环境下必须配置。 机器人安装时(OCC 命令)提供的 Webhook URL 必须与能够解析到此监听器的公网 URL 一致。
openclaw.json
{
  "channels": {
    "nextcloud-talk": {
      "webhookPort": 8788,
      "webhookHost": "0.0.0.0",
      "webhookPath": "/webhook",
      "webhookPublicUrl": "https://gateway.example.com:8788/webhook"
    }
  }
}
如果运行在反向代理之后,请将 webhookPublicUrl 设置为外部可访问的 URL。
确保防火墙允许 Nextcloud 服务器对 Webhook 端口的入站连接。

消息处理与流式传输

OpenClaw 提供了对消息分块和发送到 Nextcloud Talk 方式的精细控制。 **textChunkLimit** -- 每个消息分块的最大字符数。Nextcloud Talk 支持长消息,但分块可以提高长篇 AI 回复的可读性。 **chunkMode** -- 控制文本的分割方式:'length' 按字符限制分割,'newline' 按段落边界分割以获得更自然的断句。 **blockStreaming** -- 启用后,机器人会等待 AI 完整回复后再发送,而不是流式发送部分回复。 **blockStreamingCoalesce** -- 启用阻塞流式传输后,此选项将最终回复合并为一条消息,而非多个分块。 **mediaMaxMb** -- 媒体附件的最大文件大小(MB)。注意 Nextcloud Talk 以 URL 形式传输媒体,而非直接上传文件。
openclaw.json
{
  "channels": {
    "nextcloud-talk": {
      "textChunkLimit": 4000,
      "chunkMode": "newline",
      "blockStreaming": true,
      "blockStreamingCoalesce": true,
      "mediaMaxMb": 10
    }
  }
}
在多用户活跃的房间中,使用 blockStreaming: true 可以获得更整洁的回复。
Nextcloud Talk 中的媒体以 URL 形式共享 -- 机器人无法直接上传文件。

对话历史

控制 AI 代理处理新消息时包含多少条先前消息作为上下文。 **historyLimit** -- 群组对话中包含的最大历史消息数。 **dmHistoryLimit** -- 私聊对话中包含的最大历史消息数。可以独立于群组历史限制进行设置。 还支持按用户单独覆盖,允许你为特定用户配置不同的历史限制。 较高的历史限制能为 AI 提供更多上下文,但会增加 token 用量和处理时间。
openclaw.json
{
  "channels": {
    "nextcloud-talk": {
      "historyLimit": 20,
      "dmHistoryLimit": 50
    }
  }
}

表情回应支持

Nextcloud Talk 支持对消息进行表情回应,OpenClaw 机器人可以读取和添加表情回应。 要启用表情回应支持,必须在 OCC 安装时使用 --feature reaction 标志注册机器人。启用后,AI 代理可以对用户消息添加表情回应,作为确认或反馈。 表情回应是一种轻量级的交互方式,机器人无需发送完整文本回复 -- 例如,用对勾表情确认已完成的任务。 Nextcloud Talk Reaction API(自 bots-v1 功能起可用)负责处理添加和移除表情回应的底层机制。
必须在机器人安装时设置 --feature reaction 标志,表情回应才能正常工作。
在繁忙的房间中,表情回应可以作为一种不打扰的确认机制。

安全性与 Webhook 签名

来自 Nextcloud Talk 的所有 Webhook 负载都使用机器人安装时配置的共享密钥进行签名。Gateway 会验证每个签名以确保真实性和完整性。 签名机制使用 HMAC-SHA256: 1. Nextcloud 使用共享密钥计算 Webhook 负载正文的 HMAC-SHA256 哈希值。 2. 签名包含在 Webhook 请求的 HTTP 头中。 3. Gateway 独立计算哈希值并与收到的签名进行比较。 4. 如果签名不匹配,请求将被拒绝。 这确保了只有来自你的 Nextcloud 服务器的合法请求才会被处理。请妥善保管共享密钥,并定期通过重新安装机器人来轮换密钥。
使用高强度加密密钥:openssl rand -base64 48 可以生成合适的值。
使用 botSecretFile 存储密钥,避免将其提交到版本控制系统中。
切勿在公开仓库或日志中暴露共享密钥。生产环境部署请使用环境变量或密钥文件。

Nextcloud Talk 配置参考

enabled
Type: booleanDefault: true

启用或禁用 Nextcloud Talk 渠道

baseUrl
Type: stringDefault: ""

Nextcloud 服务器的完整 URL(例如 https://nextcloud.example.com)

botSecret
Type: stringDefault: ""

用于 Webhook 签名验证的共享密钥(必须与 OCC 安装时的密钥一致)

botSecretFile
Type: stringDefault: ""

包含共享密钥的文件路径(替代内联 botSecret)

apiUser
Type: stringDefault: ""

用于 API 调用的 Nextcloud 用户名(用于房间类型检测)

apiPassword
Type: stringDefault: ""

API 用户账号的密码

apiPasswordFile
Type: stringDefault: ""

包含 API 密码的文件路径(替代内联 apiPassword)

dmPolicy
Type: stringDefault: "pairing"

私聊访问策略:'pairing'(验证码)、'open'(任意用户)或 'disabled'(禁用私聊)

allowFrom
Type: string[]Default: []

允许与机器人私聊的 Nextcloud 用户 ID(使用 ["*"] 开放访问)

groupPolicy
Type: stringDefault: "allowlist"

房间访问策略:'allowlist'(仅管理员启用的房间)

webhookPort
Type: numberDefault: 8788

内置 Webhook HTTP 服务器的端口

webhookHost
Type: stringDefault: "0.0.0.0"

Webhook 服务器绑定的网络接口

webhookPath
Type: stringDefault: "/webhook"

Webhook 端点的 URL 路径

webhookPublicUrl
Type: stringDefault: ""

Webhook 端点的完整公网 URL(反向代理环境下必须配置)

historyLimit
Type: numberDefault: 20

群组对话中作为上下文包含的最大历史消息数

dmHistoryLimit
Type: numberDefault: 50

私聊对话中作为上下文包含的最大历史消息数

textChunkLimit
Type: numberDefault: 4000

每个消息分块的最大字符数

chunkMode
Type: stringDefault: "length"

文本分割模式:'length'(按字符限制)或 'newline'(按段落边界)

blockStreaming
Type: booleanDefault: false

等待 AI 完整回复后再发送(不使用流式传输)

blockStreamingCoalesce
Type: booleanDefault: false

将流式传输的分块合并为一条最终消息

mediaMaxMb
Type: numberDefault: 10

媒体 URL 引用的最大文件大小(MB)

Nextcloud Talk 常见问题

Nextcloud Talk 故障排查

机器人不回复消息

Webhook URL 不可访问、机器人未在房间中启用,或共享密钥不匹配。

验证 Webhook URL 可从 Nextcloud 服务器访问(使用 curl 测试)。检查机器人是否已在房间设置中启用。确保 openclaw.json 中的 botSecret 与 OCC 安装命令中使用的密钥一致。
Webhook 签名验证失败

openclaw.json 中的共享密钥与机器人安装时使用的密钥不匹配。

验证两个密钥是否完全一致。如不确定,请卸载机器人并使用已知密钥重新安装。检查 Gateway 日志中的签名不匹配错误。
机器人在私聊中回复但在房间中不回复

管理员未在目标房间中启用机器人,或 requireMention 为 true 但机器人未被 @提及。

请房间管理员在房间设置中启用机器人。如果配置了 requireMention,请确保用户 @提及了机器人名称。检查 openclaw.json 中的 rooms 配置。
无法区分私聊和房间消息

未配置 API 凭据(apiUser、apiPassword)。

在 nextcloud-talk 渠道配置中添加 apiUser 和 apiPassword。为此创建一个专用的 Nextcloud 服务账号。Gateway 使用这些凭据查询 Talk API 以检测对话类型。
Gateway 无法启动 Webhook 监听器

配置的 Webhook 端口已被占用或主机绑定无效。

将 webhookPort 更改为可用端口(默认:8788)。如果绑定到特定接口,请验证 webhookHost IP 地址是否正确。使用 'lsof -i :8788' 或 'netstat -tlnp' 检查端口冲突。