slack-web-api

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Slack 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 result

Messaging 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

常见错误类型

  • slack.RateLimitedError
    - Too many requests
  • Permission errors - Missing scopes
  • channel_not_found
    - Invalid channel ID
  • invalid_auth
    - Token issues
  • slack.RateLimitedError
    - 请求过于频繁
  • 权限错误 - 缺少权限范围
  • channel_not_found
    - 无效频道ID
  • 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的权限范围是否匹配所需权限
  • 在高吞吐量场景中使用阻塞操作