➕ 길찾기 API
➕ 외박 신청
➕ 식단표
➕ 식사 시간
➕ 건의사항 관리
➕ 학교별 장학관 위치 추천(🎇)
서울권 대학교 목록 이름을 입력하면 각 대학교 정문부터 동작나래관/ 도봉나래관 길찾기 결과를 제공하고, 어떤 장학관이 더 가까운 거리에 있는지 추천해주는 기능
테스트 블록에서 발화패턴을 만드는 과정이 필요. 사용자가 조금씩 다르게 말하더라도 각각의 '의도'에 해당하는 블록을 선택해 보여주어야함. 사용자 의도를 이해하기 위해선 엔티티 정보를 정확하게 추출해야함.
EX) 사용자가 '이화', '이화여대', '이대', '이ㅎ여대' 등 다르게 입력하더라도, 이화여자대학교 라는 의도를 인식하여 동작나래관과 도봉나래관 중에 더 가까운 길찾기를 선별해내기.
➕ 종합게시판
➕ 동작구 상도동 실시간 날씨 정보(🎇)
2) 개발환경
언어: nodejs(https://nodejs.org/en/)
웹 프레임워크: expressjs(http://expressjs.com/)
실행 환경: ubuntu 16.04
스킬 서버에서는 두 개의 엔드포인트 제공
/api/sayHello
‘안녕’ 이라는 텍스트를 보여주는 간단한 텍스트형 응답을 돌려줍니다.
/api/showHello
라이언이 손을 흔드는 이미지를 보여주는 간단한 이미지형 응답을 돌려줍니다.
링크 참조: https://i.kakao.com/docs/skill-build#%EC%8A%A4%ED%82%AC-%EC%84%9C%EB%B2%84-%EC%84%B8%ED%8C%85
➕ 동작구 상도동 인근 버스정류장 및 지하철 시간 확인(🎇)
➕ 추가기능
class KakaoTemplate:
def __init__(self):
# 템플릿 버전
self.version = "2.0"
# 단순 텍스트 출력 요소
def simpleTextComponent(self, text):
return {
"simpleText": {"text": text}
}
# 단순 이미지 출력 요소
def simpleImageComponent(self, imageUrl, altText):
return {
"simpleImage": {"imageUrl": imageUrl, "altText": altText}
}
# 사용자에게 응답 스킬 전송
def send_response(self, bot_resp):
responseBody = {
"version": self.version,
"template": {
"outputs": []
}
}
# 이미지 답변이 텍스트 답변보다 먼저 출력 됨
# 이미지 답변이 있는 경우
if bot_resp['AnswerImageUrl'] is not None:
responseBody['template']['outputs'].append(self.simpleImageComponent(bot_resp['AnswerImageUrl'], ''))
# 텍스트 답변이 있는 경우
if bot_resp['Answer'] is not None:
responseBody['template']['outputs'].append(self.simpleTextComponent(bot_resp['Answer']))
return responseBody
from flask import Flask, request, jsonify, abort
import socket
import json
# 챗봇 엔진 서버 접속 정보
host = "127.0.0.1" # 챗봇 엔진 서버 IP 주소
port = 5050 # 챗봇 엔진 서버 통신 포트
# Flask 어플리케이션
app = Flask(__name__)
# 챗봇 엔진 서버와 통신
def get_answer_from_engine(bottype, query):
# 챗봇 엔진 서버 연결
mySocket = socket.socket()
mySocket.connect((host, port))
# 챗봇 엔진 질의 요청
json_data = {
'Query': query,
'BotType': bottype
}
message = json.dumps(json_data)
mySocket.send(message.encode())
# 챗봇 엔진 답변 출력
data = mySocket.recv(2048).decode()
ret_data = json.loads(data)
# 챗봇 엔진 서버 연결 소켓 닫기
mySocket.close()
return ret_data
@app.route('/', methods=['GET'])
def index():
return 'hello', 200
# 챗봇 엔진 query 전송 API
@app.route('/query/<bot_type>', methods=['POST'])
def query(bot_type):
body = request.get_json()
try:
if bot_type == 'TEST':
# 챗봇 API 테스트
ret = get_answer_from_engine(bottype=bot_type, query=body['query'])
return jsonify(ret)
elif bot_type == "KAKAO":
# 카카오톡 스킬 처리
body = request.get_json()
utterance = body['userRequest']['utterance']
ret = get_answer_from_engine(bottype=bot_type, query=utterance)
from KakaoTemplate import KakaoTemplate
skillTemplate = KakaoTemplate()
return skillTemplate.send_response(ret)
elif bot_type == "NAVER":
# 네이버톡톡 이벤트 처리
pass
else:
# 정의되지 않은 bot type인 경우 404 오류
abort(404)
except Exception as ex:
# 오류 발생시 500 오류
abort(500)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)