카카오톡 봇만들기(2)

지난 시간 까지 가상머신 구축과 ssh 구축까지 완료하였다. 이번 시간에는 flask구축을 해보려고 한다.

Flask 설치

  • Flask 구축을 하기 위해서는 우선 SSH창을 킨다.
  • python 설치을 설치하기 전에 다음과 같은 명령어를 ssh창에서 입력한다.
  • sudo apt-get install update
  • sudo apt-get install upgrade
  • python 설치를 위해 다음과 같은 명령어를 입력한다.
  • sudo apt-get install python3
  • sudo apt-get install python3-pip
  • 이제 Flask과 다른 것들을 설치하기 위해서 다음과 같은 명령어를 입력한다.
  • pip install flaskpip install jsonifypip install bs4sudo apt-get install vim
  • pip install selenium
  • pip install selenium
  • pip install requests
  • 다음과 같은 파일들을 설치하는데 오류가 발생한다면 pip version을 업그레드 해주거나 혹은 pip3로 설치해보기를 바란다.

카카오톡 오픈빌더 사용

  • 카카오톡 오픈빌더를 사용하기 전에는 반드시 사전 승인이 필요하다. 사전승인이 안되었다면 좀더 기다려보길 바란다.
  • 카카오톡 오픈빌더 승인이 났다면 나의 봇에 들어가 봇을 생성하자

  • 봇을 만들었으면 시나리오를 추가하여 새로운 시나리오를 생성한다.

  • 엔티티를 만들기 전에 카카오톡 오픈빌더의 스킬에 대해서 알아보자

카카오톡 오픈빌더 스킬사용(응답별 JSON 포맷)

카카오톡 오픈빌더 도움말

  • 이 내용은 위의 링크를 참조하여 작성하였습니다.

  • 카카오톡 봇을 만들기 위해서는 이 Flask를 사용하기 전에 이 내용을 숙지해야할 필요가 있다.
  • 우리가 사용할 JSON 포맷위주로 살펴보도록 하겠다.

userRequest

  • 이 타입은 사용자의 정보를 담고 있다. 사용자의 발화와 시간대/언어, 반응한 블록의 정보를 추가적으로 포함하고 있다.

쉽게 말하면 사용자의 채팅이라고 생각할 수 있다.

상세필드

필드명 타입 설명
timezone string 사용자의 시간대를 반환합니다.한국에서 보낸 요청이라면 “Asia/Seoul”를 갖습니다.
block Block 사용자의 발화에 반응한 블록의 정보입니다.블록의 id와 name을 포함합니다.
utterance string 봇 시스템에 전달된 사용자의 발화입니다.
lang string 사용자의 언어를 반환합니다.한국에서 보낸 요청이라면 “kr”를 갖습니다.
user User 사용자의 정보입니다.

상세필드는 이런식으로 이루어져 있다. 하나하나 살펴보자

  1. timezone은 채팅을 입력한 사용자의 시간대를 가지고 있는 변수이다.
  2. block은 자세하게 모르겠는데 카카오톡 오픈빌더에서 봇을 구성할 때 웰컴 블록 이런식으로 여러가지 블록을 구성한다. 이 내용인 것 같다.
  3. utterance는 중요하다. 이는 사용자가 입력한 채팅을 가지고 있는 변수이다. 이를 많이 사용할 것 이다.
  4. lang은 어떤 언어를 사용했는지 반환한다. 한국에서면 kr을 가진다.
  5. user는 입력한 사용자의 정보이다. 입력한 사용자는 고유 id를 가지고 있다.

예시코드

{
 "userRequest": {
    "timezone": "Asia/Seoul",
    "params": {},
    "block": {
      "id": "<블록 id>",
      "name": "<블록 이름>"
    },
    "utterance": "<사용자 발화>",
    "lang": "kr",
    "user": {
      "id": "<사용자 botUserKey>",
      "type": "botUserKey",
      "properties": {
        "plusfriendUserKey": "<카카오톡 채널 사용자 id>"
      }
    }
  },
  "contexts": [],
  "bot": {
    "id": "<봇 id>",
    "name": "<봇 이름>"
  },
  "action": {
    "name": "<스킬 이름>",
    "clientExtra": null,
    "params": {},
    "id": "<스킬 id>",
    "detailParams": {}
  }
}

SkillResponse

  • 스킬응답으로 이는 vesion/template/context/data의 총 4가지로 구성이된다.

쉽게 말하자면 카카오톡 채팅 봇의 응답 의 형식으로 볼 수 있다.

예제 코드(기본형)

{
  "version": "2.0",
  "template": {
    ...
  },
  "context": {
    ...
  },
  "data": {
    ...
  }
}
  • 기본형은 다음과 같다.

SkillTemplate

  • SkillTemplate는 다음과 같이 2가지로 구성된다.
이름 타입 필수여부 제한
outputs Array y 1개 이상 3개 이하
quickReplies Array n 10개 이하

outputs(출력 그룹)

  • 출력 그룹은 여러 종류의 출력 요소를 포함한다. 출력요소들은 다음 표와 같다.
이름 설명 *캐로셀 가능 여부
simpleText 간단 텍스트 X
simpleImage 간단 이미지 X
basicCard 기본 카드 O
commerceCard 커머스 카드 O
listCard 리스트 카드 X
  • 캐로셀이란 여래 개의 출력 요소를 묶어서 제공한다. 사용할 때는 "carousel"이라고 적어서 사용한다.
simpleText
  • 이는 그냥 단순한 텍스트를 넘겨줄 때 사용한다. 기본 형과 출력 예제는 다음과 같다.

{
    "version": "2.0",
    "template": {
        "outputs": [
            {
                "simpleText": {
                    "text": "간단한 텍스트 요소입니다."
                }
            }
        ]
    }
}

나머지 값들은 카카오톡 오픈빌더 도움말을 참고 부탁드립니다.

flask 기본사용

  • 이제 Flask를 설정해보자 flask를 설정하기위해서 다음과 같은 명령어를 기본 ssh창에서 입력하자
  • mkdir 프로젝트이름vim server.py
  • cd 프로젝트이름
  • 이를 수행하여 server.py의 편집에 들어와서 다음과 같은 기본 코드를 작성해 보자.
  • vim을 사용할 때 편집은 i를 누르면 되고 끝내고 저장하고 편집을 나갈 때는 Esc버튼을 누른 이후 :wq를 입력하면 나갈 수 있다.
from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return "Hello, Flask"

if __name__ == 'main__':
    app.run(host='0.0.0.0', port=5000, debug=True)
  • Flask의 기본 형태이다. 이때 주의할 점으로는 app.run이 중요하다.
  • app.run에서 host0.0.0.0으로 되어있지 않으면 외부에서 접속을 할 수없고 local에서 만 사용이 가능하다.
  • 기본포트는 5000번 이지만 port를 5000이라고 적어두었다. 5000번 포트를 사용하기 때문에 Azure에서 반드시 인바운더리 규칙을 5000번으로 재설정 해두도록 하자(모르겠다면?)
  • debug는 오류가 났을 때 오류가 난 이유를 설명해주므로 켜두는 편이다.
  • 설정이 끝났으면 다음과 같은 명령어를 입력하여 파일을 실행해보자.
  • python3 server.py
  • 다음과 같은 주소로 들어가서 실행이 되는지 확인해보자.

http://가상머신 아이피주소:5000

'Python > Flask' 카테고리의 다른 글

[Python/Flask] 카카오톡 봇 만들기(3)  (0) 2021.07.08
[Python/Flask] 카카오톡 봇 만들기 (1)  (0) 2021.06.30

+ Recent posts