메이킹/메이킹 준비

카카오톡 학식봇 만들기-json 파일이란?

트리맨스 2020. 2. 25. 02:05
반응형

 

 

카카오톡 학식봇을 만들기 위해 개인적으로 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

 

카카오톡 학식봇 만들기-1

카카오톡 채널 API가 2019년 12월 31부로 많은 것이 변화했습니다. 간단히 말하면, 오픈빌더 i 를 쓰지 않던 예전 API 형식의 카카오톡 봇은 사용을 할 수 없다는 얘기가 되어 버렸습니다. 채널 관리자 본인이 직..

tre2man.tistory.com

https://tre2man.tistory.com/158

 

카카오톡 학식봇 만들기-2

카카오 오픈빌더 사용하기 카카오톡 봇을 만들기 위해 필요한 것만 간단히 먼저 봇 제네릭 메뉴를 설정해 봅시다. 봇 제네릭 메뉴는 채팅창 하단에 고정되어 있는 버튼입니다. 이것을 활성화 시키고, 식당을 선택..

tre2man.tistory.com

https://tre2man.tistory.com/159

 

카카오톡 학식봇 만들기-json 파일이란?

카카오톡 학식봇을 만들기 위해 개인적으로 json에 대한 지식 및 정리를 하기 위한 포스팅입니다. json 이란? json은 데이터 저장 및 공유를 위한 개방평 표준 포맷이다. json의 구성은 "키:값" 으로 이루어져 있..

tre2man.tistory.com

 

반응형