ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 카카오톡 인천대학교 학식봇 만들기(AWS Lambda) - 5
    App 2021. 7. 5. 20:02

    Lambda 코딩에 애를 많이 먹었던 날이다.

    챗봇에서 넘어오는 request

    위의 사진과 같이 챗봇 스킬 테스팅으로 Lambda로 request를 보내고, 어떻게 넘어오는지 먼저 조사를 했다.

     

    Cloudwatch로 본 Lambda response들

    몇 시간 만에 response를 84번이나 찍어내며.. 수많은 오류들과 부딫혔다.

    넘어오는 request들에서 내용을 뽑아내는 부분에서 많은 오류들이 발생했다.

    기본적으로 챗봇에서 넘어오는 request들의 내용은 json 형식으로 인코딩된 상태로 넘어오기 때문에, 적절하게 json decoder(json.load)를 사용해서 잘 뽑아내줘야 했고, 한글은 UNICODE 형식으로 디코드되는 바람에 엄청난 오류를 뿜어냈다. json 기본 형식인 UTF-8 형식으로 넘겨줘야 오류가 나지 않는다는것을 몇 시간이 지난후에 알아냈다.

     

     

    json과 dictionary 형식의 출력 차이

    dictionary 형태로 넘어오는 데이터들은 딕셔너리이름['키이름']으로 접근이 가능하지만, json 형식으로 넘어오는 데이터들은 json.load(json명['키이름'])과 같은 형태로 뽑아내야한다. json 형식의 데이터를 print로 뽑으니 큰 따옴표 안에 키 이름과 데이터들이 들어있었고, 디코드된 후 dictionary 형태로 저장된 데이터는 작은 따옴표안에 데이터가 들어있었다.

     

    Cloudwatch로 본 Lambda 로그

    위의 사진과 같이 데이터는 성공적으로 넘어왔지만, 카카오톡 빌더 내 스킬 테스팅 화면에서는 계속해서 오류가 있다고 오류 메세지가 출력되길래,, Cloudwatch로 로그를 확인해보았더니, 위와 같은 오류가 계속해서 뿜어져나오고 있었다.

     

    import json
    def lambda_handler(event, context):
        # 메시지 내용은 request의 ['body']에 들어 있음
        request_body = json.loads(event['body'], encoding='utf-8')
        action = request_body['action']
        date_obj = action['params']['date']
        date = json.loads(date_obj, encoding='utf-8') 
        
        
        
    
        result = {
            "version": "2.0",
            "template":{
                "outputs": [
                        {
                            "simpleText":{
                                # "text": "json 날짜는 {}이고,\n dic 날짜는 {} 입니다.".format(date_obj,date)
                                "text": "dic 날짜는 {}입니다.".format(date)
                            }
                        }
                    ]
            }
        }
    
        return {
            'statusCode':200,
            'body': json.dumps(result),
            'headers': {
                'Access-Control-Allow-Origin': '*',
            }
        }

    기본적인 코드이지만, date = json.loads(date_obj, encoding='utf-8' 부분에서 계속해서 json decode 오류가 발생했다.

     

    출력은 되는데,, 왜 발생하는 오류인지는 구글링해본결과 해결방법이 매우.. 매우 다양했다. 그래서 아직 해결하지 못했다.

     

    오늘은 Lambda handler 코딩에 모든 시간을 썼다.

     

Designed by Tistory.