slackbot with python
TRANSCRIPT
![Page 1: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/1.jpg)
Slack Bot With Python
김 중 현 (Kim Joong Hyeon)
![Page 2: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/2.jpg)
Table of contents- Introduce Go
- Slack Bot Example : Echobot Go
- Slack Bot : More Functions Go
![Page 3: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/3.jpg)
Introduce Myself평범한 자바 웹 개발자로 1 년 조금 넘게 일했습니다 .
우연히 파이썬의 매력을 알게 되어 공부하고 있습니다 .
아직 파이썬을 접한 지는 얼마 되지 않았습니다 .
E-mail : [email protected]
Github : https://github.com/karis0222
![Page 4: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/4.jpg)
Introduce 몇 가지 필요한 내용들을 간략하게 소개하겠습니다 .
![Page 5: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/6.jpg)
Why Slack?슬랙 (Slack) 은 개발자들이 상당히 많이 사용하는 메신저 플랫폼입니다 .
요즘에는 개발자가 아닌 사용자 ( 기획자 , 디자이너 등 ...) 도 많습니다 .
다양한 Integration 이 지원됩니다 .
API 가 훌륭합니다 .
![Page 7: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/9.jpg)
Slack Bot Example : Echobot
사용자가 보낸 메시지를 그대로 따라하는 에코봇을 만들어 봅시다 .
![Page 10: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/10.jpg)
Flow1. 개발환경 구성 및 슬랙 봇 API 토큰 발급 .
2. https://slack.com/api/rtm.start : RTM 세션을 시작하기 위해 토큰 정보를 보내고 웹소켓 URL 을 응답 받음 .
3. 위에서 응답 받은 웹소켓 URL 을 통해 RTM 세션 시작하여 메시지 수신 .
4. 봇이 자신에게 온 메시지인지 판단 후 응답 메시지 송신 .
![Page 11: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/11.jpg)
Development Environment저의 개발환경은 다음과 같습니다 .
운영체제 : 윈도우 10
파이썬 : 3.4 버전
통합개발환경 : Pycharm Community Edition
가상환경을 구성하고자 virtualenv 를 사용했습니다 .
API 테스트를 위해 구글 크롬의 앱 중 하나인 Postman 도 사용했습니다 .
![Page 12: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/12.jpg)
Using Librariesrequests : 인간친화적인 http 클라이언트 라이브러리 .
websockets : 웹 소켓 라이브러리 .
asyncio : 비동기 IO 및 코루틴 지원 라이브러리 .
json : JSON 포맷 데이터 핸들링 라이브러리 ( 기본 내장 ).
pip install requests websockets asyncio
![Page 13: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/13.jpg)
Slack Bot API Token
![Page 14: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/14.jpg)
Slack Bot API Token
![Page 15: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/15.jpg)
Slack Bot API Token우리에게 필요한 것은 바로 이 API 토큰입니다 .
![Page 16: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/17.jpg)
Slack Bot Echo [email protected](async)…?
yield from(await)…?
run_until_complete…?
시간 관계상 자세한 설명은 생략하겠습니다 .
![Page 18: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/18.jpg)
Slack Bot Echo Example1. 수신 데이터를 JSON 으로 변환
2. 봇 자신에게 온 메시지인지 판단
3. 메시지 내용 추출
4. 응답 메시지 송신
![Page 19: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/19.jpg)
Slack Bot : More
Functions조금 더 많은 기능을 제공하는 슬랙 봇을 만들어 봅시다 .
![Page 20: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/20.jpg)
So, What do you want do?슬랙 봇이 무엇을 해주길 원하세요 ?
I want...이 곳의 날씨를 알려주세요 .
이 곳의 위치를 알려주세요 .
이 문장을 번역해주세요 .
[@ 봇이름 명령어 “파라미터” ] 의 형태로 만들어보고자 합니다 .
![Page 21: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/21.jpg)
상황을 가정해봅시다한참 장고 개발 중이던 개발자 K 모씨는 개발자 동료로부터 강남구청에서 만나자는 메시지를 받았습니다 . 강남구청의 위치를 알고 싶어요 . 마침 슬랙이 켜져있네요 ?
1. 웹 브라우저를 켜고 -> 네이버에 접속해서 -> 네이버 지도 서비스로 들어간 후 -> “ 강남구청”을 검색한다 .
2. 슬랙봇에게 지도 “강남구청”이라고 명령 -> 슬랙봇이 보내준 링크를 클릭한다 .
여러분은 어떤 방법이 더 맘에 드시나요 ?
![Page 22: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/23.jpg)
I want to know the weather of a place공공데이터포털에서 기상청이 제공하는 오픈 API 중 “동네예보조회” API 사용 .
일단 특별시 , 광역시와 도에 대해서만 구현해보겠습니다 .
@ 봇이름 / 날씨 “서울”
분명 API 인증키를 발급 받았으나 하루가 지나야 인증이 제대로 됩니다…
왜 그런건지는 저도 잘 모르겠어요 ...
![Page 24: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/24.jpg)
I want a translation of this sentence구글 번역 서비스 사용 .
일단 영 -> 한 번역만 해보겠습니다 .
@ 봇이름 / 번역 “ hello, world!”
왜 ? Google Translate API 를 사용하지 않죠 ?
Google Translate API 는 무료가 아닙니다…
![Page 25: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/25.jpg)
Show Video잠시 짧은 시연 영상을 보여드리겠습니다 .
https://youtu.be/Ts7eFh8oM1s
![Page 26: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/26.jpg)
How?
Pre Process
Parse Message
Route Commands
Slack API
Run Command Process
![Page 27: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/27.jpg)
Code...https://github.com/karis0222/python-slackbot
다운로드 하셔도 좋고 ,
git clone https://github.com/karis0222/python-slackbot.git
git clone 하셔도 좋습니다 .
코드는 계속 개선할 예정입니다 .
![Page 28: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/28.jpg)
My mistake...슬랙 봇 API 토큰을 Github 에 올리면 슬랙에서 귀신같이 알아내고 해당 토큰을 폐기합니다 . 제가 그런 실수를 저질렀네요…
결론은…
슬랙 , 대단합니다 !
![Page 29: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/29.jpg)
And more...장고 웹 애플리케이션과 연동해보는 것도 좋습니다 .
AWS 의 Lambda, Azure 의 Function 에 코드만 올려두고 서버리스(Serverless) 로 구성해도 되겠죠 ?
자연어 처리가 가능하시면 , 챗봇 (Chatbot) 을 만들어보실 수도 있습니다 .
![Page 30: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/30.jpg)
Q&A
![Page 31: Slackbot with Python](https://reader036.vdocuments.site/reader036/viewer/2022062523/586e138f1a28ab8a588b5e4f/html5/thumbnails/31.jpg)
Thanks, Everyone