python 으로 slackbot 개발하기

Post on 07-Jan-2017

563 Views

Category:

Internet

5 Downloads

Preview:

Click to see full reader

TRANSCRIPT

�협업툴�슬랙(SLACK)으로�실전�챗봇�만들기

ABCD, 한성일

오픈소스진흥협회

파이썬으로 Slack bot 개발해보기

0.�챗봇이란?

챗봇이란?

대신 응답해주는 채팅로봇

인공지능

빅데이터

자연어처리

프로그래밍

나이가�어떻게�되시나요?

텍스트�

음성�

묻지�마세요..

응답요청

Chatbot

머신러닝

챗봇�예

심심이 페이스북 챗봇

어디에�쓸까요?

가장 쉽게 떠오르는 곳은 콜 센터입니다.

또 어디가 있을까요?

물건주문, 호텔예약, 비서…

생각보다 구현이 간단할지 모릅니다. !!

1.�챗봇�플로우

챗봇�프레임웍

http://kitt.ai/ https://dev.botframework.com/

챗봇�플랫폼

라인 슬렉

텔레그램 페이스북

…..

일반적인�챗봇�플로우

http://www.lds.com/coepost/enabling-a-smart-user-experience-using-chatbots/

WEBHOOK

http://blog.restcase.com/webhooks-role-in-the-api-world/

우리의 서버

우리 서버로 클라이언트의 요청을 전달한다.

일반적인 웹개발과 유사

Slack 의 Webhook에 우리의 서버를 등록한다.

등록된 서버로 유입되는 정보(대화)를 분석한다.

결과를 연결된 클라이언트에게 전달한다.

2.�파이썬으로�슬렉챗봇�만들기

선작업

1. 파이썬 설치

https://realpython.com/blog/python/getting-started-with-the-slack-api-using-python-and-flask/

참고

2. 슬랙 커뮤니티 생성

선작업

heroku 가입이 되어있어야 함

https://heroku.com/

https://devcenter.heroku.com/articles/getting-started-with-nodejs#set-up

heroku CLI 가 설치되어있어야 함

파이썬 웹서버인 Flask 와 Slack client 를 설치

서버호스팅은 PaaS 서버인 Heroku를 사용

프로젝트�설정�-�VIRTUAL�ENV

$ mkdir slack-python-chatbot

$ cd slack-python-chatbot

$ virtualenv venv

$ source venv/bin/activate

서버설정

(venv) $ pip install slackclient

(venv) $ pip install flask

(venv) $ pip install gunicorn

(venv) $ pip freeze > requirements.txt

test.py�1�(로컬�서버�작동�확인)

#�-*-�coding:�utf-8�-*-�

import�os�

from�flask�import�Flask,�request,�Response�

app�=�Flask(__name__)�

@app.route('/',�methods=['GET'])�

def�test():�

����return�Response('It�works!')�

if�__name__�==�"__main__":�

����app.run(debug=True)

test.py

test.py�2�(로컬�서버�작동�확인)

(venv)$�python�chatbot.py

Procfile 파일을 생성 해주세요

heroku 에게 앱을 알려줌

chatbot은 파이썬 파일 네임

web: gunicorn chatbot:app

Procfile�생성

chatbot.py�1�(챗봇에�사용될�파일)

#�-*-�coding:�utf-8�-*-��import�os�from�flask�import�Flask,�request,�Response�from�slackclient�import�SlackClient�

app�=�Flask(__name__)�

SLACK_WEBHOOK_SECRET�=�os.environ.get('SLACK_WEBHOOK_SECRET')�SLACK_TOKEN�=�os.environ.get('SLACK_TOKEN',�None)�slack_client�=�SlackClient(SLACK_TOKEN)�

def�send_message(channel_id,�message):���slack_client.api_call(�������"chat.postMessage",�������channel=channel_id,�

������text=message,�������username='abcdBot',�������icon_emoji=':monkey_face:'���)

chatbot.py

chatbot.py�2

@app.route('/webhook',�methods=['POST'])�

def�inbound():�

��username�=�request.form.get('user_name')�

��if�request.form.get('token')�==�SLACK_WEBHOOK_SECRET�and�username�!=�'slackbot':�

����channel_name�=�request.form.get('channel_name')�

����channel_id�=�request.form.get('channel_id')�

����username�=�request.form.get('user_name')�

����text�=�request.form.get('text')�

����inbound_message�=�username�+�"�in�"�+�channel_name�+�"�says:�"�+�text�

����send_message(channel_id,�unicode("따라쟁이�놀이�",�'utf-8')�+�"�"�+�text)�

��return�Response(),�200�

@app.route('/',�methods=['GET'])�

def�test():�

����return�Response('It�works!')�

if�__name__�==�"__main__":�

����app.run(debug=True)

chatbot.py

Heroku 프로젝트 생성

HEROKU�프로젝트�생성

$ heroku login

(venv) $ git init

(venv) $ heroku create

(venv) $ git add .

(venv) $ git commit -m 'init'

(venv) $ git push heroku master

HEROKU�저장소�생성�및�반영

수정 할때마다 배포

.gitignore

.gitignore 파일을 생성해 주세요.

venv/

로컬 저장소 생성

venv 폴더를 git 에서 무시하라

라는 의미

heroku project 가 생성됩니다.

인증 토큰과 Webhook 토큰을 생성https://dashboard.heroku.com/

SLACK�토큰생성

https://api.slack.com/web

SLACK�토큰생성

https://api.slack.com/docs/oauth-test-tokens

WEBHOOK�설정

https://api.slack.com/outgoing-webhooks

WEBHOOK

https://abcds.slack.com/apps/new/A0F7VRG6Q-outgoing-webhooks

INTEGRATION�SETTINGS

https://abcds.slack.com/services/B37GEBQBZ?added=1

heroku 챗봇 프로젝트

URL+ /webhook

사용될 채널

웹훅 토큰

HEROKU�환경�변수로�토큰�저장

SLACK_TOKEN

SLACK_WEBHOOK_SECRET

구동화면

3.�조금�더해보기

날씨봇

https://darksky.net/dev/

FORECAST�KEY

FORECAST�KEY

Heroku 의 settings 에 FORCAST_TOKEN 추가

(venv) $ pip install python-forecastio

(venv) $ pip freeze > requirements.txt

FORECAST�모듈�설치

날씨�봇�소스�#1

#�-*-�coding:�utf-8�-*-�import�os�import�forecastio�from�flask�import�Flask,�request,�Response�from�slackclient�import�SlackClient�

app�=�Flask(__name__)�

SLACK_WEBHOOK_SECRET�=�os.environ.get('SLACK_WEBHOOK_SECRET')�SLACK_TOKEN�=�os.environ.get('SLACK_TOKEN',�None)�FORECAST_TOKEN�=�os.environ.get('FORECAST_TOKEN',�None)�slack_client�=�SlackClient(SLACK_TOKEN)�

def�send_message(channel_id,�message):���slack_client.api_call(�������"chat.postMessage",�������channel=channel_id,�������text=message,�������username='abcdBot',�������icon_emoji=':monkey_face:'���)

날씨�봇�소스�#2

@app.route('/webhook',�methods=['POST'])�def�inbound():���username�=�request.form.get('user_name')���if�request.form.get('token')�==�SLACK_WEBHOOK_SECRET�and�username�!=�'slackbot':�����channel_name�=�request.form.get('channel_name')�����channel_id�=�request.form.get('channel_id')�����username�=�request.form.get('user_name')�����text�=�request.form.get('text')�

����if�text�==�unicode("날씨",�'utf-8'):�������message�=�forecast()�����else:�������message�=�username�+�"�in�"�+�channel_name�+�"�says:�"�+�text�

����send_message(channel_id,�message)���return�Response(),�200

날씨�봇�소스�#3

def�forecast():���lat�=�37.5124413���lng�=�126.9540519�

��forecast�=�forecastio.load_forecast(FORECAST_TOKEN,�lat,�lng)���byHour�=�forecast.hourly()���return�byHour.summary�

@app.route('/',�methods=['GET'])�def�test():�����return�Response('It�works!')�

if�__name__�==�"__main__":�����app.run(debug=True)

$ git add .

$ git commit -m 'init'

$ git push heroku master

수정사항을 heroku 에 반영

날씨앱�테스트

다양한 확장이 가능합니다.

인공지능, 자연어처리, 음성인식…

Facebook 챗봇과 노드를 이용한 예제

http://www.slideshare.net/ssusercf5d12/ss-69518853

더해보기

https://github.com/snowkiwi/slack-python-bot-tutorial

소스는 이곳을 참고하세요.

Q & A

수고하셨습니다. :)ABCD http://abcds.kr https://www.facebook.com/groups/562787713823026/

한성일 https://www.facebook.com/jamie.han.16 iheart79@gmail.com

top related