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