slack-web-api
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSlack Web API
Slack Web API
Core API Pattern
核心API模式
All Web API methods follow this pattern:
go
result, err := api.MethodName(params...)
if err != nil {
// Handle error (rate limits, permissions, etc.)
return err
}
// Use result所有Web API方法都遵循以下模式:
go
result, err := api.MethodName(params...)
if err != nil {
// Handle error (rate limits, permissions, etc.)
return err
}
// Use resultMessaging Operations
消息操作
Send Simple Text Message
发送纯文本消息
go
channelID := "C1234567890"
text := "Hello, Slack!"
_, _, err := api.PostMessage(
channelID,
slack.MsgOptionText(text, false),
)go
channelID := "C1234567890"
text := "Hello, Slack!"
_, _, err := api.PostMessage(
channelID,
slack.MsgOptionText(text, false),
)Send Message with Block Kit
发送包含Block Kit的消息
go
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),
)See web-api-messaging.md for comprehensive messaging patterns including threading, updates, and ephemeral messages.
go
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。
Channel Operations
频道操作
Create a Channel
创建频道
go
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)go
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)List Channels
列出频道
go
params := &slack.GetConversationsParameters{
Types: []string{"public_channel"},
Limit: 100,
}
channels, nextCursor, err := api.GetConversations(params)See web-api-channels.md for channel management, invites, and metadata operations.
go
params := &slack.GetConversationsParameters{
Types: []string{"public_channel"},
Limit: 100,
}
channels, nextCursor, err := api.GetConversations(params)如需了解频道管理、邀请和元数据操作,请查看web-api-channels.md。
User Operations
用户操作
Get User Information
获取用户信息
go
user, err := api.GetUserInfo("U1234567890")
if err != nil {
return err
}
fmt.Printf("User: %s (%s)\n", user.Profile.RealName, user.Profile.Email)go
user, err := api.GetUserInfo("U1234567890")
if err != nil {
return err
}
fmt.Printf("User: %s (%s)\n", user.Profile.RealName, user.Profile.Email)List All Users
列出所有用户
go
users, err := api.GetUsers()
if err != nil {
return err
}
for _, user := range users {
fmt.Printf("- %s (%s)\n", user.Name, user.ID)
}See web-api-users.md for user presence, profiles, and groups.
go
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。
File Operations
文件操作
Upload a File
上传文件
go
params := slack.FileUploadParameters{
File: "report.pdf",
Channels: []string{"C1234567890"},
Title: "Monthly Report",
}
file, err := api.UploadFile(params)
if err != nil {
return err
}See web-api-files.md for file downloads, sharing, and multi-part uploads.
go
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 Integration
Block Kit集成
Block Kit allows rich, interactive messages. See block-kit-integration.md for:
- Section blocks with text, images, and accessories
- Interactive buttons and select menus
- Input blocks for forms
- Complete layout patterns
Block Kit支持丰富的交互式消息。如需了解以下内容,请查看block-kit-integration.md:
- 包含文本、图片和附件的区块
- 交互式按钮和选择菜单
- 表单输入区块
- 完整布局模式
Error Handling
错误处理
Rate Limiting
速率限制
go
_, _, 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
}go
_, _, 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
}Common Error Types
常见错误类型
- - Too many requests
slack.RateLimitedError - Permission errors - Missing scopes
- - Invalid channel ID
channel_not_found - - Token issues
invalid_auth
- - 请求过于频繁
slack.RateLimitedError - 权限错误 - 缺少权限范围
- - 无效频道ID
channel_not_found - - 令牌问题
invalid_auth
Pagination
分页处理
For operations returning large result sets, use cursor-based pagination:
go
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
}See pagination-patterns.md for advanced pagination strategies.
对于返回大量结果的操作,请使用基于游标分页:
go
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。
Common Pitfalls
常见误区
- Not handling rate limits (use exponential backoff)
- Hardcoding channel/user IDs (use lookups or environment variables)
- Forgetting to escape user input in messages
- Not validating Bot Token scopes match required permissions
- Using blocking operations in high-throughput scenarios
- 未处理速率限制(建议使用指数退避策略)
- 硬编码频道/用户ID(建议使用查询或环境变量)
- 忘记在消息中转义用户输入
- 未验证Bot Token的权限范围是否匹配所需权限
- 在高吞吐量场景中使用阻塞操作