Edited at

レガシーじゃない Slack API のたたきかた

More than 1 year has passed since last update.

追記

Bot user 作るだけならわざわざアプリケーション作らずに Bot で十分とコメントもらいましたので追記致します。

他の人の投稿したファイルを削除したい、とか細かい権限が必要なときは App がよいかと思います。

org

前の Generate test tokens から作る bot がレガシーレガシー言われて久しいです。

なので新しいやり方はじめました。

簡単でした。

まず Create an App から新しい Slack アプリケーションを作成します。

Slack API: Applications | Slack

スクリーンショット 2017-04-25 10.47.04.png



適宜入力。

2_スクリーンショット_2017-04-25_10_47_40.png



追加されます。

そのあと該当アプリケーションをクリックして、左のメニューから OAuth & Permissions を選択。

Permission Scopes をいくつか選びます。

なんか bot ってのしたらダメだったのでとりあえずメッセージおくれれば良いので、 chat:write:bot を追加。↓

※ちゃんとした bot Permission の使い方は公式ドキュメントには書いてる

スクリーンショット 2017-04-25 10.49.35.png

上の方に 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)
}

おわり。