> For the complete documentation index, see [llms.txt](https://tinyhumans.gitbook.io/openhuman/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tinyhumans.gitbook.io/openhuman/zh/gong-neng/channels.md).

# 消息渠道

一个 **通道** 是 OpenHuman 用来 *回复* 给你。这与一个……正好相反， [集成](/openhuman/zh/gong-neng/integrations.md)：集成大多是代理 *读取自* （你的收件箱、日历、CRM），而通道则是一个双向对话界面。你在自己已经在用的平台上向代理发送消息，代理会在那里回复。

在底层，每个通道都实现一个小型 Rust 契约（一个 `发送` 用于发出消息的路径，以及一个 `监听` 用于接收入站消息的路径），因此同一个代理循环无需在核心中按平台分支，就能服务于 Telegram、Discord、内置网页聊天以及十多个其他平台。

***

## 通道的作用

每个通道做两件事：

* **入站**：当消息到达时，通道会将其规范化为一个 `ChannelMessage` （发送者、回复目标、内容、可选线程 ID），并把它交给分发循环。分发会启动或恢复一次代理运行，为其限定工具范围，然后由代理处理请求。某些平台支持一个 `/models` 和 `/model` 命令，以切换该发送者会话所使用的模型；Telegram 另外还支持远程控制命令。
* **出站**：代理的响应会通过同一通道发送回你的 `reply_target`，如果平台支持，还会按线程方式回复。通道也可以在由一个 **主动** （没有可回复的入站消息）触发时传递 [触发器](/openhuman/zh/gong-neng/integrations/triggers.md)、定时任务或 [潜意识循环](/openhuman/zh/gong-neng/subconscious.md)。只有当通道声明了默认投递目标时，才会接收主动发送；没有默认目标的通道会被跳过，而不会发到空的收件人。

支持该功能的通道可以显示输入中提示、流式传输渐进式 **草稿更新**、发布 **线程回复**，以及添加 **表情反应**。能力是按通道声明的，而不是默认假定的。

***

## 支持的通道

OpenHuman 随附 **18 个通道提供程序模块** （16 个默认构建，再加上 2 个受 Cargo 特性标志控制），其中 **17 个是真正的消息平台**。剩下的那个 `presentation`，是网页聊天的内部响应渲染辅助工具，并不是你要连接的平台。另有一个独立的 `cli` 通道为 `openhuman-core` 终端二进制文件提供服务。设置界面中显示了 7 个通道；其余通道通过 `config.toml`.

| 通道               | 方向     | 入站传输                  | 凭据模式                                          | 在设置界面中        |
| ---------------- | ------ | --------------------- | --------------------------------------------- | ------------- |
| **Telegram**     | 双向     | Bot API 长轮询           | 通过 OpenHuman 连接（托管私信） **或** 你自己的 BotFather 令牌 | 是             |
| **Discord**      | 双向     | 网关                    | 你自己的机器人令牌、OAuth 安装、 **或** 托管账户链接              | 是             |
| **Web**          | 双向     | 应用内                   | 内置，无需设置（本地）                                   | 是             |
| **iMessage**     | 双向     | macOS 信息（AppleScript） | 仅本地，无需凭据（需要完整磁盘访问权限）                          | 是             |
| **Lark / 飞书**    | 双向     | WebSocket 或 webhook   | 你自己的 app id + secret                          | 是             |
| **钉钉**           | 双向     | 流模式 WebSocket         | 你自己的 client id + secret                       | 是             |
| **元宝 (Yuanbao)** | 双向     | WebSocket             | 你自己的 AppID + AppSecret                        | 是             |
| **Slack**        | 双向     | 事件/套接字                | 你自己的机器人令牌                                     | `config.toml` |
| **WhatsApp**     | 双向     | Meta Cloud webhook    | 你自己的访问令牌                                      | `config.toml` |
| **IRC**          | 双向     | 持久套接字                 | 你自己的服务器/昵称                                    | `config.toml` |
| **Signal**       | 双向     | signal-cli REST 事件    | 你自己关联的 signal-cli 账户                          | `config.toml` |
| **Mattermost**   | 双向     | WebSocket             | 你自己的机器人令牌                                     | `config.toml` |
| **QQ**           | 双向     | WebSocket             | 你自己的机器人凭据                                     | `config.toml` |
| **Linq**         | 双向（短信） | Webhook               | 你自己的 API 令牌                                   | `config.toml` |
| **电子邮件**         | 双向     | IMAP IDLE + SMTP      | 你自己的邮箱凭据                                      | `config.toml` |

WhatsApp 还有一个实验性的点对点变体，位于 `whatsapp-web` 特性标志后面。标记为“webhook”的通道会保持实时连接，但通过 HTTP 推送接收入站消息，因此需要在提供方一侧配置一个可访问的 HTTPS 端点。

Telegram 是功能最完整的通道。它支持输入中提示和实时草稿更新，目前也是唯一一个接入按通道审批界面的通道，因此 `提示`类工具调用可以直接在行内处理，而不是挂起。Discord 增加了原生线程回复；Lark 也支持线程。Web 支持富文本，并且完全保持本地运行。

**电子邮件值得特别提一下**：它是一个完全 **原生、自托管连接器**，不需要任何第三方中介参与。入站邮件通过 IMAP 和 **IMAP IDLE** 推送到达（新邮件会在几秒内到达代理，并且根据 RFC 每约 29 分钟刷新一次连接），回复则通过 SMTP 发出，完整支持附件/多部分内容，使用你在任何配置的提供商上的自己的地址。一个 `allowed_senders` 允许名单是入站安全闸门。请明确设置为你信任的地址。（在 `config.toml` 空列表表示全部拒绝，但 Connections 界面会将空白字段默认设为 `["*"]`，这会允许 **任何** 发送者。所以如果不想让陌生人通过电子邮件向你的代理发起提示，就不要把它留空。）

***

## 凭据模式

通道通过以下几种方式之一进行身份验证：

* **通过 OpenHuman 连接（托管）**：通过 OpenHuman 后端中介的一键加密连接。当前这覆盖 Telegram（直接向托管机器人发消息）和 Discord（链接你的账户或通过 OAuth 安装）。你的机器上不会保存任何令牌。
* **你自己的凭据**：你提供机器人令牌、API 密钥/密文，或应用凭据。Telegram（BotFather 令牌）、Discord（机器人令牌）、Slack、WhatsApp、Lark/飞书、钉钉、元宝、Matrix、Signal、Mattermost、QQ、Linq、IRC 和电子邮件都支持这种方式。控制权最高；平台账户、速率限制以及任何 webhook 端点都由你自己负责。
* **本地，无需凭据**： **Web** 聊天和 **iMessage** 完全不需要任何令牌。Web 在桌面应用内运行；iMessage 通过 AppleScript 桥接驱动本地 macOS 信息应用（授予完整磁盘访问权限）。两者都会让消息留在你的机器上。

为任何模式提供的密钥都会通过 OpenHuman 的凭据层存储，并在静态时受到 [加密层](/openhuman/zh/gong-neng/privacy-and-security.md)保护。对于由界面管理的通道，这些密钥绝不会以 `config.toml` 明文写入。

***

## 在哪里连接通道

通道在 **Connections → Channels** 下进行设置—— **不是** 在 Settings 下，也不在任何“Automation & Channels”菜单下（并不存在这样的菜单）。打开那个标签页，选择一个平台卡片，然后按照其设置卡片操作：

* **Discord** — 选择 *通过 OpenHuman 连接* （链接你的账户或通过 OAuth 安装机器人），或者粘贴你自己的 Discord 机器人令牌。
* **Telegram** — 向托管的 OpenHuman 机器人发消息以完成链接，或者粘贴一个 BotFather 机器人令牌。

Slack 是作为一个 **应用** 通过 **Connections → OAuth** （Composio）连接的，这样代理就能读取并在 Slack 中执行操作；它并不是在 Channels 标签页中设置为一个可回复通道。

***

## 选择默认通道

打开 **Connections → Channels** 以选择哪个通道是 **活动路由**：也就是 OpenHuman 用于主动、无收件人的投递（定时任务、触发器、潜意识）的通道。默认值是应用内 **Web** 聊天，直到你更改它。设置新的默认值会立即生效，无需重启通道运行时，面板也会显示当前哪个通道处于活动状态。入站消息始终会在它们到达的那个通道上得到回复，而不受默认路由影响。

***

## 另见

* [集成](/openhuman/zh/gong-neng/integrations.md)：代理从中拉取上下文的读取侧目录。
* [触发器](/openhuman/zh/gong-neng/integrations/triggers.md)：触发主动通道投递的实时事件。
* [潜意识循环](/openhuman/zh/gong-neng/subconscious.md)：可以通过活动通道联系到你的后台循环。
* [隐私与安全](/openhuman/zh/gong-neng/privacy-and-security.md)：凭据存放位置以及后端边界。
* [OS 钥匙串与密钥存储](/openhuman/zh/gong-neng/privacy-and-security/os-keyring-and-secret-storage.md)：通道密钥的静态保护。
