View
549
Download
0
Category
Preview:
Citation preview
Slack Bot With Python
김 중 현 (Kim Joong Hyeon)
Table of contents- Introduce Go
- Slack Bot Example : Echobot Go
- Slack Bot : More Functions Go
Introduce Myself평범한 자바 웹 개발자로 1 년 조금 넘게 일했습니다 .
우연히 파이썬의 매력을 알게 되어 공부하고 있습니다 .
아직 파이썬을 접한 지는 얼마 되지 않았습니다 .
E-mail : karis0222@gmail.com
Github : https://github.com/karis0222
Introduce 몇 가지 필요한 내용들을 간략하게 소개하겠습니다 .
What is Bot?“ 봇 (bot) 은 인간이 하는 행동을 흉내내도록 만들어진 프로그램을 의미한다 .”
- 출처 : 위키피디아 ‘인터넷 봇’ 문서 중 https://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%EB%84%B7_%EB%B4%87
웹 크롤러 , 챗봇 등이 봇의 범주에 해당됩니다 .
Why Slack?슬랙 (Slack) 은 개발자들이 상당히 많이 사용하는 메신저 플랫폼입니다 .
요즘에는 개발자가 아닌 사용자 ( 기획자 , 디자이너 등 ...) 도 많습니다 .
다양한 Integration 이 지원됩니다 .
API 가 훌륭합니다 .
Slack APIhttps://api.slack.com/ : 슬랙 API 페이지 .
Web API, Events API, RTM(Real Time Messaging) API...
저는 RTM API 를 사용하여 슬랙 봇을 만들어 보겠습니다 .
RTM API 는 웹 소켓 기반으로 , 실시간 메시지 송수신 API 입니다 .
Websocket“WebSocket 은 ws 프로토콜을 기반으로 클라이언트와 서버 사이에 지속적인 완전 양방향 연결 스트림을 만들어 주는 기술입니다 .”- 출처 : MDN 번역 문서 https://developer.mozilla.org/ko/docs/WebSockets/Writing_WebSocket_client_applications
- 이미지 출처 : http://java.sys-con.com/node/1315473
Slack Bot Example : Echobot
사용자가 보낸 메시지를 그대로 따라하는 에코봇을 만들어 봅시다 .
Flow1. 개발환경 구성 및 슬랙 봇 API 토큰 발급 .
2. https://slack.com/api/rtm.start : RTM 세션을 시작하기 위해 토큰 정보를 보내고 웹소켓 URL 을 응답 받음 .
3. 위에서 응답 받은 웹소켓 URL 을 통해 RTM 세션 시작하여 메시지 수신 .
4. 봇이 자신에게 온 메시지인지 판단 후 응답 메시지 송신 .
Development Environment저의 개발환경은 다음과 같습니다 .
운영체제 : 윈도우 10
파이썬 : 3.4 버전
통합개발환경 : Pycharm Community Edition
가상환경을 구성하고자 virtualenv 를 사용했습니다 .
API 테스트를 위해 구글 크롬의 앱 중 하나인 Postman 도 사용했습니다 .
Using Librariesrequests : 인간친화적인 http 클라이언트 라이브러리 .
websockets : 웹 소켓 라이브러리 .
asyncio : 비동기 IO 및 코루틴 지원 라이브러리 .
json : JSON 포맷 데이터 핸들링 라이브러리 ( 기본 내장 ).
pip install requests websockets asyncio
Slack Bot API Token
Slack Bot API Token
Slack Bot API Token우리에게 필요한 것은 바로 이 API 토큰입니다 .
Slack Bot Echo Example1. https://slack.com/api/rtm.start : RTM 세션을 시작하기 위해 토큰 정보를 보내고 웹소켓 URL 을 응답 받음 .
https://github.com/karis0222/python-slackbot/blob/master/src/echobot.py
Slack Bot Echo Example@asyncio.coroutine(async)…?
yield from(await)…?
run_until_complete…?
시간 관계상 자세한 설명은 생략하겠습니다 .
Slack Bot Echo Example1. 수신 데이터를 JSON 으로 변환
2. 봇 자신에게 온 메시지인지 판단
3. 메시지 내용 추출
4. 응답 메시지 송신
Slack Bot : More
Functions조금 더 많은 기능을 제공하는 슬랙 봇을 만들어 봅시다 .
So, What do you want do?슬랙 봇이 무엇을 해주길 원하세요 ?
I want...이 곳의 날씨를 알려주세요 .
이 곳의 위치를 알려주세요 .
이 문장을 번역해주세요 .
[@ 봇이름 명령어 “파라미터” ] 의 형태로 만들어보고자 합니다 .
상황을 가정해봅시다한참 장고 개발 중이던 개발자 K 모씨는 개발자 동료로부터 강남구청에서 만나자는 메시지를 받았습니다 . 강남구청의 위치를 알고 싶어요 . 마침 슬랙이 켜져있네요 ?
1. 웹 브라우저를 켜고 -> 네이버에 접속해서 -> 네이버 지도 서비스로 들어간 후 -> “ 강남구청”을 검색한다 .
2. 슬랙봇에게 지도 “강남구청”이라고 명령 -> 슬랙봇이 보내준 링크를 클릭한다 .
여러분은 어떤 방법이 더 맘에 드시나요 ?
I want to know the location of a place국내 지도 검색은 네이버 지도 서비스를 사용하겠습니다 .
요청 URL 은 “ http://map.naver.com/?query= 검색어 &type=SITE_1” 의 형태입니다 .
@ 봇이름 / 지도 “인자”
사실은 지역 검색 API 를 사용하려고 했으나 , 지역 검색 API 로는 장소를 화면으로 보여줄 수가 없었습니다… 그래서 지도 API 를 사용하려고 했으나 , 지도 API 는 장소를 검색할 수 있는 기능이 없고요… 두 가지를 함께 사용하려고 했으나 , 지도 API 로 화면을 보여주려면 별도의 페이지를 제공해야 하더군요…
I want to know the weather of a place공공데이터포털에서 기상청이 제공하는 오픈 API 중 “동네예보조회” API 사용 .
일단 특별시 , 광역시와 도에 대해서만 구현해보겠습니다 .
@ 봇이름 / 날씨 “서울”
분명 API 인증키를 발급 받았으나 하루가 지나야 인증이 제대로 됩니다…
왜 그런건지는 저도 잘 모르겠어요 ...
I want a translation of this sentence구글 번역 서비스 사용 .
일단 영 -> 한 번역만 해보겠습니다 .
@ 봇이름 / 번역 “ hello, world!”
왜 ? Google Translate API 를 사용하지 않죠 ?
Google Translate API 는 무료가 아닙니다…
Show Video잠시 짧은 시연 영상을 보여드리겠습니다 .
https://youtu.be/Ts7eFh8oM1s
How?
Pre Process
Parse Message
Route Commands
Slack API
Run Command Process
Code...https://github.com/karis0222/python-slackbot
다운로드 하셔도 좋고 ,
git clone https://github.com/karis0222/python-slackbot.git
git clone 하셔도 좋습니다 .
코드는 계속 개선할 예정입니다 .
My mistake...슬랙 봇 API 토큰을 Github 에 올리면 슬랙에서 귀신같이 알아내고 해당 토큰을 폐기합니다 . 제가 그런 실수를 저질렀네요…
결론은…
슬랙 , 대단합니다 !
And more...장고 웹 애플리케이션과 연동해보는 것도 좋습니다 .
AWS 의 Lambda, Azure 의 Function 에 코드만 올려두고 서버리스(Serverless) 로 구성해도 되겠죠 ?
자연어 처리가 가능하시면 , 챗봇 (Chatbot) 을 만들어보실 수도 있습니다 .
Q&A
Thanks, Everyone
Recommended