# @emulators/slack 中文文档

规范地址：https://npmcn.com/package/%40emulators/slack/

版本：0\.13\.1
npm 元数据更新时间：2026-11-08T22:08:06.411Z
中文译文更新时间：2026-11-13T16:18:01.619Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40emulators/slack
原文对照：https://npmcn.com/package/%40emulators/slack/?lang=original
项目主页：https://emulate.dev/
源码仓库：https://github.com/vercel-labs/emulate

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：946 kB，34 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：1 个
- 首次发布：2026-03-26T20:35:08.473Z
- 最新版本发布：2026-11-08T22:08:06.105Z
- 近 30 天下载量：84952（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：19（近 12 个月 19 个）

## 中文简介

完全状态 Slack Web API 以频道,消息,线程,反应,用户简介,存在,现代文件上传,指针,书签,视图,OAuth v2和来取的webhooks来模拟. Chat 写入保留常见的丰富消息字段, 如 `blocks`页:1

## 安装

```sh
npm install @emulators/slack
```

也可以使用：`pnpm add @emulators/slack`、`yarn add @emulators/slack`、`bun add @emulators/slack`

## README

# @ 模拟/ slack

完全状态 Slack Web API 以频道,消息,线程,反应,用户简介,存在,现代文件上传,指针,书签,视图,OAuth v2和来取的webhooks来模拟. Chat 写入保留常见的丰富消息字段, 如 `blocks`, (中文(简体) ), `attachments`, (中文(简体) ), `metadata`,格式化的旗帜,未覆盖的旗帜,以及客户端消息ID. Conversation写出更新存档状态,名称,主题,目的,成员,DM,MPIM,并读取光标. 用户写入更新配置字段, 状态, 自定义字段, 以及确定是否存在 。 文件写入支持当前外部上传流,并配有本地上传URL,文件共享消息,读取,列表,下载,并删除. Pin和书签会写支持频道消息标并链接书签. 视图写入支持 App Home 出版和模式堆栈. OAuth安装创建了bot用户和安装记录. OAuth交换和显式地标种子创建了范围化的符号记录. 支持写入状态更改发送Slack `event_callback` 配置 Webhook URL 的有效载荷 .

部分 [模拟](https://github.com/vercel-labs/emulate) ——为CI和无网络沙盒提供本地出入口替换服务.

## 安装

```bash
npm install @emulators/slack
```

## 终点

### 自动聊天( C)

-   `POST /api/auth.test` ——测试认证
-   `POST /api/chat.postMessage` - 带有文本或丰富的有效载荷字段(支持线程通过 `thread_ts` 和管理部用户ID)
-   `POST /api/chat.postEphemeral` – 频道历史以外的后电文
-   `POST /api/chat.update` - 更新信件文本和丰富的有效载荷域
-   `POST /api/chat.delete` 删除信件
-   `GET /api/chat.getPermalink` 编号 : `POST /api/chat.getPermalink` ——获取信息 permalink
-   `POST /api/chat.scheduleMessage` ——待发信件的时间表
-   `POST /api/chat.deleteScheduledMessage` ——删除待排备的消息
-   `POST /api/chat.scheduledMessages.list` ——列出待处理的已排定信件
-   `POST /api/chat.meMessage` - /我的信息

### 对话

-   `POST /api/conversations.list` - 列表对话(cursor pagination, `types`, (中文(简体) ), `exclude_archived`(中文(简体) )
-   `POST /api/conversations.info` ——获取频道信息
-   `POST /api/conversations.create` ——创建频道
-   `POST /api/conversations.archive` 编号 : `conversations.unarchive` ——存档/恢复频道
-   `POST /api/conversations.rename` ——重命名频道
-   `POST /api/conversations.setTopic` 编号 : `conversations.setPurpose` - 更新专题/目的
-   `POST /api/conversations.history` – 有丰富消息字段的频道历史
-   `POST /api/conversations.replies` – 有丰富信息字段的线程响应
-   `POST /api/conversations.join` 编号 : `conversations.leave` 加入/离开
-   `POST /api/conversations.invite` 编号 : `conversations.kick` ——管理会籍
-   `POST /api/conversations.open` 编号 : `conversations.close` - 开放/关闭模式和模式
-   `POST /api/conversations.mark` 标记已读光标
-   `POST /api/conversations.members` - 名单成员

### 用户反应( R)

-   `POST /api/users.list` - 列表用户( cursor pagination)
-   `POST /api/users.info` 获取用户信息
-   `POST /api/users.lookupByEmail` --通过电子邮件查询
-   `GET /api/users.profile.get` 编号 : `POST /api/users.profile.get` ——获取用户配置字段
-   `POST /api/users.profile.set` - 更新配置字段、状态和自定义字段
-   `GET /api/users.getPresence` 编号 : `POST /api/users.getPresence` - 主动或离开存在
-   `POST /api/users.setPresence` ——将授权用户设置为去除或自动存在
-   `POST /api/reactions.add` 编号 : `reactions.remove` 编号 : `reactions.get` 管理反应

### 文件

-   `POST /api/files.getUploadURLExternal` ——创建本地外部上传会话
-   `POST /upload/v1/:fileId` ——接收原始上传文件字节
-   `POST /api/files.completeUploadExternal` – 完整上传和可选共享文件消息
-   `GET /api/files.info` 编号 : `POST /api/files.info` ——获取文件元数据
-   `GET /api/files.list` 编号 : `POST /api/files.list` ——列出已填好的文件
-   `GET /files-pri/:fileId/:filename` ——以无记名符号下载文件字节,可以访问文件
-   `POST /api/files.delete` — 删除已完成的文件

### 笔记( B)

-   `POST /api/pins.add` ——将消息刻入频道
-   `GET /api/pins.list` 编号 : `POST /api/pins.list` – 列出一个频道的被绑定的消息项目
-   `POST /api/pins.remove` ——从频道中去掉信件标点
-   `POST /api/bookmarks.add` ——在频道中添加链接书签
-   `POST /api/bookmarks.edit` ——更新链接书签
-   `POST /api/bookmarks.list` —列表频道书签
-   `POST /api/bookmarks.remove` ——从频道中删除书签

### 视图

-   `POST /api/views.publish` ——为用户发布或更新 App Home 视图
-   `POST /api/views.open` ——打开模式视图
-   `POST /api/views.update` - 更新视图 `view_id` 或者说 `external_id`
-   `POST /api/views.push` ——将模式视图推入当前模式堆栈
-   `POST /api/views.generateTriggerId` 当地帮助进行需要模式触发id的测试

Modal 打开并推进接受 `trigger_id` 或者说 `interactivity_pointer` 从相互作用的有效载荷或 `/api/views.generateTriggerId`生成带有现有 `view_id`。触发器默认在3秒后过期;设置 `slack.view_trigger_ttl_seconds` 以允许更多的时间进行本地测试.

### 团队、 Bots 和 Webhooks

-   `POST /api/team.info` ——工作空间信息
-   `POST /api/bots.info` ——机器人信息
-   `POST /services/:teamId/:botId/:webhookId` - 带文字或丰富的有效载荷域的接通网页

### 频道隐私转换

`POST /api/admin.conversations.convertToPrivate` 财务报告和审定财务报表 `POST /api/admin.conversations.convertToPublic` 接受 `channel_id`。使用属于种子管理员的用户令牌;bot和测试令牌返回 `not_allowed_token_type`,非管理员用户返回 `missing_scope`与 `slack.strict_scopes: true`,符号也需要 `admin.conversations:write`。例如:

```yaml
slack:
  tokens:
    - token: local-admin-user
      type: user
      user: admin
      scopes: [admin.conversations:write, channels:read, groups:read]
```

转换保存频道的ID、会员和历史,更新谈话和文件读取的能见度,并附加 a `message` 有子类型 `channel_convert_to_private` 或者说 `channel_convert_to_public`。事件召回包括代理用户和新的 `channel_type` (单位:千美元)`group` 或者说 `channel`) (中文(简体) ). 管理员不需要属于频道. 拒绝模式、MPIM和重复转换; `#general` 不能成为隐私.

这些方法在模拟工作空间上运作,没有Slack的企业计划或全组织的安装要求. 企业角色,频道管理政策和MPIM转换都不被模拟.

### 黑连接固定装置

种子不同用户 `team_id` 以测试来自另一个工作空间的信息. `users.info` 财务报告和审定财务报表 `users.list` 返回该用户的工作空间 `is_stranger` 旗帜。 Oconduct用户团队默认到被模拟的工作空间. `is_stranger` 默认为 `false` 并可以被种子在应用的可见共享通道外建模一个用户.

```yaml
slack:
  users:
    - name: partner
      team_id: T_PARTNER
      is_stranger: false
  tokens:
    - token: xoxp-partner
      type: user
      user: partner
      scopes: [chat:write]
```

使用种子用户令牌作为外部用户. 邀请用户和您的应用程序的机器人到频道 `conversations.invite`,然后张贴一条信息 提到机器人。 应用活动包括作者 `user_team` 财务报告和审定财务报表 `source_team`; 外层 `team_id` 识别符号所选择的接收安装工作空间,该工作空间默认为模拟工作空间。 普通信件回调保留作者用户ID,可通过 `users.info`。 。 。 .

外部成员返回的频道 `is_ext_shared: true` 财务报告和审定财务报表 `is_shared: true`;其事件召回包括 `is_ext_shared_channel: true`种子 `channels[].is_ext_shared: true` 以模拟一个已经共享的频道。 共享在最后一个外部成员离开后被设定或被移除,包括跨被保存状态. Slack Connect 邀请和批准流量,工作空间断开,以及每个工作空间的频道设置都不被模拟.

### 事件回顾

使用 `POST /_slack/simulate/event-retry` 带有经认证的仿真符和 JSON `{ "event_id": "Ev...", "reason": "http_timeout" }` 以测试事件的分解。 从收到的回电或检查员事件标签中获取事件ID。 该模拟器将该事件的最新记录交付重新发送到其最初的订阅上,保留了整个有效载荷和事件ID. 如果有几个订户收到,则只重新考核最新收件者.

每次尝试都会增加 `X-Slack-Retry-Num`,从 `1`,以及 `X-Slack-Retry-Reason` (默认) `http_timeout`) (中文(简体) ). 理由也认可 `http_error`, (中文(简体) ), `connection_failed`, (中文(简体) ), `ssl_error`, (中文(简体) ), `too_many_redirects`,以及 `unknown_error`时 `slack.signing_secret` 配置后,重试获得新的请求时间戳和签名。 答复包括: `delivery_id`, (中文(简体) ), `retry_num`, (中文(简体) ), `success`,以及 `status_code`;一个失败的回调被录制,仍然会消耗一个重试号码.

复试是明确的,没有自动排程或三试限. 只有最新的1000个事件交付被保留在内存中,因此在它们的历史被移除或模拟器重新启动后无法重试. 返回未知的事件 `event_not_found`,和不活动订阅返回 `subscription_inactive`。 。 。 .

### 互动

按钮和模式提交文件可以引用您的应用程序的交互请求 URL 。 配置 `interactivity_url` 以播种者发誓 `slack.oauth_apps` 条目和设置 `slack.signing_secret` 给接收器所用的同一秘密:

```yaml
slack:
  signing_secret: local-signing-secret
  oauth_apps:
    - app_id: A_MY_APP
      client_id: my-client
      client_secret: my-secret
      name: My App
      redirect_uris: []
      interactivity_url: http://localhost:3000/slack/interactions
```

-   `POST /_slack/simulate/block-actions` 接受 `channel`, (中文(简体) ), `message_ts`按钮选择器(`action_id`准确 `text`,或 `url`),加上演戏 `user` 身份证或姓名 它支持动作块和路段附件中的按钮,包括该用户可见的麻黄消息. 模拟器需要一个经认证的仿真器符号,而代理用户必须属于对话.
-   `POST /_slack/simulate/view-submission` 接受 `view_id`选项 `user`,以及 `values` 由输入块ID键入。 文本输入取字符串;静态选择和无线电按钮取一个选项值;多选择和复选框取一系列选项值. 输入值保留先前的输入值或初始值. 其他输入元素返回 `unsupported_element`。 。 。 .

回电是 `application/x-www-form-urlencoded` 一个 `payload` JSON球场,在精确编码的请求体上签名. 按钮有效载荷包括一个装有应用程序的单一用途 `trigger_id` 它可以为代理用户打开一个模式。 App 所有权被保留给以 App 的 bot 或用户代号发布的消息. 模拟器返回有效载荷和 `delivery_id`;尝试和交付结果保存在 `slack.interaction_deliveries`。 。 。 .

按钮有效载荷 `response_url` 接受JSON没有无记名标志,最多在30分钟内接受5次. 它在默认情况下发布一个短暂的回复,或公开回复 `response_type: "in_channel"`启用 `replace_original: true` 或者说 `delete_original: true` 来修改源消息。 替换保留源消息的能见度 。 支持丰富的块和线程回复.

模式接收器必须在三秒内确认。 空 HTTP 200 关闭所提交视图, 而 `response_action: "clear"` 关闭它的堆栈. `errors` 保留视图并返回块错误; `update` 替换其内容; `push` 添加了三视图限制的新视图。 交付失败和无效确认使模式开放。 快捷键、斜线命令、非按钮动作, `view_closed`,以及 `block_suggestion` 没有模拟.

### 奥奥特

-   `GET /oauth/v2/authorize` ——授权(显示取用者)
-   `POST /oauth/v2/authorize/callback` – 创建认证代码的本地用户取回调用器
-   `POST /api/oauth.v2.access` - 证券交换

### 检查员

-   `GET /` ——有标签的本地检查员,负责对话、消息、文件、视图、认证记录、收到的webhooks、事件订阅和事件交付

当一个支持的写入发出一个 `event_callback`,有效载荷包括内部 `event` 外观 `token`, (中文(简体) ), `api_app_id`, (中文(简体) ), `authorizations`, (中文(简体) ), `team_id`, (中文(简体) ), `event_id`整数 Unix- 秒 `event_time`。团队来自所呈现的Slack标志的安装;没有被存储的Slack记录的开发标志返回受影响的频道,用户,或文件的团队,然后被种子的工作空间团队(或 `T000000001`) (中文(简体) ). Incoming webhook的帖子使用他们的webhook唱片团队,或者在没有唱片匹配时使用目标频道的团队. 每个逻辑事件都有不同的 `event_id` 由向多个订阅者交付分担.

每一个工作空间安装都收到一个信封,因为其 `api_app_id` 和机器人授权。 事件订阅通过应用程序共享;接收者可以通过 `api_app_id`。没有安装,便使用回调 `A000000001` 和本地用户授权。 遗产 `token` 默认为 `emulate-verification-token`; 以 `slack.verification_token`启用 `slack.signing_secret` 用于签字核查.

内部活动包括: `event_ts`指定信件事件 `channel`, (中文(简体) ), `group`, (中文(简体) ), `im`,或 `mpim` 内 `channel_type`使用已发行或已播种的瓶子符号和收到的网签或互动答复的帖子包括: `bot_id`, (中文(简体) ), `app_id`,以及 `bot_profile` 当bot记录存在时,在回调,更新,历史和回复中保留bot身份. 删除已安装的机器人 `conversations.kick` 或者说 `conversations.leave` 还发出 `channel_left` 或者说 `group_left`,与 `actor_id` 财务报告和审定财务报表 `event_ts`,用于受影响的应用程序.

Slack message text限定为4万个Unicode字符,跨越聊天写作,接入的webhooks,以及文件上传的初始评论. 较长的文本在被存储或发送之前在Unicode代码点边界被截取. 成功的网络API响应包括: `warning: "message_truncated"` 财务报告和审定财务报表 `response_metadata` 与匹配的警告和解释性信息相匹配。 丰富的领域,例如 `blocks` 财务报告和审定财务报表 `attachments` 保留不变.

## 认证

所有网络 API 端点需要 `Authorization: Bearer <token>`. Seeded OAuth apps 创建本地安装状态,OAuth v2 与用户拾取器 UI 返回 Slack-style bot 令牌. 范围检查因地方发展而默认放宽. 设定 `strict_scopes: true` 在 Slack 种子配置中返回 Slack 样式 `missing_scope` 当一个符号缺少所需的方法范围时出错。 严格模式检查 `chat:write`, (中文(简体) ), `channels:read`, (中文(简体) ), `channels:history`, (中文(简体) ), `channels:join`, (中文(简体) ), `channels:manage`, (中文(简体) ), `channels:write`, (中文(简体) ), `groups:read`, (中文(简体) ), `groups:history`, (中文(简体) ), `groups:write`, (中文(简体) ), `im:read`, (中文(简体) ), `im:history`, (中文(简体) ), `im:write`, (中文(简体) ), `mpim:read`, (中文(简体) ), `mpim:history`, (中文(简体) ), `mpim:write`, (中文(简体) ), `users:read`, (中文(简体) ), `users:read.email`, (中文(简体) ), `users.profile:read`, (中文(简体) ), `users.profile:write`, (中文(简体) ), `users:write`, (中文(简体) ), `files:read`, (中文(简体) ), `files:write`, (中文(简体) ), `pins:read`, (中文(简体) ), `pins:write`, (中文(简体) ), `bookmarks:read`, (中文(简体) ), `bookmarks:write`, (中文(简体) ), `reactions:read`, (中文(简体) ), `reactions:write`, (中文(简体) ), `team:read`,以及 `admin.conversations:write`。黑字列表中没有针对方法的 `views.publish`, (中文(简体) ), `views.open`, (中文(简体) ), `views.update`,或 `views.push`,因此模拟器需要认证,但不为这些方法添加严格的范围检查.

## 当前限制

Slack Connect 邀请和批准流程,每个工作空间频道设置,其他 Entertainment Grid admin API, 审计日志 API, SCIM, ligal holds, Socket Mode, slash 命令,快捷键, 以及除按钮动作和模式提交以外的交互类型, 用户组, 提醒, 恒星, 调用, 画布, 列表, 函数, 工作流程, 聊天流, 遗留 `files.upload`,精确的费率限制, 和付费计划行为没有实施.

## 种子配置

```yaml
slack:
  team:
    name: My Workspace
    domain: my-workspace
  users:
    - name: developer
      real_name: Developer
      email: dev@example.com
      profile:
        title: Local Developer
        status_text: Testing locally
        status_emoji: ":computer:"
      presence: active
  channels:
    - name: general
      topic: General discussion
    - name: random
      topic: Random stuff
  bots:
    - name: my-bot
  oauth_apps:
    - client_id: "12345.67890"
      client_secret: example_client_secret
      app_id: A000000001
      name: My Slack App
      redirect_uris:
        - http://localhost:3000/api/auth/callback/slack
      scopes:
        - chat:write
        - channels:read
        - channels:history
        - channels:join
        - channels:manage
        - channels:write
        - groups:read
        - groups:history
        - groups:write
        - im:read
        - im:history
        - im:write
        - mpim:read
        - mpim:history
        - mpim:write
        - users:read
        - users:read.email
        - users.profile:read
        - users.profile:write
        - users:write
        - files:read
        - files:write
        - pins:read
        - pins:write
        - bookmarks:read
        - bookmarks:write
        - reactions:read
        - reactions:write
        - team:read
      user_scopes:
        - users:read
        - users.profile:read
      bot_name: my-bot
  tokens:
    - token: xoxb-local-test
      user: developer
      scopes:
        - chat:write
        - channels:read
        - channels:history
        - channels:join
        - channels:manage
        - channels:write
        - groups:read
        - groups:history
        - groups:write
        - im:read
        - im:history
        - im:write
        - mpim:read
        - mpim:history
        - mpim:write
        - users:read
        - users:read.email
        - users.profile:read
        - users.profile:write
        - users:write
        - files:read
        - files:write
        - pins:read
        - pins:write
        - bookmarks:read
        - bookmarks:write
        - reactions:read
        - reactions:write
        - team:read
  strict_scopes: false
```

## 链接

-   [完整文档](https://emulate.dev/slack)
-   [GitHub 图像](https://github.com/vercel-labs/emulate)

## 常见问题

### @emulators/slack 是什么？

完全状态 Slack Web API 以频道,消息,线程,反应,用户简介,存在,现代文件上传,指针,书签,视图,OAuth v2和来取的webhooks来模拟\. Chat 写入保留常见的丰富消息字段, 如 blocks页:1

### 如何安装 @emulators/slack？

在项目目录运行 npm install @emulators/slack，或使用 pnpm add / yarn add / bun add。

### @emulators/slack 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @emulators/slack 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @emulators/slack 可以商用吗？

@emulators/slack 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @emulators/slack 的下载量有多少？

根据 npm 官方下载统计，@emulators/slack 在 2026/10/14 – 2026/11/12 这 30 天内被下载 84,952 次，日均约 2,832 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @emulators/slack 还在维护吗？

最新版本 0\.13\.1 发布于 2026/11/09（4 天前）；至今共发布 19 个版本，其中过去 12 个月发布了 19 个；首次发布于 2026/03/27。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

