-
카카오톡 인천대학교 학식봇 만들기(AWS Lambda) - 5App 2021. 7. 5. 20:02
Lambda 코딩에 애를 많이 먹었던 날이다.
위의 사진과 같이 챗봇 스킬 테스팅으로 Lambda로 request를 보내고, 어떻게 넘어오는지 먼저 조사를 했다.
몇 시간 만에 response를 84번이나 찍어내며.. 수많은 오류들과 부딫혔다.
넘어오는 request들에서 내용을 뽑아내는 부분에서 많은 오류들이 발생했다.
기본적으로 챗봇에서 넘어오는 request들의 내용은 json 형식으로 인코딩된 상태로 넘어오기 때문에, 적절하게 json decoder(json.load)를 사용해서 잘 뽑아내줘야 했고, 한글은 UNICODE 형식으로 디코드되는 바람에 엄청난 오류를 뿜어냈다. json 기본 형식인 UTF-8 형식으로 넘겨줘야 오류가 나지 않는다는것을 몇 시간이 지난후에 알아냈다.
dictionary 형태로 넘어오는 데이터들은 딕셔너리이름['키이름']으로 접근이 가능하지만, json 형식으로 넘어오는 데이터들은 json.load(json명['키이름'])과 같은 형태로 뽑아내야한다. json 형식의 데이터를 print로 뽑으니 큰 따옴표 안에 키 이름과 데이터들이 들어있었고, 디코드된 후 dictionary 형태로 저장된 데이터는 작은 따옴표안에 데이터가 들어있었다.
위의 사진과 같이 데이터는 성공적으로 넘어왔지만, 카카오톡 빌더 내 스킬 테스팅 화면에서는 계속해서 오류가 있다고 오류 메세지가 출력되길래,, 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 코딩에 모든 시간을 썼다.
'App' 카테고리의 다른 글
카카오톡 인천대학교 학식봇 만들기(AWS Lambda, layer) - 7 (0) 2021.07.09 카카오톡 인천대학교 학식봇 만들기(AWS Lambda) - 6 (0) 2021.07.06 카카오톡 인천대학교 학식봇 만들기(크롤링) - 4 (0) 2021.07.02 카카오톡 인천대학교 학식봇 만들기(크롤링) - 3 (0) 2021.07.01 카카오톡 인천대학교 학식봇 만들기 (크롤링)- 2 (0) 2021.06.29