追記
Bot user 作るだけならわざわざアプリケーション作らずに Bot で十分とコメントもらいましたので追記致します。
他の人の投稿したファイルを削除したい、とか細かい権限が必要なときは App がよいかと思います。
org
前の Generate test tokens から作る bot がレガシーレガシー言われて久しいです。
なので新しいやり方はじめました。
簡単でした。
まず Create an App から新しい Slack アプリケーションを作成します。
Slack API: Applications | Slack
↑
適宜入力。
↑
追加されます。
そのあと該当アプリケーションをクリックして、左のメニューから OAuth & Permissions を選択。
Permission Scopes をいくつか選びます。
なんか bot ってのしたらダメだったのでとりあえずメッセージおくれれば良いので、 chat:write:bot
を追加。↓
※ちゃんとした bot Permission の使い方は公式ドキュメントには書いてる
上の方に Install Team 的なのあるのでそこから Install、Authentication します。
すると、Tokens for Your Team として OAuth Access Token が発行されます。
あとはこれで API を利用して好きなことします。
golang sample code
package main
import (
"strings"
"net/http"
"net/url"
)
/*
Slack にメッセージを送信します。
*/
func sendSlack(title, msg string) bool {
requestUrl := "https://slack.com/api/chat.postMessage"
postData := map[string]string{
"token": "xoxp-XXX-XXX-XXXXXX-XXXXXXXXX",
"channel": "err_replication_bot",
"text": title + "\n```" + msg + "```",
}
_, err := requestHttp(requestUrl, "post", nil, postData, nil, "")
if err != nil {
return false
}
return true
}
func requestHttp(requestUrl string, method string, getParam map[string]string, postParam map[string]string, cookie *http.Cookie, userAgent string) (*http.Response, error) {
var req *http.Request
var err error
if strings.ToLower(method) == "post" {
values := url.Values{}
if postParam != nil {
for key, val := range postParam {
values.Add(key, val)
}
}
req, err = http.NewRequest("POST", requestUrl, strings.NewReader(values.Encode()))
if err != nil {
return nil, err
}
} else if strings.ToLower(method) == "get" {
req, err = http.NewRequest("GET", requestUrl, nil)
if err != nil {
return nil, err
}
}
// GET parameter
if getParam != nil {
values2 := url.Values{}
for key, val := range getParam {
values2.Add(key, val)
}
req.URL.RawQuery = values2.Encode()
}
// Request Header
if strings.ToLower(method) == "post" {
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
}
if userAgent != "" {
req.Header.Add("User-Agent", userAgent)
} else {
req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MAFSJS; rv:11.0) like Gecko")
}
if cookie != nil {
req.AddCookie(cookie)
}
// 自動リダイレクトのオフ
client := http.Client{
// Go HTTP Client NOT Follow Redirects Automatically.
CheckRedirect: func(req *http.Request, via []*http.Request) error {
return http.ErrUseLastResponse
},
}
return client.Do(req)
}
おわり。