카카오톡 봇만들기(2)
지난 시간 까지 가상머신 구축과 ssh 구축까지 완료하였다. 이번 시간에는 flask구축을 해보려고 한다.
Flask 설치
- Flask 구축을 하기 위해서는 우선 SSH창을 킨다.
- python 설치을 설치하기 전에 다음과 같은 명령어를 ssh창에서 입력한다.
sudo apt-get install updatesudo apt-get install upgrade- python 설치를 위해 다음과 같은 명령어를 입력한다.
sudo apt-get install python3sudo apt-get install python3-pip- 이제 Flask과 다른 것들을 설치하기 위해서 다음과 같은 명령어를 입력한다.
pip install flaskpip install jsonifypip install bs4sudo apt-get install vimpip install seleniumpip install seleniumpip install requests- 다음과 같은 파일들을 설치하는데 오류가 발생한다면
pipversion을 업그레드 해주거나 혹은pip3로 설치해보기를 바란다.
카카오톡 오픈빌더 사용
- 카카오톡 오픈빌더를 사용하기 전에는 반드시 사전 승인이 필요하다. 사전승인이 안되었다면 좀더 기다려보길 바란다.
- 카카오톡 오픈빌더 승인이 났다면 나의 봇에 들어가 봇을 생성하자

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

- 엔티티를 만들기 전에
카카오톡 오픈빌더의 스킬에 대해서 알아보자
카카오톡 오픈빌더 스킬사용(응답별 JSON 포맷)
- 이 내용은 위의 링크를 참조하여 작성하였습니다.
- 카카오톡 봇을 만들기 위해서는 이 Flask를 사용하기 전에 이 내용을 숙지해야할 필요가 있다.
- 우리가 사용할 JSON 포맷위주로 살펴보도록 하겠다.
userRequest
- 이 타입은 사용자의 정보를 담고 있다. 사용자의 발화와 시간대/언어, 반응한 블록의 정보를 추가적으로 포함하고 있다.
쉽게 말하면
사용자의 채팅이라고 생각할 수 있다.
상세필드
| 필드명 | 타입 | 설명 |
|---|---|---|
| timezone | string | 사용자의 시간대를 반환합니다.한국에서 보낸 요청이라면 “Asia/Seoul”를 갖습니다. |
| block | Block | 사용자의 발화에 반응한 블록의 정보입니다.블록의 id와 name을 포함합니다. |
| utterance | string | 봇 시스템에 전달된 사용자의 발화입니다. |
| lang | string | 사용자의 언어를 반환합니다.한국에서 보낸 요청이라면 “kr”를 갖습니다. |
| user | User | 사용자의 정보입니다. |
상세필드는 이런식으로 이루어져 있다. 하나하나 살펴보자
timezone은 채팅을 입력한 사용자의 시간대를 가지고 있는 변수이다.block은 자세하게 모르겠는데 카카오톡 오픈빌더에서 봇을 구성할 때웰컴 블록이런식으로 여러가지 블록을 구성한다. 이 내용인 것 같다.utterance는 중요하다. 이는사용자가 입력한 채팅을 가지고 있는 변수이다. 이를 많이 사용할 것 이다.lang은 어떤 언어를 사용했는지 반환한다. 한국에서면kr을 가진다.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.pycd 프로젝트이름- 이를 수행하여
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에서host가0.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 |