> 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)、一个 cron 任务或 [潜意识循环](broken://pages/8f1b13c03e1006c2498f2a57983552beefceb5ac)触发时。只有当频道声明了默认投递目标时，才会收到主动发送；没有默认目标的频道会被跳过，而不是投递给空收件人。

支持该功能的频道可以显示正在输入指示器，流式发送渐进式 **草稿更新**，发布 **线程回复**，并添加 **表情反应**。能力是按频道声明的，而不是默认假定的。

***

## 支持的频道

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**       | 双向      | 事件/socket             | 你自己的机器人令牌                                     | `config.toml` |
| **WhatsApp**    | 双向      | Meta Cloud webhook    | 你自己的访问令牌                                      | `config.toml` |
| **IRC**         | 双向      | 持久 socket             | 你自己的服务器/昵称                                    | `config.toml` |
| **信号**          | 双向      | signal-cli REST 事件    | 你自己已链接的 signal-cli 账号                         | `config.toml` |
| **Mattermost**  | 双向      | WebSocket             | 你自己的机器人令牌                                     | `config.toml` |
| **QQ**          | 双向      | WebSocket             | 你自己的机器人凭据                                     | `config.toml` |
| **Linq**        | 双向（SMS） | 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 和 Email 都支持这种方式。控制权最大；你拥有平台账号、速率限制以及任何 webhook 端点。
* **本地，无需凭据**： **Web** 聊天和 **iMessage** 完全不需要任何令牌。Web 在桌面应用内运行；iMessage 通过 AppleScript 桥接驱动本地 macOS 信息应用（需授予完全磁盘访问权限）。两者都会将消息保留在你的机器上。

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

***

## 在哪里连接频道

频道在以下位置设置： **连接 → 渠道** 在左侧边栏中 — **不** 在“设置”下，而不是在任何“Automation & Channels”菜单下（并不存在这样的菜单）。打开该选项卡，选择一个平台卡片，并按照其设置说明操作：

* **Discord** — 选择 *通过 OpenHuman 连接* （链接你的账号或通过 OAuth 安装机器人），或粘贴你自己的 Discord 机器人令牌。
* **Telegram** — 向托管的 OpenHuman 机器人发送消息进行链接，或粘贴 BotFather 机器人令牌。

Slack 是以一个 **应用** 下的 **Connections → OAuth** （Composio），这样代理就能在 Slack 中读取并执行操作；它并未在 Channels 选项卡中设置为双向对话频道。

***

## 选择默认频道

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

***

## 另请参阅

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