AWS EC2 + S3 + RDS
ubuntu:~$ virtualenv server
ubuntu:~$ source ~/server/bin/activate
(server) ubuntu:~$ pip install fastapi uvicorn SQLAlchemy
(server) ubuntu:~$ aws s3 cp s3:https://bucket/kakao.py .
(server) ubuntu:~$ aws s3 cp s3:https://bucket/parser.py .
(server) ubuntu:~$ python parser.py
(server) ubuntu:~$ python kakao.py
INFO: Started server process [id]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on https://0.0.0.0:8000 (Press CTRL+C to quit)
- 오늘/어제 공지 불러오기 (ListCard 최대 한계 5개)
- 어제 공지는 MySQL DB를 통해 불러온다.
- 마지막 공지 1개 불러오기 ("마지막 공지 알려줘")
- 카테고리 선택 (학사,학사일정,비교과,장학, 취업,사무,행사,파란학기제,학술,입학,기타)
- 키워드 공지 검색 ("2021 검색해줘")
- 학사 일정 보기 ("달력", "일정")
- 수원 날씨 보기 ("날씨", "우산")
- 인물 검색 ("인물" 입력 후 번호/학과/이름 원하는대로 검색)
- 도서관 좌석 현황 ("도서관", "좌석", 중앙 도서관 좌석이용 현황 불러옴)
- 학식 보기 ("오늘/내일 장소", "장소=학생,교직원,기숙사")
- [채용 정보] ("채용" 교내 채용 정보 10개를 불러옴)
title, items, text... 길이를 넘기면 제대로 출력이 안될 수도 있다.
simpleText: text(1000)
ListCard: header(15), list_title(35), list_description(16), lists(5)
Carousel: items(10)
class KakaoUser(BaseModel):
id: str
properties: Dict
type: str
class KakaoUserRequest(BaseModel):
block: Dict
lang: Optional[str]
params: Dict
timezone: str
user: KakaoUser
utterance: str
class KakaoAction(BaseModel):
clientExtra: Optional[Dict]
detailParams: Dict
id: str
name: str
params: Dict
class KakaoAPI(BaseModel):
"""Main Kakao JSON"""
action: KakaoAction
bot: Dict
contexts: Optional[List]
intent: Dict
userRequest: KakaoUserRequest
@application.post("/route", response_model=KakaoAPI)
async def message(content: KakaoAPI):
...
"2021 검색"
INFO: server - "POST /search HTTP/1.1" 200 OK
{
"action": {
"clientExtra": {},
"detailParams": {
"sys_text": {
"groupName": "",
"origin": "2021",
"value": "2021"
}
},
"id": "id",
"name": "스킬 이름",
"params": {
"sys_text": "2021"
}
},
"bot": {
"id": "id",
"name": "AjouNotice"
},
"contexts": [],
"intent": {
"extra": {
"reason": {
"code": 1,
"message": "OK"
}
},
"id": "id",
"name": "공지 키워드 검색"
},
"userRequest": {
"block": {
"id": "id",
"name": "공지 키워드 검색"
},
"lang": "kr",
"params": {
"ignoreMe": "true",
"surface": "BuilderBotTest"
},
"timezone": "Asia/Seoul",
"user": {
"id": "id",
"properties": {
"botUserKey": "key",
"bot_user_key": "key"
},
"type": "botUserKey"
},
"utterance": "2021 검색\n"
}
}
POST = /message | 발화 = "어제 공지 알려줘", "오늘 공지 알려줘"...
entity = "when"
POST = /today2
"오늘" 공지에서 더보기를 누르면 10개 정도의 공지를 더 불러옵니다.
(5개 이하일 시 아주대 홈피로 이동됨)
POST = /last | 발화 = "지난 공지 알려줘", "마지막 공지"...
entity =
POST = /ask | 발화 = "카테고리", "분류"...
POST = /search | 발화 = "카테고리", "분류"...
entity = 분류 필요
POST = /schedule | 발화 = "달력", "일정" ...
entity = 분류 필요
TO-DO: Selenium을 통한 자동 db 업데이트
(수원 영통구 날씨를 weather.naver.com에서 불러옴)
POST = /info/weather2 | 발화 = "날씨", "아주대 날씨", "날씨 좋아?" ...
POST = /info/prof | 발화 = "인물"
"인물" 입력 후 키워드 검색
TO-DO: 더 나은 발화문
POST = /info/library | 발화 = "도서관", "좌석"
발화문 입력 시 중앙도서관 좌석 이용 현황을 불러옵니다.
TO-DO: 더 나은 메시지 포맷
POST = /info/meal | 발화 = "오늘 학식", "내일 학생", "내일 교직원", "내일 기숙사" ...
오늘/내일 장소를 입력하면 시간에 맞는 장소의 학식 정보를 불러옵니다.
TO-DO: 더 나은 메시지 포맷