카카오톡 인천대학교 학식봇 만들기(AWS Lambda) - 5
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 코딩에 모든 시간을 썼다.