---
type: study
created: 2026-08-11
updated: 2026-08-11
sensitivity: standard
status: verified
tags:
  - study
  - langchain
  - langsmith
  - fleet
  - channels
  - slack
  - teams
  - webhooks
topic: LangSmith Fleet Channels、Slack、Teams、Schedules 与 Webhooks
sources:
  - https://docs.langchain.com/langsmith/fleet/channels
  - https://docs.langchain.com/langsmith/fleet/slack-app
  - https://docs.langchain.com/langsmith/fleet/teams-app
  - https://docs.langchain.com/langsmith/fleet/schedules
  - https://docs.langchain.com/langsmith/fleet/webhooks
last_verified: 2026-08-11
---

# Fleet：Channels、Slack、Teams、Schedules 与 Webhooks

Channels 接收外部事件，Schedules 接收时间事件，Fleet Webhooks 则把 Agent 配置发布给外部系统。三者方向不同：channel/schedule 是“触发 Agent 运行”，webhook 是“由人在 Fleet 里触发配置包外发”，不能混称触发器。

## Channels 的共同语义

Channel 连接在 Agent 的 Channels drawer，可暂停/恢复全部 channels 而无需删除。Chat-only Agent 的新响应通常把 thread 标为 unread；channel-based Agent 的响应默认保持 read。手动 read/unread 只是 inbox 状态，不表示业务事件已处理。

Gmail channel 只监控 primary inbox，忽略 alias、mailing list、被 filter 跳过 inbox 的邮件以及 spam/trash。Slack 由 mention、DM 或 group DM 触发；Teams channel 内必须 @mention，DM/group chat 则对所有消息响应。

外部事件可能重复、乱序或重试。Agent 对发送、标签、工单和发布工具要使用外部 event ID/业务 key 做幂等，不能仅依赖 thread 看起来“只收到一次”。

## Slack Cloud：每个 Agent 一个独立 app

Fleet Slack manager 首次连接后提供两类 scope：Agent 发消息/读历史的工具权限，以及代表 Fleet 创建专属 Slack app 的管理权限。随后从 Agent Channels 一键 Add to Slack；Fleet 以 Agent 的 name、description 和 icon 建立 app。

约束：一个 Agent 恰好最多关联一个 Slack app，一个 Slack app 也只能关联一个 Agent。若 workspace 要求每个 app 单独管理员审批，第一次 Finish setup 只生成 draft 并发起请求；管理员通过后必须回 Fleet 再次 Finish setup 才真正安装。

Agent 可：

- 在 channel mention、DM、group DM 启动 run；
- 在线程内回复并读取 thread/channel history；
- 读取接收到的附件；
- 在 Slack thread 内显示工具审批按钮；
- 运行出错时在原 thread 返回错误信息。

`Allow bot triggers` 会允许其他 bot 的消息触发，可能形成 bot-to-bot 循环或放大成本，默认关闭，开启时要限定 channel、事件类型和去重。

## Slack Self-hosted：两层 OAuth 配置

自托管没有 Fleet Slack manager，需要：

1. Helm `fleet.oauth.providerOrgId` 与 `fleet.oauth.slackOAuthProvider` 指向统一的 Slack OAuth provider；
2. 在 Slack 建 provider app，配置文档列出的 history/read/write/team/users scopes；
3. 在对应 LangSmith organization 注册 client ID/secret、authorize/token URL；
4. Slack redirect URL 为 `https://<hostname>/host-oauth-callback/<provider-id>`；
5. 每个 Agent 再从 Fleet 生成 manifest，建立其独立 custom Slack app，并录入 App ID、client ID/secret、signing secret。

必须从 Fleet 生成 manifest，手工建立 app 会缺 event subscription、interactivity、redirect 与 scopes，导致收不到事件。Draft 不保存 client/signing secret，管理员批准后恢复设置时要重新输入。

自托管 `Add Slack App` 置灰时先查 `slackOAuthProvider`，unknown provider 先查 provider 是否注册在 `providerOrgId` 指定的 organization。Secret 只显示/复制到受管 secret store，不记录到笔记、工单或日志。

Slack tools 和 Slack channel 是两回事。Tools 可从 Fleet UI、schedule、webhook 等任意来源发送/读 Slack；channel 只定义 Slack 消息如何启动 Agent。工具逐项设 Auto/Ask。

## Teams：Bring Your Own Azure Bot

Teams 需要在 Azure 建 Multi Tenant Azure Bot 与 Microsoft App ID，立即保存只显示一次的 client secret。把 App ID/password（可选 tenant ID）注册到 Fleet 后，Fleet 返回 webhook URL；再回 Azure Bot Configuration 设置 Messaging endpoint，启用 Microsoft Teams channel，并安装引用 App ID 的 Teams manifest。

Bot 可从 Integrations 或 Agent sidebar 链到 Agent。连接后可添加：

- `teams_bot_send_proactive_message`：使用 Bot Framework credential，无需另行 OAuth；
- list teams/channels、post/read channel messages：使用 Microsoft Graph，可能要求用户 OAuth consent。

Channel conversation 只有 @mention 才触发；DM/group chat 全消息触发。Direct message 正常但 channel 失败时，先查 mention、bot 是否加入 team、channel 权限；完全不响应再查 Fleet approval/feed、paused 状态和 Azure messaging endpoint。Invalid credential 则查 App ID、secret value/expiry 与 Multi Tenant 类型。

## Schedules：UTC 的主动运行

Schedule 用于 daily briefing、memory synthesis、weekly update、monitoring 等周期任务。配置执行时间时统一按 UTC；可添加自定义 prompt。它没有最终用户在场，因此要求 fixed Agent identity，且任何 Ask 审批或 memory-write approval 都可能让任务永久停住。

无人值守上线前要验证：时区与夏令时、重叠执行、失败重试、最大运行时、幂等、无数据分支、结果投递失败、预算限制以及人工接管。对于非幂等写操作，宁可先生成草稿或审批项，不要直接 Auto。

## Fleet Webhooks：发布完整 Agent 配置

Webhook URL 必须 HTTPS；custom headers 加密存储；payload 带 publisher identity；Webhook 只对 Agent owner 可见。它发送的不只是通知，而是包含 Agent files 的完整包：

| 字段 | 内容 |
|---|---|
| `action` | Webhook 名称 |
| `input` | 自定义表单值 |
| `publisher` | 触发者 user ID/email |
| `agent` | name/description |
| `tool_auth_requirements` | 每个工具的 none/api_key/oauth 需求 |
| `files` | Base64 ZIP |
| `fields` | 自定义输入 schema |

ZIP 包含 `AGENTS.md`、`config.json`、`tools.json`、可选 `skills/*`、`subagents/*`。`tools.json` 还含 MCP URL、server name 与 interrupt config。因此接收端必须把 Webhook 当高敏感供应链入口：验证来源、签名或强 bearer/mTLS、限制 body、避免 zip bomb/path traversal、恶意内容扫描、不可执行地解压、保留内容 hash 与 publisher 审计。

`tool_auth_requirements` 只描述部署需要的凭据，不应包含实际 secret：

- `none`：无认证；
- `api_key`：`required_env_vars`；
- `oauth`：provider 与 scopes。

Custom form 支持 string、number、boolean、textarea、json、select。用于 environment、dry-run、发布说明等，但服务端必须再次做类型、枚举、权限和业务校验，不能信任 UI。

## 推荐事件流

```mermaid
flowchart TD
    A["Slack / Teams / Gmail / Schedule"] --> B["触发 Fleet Run"]
    B --> C["去重与授权"]
    C --> D["只读分析"]
    D --> E{"高风险工具?"}
    E -- 是 --> F["Ask / 中央或渠道审批"]
    E -- 否 --> G["Auto 执行"]
    F --> G
    G --> H["原渠道回执 + LangSmith Trace"]
    I["Owner 手动 Run Webhook"] --> J["外部 CI/CD 验签、校验、解包"]
```

## 生产检查

- 事件入口与发送工具分开授权；不因能收 Slack 就默认允许发所有 channel。
- 为 Slack/Teams/Gmail 记录 platform event ID，保证重复投递幂等。
- Bot-to-bot、proactive message 和 schedule 设置速率/递归保护。
- 自托管 Slack/Teams secret 放 secret manager，配置轮换和过期告警。
- Schedule 统一 UTC 并明确业务时区，模拟夏令时与长任务重叠。
- Webhook 接收端拒绝 HTTP、未知 publisher、超大 payload、危险 ZIP 路径和未授权 environment。
- 所有触发、审批、拒绝、执行与回执都能通过 trace 串起来。

