mcpField
S
slack-web-api

slack-web-api

github.com/freightcognition生産性479 回インストール2 週間前に更新
リポジトリ

slack-web-api について

Claude Code 向けに、Slack Web API の操作例とリファレンスを提供するスキルです。メッセージ、チャンネル、ユーザー、ファイル、Canvas、通話、アシスタントスレッドに加え、ページネーションとエラー処理を扱います。

主な機能

  1. 01Block Kit を含むメッセージ送信
  2. 02チャンネルとユーザー情報の管理
  3. 03ファイルのアップロードと管理
  4. 04Canvas、通話、アシスタントスレッドの操作
  5. 05ページネーションと API エラーへの対応

活用シーン

  1. 01Slack チャンネルにデプロイ状況を投稿
  2. 02自動化で使うチャンネルやユーザー情報を検索
  3. 03レポートをアップロードしてチャンネルで共有
  4. 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 のスコープが必要な権限と一致することを検証しない
  • 高スループットのシナリオでブロッキング操作を使用する

コメント