mcpField
S
slack-web-api

slack-web-api

github.com/freightcognition生产力479 次安装2 周前更新
代码仓库

关于 slack-web-api

这是一个面向 Claude Code 的 Slack Web API 技能,提供 Go 示例和参考资料,涵盖消息、频道、用户、文件、Canvas、通话和助手线程,以及分页与错误处理。

主要功能

  1. 01发送消息,包括 Block Kit 布局
  2. 02管理频道和用户信息
  3. 03上传和管理文件
  4. 04使用 Canvas、通话和助手线程
  5. 05处理分页和 API 错误

适用场景

  1. 01向 Slack 频道发布部署动态
  2. 02为自动化查找频道或用户信息
  3. 03上传报告并分享到频道
  4. 04处理分页 API 结果及速率限制

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/freightcognition/linehaulai-claude-marketplace --skill slack-web-api

安装后在 Claude Code 中输入/slack-web-api确认已加载。

详细介绍

Slack Web API

核心 API 模式

所有 Web API 方法都遵循以下模式:

result, err := api.MethodName(params...)
if err != nil {
    // Handle error (rate limits, permissions, etc.)
    return err
}
// Use result

消息操作

发送简单文本消息
channelID := "C1234567890"
text := "Hello, Slack!"

_, _, err := api.PostMessage(
    channelID,
    slack.MsgOptionText(text, false),
)
发送带有 Block Kit 的消息
headerText := slack.NewTextBlockObject("mrkdwn", "*Deployment Complete*", false, false)
headerBlock := slack.NewSectionBlock(headerText, nil, nil)

divider := slack.NewDividerBlock()

bodyText := slack.NewTextBlockObject("mrkdwn", "Version 2.1.0 deployed successfully", false, false)
bodyBlock := slack.NewSectionBlock(bodyText, nil, nil)

_, _, err := api.PostMessage(
    channelID,
    slack.MsgOptionBlocks(headerBlock, divider, bodyBlock),
)

有关消息模式的详细说明,包括线程、更新和临时消息,请参阅 web-api-messaging.md。

频道操作

创建频道
channelName := "project-updates"
isPrivate := false

channel, err := api.CreateConversation(channelName, isPrivate)
if err != nil {
    return err
}
fmt.Printf("Created channel: %s (ID: %s)\n", channel.Name, channel.ID)
列出频道
params := &slack.GetConversationsParameters{
    Types: []string{"public_channel"},
    Limit: 100,
}

channels, nextCursor, err := api.GetConversations(params)

有关频道管理、邀请和元数据操作,请参阅 web-api-channels.md。

用户操作

获取用户信息
user, err := api.GetUserInfo("U1234567890")
if err != nil {
    return err
}

fmt.Printf("User: %s (%s)\n", user.Profile.RealName, user.Profile.Email)
列出所有用户
users, err := api.GetUsers()
if err != nil {
    return err
}

for _, user := range users {
    fmt.Printf("- %s (%s)\n", user.Name, user.ID)
}

有关用户在线状态、个人资料和用户组,请参阅 web-api-users.md。

文件操作

上传文件
params := slack.FileUploadParameters{
    File:     "report.pdf",
    Channels: []string{"C1234567890"},
    Title:    "Monthly Report",
}

file, err := api.UploadFile(params)
if err != nil {
    return err
}

有关文件下载、共享和分块上传,请参阅 web-api-files.md。

Block Kit 集成

Block Kit 支持丰富的交互式消息。有关以下内容,请参阅 block-kit-integration.md:

  • 包含文本、图片和附件的区块
  • 交互式按钮和选择菜单
  • 用于表单的输入区块
  • 完整的布局模式

Canvas、通话和助手线程

创建 Canvas
canvasID, err := api.CreateCanvasContext(ctx, "Sprint Planning", slack.DocumentContent{
    Type:     "markdown",
    Markdown: "# Sprint Planning\n\n## Goals",
})

有关编辑、访问控制和区块查询,请参阅 canvas-api.md。

注册通话
call, err := api.AddCallContext(ctx, slack.AddCallParameters{
    JoinURL:          "https://calls.example.com/join/abc123",
    ExternalUniqueID: "call-abc123",
    CreatedBy:        "U1234567890",
})

有关更新、结束通话和管理参与者,请参阅 calls-api.md。

AI 助手线程
err := api.SetAssistantThreadsStatusContext(ctx, slack.AssistantThreadsSetStatusParameters{
    ChannelID: channelID,
    ThreadTS:  threadTS,
    Status:    "is thinking...",
})

有关建议提示词、线程标题和上下文搜索,请参阅 assistant-api.md。这是 Slack 的 AI 助手应用接口,并非通用大模型 API。

错误处理

速率限制
_, _, err := api.PostMessage(channelID, slack.MsgOptionText(text, false))
if err != nil {
    if rateLimitErr, ok := err.(*slack.RateLimitedError); ok {
        time.Sleep(rateLimitErr.RetryAfter)
        // Retry operation
    }
    return err
}
常见错误类型
  • slack.RateLimitedError - 请求过多
  • 权限错误 - 缺少权限范围
  • channel_not_found - 频道 ID 无效
  • invalid_auth - 令牌问题

分页

对于返回大量结果的操作,请使用基于游标的分页:

cursor := ""
for {
    params := &slack.GetConversationsParameters{
        Cursor: cursor,
        Limit:  100,
    }

    channels, nextCursor, err := api.GetConversations(params)
    if err != nil {
        return err
    }

    // Process channels...

    if nextCursor == "" {
        break
    }
    cursor = nextCursor
}

有关高级分页策略,请参阅 pagination-patterns.md。

常见问题

  • 未处理速率限制(使用指数退避)
  • 将频道 ID 或用户 ID 硬编码(使用查找或环境变量)
  • 忘记转义消息中的用户输入
  • 未验证 Bot Token 权限范围是否符合所需权限
  • 在高吞吐量场景中使用阻塞操作

评论

支持 Markdown