GithubHelp home page GithubHelp logo

sambalim / kakao-chatbot Goto Github PK

View Code? Open in Web Editor NEW
2.0 2.0 2.0 8.4 MB

'오늘 점심뭐먹을까?'의 소스코드 입니다.

Python 78.45% C 4.82% C++ 2.18% DTrace 0.01% JavaScript 0.07% CSS 0.07% Batchfile 0.01% PowerShell 0.09% Tcl 14.30%

kakao-chatbot's Introduction

카카오톡 플러스 친구 챗봇

카카오톡 플러스 친구 챗봇을 만드는 방법을 github를 통해 공개합니다. 카카오톡 플러스 친구에서 ‘오늘 점심뭐먹을까’를 검색하시면 챗봇을 사용해 볼 수 있습니다. ‘오늘 점심뭐먹을까’는 점심메뉴 추천과 날씨정보 제공을 할 수 있습니다.

01. 개요

어떤 챗봇을 무엇으로 만들 것인지 알아봅니다.

  • 어떤 챗봇을 만들 것인가?

    • 점심메뉴 추천
    • 날씨정보 제공
  • 무엇으로 만들 것인가?

    • 메신져 : 카카오톡 플러스 친구
    • 프레임워크 : Flask
    • 언어 : Python
    • 서버 : Heroku
    • DB : FireStore

02. 설계

업무 프로세스와 스크립트로 나누어 간단한 설계를 해봅니다.

  • 업무 프로세스
    • 안내

User : 1시작 → 2도움말 선택

Bot : 3도움말 목록 중 선택한 항목 안내(단어, 스크립트)

  • 메뉴 추천

User : 1점심 메뉴에 대한 의문 -> 3긍정/부정

Bot : 2점심메뉴 추천 -> 4확인/재추천

  • 날씨 정보

User : 1날씨에 대한 의문

Bot : 2날씨정보 제공

  • 스크립트
    • 일상 대화

      User: 안녕^^

      Bot: 안녕하세요! 오늘 기분은 어떠신가요?

      User: 나빠 ㅠ_ㅠ

      Bot: 천천히 호흡을 가다듬어봐요~ 기분이 한결 좋아질거에요!

    • 점심 대화

      User: 뭐먹을까?

      Bot: 오늘 점심은 돈까스 어때요?

      User: 싫어

      Bot: 아니면 국밥 어때요?

      User:ㅇㅇ

      Bot: 가시죠!!!

    • 날씨 대화

      User: 오늘 제주 날씨 어때?

      Bot: 오늘 날씨는 맑음 이고, 온도는 21℃ 네요.


03. 개발환경 설정

챗봇을 만들기 앞서서 Flask, FireStore, Heroku를 설치하여 개발환경을 설정합니다. Git / Anaconda 4.5.2 / Python 3.6.4 를 사용하였습니다. 각각 참조한 사이트는 99. 참조링크에 정리해두었습니다.

  • Flask

    • Anaconda Prompt에서 아래의 코드를 입력하여 Flask를 설치합니다.

      $ pip install Flask

    • 설치 완료 후, 가장 최근의 Flask Code를 사용하고 싶다면 아래의 코드를 입력합니다.

      $ pip install -U https://github.com/pallets/flask/archive/master.tar.gz

    • 원하는 경로에 폴더를 생성합니다.

      $ mkdir KakaoBot

    • 해당 폴더 내에 app.py 파일을 생성하고 다음과 같은 코드를 입력합니다.

      from flask import Flask
      app = Flask(__name__)
      
      @app.route('/')
      def hello_world():
          return 'Hello World!'
      
      if __name__ == '__main__':
          app.run()
    
    • Anaconda Prompt 에서 Flask가 실행되는지 확인합니다. python app.py
  • FireStore

    • 아래의 주소를 입력하여 Firebase 콘솔을 열고 새 프로젝트를 만들어줍니다.

      https://console.firebase.google.com/?hl=ko

    • Anaconda Prompt 에서 firebase를 설치합니다.

      pip install --upgrade firebase-admin

    • 앞서 만들었던 app.py에 아래와 같은 코드를 추가합니다.

      import firebase_admin
      from firebase_admin import credentials
      from firebase_admin import firestore
      
      # Use a service account
      cred = credentials.Certificate('path/to/serviceAccount.json')
      firebase_admin.initialize_app(cred)
      
      db = firestore.client()
    

**path/to/serviceAccount.json**을 얻기 위해서는 Cloud Platform 콘솔에서 IAM 및 관리자 > 서비스 계정으로 이동해야 합니다. (99. 참조링크 / Firebase 시작 참고)

  • Heroku

    • AnacondaPrompt에서 필수 패키지를 다운받습니다.

      $ pip install flask gunicorn jinja2

    • 앞서 app.py를 생성했던 폴더내에 Procfile 을 생성 합니다.

      $ new-item Procfile

    • Procfile내에 아래의 코드를 삽입합니다.

      web: gunicorn app:app

    • requirements.txt 를 생성하고 패키지들을 옮겨줍니다.

      $ pip freeze requirements
      $ pip freeze > requirements.txt
    
    • git을 이용해 heroku에 deploy 합니다.
      $ git init
      $ git add *
      $ git commit -m "first_commit"
      $ heroku login
      $ heroku create
      $ git push heroku master 
    
  • 플러스친구 관리자

    • 플러스친구 관리자 센터에 로그인을 합니다.
    • 플러스 친구를 생성합니다.
    • 스마트 채팅 → API 형 선택
    • 앱 URL에 heroku에 배포한 URL을 등록합니다.

04. Data 가져오기 & API

날씨 정보 연동은 네이버 날씨를 파싱하여 처리하였습니다. 언어 분석은 엑소브레인에서 제공하는 Open API 서비스를 사용하였습니다.

  • 날씨 정보 연동

    • 지역코드(regionCode)는 직접 검색을 통해 알아냈습니다. (app.py내에 region_dict라는 이름의 딕셔너리로 정리되어있습니다.)

    • 필수 패키지 설치 (Anaconda Prompt)

      $ pip install re requests

    • 날씨, 온도 가져오기 app.pyget_weather 함수를 참고합니다.

  • 언어 분석

    • 엑소브레인 사이트에서 Open API 사용신청을 하여 API 키를 발급받습니다. (1일~3일 정도 소요됩니다.)

    • 기본설정은 99. 참조링크의 언어분석 개발가이드를 참고합니다.

    • app.pyword_extract 함수를 참고합니다.


05. 구현

  • Flask 플러스 친구 API 사용
    • Home Keyboard API 기본 예제
    @app.route('/keyboard')
    def Keyboard():
    
            dataSend = {
                    "type" : "buttons",
                    "buttons" : ["선택 1", "선택 2", "선택 3"]
            }        
            return jsonify(dataSend)
  • Message 수신 및 자동응답 API 기본 예제
    @app.route('/message')
    def Mesaage():
            if content == "선택 1":
                    dataSend = {
                            "message" : {
                                    "text" : "안녕하세요"
                            }
                    }     
            return jsonify(dataSend)
  • 언어분석 알고리즘 설명

ex. 안녕

  1. 문장을 받아 언어분석 API로 형태소 분석을 하고 List에 append 해준다. ex. 안녕하세요? → ['안녕', '하', '세요', '?']

  2. 리스트와 스트링을 비교해 일치하는지 확인하는 함수를 만든다. word_there ex. word_there(안녕하세요?, 안녕) → 1


99. 참조링크

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.