App

카카오톡 학식봇 만들기(DynamoDB, 파라미터 검증 API) - 12

kjy0349 2021. 7. 21. 17:01

menu_save를 완성했다.

지난번부터 계속해서 고민했던것은,

오늘 국밥 먹었어, 오늘 라면 먹었어, 오늘 중식 먹었어 와 같이 여러 종류의 메뉴들중 모호하게 사용자가 발화했을 때 봇이 대처하지 못하는 상황이다.

 

이 상황은 카카오 오픈빌더의 파라미터 검증 API를 사용해서 해결했다.

 

카카오 i 오픈빌더 도움말에는 이 파라미터 검증 API에대해서 간략하게 설명이 되어있는데,

 

오픈빌더 링크

https://i.kakao.com/docs/key-concepts-parameters#%EC%98%88%EC%95%BD%EB%90%9C-response-json-%EA%B5%AC%EC%A1%B0

 

 

 

검증 API로 넘어가는 Request의 형태

위의 사진이, 검증 API로 넘어오는 request의 형태이다.

 

검증 API에서 반환해야할 response 형태

위 도움말을 보고, request에서 value["resolved"]로 넘어오는 파라미터를 감지한 다음 검증 API에서 처리해줘야겠다고 생각하고, 구현을 시작했다.

검증 API는 lambda 함수 foodname_validation를 추가하는것으로 구현했다.

필수 파라미터에 검증 API를 추가한 화면

 

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 함수를 조금 수정해서, 완성시켰다.

 

 

보안상 Userid만 지운 사진. DynamoDB에 정상적으로 추가된것을 알 수 있다.

이후, 잘못된 발화가 아닌 정상적인 발화를 입력했을 경우 DB로 데이터가 잘 넘어오는것도 확인했다.

 

이제 사소한 버그 몇개를 고치고, 머신러닝으로 넘어갈것 같다.