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

公開日:2019 M02 5最終更新日: 2019 M11 16

特定の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つの機能として切り出すという考えが足りていないと痛感しました。

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

課題

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


hidekazoo
作者: hidekazooTwitter
JavaScriptやPHPなどプログラム関係やDockerといった開発環境など、ITエンジニアとして興味あることを紹介しているサイトです