31
Slack Bot With Python 김 김 김 (Kim Joong Hyeon)

Slackbot with Python

Embed Size (px)

Citation preview

Page 1: Slackbot with Python

Slack Bot With Python

김 중 현 (Kim Joong Hyeon)

Page 2: Slackbot with Python

Table of contents- Introduce Go

- Slack Bot Example : Echobot Go

- Slack Bot : More Functions Go

Page 3: Slackbot with Python

Introduce Myself평범한 자바 웹 개발자로 1 년 조금 넘게 일했습니다 .

우연히 파이썬의 매력을 알게 되어 공부하고 있습니다 .

아직 파이썬을 접한 지는 얼마 되지 않았습니다 .

E-mail : [email protected]

Github : https://github.com/karis0222

Page 4: Slackbot with Python

Introduce 몇 가지 필요한 내용들을 간략하게 소개하겠습니다 .

Page 5: Slackbot with Python

What is Bot?“ 봇 (bot) 은 인간이 하는 행동을 흉내내도록 만들어진 프로그램을 의미한다 .”

- 출처 : 위키피디아 ‘인터넷 봇’ 문서 중 https://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%EB%84%B7_%EB%B4%87

웹 크롤러 , 챗봇 등이 봇의 범주에 해당됩니다 .

Page 6: Slackbot with Python

Why Slack?슬랙 (Slack) 은 개발자들이 상당히 많이 사용하는 메신저 플랫폼입니다 .

요즘에는 개발자가 아닌 사용자 ( 기획자 , 디자이너 등 ...) 도 많습니다 .

다양한 Integration 이 지원됩니다 .

API 가 훌륭합니다 .

Page 7: Slackbot with Python

Slack APIhttps://api.slack.com/ : 슬랙 API 페이지 .

Web API, Events API, RTM(Real Time Messaging) API...

저는 RTM API 를 사용하여 슬랙 봇을 만들어 보겠습니다 .

RTM API 는 웹 소켓 기반으로 , 실시간 메시지 송수신 API 입니다 .

Page 8: Slackbot with Python

Websocket“WebSocket 은 ws 프로토콜을 기반으로 클라이언트와 서버 사이에 지속적인 완전 양방향 연결 스트림을 만들어 주는 기술입니다 .”- 출처 : MDN 번역 문서 https://developer.mozilla.org/ko/docs/WebSockets/Writing_WebSocket_client_applications

- 이미지 출처 : http://java.sys-con.com/node/1315473

Page 9: Slackbot with Python

Slack Bot Example : Echobot

사용자가 보낸 메시지를 그대로 따라하는 에코봇을 만들어 봅시다 .

Page 10: Slackbot with Python

Flow1. 개발환경 구성 및 슬랙 봇 API 토큰 발급 .

2. https://slack.com/api/rtm.start : RTM 세션을 시작하기 위해 토큰 정보를 보내고 웹소켓 URL 을 응답 받음 .

3. 위에서 응답 받은 웹소켓 URL 을 통해 RTM 세션 시작하여 메시지 수신 .

4. 봇이 자신에게 온 메시지인지 판단 후 응답 메시지 송신 .

Page 11: Slackbot with Python

Development Environment저의 개발환경은 다음과 같습니다 .

운영체제 : 윈도우 10

파이썬 : 3.4 버전

통합개발환경 : Pycharm Community Edition

가상환경을 구성하고자 virtualenv 를 사용했습니다 .

API 테스트를 위해 구글 크롬의 앱 중 하나인 Postman 도 사용했습니다 .

Page 12: Slackbot with Python

Using Librariesrequests : 인간친화적인 http 클라이언트 라이브러리 .

websockets : 웹 소켓 라이브러리 .

asyncio : 비동기 IO 및 코루틴 지원 라이브러리 .

json : JSON 포맷 데이터 핸들링 라이브러리 ( 기본 내장 ).

pip install requests websockets asyncio

Page 13: Slackbot with Python

Slack Bot API Token

Page 14: Slackbot with Python

Slack Bot API Token

Page 15: Slackbot with Python

Slack Bot API Token우리에게 필요한 것은 바로 이 API 토큰입니다 .

Page 16: Slackbot with Python

Slack Bot Echo Example1. https://slack.com/api/rtm.start : RTM 세션을 시작하기 위해 토큰 정보를 보내고 웹소켓 URL 을 응답 받음 .

https://github.com/karis0222/python-slackbot/blob/master/src/echobot.py

Page 17: Slackbot with Python

Slack Bot Echo [email protected](async)…?

yield from(await)…?

run_until_complete…?

시간 관계상 자세한 설명은 생략하겠습니다 .

Page 18: Slackbot with Python

Slack Bot Echo Example1. 수신 데이터를 JSON 으로 변환

2. 봇 자신에게 온 메시지인지 판단

3. 메시지 내용 추출

4. 응답 메시지 송신

Page 19: Slackbot with Python

Slack Bot : More

Functions조금 더 많은 기능을 제공하는 슬랙 봇을 만들어 봅시다 .

Page 20: Slackbot with Python

So, What do you want do?슬랙 봇이 무엇을 해주길 원하세요 ?

I want...이 곳의 날씨를 알려주세요 .

이 곳의 위치를 알려주세요 .

이 문장을 번역해주세요 .

[@ 봇이름 명령어 “파라미터” ] 의 형태로 만들어보고자 합니다 .

Page 21: Slackbot with Python

상황을 가정해봅시다한참 장고 개발 중이던 개발자 K 모씨는 개발자 동료로부터 강남구청에서 만나자는 메시지를 받았습니다 . 강남구청의 위치를 알고 싶어요 . 마침 슬랙이 켜져있네요 ?

1. 웹 브라우저를 켜고 -> 네이버에 접속해서 -> 네이버 지도 서비스로 들어간 후 -> “ 강남구청”을 검색한다 .

2. 슬랙봇에게 지도 “강남구청”이라고 명령 -> 슬랙봇이 보내준 링크를 클릭한다 .

여러분은 어떤 방법이 더 맘에 드시나요 ?

Page 22: Slackbot with Python

I want to know the location of a place국내 지도 검색은 네이버 지도 서비스를 사용하겠습니다 .

요청 URL 은 “ http://map.naver.com/?query= 검색어 &type=SITE_1” 의 형태입니다 .

@ 봇이름 / 지도 “인자”

사실은 지역 검색 API 를 사용하려고 했으나 , 지역 검색 API 로는 장소를 화면으로 보여줄 수가 없었습니다… 그래서 지도 API 를 사용하려고 했으나 , 지도 API 는 장소를 검색할 수 있는 기능이 없고요… 두 가지를 함께 사용하려고 했으나 , 지도 API 로 화면을 보여주려면 별도의 페이지를 제공해야 하더군요…

Page 23: Slackbot with Python

I want to know the weather of a place공공데이터포털에서 기상청이 제공하는 오픈 API 중 “동네예보조회” API 사용 .

일단 특별시 , 광역시와 도에 대해서만 구현해보겠습니다 .

@ 봇이름 / 날씨 “서울”

분명 API 인증키를 발급 받았으나 하루가 지나야 인증이 제대로 됩니다…

왜 그런건지는 저도 잘 모르겠어요 ...

Page 24: Slackbot with Python

I want a translation of this sentence구글 번역 서비스 사용 .

일단 영 -> 한 번역만 해보겠습니다 .

@ 봇이름 / 번역 “ hello, world!”

왜 ? Google Translate API 를 사용하지 않죠 ?

Google Translate API 는 무료가 아닙니다…

Page 25: Slackbot with Python

Show Video잠시 짧은 시연 영상을 보여드리겠습니다 .

https://youtu.be/Ts7eFh8oM1s

Page 26: Slackbot with Python

How?

Pre Process

Parse Message

Route Commands

Slack API

Run Command Process

Page 27: Slackbot with Python

Code...https://github.com/karis0222/python-slackbot

다운로드 하셔도 좋고 ,

git clone https://github.com/karis0222/python-slackbot.git

git clone 하셔도 좋습니다 .

코드는 계속 개선할 예정입니다 .

Page 28: Slackbot with Python

My mistake...슬랙 봇 API 토큰을 Github 에 올리면 슬랙에서 귀신같이 알아내고 해당 토큰을 폐기합니다 . 제가 그런 실수를 저질렀네요…

결론은…

슬랙 , 대단합니다 !

Page 29: Slackbot with Python

And more...장고 웹 애플리케이션과 연동해보는 것도 좋습니다 .

AWS 의 Lambda, Azure 의 Function 에 코드만 올려두고 서버리스(Serverless) 로 구성해도 되겠죠 ?

자연어 처리가 가능하시면 , 챗봇 (Chatbot) 을 만들어보실 수도 있습니다 .

Page 30: Slackbot with Python

Q&A

Page 31: Slackbot with Python

Thanks, Everyone