@emulators/slack

中文文档
0.13.1发布于 2026/11/09Apache-2.0TypeScriptES Module构建来源已验证近 30 天下载 8.5万

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

中文使用文档
文档目录19 节
  1. 安装
  2. 终点
  3. 自动聊天( C)
  4. 对话
  5. 用户反应( R)
  6. 文件
  7. 笔记( B)
  8. 视图
  9. 团队、 Bots 和 Webhooks
  10. 频道隐私转换
  11. 黑连接固定装置
  12. 事件回顾
  13. 互动
  14. 奥奥特
  15. 检查员
  16. 认证
  17. 当前限制
  18. 种子配置
  19. 链接

@ 模拟/ 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 的有效载荷 .

部分 模拟 ——为CI和无网络沙盒提供本地出入口替换服务.

安装

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。例如:

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 并可以被种子在应用的可见共享通道外建模一个用户.

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 给接收器所用的同一秘密:

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,精确的费率限制, 和付费计划行为没有实施.

种子配置

slack:
  team:
    name: My Workspace
    domain: my-workspace
  users:
    - name: developer
      real_name: Developer
      email: [email protected]
      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

版本与发布记录

@emulators/slack 共发布 19 个版本,首次发布于 2026/03/27;过去 12 个月发布了 19 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.13.1latest2026/11/094 天前
0.13.02026/10/2915 天前
0.12.32026/10/2321 天前
0.12.22026/10/1430 天前
0.12.12026/10/021 个月前
0.12.02026/09/241 个月前

关于 @emulators/slack 的常见问题

@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 和提交记录判断。