스킬 개발 가이드(v1)
개요
스킬은 봇 제작자가 설계한 API를 호출하여 봇의 응답을 동적으로 구성하는 방법입니다. 즉, 봇의 응답을 하는 시점에 API를 호출, 결과를 받아 말풍선의 내용을 채울 수 있습니다. 혹은 하나의 스킬은 하나의 블록에 대해 응답 전체를 표현하는 방법으로도 처리 가능합니다.
설정
스킬 등록
좌측 메뉴의 스킬 항목에서 스킬을 등록합니다.
스킬을 등록 합니다
스킬 설정
블록 설정의 동작에서 등록한 스킬을 설정합니다.
블록에서 스킬과 파라미터를 설정 합니다
이제 스킬을 사용하기 위한 기본적인 설정이 완료 되었습니다.
요청 형식
챗봇 관리자센터에서 서비스를 호출할 때는 아래와 같은 형식으로 스킬을 요청합니다.
POST / HTTP/1.1
Host: your.skill.url
Accept: application/json
Content-Type: application/json;charset=UTF-8
{
"intent": {
"id": "5a56ec0008cc1461d75291f6", /* block의 id */
"name": "스킬테스트" /* block의 이름 */
},
"userRequest": {
"timezone": "Asia/Seoul",
"params": {
"exampleParam": "example"
},
"block": {
"id": "5a56ec0008cc1461d75291f6",
"name": "스킬테스트"
},
"utterance": "스킬", /* 사용자가 입력한 대화 내용 */
"lang": "kr",
"user": {
"id": "620678", /* 유저의 id 값 */
"type": "talk_user_id", /* 유저의 값의 종류 */
"properties": { /* 부가적인 아이디 정보들 */
"appUserId": "708203191",
"appUserStatus": "REGISTERED",
"plusfriend_user_key": "BlGTEYoiNoSh"
}
}
},
"contexts": [],
"bot": {
"id": "5a548e36aea1a43fa851ecd9",
"name": "또봇"
},
"action": {
"name": "스킬원", /* 스킬의 이름 */
"clientExtra": "null", /* button 혹은 바로연결에서 넘겨주는 `extra`의 내용 */
"params": {}, /* 스킬 호출시 함께 넘어가는 action parameter */
"id": "5a56ebaa211ee046633e958d",
"detailParams": {} /* resolve 된 action parameter 내용 */
}
}
Response Format
이 섹션에서는 챗봇 관리자센터의 요청에 대해 여러분의 서비스가 응답할 때의 형식을 설명합니다. 위에서 언급한 것처럼 응답 결과를 이용하는 방법은 다음의 두 가지 방식이 있습니다.
- 스킬 결과를 ‘값’으로 이용한다.
- 스킬 결과를 ‘말풍선 데이터’로 이용한다.
두 가지 모두 JSON 포맷으로 응답을 주어야 합니다. 버전 2.0은 아래 메뉴를 참고해주시기 바랍니다.
값으로 이용
챗봇 관리자센터에서는 출력에서 {{#webhook.<json_path>}}
의 표현을 이용해 스킬 결과를 직접 읽어올 수 있습니다. 예를 들어 스킬의 호출 결과가 다음과 같을 때를 확인해보겠습니다.
{
"name": "G11",
"star": 5,
"stats": {
"att": 24,
"def": 50
}
}
텍스트형 말풍선에 다음과 같이 조합했을 때,
{{#webhook.name}}
은 {{#webhook.star}}
등급이고, 공격력은 {{#webhook.stats.att}}
, 방어력은 {{#webhook.def}}
입니다.
위의 스킬 호출 결과를 이용해 채워주면
G11은 5등급이고, 공격력은 24, 방어력은 50 입니다.
로 응답이 나가게 됩니다.
말풍선 데이터로 이용
카카오톡 채널 @ddb를 친구 추가해 데모
를 입력하고 샘플 응답과 그에 따른 JSON 출력 형식을 살펴볼 수 있습니다. 스킬의 응답을 말풍선 데이터로 이용하기 위해서는 블록 설정의 하단에 위치한 출력을 스킬 데이터로 사용을 활성화 해줘야 합니다.
‘
출력을 스킬데이터로 사용’을 통해 출력 영역을 비활성시킵니다
챗봇 관리자센터는 스킬의 JSON 응답 중 contents
필드를 말풍선을 그릴 데이터로 사용합니다. quickReplies
필드는 바로 연결을 위한 데이터로 사용합니다.
contents
필드
contents
필드 하위에는 Array 형식으로 응답할 말풍선 데이터들이 존재하게 됩니다. 각각의 말풍선 데이터는 Chat Bubble Payload
의 형태를 지니며 내부의 type
에 따라서 items|text|image
내부에 ‘Text, Image, Card.{text|image|commerce}, Commerce’중 하나의 형태를 지녀야 합니다. 자세한 내용은 각각의 Object 설명을 확인해 주세요.
예를 들어 스킬의 응답이 다음과 같을 때,
{
"contents":[
{
"type":"card.text",
"cards":[
{
"description":"DESCRIPTION",
"buttons":[
{
"type":"block",
"label":"블록연결",
"data":{
"blockId":"123456"
}
}
]
}
]
},
{
"type":"text",
"text":"text example"
}
]
}
챗봇 관리자센터는 첫번째 응답으로 type
이 card.text
인 데이터를, 두번째 응답으로 type
이 text
인 데이터를 갖고 응답하게 됩니다. 자세한 내용은 각 항목을 참고해주세요.
현재는 첫번째 응답만 유효합니다.
Chat Bubble Payload
contents
필드 내에 위치하는 오브젝트입니다. type
은 data
에 들어갈 말풍선의 데이터가 어떤 타입인지 알려주는 필드이며 data
에는 실제 데이터가 담기게 됩니다. data
는 text|image|items
의 필드를 갖고 있으며 text
, image
일 경우는 오브젝트, card
, commerce
일 경우 배열의 형태입니다.
Text
배열의 첫번째 오브젝트만 유효하며 두번째 이후 오브젝트는 무시됩니다. 즉, 캐러셀의 형태로 표현 불가능 합니다. 만약 텍스트의 캐러셀을 표현하고 싶다면 아래 Card.text를 참고해주세요.
{
"contents": [
{
"type": "text",
"text": ""
}
]
}
Image
배열의 첫번째 오브젝트만 유효하며 두번째 이후 오브젝트는 무시됩니다. 즉, 캐러셀의 형태로 표현 불가능 합니다. 만약 이미지의 캐러셀을 표현하고 싶다면 아래 Card.image를 참고해주세요.
{
"contents": [
{
"type": "image",
"image": {
"url": ""
}
}
]
}
Card.text
버튼과 조합 가능한 Text 말풍선입니다.
key | 타입 | 필수 여부 | 설명 |
---|---|---|---|
description | string | Y | description 영역에 표시될 텍스트 |
buttons | Button[] | N | button 배열 |
{
"contents":[
{
"type":"card.text",
"cards":[
{
"description":"",
"buttons":[
{
"type":"",
"label":"",
"data":{
}
}
]
}
]
}
]
}
- title의 최대 글자수는 20자 입니다.
- description의 최대 글자수는 단일 카드일 경우 230자, 여러장의 카드(Carousel)일 경우 76자 입니다.
- Button은 최대 3개 배치 가능하며 버튼의 label은 최대 14자 입니다.
Card.image
image와 버튼이 조합 가능한 말풍선 입니다.
{
"contents":[
{
"type":"card.image",
"cards":[
{
"imageUrl":"",
"description":"",
"title":"",
"linkUrl": {
},
"buttons":[
{
"type":"",
"label":"",
"data":{
}
}
]
}
]
}
]
}
- 이미지는 챗봇 관리자센터가 접근 가능한 주소에 위치해야 합니다.
- title의 최대 글자수는 20자 입니다.
- description의 최대 글자수는 단일 카드일 경우 230자, 여러장의 카드(Carousel)일 경우 76자 입니다.
- Button은 최대 3개 배치 가능하며 버튼의 label은 최대 14자 입니다.
Tip.
- 이미지는 가로세로 2:1 비율의 이미지를 사용하길 권장합니다.
- 캐러셀로 표현할 때는 미적인 이유로 모든 카드의 형태를 일치시켜주는걸 권장합니다.
Card.commerce
Card.image형과 같으나 가격 정보를 나타내는 price
필드가 추가되었습니다. 이 필드의 자세한 내용은 Price를 참고해주세요. Commerce에서는 button이 최소 1개 이상 포함되어야 함을 유의 부탁드립니다.
{
"contents":[
{
"type":"card.commerce",
"cards":[
{
"imageUrl": "",
"title": "",
"linkUrl": {
},
"price": {
"regularPrice":0,
"discountPrice":0,
"discountRate":0,
"discountAmount":0,
"isDiscount":false,
"discountType":"amount"
},
"profile": {
"name": "",
"imageUrl": ""
},
"buttons":[
{
"type": "block",
"label": "label",
"message": "message",
"data": {
"blockId": "123"
}
}
]
}
]
}
]
}
Profile
TIP!
이미지 사이즈는 180px X 180px 추천합니다.
Price
{
"regularPrice": 0,
"isDiscount": false,
"discountType": "amount",
"discountPrice": 0,
"discountRate": 0,
"discountAmount": 0
}
Card.list
listItem은 최소한 type
이 title
인 항목과 type
이 item
인 항목 2개를 반드시 포함해야 합니다. 자세한 설명은 ListItem
을 참조해주세요.
ListItem
{
"type": "",
"imageUrl": "",
"title": "",
"description": "",
"linkUrl": {
"type": "OS",
"webUrl": "",
"moUrl": "",
"pcUrl": "",
"pcCustomScheme": "",
"macCustomScheme": "",
"iosUrl": "melonios://",
"iosStoreUrl": "",
"androidUrl": "",
"androidStoreUrl": ""
}
}
Common Object
Link
링크 정보를 담고 있는 오브젝트 입니다. type
에 따라 참조하는 필드가 다르며 사용하지 않는 필드는 빈 스트링으로 넣어 보냅니다.
{
"type": "",
"webUrl": "",
"moUrl": "",
"pcUrl": "",
"pcCustomScheme": "",
"macCustomScheme": "",
"iosUrl": "",
"iosStoreUrl": "",
"androidUrl": "",
"androidStoreUrl": ""
}
Button
{
"type": "url",
"label": "",
"data": {
"url":"https://www.daum.net"
}
}
Button의 type
및 data
*url만 사용 가능합니다.
- url: 웹 링크입니다.
– “type” : “url” – “data” : { “url”: “” }
- phone: 전화번호 형태 입니다.
– “type” : “phone” – “data” : { “phone”: “” }
- linkUrl: 플랫폼에 따라 다양한 링크 제공이 필요할 때 사용합니다.
– “type” : “linkUrl” – “data” : {“moUrl”: “”, “pcUrl”: “”, “pcCustomScheme”: “”, “macCustomScheme”: “”, “iosUrl”: “”, “iosStoreUrl”: “”, “androidUrl”: “”, “androidStoreUrl”: “”}
- text: 사용자가 말하게 하는 버튼입니다.
{
"type": "text",
"label": "",
"message": "안녕"
}
- plugin.share: 공유하기 버튼 입니다.
– “type”: “plugin.share” – “data”: {}
quickReplies
바로연결(Quick Reply)을 표현하는 필드입니다.
{
"quickReplies": [
{
"type": "text",
"label": "quick",
"message": "message",
"data": {
}
},
{
"type": "url",
"label": "",
"message": "message",
"data": {
"url": ""
}
}
]
}
Quick Reply
{
"type": "block",
"label": "처음으로",
"message": "처음으로",
"data": {
"blockId": "59ed51909418c2298c0e0bcd",
"extra": {
"": ""
}
}
}
Quick Reply의 type
및 data
- “block” 블록 바로 연결 :
"data" { "blockId": "", "extra": {"":""}}
- “text” 블록 바로 연결 :
data
필드 생략.
예제
card.text
{
"contents":[
{
"type":"card.text",
"cards":[
{
"description":"최소 버전의 card.text 말풍선"
}
]
},
{
"type":"card.text",
"cards":[
{
"description":"포유류의 일종. 크게는 가축화한 집고양이와 야생고양이로 나뉜다. 개보다는 작은 몸집에 뾰족한 귀와 날카로운 송곳니를 가지고 있는 육식성 동물이다. 쥐 등의 해로운 동물을 사냥하여 인간에게 도움이 될 뿐만 아니라 귀엽고 매혹적인 외모로 애완용으로 인기가 많아 개와 함께 애완동물의 양대산맥.",
"buttons":[
{
"type":"url",
"label":"더보기",
"data":{
"url":"http://www.melon.com"
}
},
{
"type":"url",
"label":"재생하기",
"data":{
"url":"http://www.naver.com"
}
}
]
}
]
},
{
"type":"card.text",
"cards":[
{
"description":"포유류의 일종. 크게는 가축화한 집고양이와 야생고양이로 나뉜다. 개보다는 작은 몸집에 뾰족한 귀와 날카로운 송곳니를 가지고 있는 육식성 동물이다. 쥐 등의 해로운 동물을 사냥하여 인간에게 도움이 될 뿐만 아니라 귀엽고 매혹적인 외모로 애완용으로 인기가 많아 개와 함께 애완동물의 양대산맥.",
"linkUrl": {},
"buttons":[
{
"type":"url",
"label":"더보기",
"data":{
"url":"http://www.melon.com"
}
},
{
"type":"url",
"label":"재생하기",
"data":{
"url":"http://www.naver.com"
}
}
]
},
{
"description":"아주 옛날부터 인간과 함께하고 있는 동물이다. 고양이를 시골에서 기르다 보면 풀을 뜯어먹는다. 대부분 비타민을 섭취하고 헤어볼을 쉽게 토하기 위해서라고 한다. 식육목 고양잇과에 속하는 대표적인 동물이다. 고양잇과에 사자, 호랑이 등이 포함되었기 때문인지 항상 호랑이, 사자의 마이너, 하위호환 취급을 받을 때가 많다.",
"linkUrl": {},
"buttons":[
{
"type":"url",
"label":"더보기",
"data":{
"url":"http://www.melon.com"
}
},
{
"type":"url",
"label":"재생하기",
"data":{
"url":"http://www.naver.com"
}
}
]
}
]
}
]
}
card.image
{
"contents":[
{
"type":"card.image",
"cards":[
{
"imageUrl":"http://cfile22.uf.tistory.com/image/23390C4752A91485368E42"
}
]
},
{
"type":"card.image",
"cards":[
{
"title":"card.image 풀스펙",
"imageUrl":"http://catory.kr/files/attach/images/220/509/001/5e25851e432ce5b129d3d7d1886b5566.jpg",
"description":"준말은 발음 그대로 괭이. 비슷하게 고앵이, 꼬내기라고 부르는 지방도 있다. 남부, 제주도 사투리론 고냉이다.[10] 고내이, 앵고, 구이, 궤데기, 개냉이, 괭이, 야옹개, 개이 등, 남쪽으로 갈수록 변형이 심하다. 2011년 9월 1일부터 복수 표준어에 포함된 개발새발의 원조 괴발개발(관련 기사)의 '괴'가 고양이를 가리키는 말이다. 그리고 살찐이라 부르는 지역이 뜻밖에 많다.",
"linkUrl": {},
"buttons":[
{
"type":"url",
"label":"더보기",
"data":{
"url":"http://www.melon.com"
}
},
{
"type":"url",
"label":"재생하기",
"data":{
"url":"http://www.naver.com"
}
}
]
}
]
},
{
"type":"card.image",
"cards":[
{
"title":"card.image 풀스펙",
"imageUrl":"http://pet.chosun.com/images/news/healthchosun_pet_201709/20170913132138_1364_3824_4532.jpg",
"description":"준말은 발음 그대로 괭이. 비슷하게 고앵이, 꼬내기라고 부르는 지방도 있다. 남부, 제주도 사투리론 고냉이다.[10] 고내이, 앵고, 구이, 궤데기, 개냉이, 괭이, 야옹개, 개이 등, 남쪽으로 갈수록 변형이 심하다. 2011년 9월 1일부터 복수 표준어에 포함된 개발새발의 원조 괴발개발(관련 기사)의 '괴'가 고양이를 가리키는 말이다. 그리고 살찐이라 부르는 지역이 뜻밖에 많다.",
"linkUrl": {},
"buttons":[
{
"type":"url",
"label":"더보기",
"data":{
"url":"http://www.melon.com"
}
},
{
"type":"url",
"label":"재생하기",
"data":{
"url":"http://www.naver.com"
}
}
]
},
{
"title":"card.image 풀스펙",
"imageUrl":"https://memeguy.com/photos/images/the-only-lolcat-to-ever-make-me-literally-lol-17667.jpg",
"description":"특이한 점으로 균형 감각이 좋은 편이다. 이는 귀 속의 반고리관 안에 섬모라는 털이 있어서 고양이가 움직일 때 반고리관 내의 액체의 유동을 잘 감지하기 때문. 정교한 컨트롤이 가능한 꼬리 역시 균형 감각에 한몫한다. 덕분에 매우 좁은 담 위도 잘 걷고 높은 곳에서 떨어져도 잘 착지한다. 충격을 분산하기에 적합한 신체구조를 가져 충격을 최소화할 수 있다. 고양이가 개보다 쉽게 높은 담을 자유자재로 넘나들고 캣타워 등의 구조물도 올라가길 좋아하며, 대형 고양잇과인 표범 등이 나무에서 무리 없이 지내는 것도 평형감각이 뛰어나고 실수로 떨어져도 별걱정 없기 때문이다.",
"linkUrl": {},
"buttons":[
{
"type":"url",
"label":"더보기",
"data":{
"url":"http://www.melon.com"
}
},
{
"type":"url",
"label":"재생하기",
"data":{
"url":"http://www.naver.com"
}
}
]
},
{
"title":"card.image 풀스펙",
"imageUrl":"https://longlivethekitty.com/wp-content/uploads/lolcat_airplane.jpg",
"description":"여러 품종이 뚜렷하게 구분되고 크기도 소형/중형/대형으로 분류되는 개와는 달리, 겉모습만으로 품종을 구분하기가 쉽지 않다. 물론, 한눈에 알아볼 수 있는 품종도 있다. 꽤 오래전부터 용도에 따라 품종을 개발한 개와는 달리, 고양이는 가축화 이후 쥐를 잡는 용도로만 이용되어 품종 개발 기간이 매우 짧아서, 상대적으로 유전적 다양성이 높고 환경 적응력 등이 뛰어나다고 한다.",
"linkUrl": {},
"buttons":[
{
"type":"url",
"label":"더보기",
"data":{
"url":"http://www.melon.com"
}
},
{
"type":"url",
"label":"재생하기",
"data":{
"url":"http://www.naver.com"
}
}
]
},
{
"title":"card.image 풀스펙",
"imageUrl":"https://vignette.wikia.nocookie.net/meme/images/f/f6/Imaclolcat.jpg/revision/latest?cb=20081218101859",
"description":"인간에게 친숙한 동물임에도 강아지나 송아지처럼 어린 개체를 따로 칭하는 명사가 우리말에 없는 것이 다소 특이하다. (영어 등의 외국어에는 kitten 등 어린 고양이를 칭하는 명사가 있다.) 최근 고양이 애호가들에 의해 아기 고양이를 칭하는 아깽이라는 신조어가 만들어졌다.",
"linkUrl": {},
"buttons":[
{
"type":"url",
"label":"더보기",
"data":{
"url":"http://www.melon.com"
}
},
{
"type":"url",
"label":"재생하기",
"data":{
"url":"http://www.naver.com"
}
}
]
}
]
}
],
"quickReplies":[
{
"type":"text",
"label":"이미지카드 소스",
"message":"이미지카드 소스"
},
{
"type":"text",
"label":"데모",
"message":"데모"
},
{
"type":"text",
"label":"텍스트카드",
"message":"텍스트카드"
},
{
"type":"text",
"label":"커머스카드",
"message":"커머스카드"
},
{
"type":"text",
"label":"뮤직카드",
"message":"뮤직카드"
},
{
"type":"text",
"label":"리스트카드",
"message":"리스트카드"
}
]
}
card.commerce
{
"contents":[
{
"type":"card.commerce",
"cards":[
{
"imageUrl":"https://www.tesla.com/tesla_theme/assets/img/homepage/homepage-hero@2x.jpg?20170419",
"title":"MODEL S",
"linkUrl":{
"type":"WEB",
"webUrl":"https://www.melon.com",
"moUrl":"",
"pcUrl":"",
"pcCustomScheme":"",
"macCustomScheme":"",
"iosUrl":"melonios://",
"iosStoreUrl":"",
"androidUrl":"",
"androidStoreUrl":""
},
"price":{
"regularPrice":130000000,
"discountPrice":120000000,
"discountRate":0,
"discountAmount":10000000,
"isDiscount":true,
"discountType":"amount"
},
"profile": {
"name": "TESLA",
"imageUrl": "https://www.freepnglogos.com/uploads/tesla-logo-red-png-0.png"
},
"buttons":[
{
"type":"url",
"label":"시승 신청",
"data":{
"url":"http://www.melon.com"
}
},
{
"type":"url",
"label":"보러 가기",
"data":{
"url":"http://www.naver.com"
}
}
]
},
{
"imageUrl":"https://www.tesla.com/tesla_theme/assets/img/modelx/slideshow/White_Cruise-1440.jpg?20170907",
"title":"MODEL X",
"linkUrl":{
"type":"WEB",
"webUrl":"https://www.melon.com",
"moUrl":"",
"pcUrl":"",
"pcCustomScheme":"",
"macCustomScheme":"",
"iosUrl":"melonios://",
"iosStoreUrl":"",
"androidUrl":"",
"androidStoreUrl":""
},
"price":{
"regularPrice":89000000,
"discountPrice":80000000,
"discountRate":0,
"discountAmount":1000000,
"isDiscount":true,
"discountType":"amount"
},
"profile": {
"name": "TESLA",
"imageUrl": "https://www.freepnglogos.com/uploads/tesla-logo-red-png-0.png"
},
"buttons":[
{
"type":"url",
"label":"시승 신청",
"data":{
"url":"http://www.melon.com"
}
},
{
"type":"url",
"label":"보러 가기",
"data":{
"url":"http://www.naver.com"
}
}
]
},
{
"imageUrl":"https://www.tesla.com/sites/default/files/images/model-3/model-3-social.jpg",
"title":"MODEL 3",
"linkUrl":{
"type":"WEB",
"webUrl":"https://www.melon.com",
"moUrl":"",
"pcUrl":"",
"pcCustomScheme":"",
"macCustomScheme":"",
"iosUrl":"melonios://",
"iosStoreUrl":"",
"androidUrl":"",
"androidStoreUrl":""
},
"price":{
"regularPrice":49000000,
"discountPrice":44100000,
"discountRate":10,
"discountAmount":0,
"isDiscount":true,
"discountType":"rate"
},
"profile": {
"name": "TESLA",
"imageUrl": "https://www.freepnglogos.com/uploads/tesla-logo-red-png-0.png"
},
"buttons":[
{
"type":"url",
"label":"시승 신청",
"data":{
"url":"http://www.melon.com"
}
},
{
"type":"url",
"label":"보러 가기",
"data":{
"url":"http://www.naver.com"
}
}
]
},
{
"imageUrl":"https://electrek.files.wordpress.com/2017/11/roadster_front_58-e1510896071171.jpg?quality=82&strip=all&w=1600",
"title":"ROADSTER",
"description":"출시 예정",
"linkUrl":{
"type":"WEB",
"webUrl":"https://www.melon.com",
"moUrl":"",
"pcUrl":"",
"pcCustomScheme":"",
"macCustomScheme":"",
"iosUrl":"melonios://",
"iosStoreUrl":"",
"androidUrl":"",
"androidStoreUrl":""
},
"price":{
"regularPrice":289000000,
"discountPrice":0,
"discountRate":0,
"discountAmount":0,
"isDiscount":false,
"discountType":"amount"
},
"profile": {
"name": "TESLA",
"imageUrl": "https://www.freepnglogos.com/uploads/tesla-logo-red-png-0.png"
},
"buttons":[
{
"type":"url",
"label":"시승 신청",
"data":{
"url":"http://www.melon.com"
}
},
{
"type":"url",
"label":"보러 가기",
"data":{
"url":"http://www.naver.com"
}
}
]
},
{
"imageUrl":"https://electrek.files.wordpress.com/2017/11/roadster_front_58-e1510896071171.jpg?quality=82&strip=all&w=1600",
"title":"ROADSTER",
"description":"출시 예정",
"linkUrl":{
"type":"WEB",
"webUrl":"https://www.melon.com",
"moUrl":"",
"pcUrl":"",
"pcCustomScheme":"",
"macCustomScheme":"",
"iosUrl":"melonios://",
"iosStoreUrl":"",
"androidUrl":"",
"androidStoreUrl":""
},
"price":{
"regularPrice":289000000,
"discountPrice":0,
"discountRate":0,
"discountAmount":289000000,
"isDiscount":true,
"discountType":"amount"
},
"profile": {
"name": "TESLA",
"imageUrl": "https://www.freepnglogos.com/uploads/tesla-logo-red-png-0.png"
},
"buttons":[
{
"type":"url",
"label":"예약 하기",
"data":{
"url":"http://www.melon.com"
}
},
{
"type":"url",
"label":"보러 가기",
"data":{
"url":"http://www.naver.com"
}
}
]
}
]
}
],
"quickReplies":[
{
"type":"text",
"label":"커머스카드 소스",
"message":"커머스카드 소스"
},
{
"type":"text",
"label":"데모",
"message":"데모"
},
{
"type":"text",
"label":"텍스트카드",
"message":"텍스트카드"
},
{
"type":"text",
"label":"커머스카드",
"message":"커머스카드"
},
{
"type":"text",
"label":"뮤직카드",
"message":"뮤직카드"
},
{
"type":"text",
"label":"리스트카드",
"message":"리스트카드"
}
]
}
card.list
{
"contents": [
{
"type": "card.list",
"cards": [
{
"listItems": [
{
"type": "title",
"imageUrl": "https://1.bp.blogspot.com/-fHIwHKuBJCM/UfM2WqCDPqI/AAAAAAAABt0/UTK6-Ko3np4/w1200-h630-p-k-no-nu/J.Fla.jpg",
"title": "Jfla",
"linkUrl": {
"type": "OS",
"webUrl": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"moUrl": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"pcUrl": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"pcCustomScheme": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"macCustomScheme": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"iosUrl": "melonios://",
"iosStoreUrl": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"androidUrl": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"androidStoreUrl": "http://www.melon.com/artist/timeline.htm?artistId=729264"
}
},
{
"type": "item",
"imageUrl": "https://i1.sndcdn.com/artworks-000193195536-fm8ibf-t500x500.jpg",
"title": "Shape of you",
"description": "Ed Sheeran",
"linkUrl": {
"type": "OS",
"webUrl": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"moUrl": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"pcUrl": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"pcCustomScheme": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"macCustomScheme": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"iosUrl": "melonios://",
"iosStoreUrl": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"androidUrl": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"androidStoreUrl": "http://www.melon.com/artist/timeline.htm?artistId=729264"
}
},
{
"type": "item",
"imageUrl": "https://scontent.cdninstagram.com/t51.2885-15/s320x320/e35/18013515_1931895380356183_3704335724305186816_n.jpg",
"title": "We Don't Talk Anymore & I Hate U I Love U ",
"description": "The Chainsmokers",
"linkUrl": {
"type": "OS",
"webUrl": "",
"moUrl": "",
"pcUrl": "",
"pcCustomScheme": "",
"macCustomScheme": "",
"iosUrl": "melonios://",
"iosStoreUrl": "",
"androidUrl": "",
"androidStoreUrl": ""
}
},
{
"type": "item",
"imageUrl": "https://scontent-amt2-1.cdninstagram.com/t51.2885-15/e35/15803631_1786282854978804_1757317222419660800_n.jpg?ig_cache_key=MTQxODAzNDE1OTcyMTI3MTA2Nw%3D%3D.2&se=7",
"title": "Despacito",
"description": "Luis Fonsi ",
"linkUrl": {
"type": "OS",
"webUrl": "",
"moUrl": "",
"pcUrl": "",
"pcCustomScheme": "",
"macCustomScheme": "",
"iosUrl": "melonios://",
"iosStoreUrl": "",
"androidUrl": "",
"androidStoreUrl": ""
}
},
{
"type": "item",
"imageUrl": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/sh0.08/e35/15056533_1759227474339700_3101894925281656832_n.jpg",
"title": "Don't Let Me Down",
"description": "The Chainsmokers",
"linkUrl": {
"type": "OS",
"webUrl": "",
"moUrl": "",
"pcUrl": "",
"pcCustomScheme": "",
"macCustomScheme": "",
"iosUrl": "melonios://",
"iosStoreUrl": "",
"androidUrl": "",
"androidStoreUrl": ""
}
}
],
"buttons": [
{
"type": "block",
"label": "좋",
"message" : "좋아요 %2b 1 ab%2bcd",
"data": {
}
},
{
"type": "link",
"label": "재생하기",
"data":
{
"webUrl": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"moUrl": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"pcUrl": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"pcCustomScheme": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"macCustomScheme": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"iosUrl": "melonios://",
"iosStoreUrl": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"androidUrl": "http://www.melon.com/artist/timeline.htm?artistId=729264",
"androidStoreUrl": "http://www.melon.com/artist/timeline.htm?artistId=729264"
}
}
]
}
]
}
],
"quickReplies": [
{
"type": "text",
"label": "리스트카드 소스",
"message": "리스트카드 소스"
},
{
"type": "text",
"label": "데모",
"message": "데모"
},
{
"type": "text",
"label": "텍스트카드",
"message": "텍스트카드"
},
{
"type": "text",
"label": "커머스카드",
"message": "커머스카드"
},
{
"type": "text",
"label": "뮤직카드",
"message": "뮤직카드"
},
{
"type": "text",
"label": "리스트카드",
"message": "리스트카드"
}
]
}