From slack-go-sdk
Comprehensive guidance for Slack Web API operations with the Go SDK. Use when sending messages, posting to channels, creating or managing channels, retrieving user information, uploading files, composing Block Kit messages, or performing any synchronous Slack API operations.
How this skill is triggered — by the user, by Claude, or both
Slash command
/slack-go-sdk:slack-web-apiThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
All Web API methods follow this 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
channelID := "C1234567890"
text := "Hello, Slack!"
_, _, err := api.PostMessage(
channelID,
slack.MsgOptionText(text, false),
)
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.
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)
See web-api-channels.md for channel management, invites, and metadata operations.
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)
}
See web-api-users.md for user presence, profiles, and groups.
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 allows rich, interactive messages. See block-kit-integration.md for:
_, _, 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 - Too many requestschannel_not_found - Invalid channel IDinvalid_auth - Token issuesFor 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.
npx claudepluginhub linehaul-ai/linehaulai-claude-marketplace --plugin slack-go-sdkDiscovers Slack Web API methods, reads their contracts (scopes, arguments, errors), and calls them via HTTP or SDK. Handles pagination, rate limits, and API error debugging.
Interact with Slack workspaces via CLI using bot tokens: send messages, list/read channels, manage reactions, multi-bot auth for CI/CD and agents.
Guides mrkdwn syntax, message structure, thread etiquette, and tone for effective Slack messages in dev workflows.