slack-web-api について
Claude Code 向けに、Slack Web API の操作例とリファレンスを提供するスキルです。メッセージ、チャンネル、ユーザー、ファイル、Canvas、通話、アシスタントスレッドに加え、ページネーションとエラー処理を扱います。
主な機能
- 01Block Kit を含むメッセージ送信
- 02チャンネルとユーザー情報の管理
- 03ファイルのアップロードと管理
- 04Canvas、通話、アシスタントスレッドの操作
- 05ページネーションと API エラーへの対応
活用シーン
- 01Slack チャンネルにデプロイ状況を投稿
- 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 アシスタントアプリ向けの機能であり、汎用 LLM 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 のスコープが必要な権限と一致することを検証しない
- 高スループットのシナリオでブロッキング操作を使用する