ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6월의 토이프로젝트: 파이썬과 카카오톡 i 오픈빌더를 이용한 아맞다우산 알리미(챗봇)
    Project 2019. 7. 9. 15:33

    카카오톡 챗봇은 API형은 현재 서비스를 종료하고 오픈빌더를 이용한 챗봇 제작만 지원하고 있다

    카카오톡 오픈빌더(https://i.kakao.com/login)를 들어가서 플러스친구 챗봇 만들기 버튼을 누르고 심사를 받으면 된다

    (약 이틀~일주일정도?걸림)

    심사를 받고나면 다음과 같은 페이지를 볼 수 있다

    노란색 + 버튼을 클릭하고 +새로운 시나리오 - +블록추가를 클릭 후 사용자의 예상 발화 패턴을 입력

    ex. 분평동 강수확률 알려줘 / 용암동 비 와? / 공릉동 날씨 등

     

    이때 입력된 발화패턴에서 단어를 더블클릭하면 엔티티(파라미터 속성)을 정할 수 있고, 파라미터로 지정할 수 있다

    나는 발화에서 지역정보만을 추출할거라서 분평동을 sys.location 엔티티로 지정해줬따

     

    위의 웰컴블록과 폴백블록에서는 봇과 채팅을 시작했을 때 & 사용자의 발화패턴이 인지되지 않았을 때(되묻기질문) 응답을 지정할 수 있다

    파라미터로 넘어간 값에대한 응답 api가 아직 연결돼있지 않기때문에 아직은 대답을 하지 않는다

    챗봇 서버를 구동할 웹서버로 구름ide를 선택했다 (링크)

    구름ide도 오픈빌더와 마찬가지로 서비스 승인에 시간이 걸리는데, 길어도 하루정도만 기다리면 승인이 난다

    여기서 새 컨테이너 생성을 누르고

    Flask를 선택하고, 파일 - 파일가져오기/업로드에서

    (github repository가 존재할 경우 download zip으로 다운받아서)

    파일을 업로드해준다

    없을경우 그냥 새 파일을 만들어서 python 코드를 작성해줌

     

    그리고 중요한것은 python, 크롤링을 위해 beautifulsoup를, 웹 서버를 위해 flask를 꼭 설치해줘야한다

    아래의 터미널에서

     

    python -m pip install --upgrade pip

    pip install beautifulsoup4

    pip install flask

     

    를 입력해준다

    내 python 파일 코드는 아래와 같다

    from flask import Flask, request, jsonify
    from urllib.request import urlopen, Request
    from bs4 import BeautifulSoup
    import urllib
    
    ERROR_MESSAGE = '네트워크 접속에 문제가 발생하였습니다. 잠시 후 다시 시도해주세요.'
    
    
    app = Flask(__name__)
    
    
    @app.route('/weather', methods=['POST'])
    def weather():
    
        req = request.get_json()
    
        location = req["action"]["detailParams"]["sys_location"]["value"]
    
        enc_loc = urllib.parse.quote(location + '+ 날씨')
        el = str(enc_loc)
        url = 'https://search.naver.com/search.naver'
        url = url + '?sm=top_hty&fbm=1&ie=utf8&query='
        url = url + el
    
        req = Request(url)
        page = urlopen(req)
        html = page.read()
        soup = BeautifulSoup(html, 'html.parser')
        r1 = soup.find('li', class_='on now merge1')
        r2 = r1.find('dd', class_='weather_item _dotWrapper')
        r3 = r2.find('span').text
        # .find('dd', class_='weather_item _dotWrapper').find('span').text
    
        rain_pct = int(r3)
    
        if len(location) <= 0:
            answer = ERROR_MESSAGE
        elif rain_pct < 30:
            answer = location + "의 강수 확률은 " + r3 + "%입니다 맑은 하루 되세요^_^"
        else:
            answer = location + "의 강수 확률은 " + r3 + "%입니다 우산 챙겨가세요!!"
    
        res = {
            "version": "2.0",
            "template": {
                "outputs": [
                    {
                        "simpleText": {
                            "text": answer
                        }
                    }
                ]
            }
        }
    
        return jsonify(res)
    
    
    # 메인 함수
    if __name__ == '__main__':
    
        app.run(host='0.0.0.0', port=5000, threaded=True)
    

    프로젝트 - 실행 URL과 포트를 클릭해준 뒤 Port번호에는 5000을 입력. 그리고 오른쪽에 있는 URL을 복사해준다

    다시 오픈빌더로 돌아와서, 스킬 - 생성을 눌러준 뒤 정보를 채워준다

    스킬 이름과 설명은 대충 써도 되고, URL에 방금 복사해준 주소 + @app.route(/____) 에 써준 글자를 입력해줌

    밑의 스킬 테스트에서 파라미터값을 입력해주고 JSON파일을 확인하면

    python 파일로 전달할 파라미터명을 확인할 수 있다

     

    왼 - 시나리오에서 봇 응답 / 오 - 블록에서 시나리오 연결상태

    스킬 생성을 완료하고 블록으로 돌아와서 응답 - 스킬 데이터를 클릭해줘서

    만든 스킬과 시나리오를 연결해준다

    아래는 봇테스트를 해준 결과

     

    테스트 화면

    제일 간단한 기능을 수행할 수 있도록 최소한의 기능만을 구현했기때문에

    이 글을 보고 챗봇 입문에 도움이 됐으면 좋겠다.

     

    Github 링크( https://github.com/483759/IGotItUmbrella )

     

    참고 자료 : 

    카카오 오픈빌더 도움말 - https://i.kakao.com/docs/getting-started-overview#%EC%98%A4%ED%94%88%EB%B9%8C%EB%8D%94-%EC%86%8C%EA%B0%9C

    오픈빌더로 피자챗봇 만들기 - http://aidev.co.kr/chatbotdev/6686

     

     

Designed by Tistory.