카카오톡 학식봇 만들기(DynamoDB, 파라미터 검증 API) - 12
menu_save를 완성했다.
지난번부터 계속해서 고민했던것은,
오늘 국밥 먹었어, 오늘 라면 먹었어, 오늘 중식 먹었어 와 같이 여러 종류의 메뉴들중 모호하게 사용자가 발화했을 때 봇이 대처하지 못하는 상황이다.
이 상황은 카카오 오픈빌더의 파라미터 검증 API를 사용해서 해결했다.
카카오 i 오픈빌더 도움말에는 이 파라미터 검증 API에대해서 간략하게 설명이 되어있는데,
오픈빌더 링크
위의 사진이, 검증 API로 넘어오는 request의 형태이다.
위 도움말을 보고, request에서 value["resolved"]로 넘어오는 파라미터를 감지한 다음 검증 API에서 처리해줘야겠다고 생각하고, 구현을 시작했다.
검증 API는 lambda 함수 foodname_validation를 추가하는것으로 구현했다.
foodname_validation
import json
def lambda_handler(event, context):
# TODO implement
body = json.loads(event["body"])
isinslotfilling = body["isInSlotFilling"]
utterance = body["utterance"]
value = body["value"]
user = body["user"]
r_value = value["resolved"]
print("슬롯필링 : {},\n 발화 : {}\n, 밸류 : {}\n, 유저 : {}".format(isinslotfilling,utterance,value,user))
if r_value == "국밥" or r_value == "라면" or r_value == "중식":
response = {
"status":"FAIL",
"message":"{}의 종류를 정확히 써주세요.".format(r_value)
}
else:
response = {
"status":"SUCCESS"
}
return {
'statusCode': 200,
'body': json.dumps(response)
}
resolved가 잘못된 파라미터일 경우 message를 출력하는것으로 대처하도록 했다.
중간에 있는 print는, 검증 API로 넘어오는 request의 제대로된 형태를 보기위해 임시로 써두었다. 테스트 후 삭제함.
이후에, menu_save lambda 함수를 조금 수정해서, 완성시켰다.
이후, 잘못된 발화가 아닌 정상적인 발화를 입력했을 경우 DB로 데이터가 잘 넘어오는것도 확인했다.
이제 사소한 버그 몇개를 고치고, 머신러닝으로 넘어갈것 같다.