Go에서 Slack Webhook 사용해보기

11924 단어 webhookgolanggoslackgo

안녕하세요.

갈비만두를 좋아하는 개발자 임태빈입니다.

이번 포스팅에서는 Go에서 Slack Webhook을 사용하는 방법에 대해 공유드리겠습니다:)


1. Slack Webhook api 설치 및 url 받기

먼저 slack webhook을 사용하기 위해 api를 받아야합니다.

api 받는 내용은 여기를 참고하셔서 따라하신 다음에 web url만 잘 복사해서

메모장에 붙여놔주시면 감사하겠습니다.

2. Slack Webhook을 어떻게 쓸 것인가?

Slack Webhook을 활용할 예정인데 어떻게 사용할지 궁금하실 거라 생각합니다.
Slack Webhook에 경우 Rest API중 하나인 POST를 활용해서 Slack에 문자를 보낼 수 있습니다.
저도 이점을 이용해서 post로 메시지를 보낼 계획입니다:)

3. 코드 작성

코드 작성 내용을 보여드리겠습니다.


type Attachment struct {
	Fallback     *string   `json:"fallback"`
	Color        *string   `json:"color"`
	PreText      *string   `json:"pretext"`
	AuthorName   *string   `json:"author_name"`
	AuthorLink   *string   `json:"author_link"`
	AuthorIcon   *string   `json:"author_icon"`
	Title        *string   `json:"title"`
	TitleLink    *string   `json:"title_link"`
	Text         *string   `json:"text"`
	ImageUrl     *string   `json:"image_url"`
	Fields       []*Field  `json:"fields"`
	Footer       *string   `json:"footer"`
	FooterIcon   *string   `json:"footer_icon"`
	Timestamp    *int64    `json:"ts"`
	MarkdownIn   *[]string `json:"mrkdwn_in"`
	Actions      []*Action `json:"actions"`
	CallbackID   *string   `json:"callback_id"`
	ThumbnailUrl *string   `json:"thumb_url"`
}

type Payload struct {
	Parse       string       `json:"parse,omitempty"`
	Username    string       `json:"username,omitempty"`
	IconUrl     string       `json:"icon_url,omitempty"`
	IconEmoji   string       `json:"icon_emoji,omitempty"`
	Channel     string       `json:"channel,omitempty"`
	Text        string       `json:"text,omitempty"`
	LinkNames   string       `json:"link_names,omitempty"`
	Attachments []Attachment `json:"attachments,omitempty"`
	UnfurlLinks bool         `json:"unfurl_links,omitempty"`
	UnfurlMedia bool         `json:"unfurl_media,omitempty"`
	Markdown    bool         `json:"mrkdwn,omitempty"`
}

func (attachment *Attachment) AddField(field Field) *Attachment {
	attachment.Fields = append(attachment.Fields, &field)
	return attachment
}

func (attachment *Attachment) AddAction(action Action) *Attachment {
	attachment.Actions = append(attachment.Actions, &action)
	return attachment
}

func (payload * Payload) AddAttachment(attachment Attachment) *Payload {
	payload.Attachments = append(payload.Attachments, attachment)
	return payload
}

func (payload * Payload) SendSlack(url string) {
		client := &http.Client{}
		b, err := json.Marshal(payload)
		req, err := http.NewRequest("POST", url, bytes.NewBuffer(b))
		req.Header.Set("Content-Type", "application/json")
		
		resp, err := client.Do(req)
		if err != nil {
			log.Fatalln(err)
		}
		defer resp.Body.Close()
	
		body, err := ioutil.ReadAll(resp.Body)
		if err != nil {
			log.Fatalln(err)
		}
	
		data := string(body)
	
		log.Println(data)
	}

이 코드는 Slack에 대한 정보를 구조체를 만들고 전송하는 코드입니다.
이 내용을 사용하실 함수에 활용하시기만 하면 됩니다.
사용 방법은 슬랙에 보내고 싶은 내용을 attachment에 추가하고 sendSlack에 webhookurl을 입력해주시면 끝입니다.
이를 활용하시다면 아래 사진과 같은 결과를 얻으실 수 있습니다!!

4. 예제

활용 예제를 보시고 싶다면 여기를 참고해주세요!!

좋은 웹페이지 즐겨찾기