티스토리 뷰
개요
1. Slack slash command 를 받고 회신하는 서버를 golang 으로 짜보자
2. 덤으로 (Heroku ) 등에 올리기 전에 ngrok 을 이용한 로컬 개발을 하자.
이후에,
- httprouter 를 사용해보자. 세세한 기능은 부족하지만, 빠르고 깔끔하다는 평이다.
- Heroku-CI 도 사용해보고 Heroku 에도 올려보자
참고링크: https://goo.gl/VDn4m9
httprouter: https://github.com/julienschmidt/httprouter
ngrok
Slack 에서 제공하는 링크: https://api.slack.com/tutorials/tunneling-with-ngrok
로컬에서 server 를 돌리면 (예를 들어 http://localhost:8080) 이를 외부에서 접근할 수 있는 URL 로 만들어주는 서비스.
이 URL 을 통해 Slack 에서 로컬에서 개발중인 server 로 HTTP Request 를 날릴 수 있게 된다.
→ 매번 호스팅 서버에 올리거나, Port forwarding 할 필요가 없다.
1) ngrok 사이트에 로그인하고 https://ngrok.com/
2) 다운로드후 환경변수 PATH 가 설정되어 있는곳에 복사
3) 설치후 이렇게 authtoken 을 등록하고
4) ./ngrok http 80 이라고 실행하면 아래와 같이 나온다.
- ngrok 으로 생성되는 URL 은 매번 바뀐다.
Slack slash command
1) https://api.slack.com/apps 로 가서 Create New App
2) App 의 이름과 설치할 workspace 를 정해주고
3) Slash Command 와 Request URL 을 정해주면 된다.
- 여기서는 Slack 에서 /time 과 함께 메시지를 넣어주면, 그 내용이 아래의 Request URL 로 HTTP POST Request 로 날아가게 설정된 것
- https://13aebb3f.ngrok.io/slash 는 바로 위에서 만들어둔 로컬 컴퓨터에서 돌아갈 HTTP Server 의 URL
Golang HTTP Server
- Slack 에서 App 이 초대된 채널에서 /time 과 함께 메시지를 쓰면, Golang HTTP Server 로 POST 된다.
* (참고) 패키지 관리를 위한 사전 작업 (Golang version 1.11 이상)
1) GO111MODULE=on 으로 환경변수가 설정된 상태에서
2) 폴더를 생성하고, go modules 로 패키지 관리를 시작한다.
$go mod init github.com/nicewook/slack_slash_cmd
Slack 에서 보내주는 slash command 의 POST 는 아래와 같은 정보를 담고 있다.
- command 에는 /weather 대신 지정한 command, 우리의 경우에는 /time 이 들어올 것이고
- text 에는 /time 뒤에 붙여넣은 message 가 전송되어 올 것이다.
→ 오른쪽에 코드로 구현하여 Slack 으로 회신된 값을 적어본다. (일부 값은 *** 처리 하였음)
|
You requested for KST <-> PST/PDT for main.SlashCommand{ Token:"************************", TeamID:"TFZGF****", TeamDomain:"ju****", EnterpriseID:"", EnterPriseName:"", ChannelID:"CG05K****", ChannelName:"general", UserID:"UG1AL****", UserName:"nice****", Command:"/time", Text:"time convert test message", ResponseURL:"https://hooks.slack.com/commands/TFZGFT3EC/548228644580/14cL5Rn2k25bRT**********", TirggerID:"547651359232.543559921488.bd2b6e3bdd07d3f35c2935**********"} |
전체 코드 링크: https://github.com/nicewook/slack_slash_cmd/blob/master/version1/server.go
SlashCommand, 에 대해 정리된 코드 위치: https://github.com/nlopes/slack/blob/master/examples/slash/slash.go
HTTP Post 로 들어오는 값을 담을 구조체를 정의하자
- json 부분은 JSON encoding / decoding 과 관련 있다는 정도로만 알고 넘어가자
- 참고: https://gobyexample.com/json
Post 를 가져와서 SlashCommand struct 에 담는 함수
r.ParseForm() 이후, r.PostForm 으로 원하는 항목을 가져온다.
자세한 내용은 전체 코드 링크를 참조하는 것으로 하고,
Golang Server 의 간략한 동작 프로세스는 아래와 같다.
1) net/http 패키지를 사용한다 2) main() 함수에서 http.HandleFunc() 함수로 /slash 로 오는 POST 를 처리할 함수를 지정해준다. 3) slashCommandHandler() 함수가 처리해준다. - slashCommandParse() 함수로 파싱을 하여 구조체에 담은 다음 - s.Command 가 "/time"인 경우를 체크하여 - w.Write() 로 Slack 에 회신해준다. |
'golang' 카테고리의 다른 글
Golang Channel 의 자명한 이치 (Axioms) (0) | 2019.02.18 |
---|---|
slack slash command 는 무얼 보내주는 걸까 (0) | 2019.02.15 |
time.Sleep, time.Duration (0) | 2019.02.11 |
Golang: Github - Travis-CI - Heroku (0) | 2019.02.07 |
Go Modules (0) | 2019.02.07 |
- Total
- Today
- Yesterday
- API
- intellij
- OpenAI
- 독서후기
- JIRA
- 독서
- 2023
- strange
- agile
- postgres
- Shortcut
- bun
- go
- solid
- websocket
- Bug
- 잡학툰
- notion
- ChatGPT
- github
- 제이펍
- 인텔리제이
- 영화
- folklore
- 체호프
- Gin
- pool
- 클린 애자일
- golang
- 노션
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |