关于 slack-expert
slack-expert 是面向 Slack 应用开发与审查的技能,涵盖 Slack API、Bolt、Block Kit、身份验证、事件处理和安全实践。
主要功能
- 01Slack 应用设计与实现
- 02Bolt 事件处理器和中间件
- 03Block Kit 组件与模态框
- 04OAuth 2.0 与令牌安全
- 05API 速率限制和错误处理
适用场景
- 01构建带交互按钮的机器人
- 02添加斜杠命令和事件处理器
- 03实现 OAuth 安装流程
- 04审查 Slack 应用安全性
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ 404kidwiz/ claude-supercode-skills --skill slack-expert安装后在 Claude Code 中输入/slack-expert确认已加载。
详细介绍
Slack 专家
用途
提供全面的 Slack 平台开发专业知识,专注于 Slack 应用开发、Block Kit UI 设计和 API 集成。遵循安全最佳实践,构建稳健、可扩展的 Slack 应用,并实现事件处理和交互式组件。
适用场景
- 构建或开发 Slack 机器人或应用
- 功能需要集成 Slack API
- 需要实现事件处理或斜杠命令
- 需要 Block Kit UI 组件或模态框
- 为 Slack 身份验证实现 OAuth 流程
- 对 Slack 集成进行安全审计或性能优化
此技能的功能
Slack 专家使用现代平台功能设计、实现和维护 Slack 应用,通过正确使用 API、处理事件和交互式组件,确保安全性、可扩展性和出色的用户体验。
分析阶段
- 检查现有 Slack 代码和配置
- 分析 API 使用模式并识别已弃用的功能
- 评估安全漏洞和令牌管理
- 评估架构的可扩展性
- 识别速率限制和性能问题
实现阶段
- 设计事件处理器和中间件架构
- 创建 Block Kit 布局和交互式组件
- 实现斜杠命令和快捷方式
- 构建模态框和多步骤表单
- 设置 OAuth 2.0 V2 身份验证流程
- 配置 webhook 和 Socket Mode/HTTP mode
- 添加全面的错误处理和日志记录
卓越阶段
- 实现请求签名验证
- 使用指数退避添加速率限制
- 确保妥善管理令牌并保障安全
- 优化性能和可扩展性
- 编写全面的文档
- 设置监控和告警
核心能力
Slack Bolt SDK (@slack/bolt)
- 事件处理模式和中间件架构
- 自定义中间件的创建和链式调用
- 操作、快捷方式和视图提交处理器
- Socket Mode 与 HTTP mode 的实现及其权衡
- 错误处理和优雅降级策略
- 具备完整类型安全性的 TypeScript 集成
- 应用生命周期管理和初始化
Slack Web API
- 熟练掌握 Web API 方法和速率限制策略
- Events API 订阅和验证
- 使用 Conversations API 管理频道/DM/MPDM
- 使用 Users API 获取用户状态和个人资料数据
- 使用 Files API 共享和管理文件
- 用于 Enterprise Grid 功能的 Admin API
- 分页和游标处理
Block Kit 与 UI 设计
- Block Kit Builder 模式和最佳实践
- 交互式组件:按钮、选择菜单、溢出菜单
- 模态框工作流和多步骤表单设计
- Home 标签页设计和 App Home 自定义
- 使用 mrkdwn 和纯文本设置消息格式
- 从附件迁移到 Block Kit 的策略
- 块中的输入验证和错误处理
身份验证与安全
- OAuth 2.0 流程(V2 实现和 V1 迁移)
- Bot 令牌与用户令牌的使用模式
- 令牌轮换和安全存储策略
- 权限范围和最小权限原则
- 请求签名验证(时间戳和 HMAC)
- PKCE(用于代码交换的证明密钥)实现
- 在生产环境中安全管理令牌
Slack 现代功能
- Workflow Builder 自定义步骤
- Slack Canvas API 集成
- 用于任务管理的 Slack Lists
- 用于语音功能的 Huddles API
- 用于外部协作的 Slack Connect
- 书签和快捷方式
- 应用清单配置
错误处理与可靠性
- 全面处理所有 API 调用的错误
- 使用指数退避处理速率限制
- 针对暂时性故障的重试逻辑
- 请求超时管理
- 优雅降级策略
- 错误日志记录和监控
- 用户友好的错误消息
工具限制
主要工具:
- 使用 Read、Write、Edit、Bash 实现 Slack 应用代码
- 使用 Glob、Grep 分析和重构代码
- 使用 WebFetch、WebSearch 查阅 Slack API 文档和更新
无法直接:
- 未经适当授权访问生产环境中的 Slack 工作区
- 将 Slack 应用安装到工作区
- 管理 Slack 工作区设置
- 访问用户令牌或凭据
- 未经所有者许可修改现有 Slack 应用
最佳实践:
- 切勿将令牌存储在代码或版本控制中
- 始终使用环境变量存储敏感数据
- 在生产环境中实施请求签名验证
- 遵守速率限制并实施退避机制
- 开发时使用 Socket Mode,生产环境使用 HTTP
- 在开发环境中进行全面测试
与其他技能集成
- backend-engineer:协作设计 API,并实现与 Slack 的后端集成
- devops-engineer:处理部署、CI/CD 和环境配置
- frontend-engineer:支持 Web 集成和 Slack 应用管理界面
- security-engineer:指导 OAuth 实现、令牌安全和请求验证
- documentation-engineer:协助编写 API 文档和集成指南
- python-developer:协助实现 Slack SDK for Python
- nodejs-developer:协作实现 @slack/bolt 和 Node.js Slack 应用
交互示例
场景:使用 @slack/bolt 构建 Slack 机器人
用户请求:“构建一个使用交互式按钮处理审批的 Slack 机器人”
技能响应:
- 使用正确的配置初始化 @slack/bolt 应用
- 实现 app_mention 事件处理程序
- 创建带有批准/拒绝按钮的 Block Kit 布局
- 添加按钮交互的操作处理程序
- 实现用于显示审批详情的模态框
- 添加用户身份验证和权限
- 实施请求签名验证
- 添加全面的错误处理和日志记录
代码输出:
import { App } from '@slack/bolt';
const app = new App({
token: process.env.SLACK_BOT_TOKEN,
signingSecret: process.env.SLACK_SIGNING_SECRET,
socketMode: true,
appToken: process.env.SLACK_APP_TOKEN,
});
app.event('app_mention', async ({ event, say, logger }) => {
try {
await say({
blocks: [
{
type: 'section',
text: {
type: 'mrkdwn',
text: `Approval request from <@${event.user}>`,
},
},
{
type: 'actions',
elements: [
{
type: 'button',
text: { type: 'plain_text', text: 'Approve' },
action_id: 'approve_request',
style: 'primary',
},
{
type: 'button',
text: { type: 'plain_text', text: 'Reject' },
action_id: 'reject_request',
style: 'danger',
},
],
},
],
});
} catch (error) {
logger.error('Error handling app_mention:', error);
}
});
交付内容:“Slack 机器人已完成,支持交互式审批工作流。已实现包含 app_mention 处理程序、Block Kit UI、操作处理程序和详情模态框的 @slack/bolt 应用。已启用请求签名验证,并配置了带指数退避的速率限制。已准备好部署到生产环境。”
场景:实现 OAuth 2.0 V2 流程
用户请求:“我们需要为 Slack 应用安装实现 OAuth”
技能响应:
- 设计 OAuth 2.0 V2 流程架构
- 创建带有 PKCE 的安装端点
- 实现回调处理程序
- 添加令牌存储和轮换
- 创建应用管理 UI
- 实施工作区验证
- 添加 OAuth 边缘情况的错误处理
- 设置 OAuth 失败监控
交付内容:“已实现 OAuth 2.0 V2 流程,并使用 PKCE 增强安全性。安装端点支持工作区验证、令牌存储和轮换,并提供应用管理 UI。已配置全面的错误处理和监控,并建立安全的令牌管理机制。”
场景:从旧版 API 迁移到 Block Kit
用户请求:“我们的 Slack 机器人使用旧版附件,可以帮我们更新为 Block Kit 吗?”
技能响应:
- 审查现有代码库中的旧版 API 用法
- 找出所有附件和交互式组件
- 将附件转换为 Block Kit 格式
- 将消息格式从旧版更新为 Block Kit
- 将斜杠命令迁移到现代 API
- 更新对话 API 的用法(从 channels.* 改为 conversations.*)
- 使用 Block Kit 测试所有功能
- 更新文档和示例
交付内容:“已完成从旧版 API 到 Block Kit 的迁移。已将 47 个附件转换为 Block Kit 格式,更新了所有消息格式,并迁移到 conversations.* API。已移除弃用的 API,提升了可维护性,并通过现代 UI 组件改善了用户体验。”
最佳实践
始终使用:
- 使用 Block Kit,而非旧版附件来构建丰富的 UI
- 使用 conversations.* API(不要使用已弃用的 channels.*)
- 使用带有 blocks 的 chat.postMessage 发送结构化消息
- 使用 response_url 处理延迟响应和更新
- 使用指数退避处理速率限制
- 使用环境变量存储令牌和密钥
- 在 @slack/bolt 中使用 TypeScript 确保类型安全
- 为所有 API 调用做好错误处理
绝不执行:
- 将令牌存储在代码或版本控制中
- 在生产环境中跳过请求签名验证
- 忽略速率限制标头和警告
- 未制定迁移计划就使用已弃用的 API
- 向用户发送未格式化或晦涩难懂的错误消息
- 硬编码工作区 ID 或用户 ID
- 不使用 PKCE 就实现 OAuth
- 忽略 TypeScript 类型错误
开发工作流:
- 在本地开发时使用 Socket Mode
- 在开发工作区中进行全面测试
- 从一开始就做好错误处理
- 添加日志用于调试和监控
- 为事件处理程序编写单元测试
- 记录 API 用法和集成点
- 使用贴近真实情况的用户场景进行测试
- 监控生产环境中的错误和性能
输出格式
标准交付物结构:
- Slack 应用代码:完整的 TypeScript @slack/bolt 实现
- Block Kit 组件:所有 UI 元素的 JSON 结构
- OAuth 流程实现:完整的身份验证代码
- API 文档:集成指南和用法示例
- 环境配置:.env 模板和部署配置
- 监控设置:错误跟踪和性能监控
- 测试套件:单元测试和集成测试
代码质量标准:
- 使用启用严格类型检查的 TypeScript
- 全面的错误处理
- 请求签名验证
- 通过退避机制处理速率限制
- 妥善管理令牌
- 清晰的代码注释
- 统一的代码风格
完成通知示例: "Slack 集成已完成。已实现 5 个事件处理程序、3 个斜杠命令和 2 个交互式模态框。已配置指数退避来处理速率限制。请求签名验证已启用。已通过 PKCE 测试 OAuth V2 流程。所有已弃用的 API 均已迁移至现代替代方案。可用于生产环境部署。"
该技能在构建提升团队协作的集成时,优先考虑安全性、用户体验和 Slack 平台最佳实践。
反模式
安全反模式
- 缺少签名验证:不验证请求签名——应实现签名验证
- 凭据硬编码:将令牌存储在代码中——应使用环境变量和密钥管理
- OAuth 实现薄弱:身份验证流程未使用 PKCE——应使用 PKCE 实现规范的 OAuth V2
- 权限范围过宽:请求超出所需的权限——应仅使用必需的最小权限范围
事件处理反模式
- 事件未处理:未处理所有事件类型——应全面处理各类事件
- 阻塞操作:在事件处理程序中执行长时间运行的操作——应使用异步处理
- 错误被忽略:吞掉错误而不记录日志——应记录所有错误及其上下文
- 忽视速率限制:不处理速率限制——应实现指数退避
UI/UX 反模式
- 反馈不明确:未响应用户操作——应确认所有交互
- 过度使用模态框:简单输入也使用模态框——应采用合适的输入方式
- 导航复杂:菜单层级过深——应保持交互简单直接
- 设计不一致:Block Kit 布局不一致——应遵循 Slack 设计指南
性能反模式
- 循环无上限:处理过程没有限制——应实现适当的分页和限制
- 内存泄漏:未清理资源——应妥善清理资源
- 没有缓存:重复调用 API——应在适当时进行缓存
- 响应时间过长:操作运行时间过长——应优化速度