ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 카카오톡 학식봇 만들기(DynamoDB, 파라미터 검증 API) - 12
    App 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로 데이터가 잘 넘어오는것도 확인했다.

     

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

     

Designed by Tistory.