APIを確認してslackにwebhook投げるものを作りたい


特定のAPIがエラーなく使えているかをゆる〜く確認するための下準備。 Goで特定のAPIを叩いて、statusが200でなければslackにwebhookを飛ばしたい。

webhook URLの取得

slackで自分専用のチャンネルを作成して、そこのIncoming WebhookのURLを手に入れて使います。

go

APIで叩いて結果を返すようにしたいのでlocalhost:4020/api/checkで処理が走ります。 webhookの部分に上記のincoming webhook urlを指定。

package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	"net/url"
)

var domain = ""
var apiRoot = ""
var webhook = ""

var urls = [...]string{
	"",
}

type params struct {
	Text string `json:"text"`
}

func main() {
	http.HandleFunc("/api/check", func(w http.ResponseWriter, r *http.Request) {
		targetURL := domain + apiRoot + urls[0]
		resp, err := http.Get(targetURL)
		if err != nil {
			fmt.Println(err)
		}
		defer resp.Body.Close()
		if resp.Status != "200 OK" {
			p := params{
				Text: "api url: " + targetURL + " status: " + resp.Status,
			}
			data, err := json.Marshal(p)
			if err != nil {
				fmt.Println("json error")
			}
			resp, err := http.PostForm(webhook, url.Values{"payload": {string(data)}})
			if err != nil {
				fmt.Println("slack post error")
			}
			defer resp.Body.Close()
		}
	})
	log.Fatal(http.ListenAndServe(":4020", nil))
}

参考:LambdaのGolangでSlackにメッセージを送る

上記リンクで書かれているコードと比較するといまいちですね。最終的にこうしたい、ああしたいとする前に、まず1つの機能として切り出すという考えが足りていないと痛感しました。

とはいえ、一歩前進です。

課題

・ライブラリのように実装する方法を覚える