关于 slack-web-api
这是一个面向 Claude Code 的 Slack Web API 技能,提供 Go 示例和参考资料,涵盖消息、频道、用户、文件、Canvas、通话和助手线程,以及分页与错误处理。
主要功能
- 01发送消息,包括 Block Kit 布局
- 02管理频道和用户信息
- 03上传和管理文件
- 04使用 Canvas、通话和助手线程
- 05处理分页和 API 错误
适用场景
- 01向 Slack 频道发布部署动态
- 02为自动化查找频道或用户信息
- 03上传报告并分享到频道
- 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