@ 模拟/ 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——获取信息 permalinkPOST /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_idPOST /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