> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developers.alephant.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developers.alephant.io/_mcp/server.

# Slack Bot

> 通过明确的事件、频道与回复边界，使用 Slack Socket Mode 创建和运行 AIephant OpenCore Bot。

AIephant OpenCore Bot 允许已批准的 Slack 用户通过 OpenCore Slack listener 提问。Slack app、token、频道成员关系与回复策略仍属于管理员负责的边界。

仅当部署正在运行 Slack bot listener，并且管理员可以访问 Slack Bots 设置时，此能力才可用。在 OpenCore 中创建记录不会创建 Slack app，也不会启动已被部署禁用的 listener。

## 可用性与前置条件

| 要求                       | 必要原因                                 | 检查                                                        |
| ------------------------ | ------------------------------------ | --------------------------------------------------------- |
| OpenCore 管理员访问权限         | Bot 与频道配置端点需要完整 Admin Panel 访问权限。    | 确认预期运维人员可以打开 Admin Panel 中的 **Slack Bots**。               |
| 正在运行的 Slack bot listener | Socket Mode 事件由独立 listener 进程消费。     | 确认部署 profile 已启用 Slack bot workload，并且其日志显示已建立 socket 连接。 |
| Slack app 管理权限           | 必须使用当前 listener 所需的事件与 scope 安装 app。 | 使用已批准的 Slack workspace，并安排可以在 scope 变化后重新安装 app 的所有者。     |
| 已批准的数据边界                 | 频道回复可能暴露公开知识，而私密回复可以使用用户已获授权的内容。     | 发布前确定频道、Agent 或文档集范围以及回复可见性。                              |

## 通过 manifest 创建 Slack app

OpenCore 表单只接收 token，不会生成 Slack app manifest。请在 Slack 中选择**从 app manifest 创建**，审查请求的 scope，再安装到已批准 workspace。以下模板匹配当前 listener 的 Socket Mode 事件和 API 调用；管理员仍须按 Slack 当前要求复核，并移除未使用的可选能力。

可选 slash command 与 User Token scope 分别用于相应 listener 路径和增强的私有频道搜索路径。如果部署不使用这些能力，只能在测试变更后的工作流后再移除。

```yaml
display_information:
  name: AIephant OpenCore Bot
features:
  bot_user:
    display_name: AIephant OpenCore Bot
    always_online: true
  slash_commands:
    - command: /opencore
      description: Ask AIephant OpenCore Bot
      should_escape: false
oauth_config:
  scopes:
    bot:
      - app_mentions:read
      - channels:history
      - channels:read
      - chat:write
      - commands
      - groups:history
      - groups:read
      - im:history
      - im:read
      - reactions:write
      - usergroups:read
      - users:read
      - users:read.email
    user:
      - channels:history
      - channels:read
      - groups:history
      - groups:read
      - im:history
      - im:read
      - mpim:history
      - mpim:read
      - search:read
      - users.profile:read
      - users:read
settings:
  event_subscriptions:
    bot_events:
      - app_mention
      - message.channels
      - message.groups
      - message.im
  interactivity:
    is_enabled: true
  socket_mode_enabled: true
```

在 Slack 中创建具备 Socket Mode 连接 scope 的 app-level token；只要 Slack 提示 scope 或事件变化需要重新安装，就重新安装 app。将 AIephant OpenCore Bot 邀请到它应接收消息的每个私有或公开频道；scope 不会授予频道成员关系。

## 在 OpenCore 中添加 token

打开 **Admin Panel → Slack Bots → New Slack Bot**，并使用精确可见名称 **AIephant OpenCore Bot**。后端会在保存前通过 Slack 验证每个已提供 token。

| 字段               | 是否必填 | 来源与边界                                                                 |
| ---------------- | ---- | --------------------------------------------------------------------- |
| Name             | 是    | Admin Panel 本地标签。请保持为 **AIephant OpenCore Bot**，确保可见身份一致。             |
| Slack Bot Token  | 是    | 已安装 app 的 Bot OAuth token，通常以 `xoxb-` 开头，用于 Slack Web API 调用。         |
| Slack App Token  | 是    | Socket Mode 的 app-level token，通常以 `xapp-` 开头，用于建立 WebSocket 连接。       |
| Slack User Token | 否    | 以 `xoxp-` 开头的 User OAuth token。它只用于受支持的增强 Slack 搜索路径，并会扩大该凭据可访问的数据范围。 |

只在密码字段和已批准的密钥管理流程中保存 token。不要把它们粘贴到 manifest、聊天、工单、日志、截图或源代码控制中。

## 频道与回复边界

| 边界            | 当前行为                                                                                                | 管理员操作                                            |
| ------------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
| 默认配置          | 应用于所有频道与私信；新建 Bot 默认在私信以外仅被标记时回复。                                                                   | 保持默认配置范围收敛，或禁用默认配置并添加明确的频道配置。                    |
| 显式频道配置        | 匹配配置的 Slack 频道名称，并可选择公开知识、文档集或 Agent。                                                               | 输入不带 `#` 的频道名称，并确认 Bot 已加入频道。                    |
| 事件与 thread 处理 | 处理 app mention、受支持的 message 事件、私信和配置的 slash command。未标记的非根 thread 回复会被忽略；mention 和私信可以在 thread 中继续。 | 分别测试根消息、mention、私信与 thread 回复。                   |
| Bot 消息        | 自身消息与 Slack 系统 Bot 会被忽略。其他 Bot 消息也会被忽略，除非直接标记或启用 **Respond to Bot messages**。                       | 除非已测试循环和成本控制，否则保持 Bot 对 Bot 回复关闭。                |
| 回复可见性         | 没有用户/群组 allowlist 时，回复是频道消息。allowlist 同时限制调用者，并以 ephemeral 方式向解析成功的成员发送回复；私密回复选项只面向请求用户。            | 将无法解析的 allowlist 视为 fail-closed 条件，并用代表性用户验证可见性。 |

禁用默认配置后，Bot 不再回复私信，只保留显式配置的频道。问号筛选、仅标记模式、回复有效性检查、选定知识来源与每频道 disabled 状态还可能进一步抑制回复。

## 知识与隐私

公开频道回复只使用选定范围内的公开知识。包含自动同步权限感知连接器的文档集或搜索 Agent 不能用于普通频道可见回复，因为答案可能暴露私有内容。

当选定搜索路径支持时，私密 ephemeral 回复可以使用请求用户已获授权的内容。Slack 用户仍可复制或分享回复，因此 ephemeral 回复不能替代来源授权或公司共享政策。

## 更新、启停与移除

更改 Bot 或 App token 后，listener reconciliation loop 会关闭已有 socket client，并使用新的 token 对重新连接。重命名本地记录不会重命名 Slack app；请单独更新 Slack app display name，并将两处名称都保持为 **AIephant OpenCore Bot**。

关闭 **Enabled** 后，该 Bot 记录收到的请求会被忽略。重新开启后，listener 下次读取记录时恢复处理。删除记录并不保证清理 socket：只有租户已经没有任何 Bot 记录时，reconciliation 才会关闭全部 client；如果仍有其他 Bot，被删除 Bot 的遗留 socket 不会被显式移除。删除前先禁用该 Bot，并撤销该记录关联的全部 Slack 端 token——Bot、App，以及已配置的 User token；需要确保清除内存状态时重启 listener。对于仍要保留的 Bot，token rotation 仍是安全路径。

## 验证

1. 确认 Socket Mode 已启用、app 已安装，并且 listener 在不记录 token 值的情况下建立连接。
2. 在已批准频道中标记 AIephant OpenCore Bot，确认只产生一条 thread 回复。
3. 发送私信并验证其遵循默认配置；禁用默认配置后，确认私信不再触发回复。
4. 分别测试未配置频道、已配置频道、非成员、allowlist 成员、Bot 消息和私密回复。
5. 轮换 App 与 Bot token，在 OpenCore 中更新后先确认 listener 重连，再撤销旧 token。

## 故障排查

| 现象                  | 可能的边界                                                     | 检查                                                 |
| ------------------- | --------------------------------------------------------- | -------------------------------------------------- |
| 创建或更新时 token 被拒绝    | token 无效、已撤销或类型错误。                                        | 重新生成相应 Slack token，并确认 Bot、App 与可选 User 字段没有互换。    |
| Socket 始终无法连接       | listener workload 不存在、Socket Mode 已关闭，或 App token 无法打开连接。 | 检查部署 workload 状态与 Slack Socket Mode 配置。            |
| mention 有效，但普通消息无回复 | 仅标记模式、频道成员关系、事件订阅或频道配置正在限制输入。                             | 对比 manifest 事件与 Admin Panel 配置；Slack 端变化后重新安装 app。 |
| 回复到达了错误受众           | 默认/频道配置、allowlist 解析或 ephemeral 模式与预期不符。                  | 停止发布，并使用非敏感内容重新执行可见性测试。                            |

## 相关页面

* [企业集成](/opencore/governance/enterprise-integrations)介绍条件式集成边界。
* [Slack 连接器](/opencore/knowledge/connectors/slack)介绍 Slack 内容索引；它与交互式 Bot 相互独立。
* [管理 Agent](/opencore/agents/agents)介绍频道配置可选择的 Agent。
* [用量、身份与安全](/opencore/governance/usage-and-security)介绍身份与密钥处理控制项。