카카오톡 학식봇을 만들기 위해 개인적으로 json에 대한 지식 및 정리를 하기 위한 포스팅입니다.
json 이란?
json은 데이터 저장 및 공유를 위한 개방평 표준 포맷이다.
json의 구성은 "키:값" 으로 이루어져 있다. 예를 들면 { "날씨" : "맑음" } 이라는 json 파일이 있다. 여기서 키(key) 값은 "날씨" 이고, 값(value)는 "맑음" 이다. 즉, 한 개의 키에 대응하는 값이 한개 있다는 뜻이다. json은 여러가지 통신과 값 저장에 쓰이지만, 특히 인터넷에서 자료를 주고 받을 떄 많이 쓰인다. XML을 대체하는 언어로 쓰이기도 한다. 기원은 자바 스크립트에서 파생되었으나, 최근에는 여러가지 프로그래밍 언어에서도 json을 지원하여 여기저기서 많이 쓰인다.
json의 기본 자료형
키(key)는 항상 문자열이다. 여기서 다루는 자료형은 값(value)에 관한 자료형이다.
json의 자료형으로는 숫자, 문자열, 참/거짓 (Boolean), 배열, 객체, null 이 있다.
여기서 숫자, 문자열, 참/거짓은 건너뛰고 배열과 객체를 설명할 것이다.
배열은 대괄호로 나타낸다. 표기는 [] 이며, 각 요소는 배열,객체,기본 자료형이 나올 수 있다. 각 요소가 나타나는 순서에 의미가 있다고 한다.
예) [ 10 , { "v" : 20 } , [ 30 , "마흔" ] ]
객체는 키-값 쌍의 집합이다. 표기는 {} 이며, 쌍들은 쉼표로 구분한다.
예) { "name2" : 50 , "name3" : "값3" , "name1" : true }
실전 제작
카카오 오픈빌더에 있는 예제를 살펴보자. 먼저 SkillPayload를 보자. SkillPayload는 사용자가 서버로 보내는 발화의 json이다. 이전 스킬에는 사용자의 발화 내용만 간단히 보냈지만, 스킬 2.0에서는 사용자의 발화 뿐 아니라 봇 아이디, 이름, 국가 등등 다양한 태그가 붙어 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
{
"userRequest": {
"timezone": "Asia/Seoul",
"params": {},
"block": {
"id": "<블록 id>",
"name": "<블록 이름>"
},
"utterance": "<사용자 발화>",
"lang": "kr",
"user": {
"id": "<사용자 botUserKey>",
"type": "botUserKey",
"properties": {
"plusfriendUserKey": "<카카오톡 채널 사용자 id>"
}
}
},
"contexts": [],
"bot": {
"id": "<봇 id>",
"name": "<봇 이름>"
},
"action": {
"name": "<스킬 이름>",
"clientExtra": null,
"params": {},
"id": "<스킬 id>",
"detailParams": {}
}
}
|
cs |
여기서 주목해야 할 것은 "userRequest" 내에서의 "utterance" 이다. 이것이 사용자의 발화 값이기 때문이다. 이것을 추출한 다음 판별을 해야 한다.
사용자 발화를 파악했으니, 답을 돌려줘야 한다. 내가 만든 카카오톡 봇에 썼던 QuickReplies를 살펴 보자. 카카오톡 i 오픈빌더 도움말을 참고 하길 바란다.
서버에서 사용자에게 값을 되돌려 주는 것은 SkillResponse 이다. 크게 version/template/context/data 4가지 부분으로 구성된다. 내가 중요하다고 생각되는 부분은 "template" 부분이다. 이 부분은 사용자가 실제로 볼 부분이다. 나머지 설명은 오픈빌더 도움말에 잘 나와있다.
나는 사용자에게 선택권을 주고 싶었다. 그래서 QuickReplies 라는 기능을 이용하기로 했다.
이것의 설명을 보면, key 값은 quickReplies 이고, Value는 array인 것을 알 수 있다. 또한 필수 여부는 아닌 것으로 나와있다. 하지만 outputs 는 필수로 되어 있다. 즉 quickReplies를 사용하기 위해서는 outputs 이 꼭 필요하다는 것으로 결론이 나온다. outputs 의 구성요소를 보자.
여러 가지 설명이 있으나, 나는 간단히 텍스트만 출력하기를 원하므로 simpleText를 이용할 것이다. 그 다음으로 quickReplies의 구성 요소를 보자.
여러 가지 구셩 요소들이 있다. 내가 필요한 것은 label, action, messageText 이다. 블록연결까지는 아직 필요 없고 사용자에게 노출될 바로가기 응답, 이것의 기능, 사용자 측으로 노출될 발화가 필수적으로 필요하다. 이 것을 기반으로 json 리턴값을 만들어 보았다. 완성된 코드는 아래 링크에 달아 놓았다.
학식봇 만들기 시리즈
https://tre2man.tistory.com/157
https://tre2man.tistory.com/158
https://tre2man.tistory.com/159
'메이킹 > 메이킹 준비' 카테고리의 다른 글
아두이노를 위한 I2C 통신 알아보기 (0) | 2020.08.01 |
---|---|
아두이노 프로 특징 및 사용법 (0) | 2020.04.20 |
아두이노 OLED 사용기 (0) | 2019.12.27 |
아두이노 외부 라이브러리 추가하는 법 (0) | 2019.12.26 |
아두이노를 이용해 조도센서 (CDS) 로 컴퓨터 FAN 제어하기 (0) | 2019.12.25 |