> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Slack

## 概述

Slack 集成可让 ElevenLabs 智能体在 Slack 中发送和接收消息。连接后，在频道中提及智能体时，它会在线程中回复，并为每个线程保持独立的对话上下文。

## 功能

| 功能         | 支持情况                                                                          |
| ---------- | ----------------------------------------------------------------------------- |
| 零保留模式（ZRM） | 不支持                                                                           |
| 触发器中的附件    | 传入消息中的图片（PNG、JPEG、GIF、WebP）和 PDF 文件，需在智能体设置中启用 **允许文件附件**，且智能体的 LLM 支持图片或文档输入 |
| 工具中的附件     | 不支持 — 工具仅处理文本                                                                 |

## 设置

该集成提供两种连接方式：

* **OAuth** — 将共享的 ElevenLabs Slack 应用安装到工作区。一个 Slack 工作区对应一个 ElevenLabs 连接。设置最快，无需管理 Slack 应用。
* **使用自己的应用** — 使用你创建并拥有的 Slack 应用进行连接。如果需要让机器人以你的品牌显示，或工作区策略要求由管理员安装应用，请使用此方式。

### 选项 A — OAuth

安装应用的用户必须有权向目标 Slack 工作区添加应用。

#### 打开集成页面

在 ElevenLabs 控制台中，前往 **Agents** > **Integrations**，然后选择 **Slack**。

#### 点击 Connect

选择 **OAuth** 凭据并点击 **Connect**。系统会将你重定向到 Slack，以选择要安装 ElevenLabs 应用的工作区并批准所请求的权限范围。

#### 完成重定向

批准后，Slack 会将你重定向回 ElevenLabs，并创建连接。系统会自动记录 Slack 工作区 ID，并在配置触发器时使用。

### 选项 B — 使用自己的 Slack 应用

如果希望机器人以自己的应用名称和图标显示，或工作区要求由管理员审核并安装应用，请使用此选项。

#### 创建 Slack 应用

前往 [Slack API: Your Apps](https://api.slack.com/apps)，点击 **Create New App** > **From scratch**。为应用命名，并选择要安装到的 Slack 工作区。

#### 添加机器人权限范围

打开 **OAuth & Permissions**，并添加以下 Bot Token Scopes：

`app_mentions:read`、`channels:history`、`channels:join`、`channels:manage`、`chat:write`、`files:read`、`groups:history`、`groups:write`、`im:history`、`reactions:write`。

然后点击 **Install to Workspace** 并批准。复制 **Bot User OAuth Token**（以 `xoxb-` 开头）。

#### 复制签名密钥

打开 **Basic Information** > **App Credentials**，然后复制 **Signing Secret**。

#### 在 ElevenLabs 中创建连接

在 ElevenLabs 控制台中，前往 **Integrations**，点击 **Add integration** 按钮并选择 **Slack**。选择 **Bring your own app** 凭据。粘贴机器人令牌和签名密钥，然后保存。ElevenLabs 会根据 Slack 验证令牌并记录工作区 ID。

创建连接后，连接页面会显示两个基于 Slack 应用身份生成的 Webhook URL。从同一 ElevenLabs 工作区重新连接同一个 Slack 应用，始终会生成相同的 URL，因此你可以删除并重新创建连接，无需再次更新 Slack 应用配置。请保持该页面打开，以完成后续步骤。

#### 配置事件订阅

在 Slack 应用中，打开 **Event Subscriptions**，启用事件，并将 ElevenLabs 连接页面中的 **Events URL** 粘贴到 **Request URL**。Slack 会使用你提供的签名密钥验证 URL。

根据希望智能体在频道中的行为订阅机器人事件：

* **仅提及** — 订阅 `app_mention`。仅当用户使用 `@` 提及机器人时，智能体才会回复。
* **所有消息** — 订阅 `message.channels` 和 `message.groups`。智能体会回复机器人所在频道中的每条消息，无需提及。

如果使用 **SlackDirectMessage** 触发器，还需订阅 `message.im`。

除非打算处理重复投递，否则不要同时订阅 `app_mention` 和 `message.*` 频道事件。用户使用 `@` 提及机器人时，Slack 可能会为同一条消息同时发送 `app_mention` 事件和 `message` 事件，导致智能体回复两次。

#### 配置交互功能

打开 **Interactivity & Shortcuts**，启用交互功能，并将 ElevenLabs 连接页面中的 **Interactivity URL** 粘贴到 **Request URL**。

#### 如有提示，请重新安装

如果 Slack 在更改权限范围或事件后提示你重新安装应用，请执行重新安装以应用更改。

> **Note**
>
> 一个 Slack 工作区只能通过共享的 ElevenLabs OAuth 应用连接一次。通过其他 ElevenLabs 工作区重新安装时，会返回 `duplicate Slack workspace` 错误 — 请先移除现有连接。使用自己应用的连接彼此独立，不会冲突。

## OAuth 权限范围

ElevenLabs Slack 应用会请求以下权限范围：

| 权限范围                | 用途                            |
| ------------------- | ----------------------------- |
| `app_mentions:read` | 接收使用 `@` 提及机器人的消息。            |
| `channels:history`  | 读取机器人所在公开频道中的消息。              |
| `channels:join`     | 创建触发器时允许机器人自动加入公开频道。          |
| `channels:manage`   | 执行频道管理操作。                     |
| `chat:write`        | 在频道和线程中发布消息。                  |
| `files:read`        | 下载消息附件，以便智能体读取图片和 PDF。        |
| `groups:history`    | 读取机器人所在私密频道中的消息。              |
| `groups:write`      | 在私密频道中操作。                     |
| `im:history`        | 读取与机器人私信频道中的消息。               |
| `reactions:write`   | 添加和移除回应表情，用于消息和智能体工具的思考状态指示器。 |

## 智能体工具

向智能体添加 Slack 工具后，可使用以下内置工具：

| 工具                      | 说明                                                                                                                                                                                                              |
| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `slack_add_reaction`    | 添加 emoji 回应。默认情况下，频道和消息 `ts` 会从 `integration__slack_channel_id` 和 `integration__slack_trigger_message_ts` 填充；模型仅选择 emoji 短代码（不含冒号），例如 `thumbsup`。在非 Slack 触发的对话中，除非你设置这些变量，否则它们不存在——如果模型必须显式传递频道和 `ts`，请调整工具架构。 |
| `slack_remove_reaction` | 移除 emoji 回应（默认值与添加操作相同）。根据 Slack 规定，调用机器人只能移除自己最初添加的回应；请参阅 [reactions.remove](https://docs.slack.dev/reference/methods/reactions.remove)。                                                                       |

## 移除连接

从 **Integrations** 页面移除连接会从 Slack 工作区卸载 ElevenLabs Slack 应用。移除后，机器人将不再存在于任何频道中。

对于使用自己应用的连接，ElevenLabs 无法卸载不属于自己的应用 — 移除连接只会删除本地映射。要从 Slack 工作区完全移除机器人，请在 Slack 管理设置中卸载应用。

## 配置触发器

该集成提供一个触发器：**SlackMessage**。当机器人在已配置频道中看到新的用户消息时触发。

#### 添加 SlackMessage 触发器

在智能体配置页面中，添加新触发器并选择 **SlackMessage**。

#### 选择智能体和频道

配置触发器字段：

* **Agent**：处理对话的智能体。
* **Channel ID**：Slack 频道 ID，例如 `C0123456789`。界面提供深层链接，可在 Slack 中打开该频道。

#### 保存触发器

保存触发器。ElevenLabs 会自动邀请机器人加入公开频道。之后移除触发器会使机器人退出该频道。

> **Info**
>
> Slack 不允许应用自动加入私密频道。对于私密频道，请在保存触发器后在该频道中运行 `/invite
>   @Eleven`，以便机器人能够查看消息。

> **Warning**
>
> 每个 `(Slack workspace, channel)` 组合只允许一个触发器。请编辑现有触发器，而不是创建重复项。

## 配置私信触发器

**SlackDirectMessage** 触发器可让任何 Slack 用户通过向机器人发送私信来与智能体聊天。与频道触发器不同，无需 `@` 提及 — 用户在与机器人的私信中发送的每条消息都会被处理。

#### 添加 SlackDirectMessage 触发器

在智能体配置页面中，添加新触发器并选择 **SlackDirectMessage**。

#### 选择智能体

选择处理私信对话的 **Agent**。

#### 保存触发器

保存触发器。现在，工作区中的任何 Slack 用户都可以与机器人打开私信并开始对话。

> **Info**
>
> 对于 BYO 应用，请确保已订阅 `message.im` 机器人事件并添加 `im:history` 机器人权限范围。添加后如有提示，请重新安装应用。

> **Warning**
>
> 每个 Slack 连接只允许一个私信触发器。要更改智能体，请编辑现有触发器。

## 在 Slack 中与机器人交谈

触发器启用且机器人已加入频道后，可在线程中开始对话。如何继续线程取决于 Slack 应用的事件订阅（OAuth 使用仅提及行为）。

### 仅提及（`app_mention`）

#### 通过提及开启线程

在频道中提及机器人以开启新线程，例如 `@Eleven what's the status of
    order 1234?`。机器人会在线程中回复该消息。

#### 继续线程

对希望机器人回复的每条消息都再次提及机器人，包括同一线程中的后续消息。未提及的消息会被忽略。

### 所有消息（`message.channels`、`message.groups`）

#### 开启线程

在机器人所在频道中发送任意消息。机器人会在线程中回复该消息。无需使用 `@` 提及机器人。

#### 继续线程

在同一线程中回复，无需提及机器人。线程中的每条新消息都会被处理。

机器人生成回复时，会向触发消息的用户添加 `:eyes:` 回应，并在发布回复后将其移除。

频道消息触发器中的 **Respond to messages from** 设置可控制哪些人可以触发智能体：

* **Only humans**（默认）：忽略来自其他机器人和 Slack workflow 的消息。这是安全的默认设置，可保留现有触发器的行为。
* **Humans and bots**：来自其他机器人的消息以及由 workflow 发布的消息（包括旧版 `bot_message` 事件）也会触发智能体。

无论使用哪种设置，机器人始终会忽略自己的消息 — 通过 Slack 已签名 Webhook 中的机器人用户和应用身份识别 — 因此即使有人提及机器人自身，它也不会回复自己。它还会继续忽略已编辑消息（`message_changed`）和已删除消息（`message_deleted`）。它可处理 `message` 和 `app_mention` 事件，并适用于公开和私密频道。

> **Note**
>
> 仅包含 `bot_id` 的旧版机器人事件可识别发送者，但无法识别接收应用。它们会被视为来自其他机器人的消息；此 Slack 应用的自循环检测使用现代 Slack 事件负载中包含的机器人用户或应用身份。

> **Warning**
>
> 如果 Slack 应用同时订阅 `app_mention` 和 `message.channels` / `message.groups`，一次 `@` 提及可能触发两次智能体回复。请只订阅其中一种模式。

## 对话模型

每个 `(agent_id, channel_id, thread_ts)` 的对话 ID 都是确定的：

* 一个新的 Slack 线程对应一个新的 ElevenLabs 对话。
* 在同一线程中继续会延续同一对话，包括转录历史和动态变量。

构建聊天历史时，机器人会直接读取 Slack 线程。来自 Slack 成员和其他机器人的消息会被视为用户轮次，而机器人自己的消息会被视为智能体轮次。在智能体处理前，对机器人的用户提及（`<@BOT_USER_ID>`）会重写为 `@<agent_name>`。

### 动态变量

智能体从 Slack 运行时，提示词和工具中可使用以下动态变量：

| 变量                                      | 说明                                      |
| --------------------------------------- | --------------------------------------- |
| `integration__slack_channel_id`         | Slack 频道 ID。                            |
| `integration__slack_thread_ts`          | Slack 线程时间戳。                            |
| `integration__slack_user_id`            | Slack 发送者 ID。对于没有用户的旧版机器人事件，这可能是机器人 ID。 |
| `integration__slack_team_id`            | Slack 工作区（团队）ID。                        |
| `integration__slack_connection_id`      | ElevenLabs 集成连接 ID。                     |
| `integration__slack_trigger_message_ts` | 触发此智能体轮次消息的 Slack `ts`（频道中的唯一消息 ID）。    |

有关如何在提示词和工具调用中引用这些变量，请参阅[动态变量](/docs/zh/eleven-agents/customization/personalization/dynamic-variables)。

## 故障排除

### 文件附件无法使用

当用户在 Slack 中附加图片或 PDF，但智能体未处理（或表现得像未发送文件）时，请按以下步骤检查。

#### 确认 Slack 应用具有 files:read

机器人需要 `files:read` 机器人权限范围才能从 Slack 下载附件。

* **使用自己的应用** — 在 [Slack API: Your Apps](https://api.slack.com/apps) 中打开应用，前往 **OAuth & Permissions**，并确认 **Bot Token Scopes** 下列出了 `files:read`。如果最近刚添加该权限，请将应用重新安装到工作区，以便令牌获取新权限范围。

#### 确认智能体模型支持文件输入

仅当智能体的 LLM 支持多模态输入时才会转发文件附件 — 具体取决于文件类型，需支持图片输入和/或文档（PDF）输入。在智能体配置中，打开 **Agent** 标签页并检查所选模型。如果模型不支持该附件类型，请切换到支持的模型。

#### 在智能体设置中启用 Allow file attachments

在智能体配置页面中，打开 **Settings** > **Advanced**。在 **Multimodal input** 下，开启 **Allow file attachments**。保存智能体。若未启用此设置，即使 Slack 应用和模型支持文件，也会忽略 Slack 附件。

## 实用链接

* [Slack API 文档](https://api.slack.com/docs)
* [Slack 应用权限](https://api.slack.com/scopes)