slack-web-api
SKILL.md
Slack Web API
Core API Pattern
All Web API methods follow this pattern:
result, err := api.MethodName(params...)
if err != nil {
// Handle error (rate limits, permissions, etc.)
return err
}
// Use result
Messaging Operations
Send Simple Text Message
channelID := "C1234567890"
text := "Hello, Slack!"
_, _, err := api.PostMessage(
channelID,
slack.MsgOptionText(text, false),
)
Send Message with 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),
)
See web-api-messaging.md for comprehensive messaging patterns including threading, updates, and ephemeral messages.
Channel Operations
Create a Channel
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
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.
User Operations
Get User Information
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
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.
File Operations
Upload a File
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.
Block Kit Integration
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
Error Handling
Rate Limiting
_, _, 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 IDinvalid_auth- Token issues
Pagination
For operations returning large result sets, use cursor-based pagination:
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.
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
Weekly Installs
20
Repository
linehaul-ai/lin…ketplaceGitHub Stars
3
First Seen
Jan 24, 2026
Security Audits
Installed on
opencode15
codex15
gemini-cli15
cursor14
github-copilot13
claude-code12