Custom Integrations がレガシーな機能になって、
2025年の4月くらいから使えなくなった?ので、
Slack APP に移行してみる。
下記にチュートリアル的なのが書いてある。
ひとまず、
サーバーから Slack に簡易的なメッセージを送るだけの bot を作成する。
環境
- Golang v1.23
Slack api での作業
APP を作成する
- 「Create New App」クリック
- Create an app
- 「From a manifest」選択。適当
- Pick a workspace to develop your app
- Pick a workspace to develop your app in: 任意のワークスペースを選択
- 「Next」クリック
- Create app from manifest
- 後で変更可能なのでとりあえず「Next」クリック
- Review summary & create your app
- 「Create」クリック
- Create an app
権限を付与&ワークスペースにインストールする
- 「Features」→「OAuth & Permissions」クリック
- 「Scopes」
- 「Bot Token Scopes」
- 「Add an OAuth Scope」クリック
- 「chat:write」選択
- 「chat:write.public」選択
- 「im:write」選択
- 「Add an OAuth Scope」クリック
- 「Bot Token Scopes」
- 「OAuth Tokens」
- 「Install to 任意のワークスペース」クリック
- 「Allow」クリック
- Bot User OAuth Token をコピー
- 「Scopes」
Slack アプリでの作業
チャンネル作成
割愛。
適当に「00_bottest」というチャンネルを作成したつもりで進める。
チャンネルに APP を追加する
パブリックなチャンネルにメッセージ送るだけなら、
権限に「chat:write.public」を付与しているので、
この操作はスルー。
自分の環境下ではバグ?かキャッシュか知らないけど、
作成した Slack APP がデスクトップアプリに出てこないので、
ブラウザから操作する。
また、一度チャンネルに追加した APP をそのチャンネルから取り除く操作が、
どこでやればいいか分からなかったので、
追加するチャンネルに注意。
- 左メニュー上部のチャンネル名をクリック →「Tools & settings」→「Manage App」クリック
- 「Manage」→「Installed apps」→ 作成した APP を選択
- ここもバグかキャッシュか知らないけど、作成した APP が出てきたり消えてたりする
- 「App Details」クリック →「Open in Slack」クリック
- 作成した APP の DM 画面に以下のメッセージが出てくるので「@作成したアプリ名」にカーソルを合わせる
- This is the very beginning of your direct message history with @作成したアプリ名
- 「Add this app to a channel...」クリック
- メッセージを送りたいチャンネルを選択 →「Add」クリック
- 「Add this app to a channel...」クリック
- This is the very beginning of your direct message history with @作成したアプリ名
- 「Manage」→「Installed apps」→ 作成した APP を選択
以下操作が多分正しいんだろうけど、
作成した APP が出てこない。
- メッセージを送りたいチャンネルに移動 → 右上メニューアイコンクリック →「Open channel details」クリック →「Integrations」→「Add apps」クリック → 本来なら多分ここで作成した APP を選択できるはず
Golang 側
nlopes/slack - GitHub を長らく使ってきたけど、
プロジェクトが slack-go/slack - GitHub に移行されていたので、これを使う。
サンプルコード
package main
import (
"github.com/slack-go/slack"
)
type Slack struct {
Channels struct {
Test string
}
Connection *slack.Client
}
func NewSlack() *Slack {
s := &Slack{}
s.Connection = slack.New("YOUR_BOT_USER_OAUTH_TOKEN")
s.Channels.Test = "00_bottest"
return s
}
func (s *Slack) SendMessageToTest(message string) (channel string, timestamp string, text string, err error) {
return s.Connection.SendMessage(
s.Channels.Test,
slack.MsgOptionText(message, true),
)
}
func main() {
s := NewSlack()
s.SendMessageToTest("hello")
}