{"id":25826654,"url":"https://github.com/cjaewon/kakaoembed","last_synced_at":"2025-02-28T15:44:12.732Z","repository":{"id":57288166,"uuid":"204119228","full_name":"cjaewon/kakaoEmbed","owner":"cjaewon","description":"kakao i open builder 스킬 서버에서 json 응답 포맷을 자동으로 만들어주는 모듈","archived":false,"fork":false,"pushed_at":"2021-02-06T11:04:56.000Z","size":37,"stargazers_count":13,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-11T13:30:20.914Z","etag":null,"topics":["generator","kakao","kakao-i-openbuilder","kakaobot","kakaoembed","node-modules"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cjaewon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-08-24T06:36:30.000Z","updated_at":"2023-10-21T04:07:26.000Z","dependencies_parsed_at":"2022-09-15T04:43:34.537Z","dependency_job_id":null,"html_url":"https://github.com/cjaewon/kakaoEmbed","commit_stats":null,"previous_names":["jaewon4492/kakaoembed"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjaewon%2FkakaoEmbed","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjaewon%2FkakaoEmbed/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjaewon%2FkakaoEmbed/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjaewon%2FkakaoEmbed/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cjaewon","download_url":"https://codeload.github.com/cjaewon/kakaoEmbed/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241176615,"owners_count":19922732,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["generator","kakao","kakao-i-openbuilder","kakaobot","kakaoembed","node-modules"],"created_at":"2025-02-28T15:44:11.820Z","updated_at":"2025-02-28T15:44:12.720Z","avatar_url":"https://github.com/cjaewon.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kakaoEmbed\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-bule.svg)](https://opensource.org/licenses/MIT)\n[![npm: version](https://img.shields.io/npm/v/kakaoembed?style=flat-square)](https://www.npmjs.com/package/kakaoembed)\n[![github: star](https://img.shields.io/github/stars/jaewon4492/kakaoEmbed?style=flat-square)](https://github.com/jaewon4492/kakaoEmbed)\n[![nodejs: version](https://img.shields.io/node/v/kakaoembed?style=flat-square)](https://www.npmjs.com/package/kakaoembed)\n\n\u003e 카카오 i 오픈빌더에 사용하는 스킬서버에서 SkillResponse 작성을 도와주는 Node.js 모듈입니다.\n+ kakaoEmbed 의 문법을 더 효과적으로 바꾸어 보고 싶습니다. Issue로 문법을 어떻게 바꾸면 좋을지 알려주세요!\n\n## ❓ Why \u003c사용 이유\u003e\n\n카카오 i 오픈빌더에서 SkillResponse을 직접 json으로 적는 것은 코드의 가독성이 떨어집니다.\u003cbr\u003e\nkakaoEmbed를 사용하면 간단하게 응답 JSON 포맷을 만들 수 있습니다.\n\n## ⬇️ Installation \u003c설치 방법\u003e\n\n```bash\nnpm install kakaoembed\n```\n\n## 📄 Example \u003c예제\u003e\n### 텍스트 simpleText\n```javascript\nlet data = new kakaoEmbed();\ndata.addText('hello world');\n\n/*\ndata.ouput() 출력값\n{\n  \"version\": \"2.0\",\n  \"template\": {\n    \"outputs\": [\n      {\n        \"simpleText\": {\n          \"text\": \"hello world\"\n        }\n      }\n    ]\n  }\n}\n*/\n// res.status(200).send(data.output());  express 사용시\n```\n![image](https://user-images.githubusercontent.com/32125218/63636311-91892380-c6a8-11e9-9772-a4eb57abe8eb.png)\n### 이미지 simpleImage\n```javascript\nlet data = new kakaoEmbed();\ndata.addImage('http://k.kakaocdn.net/dn/83BvP/bl20duRC1Q1/lj3JUcmrzC53YIjNDkqbWK/i_6piz1p.jpg','보물상자입니다.');\n\n/*\ndata.ouput() 출력값\n{\n  \"version\": \"2.0\",\n  \"template\": {\n    \"outputs\": [\n      {\n        \"simpleImage\": {\n          \"imageUrl\": \"http://k.kakaocdn.net/dn/83BvP/bl20duRC1Q1/lj3JUcmrzC53YIjNDkqbWK/i_6piz1p.jpg\",\n          \"altText\": \"보물상자입니다.\"\n        }\n      }\n    ]\n  }\n}\n*/\n// res.status(200).send(data.output());  express 사용시\n```\n![image](https://user-images.githubusercontent.com/32125218/63636369-79fe6a80-c6a9-11e9-99e9-85980365e145.png)\n###  베이직카드 basicCard\n```javascript\nlet data = new kakaoEmbed();\ndata\n.addBasicCard()\n.setCardTitle('보물상자')\n.setCardDescription('보물상자 안에는 뭐가 있을까')\n.setCardThumbnail('http://k.kakaocdn.net/dn/83BvP/bl20duRC1Q1/lj3JUcmrzC53YIjNDkqbWK/i_6piz1p.jpg')\n.addCardButton('열어보기', { action: 'message', messageText: '짜잔 우리가 찾던 보물입니다.' })\n.addCardButton('구경하기', { action: 'webLink', webLinkUrl: 'https://e.kakao.com/t/hello-ryan' })\n/*\ndata.ouput() 출력값\n{\n  \"version\": \"2.0\",\n  \"template\": {\n    \"outputs\": [\n      {\n        \"basicCard\": {\n          \"title\": \"보물상자\",\n          \"description\": \"보물상자 안에는 뭐가 있을까\",\n          \"imageUrl\": \"http://k.kakaocdn.net/dn/83BvP/bl20duRC1Q1/lj3JUcmrzC53YIjNDkqbWK/i_6piz1p.jpg\",\n          \"buttons\": [\n            {\n              \"action\": \"message\",\n              \"messageText\": \"짜잔 우리가 찾던 보물입니다.\",\n              \"label\": \"열어보기\"\n            },\n            {\n              \"action\": \"webLink\",\n              \"webLinkUrl\": \"https://e.kakao.com/t/hello-ryan\",\n              \"label\": \"구경하기\"\n            }\n          ]\n        }\n      }\n    ]\n  }\n}\n*/\n// res.status(200).send(data.output());  express 사용시\n```\n![image](https://user-images.githubusercontent.com/32125218/63636611-8c2dd800-c6ac-11e9-913f-78301f383773.png)\n### 커머스카드 commerceCard\n```javascript\nlet data = new kakaoEmbed();\ndata\n.addCommerceCard()\n.setCardDescription('따끈따끈한 보물 상자 팝니다')\n.setCardcost(399000,1000,'won')\n.setCardThumbnail('http://k.kakaocdn.net/dn/83BvP/bl20duRC1Q1/lj3JUcmrzC53YIjNDkqbWK/i_6piz1p.jpg','https://store.kakaofriends.com/kr/products/1542')\n.setCardprofile('보물상자 팝니다','https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT4BJ9LU4Ikr_EvZLmijfcjzQKMRCJ2bO3A8SVKNuQ78zu2KOqM')\n.addCardButton('구매하기', { action: 'webLink', webLinkUrl: 'https://store.kakaofriends.com/kr/products/1542' })\n.addCardButton('전화하기', { action: 'phone', phoneNumber: '12345-12345-12345' })\n.addCardButton('공유하기', { action: 'share' });\n/*\ndata.ouput() 출력값\n{\n  \"version\": \"2.0\",\n  \"template\": {\n    \"outputs\": [\n      {\n        \"commerceCard\": {\n          \"description\": \"따끈따끈한 보물 상자 팝니다\",\n          \"price\": 399000,\n          \"discount\": 1000,\n          \"currency\": \"won\",\n          \"thumbnail\": {\n            \"imageUrl\": \"http://k.kakaocdn.net/dn/83BvP/bl20duRC1Q1/lj3JUcmrzC53YIjNDkqbWK/i_6piz1p.jpg\"\n          },\n          \"thumbnails\": [\n            {\n              \"imageUrl\": \"http://k.kakaocdn.net/dn/83BvP/bl20duRC1Q1/lj3JUcmrzC53YIjNDkqbWK/i_6piz1p.jpg\",\n              \"link\": {\n                \"web\": \"https://store.kakaofriends.com/kr/products/1542\"\n              }\n            }\n          ],\n          \"profile\": {\n            \"nickname\": \"보물상자 팝니다\",\n            \"imageUrl\": \"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT4BJ9LU4Ikr_EvZLmijfcjzQKMRCJ2bO3A8SVKNuQ78zu2KOqM\"\n          },\n          \"buttons\": [\n            {\n              \"action\": \"webLink\",\n              \"webLinkUrl\": \"https://store.kakaofriends.com/kr/products/1542\",\n              \"label\": \"구매하기\"\n            },\n            {\n              \"action\": \"phone\",\n              \"phoneNumber\": \"12345-12345-12345\",\n              \"label\": \"전화하기\"\n            },\n            {\n              \"action\": \"share\",\n              \"label\": \"공유하기\"\n            }\n          ]\n        }\n      }\n    ]\n  }\n}\n*/\n// res.status(200).send(data.output());  express 사용시\n```\n![image](https://user-images.githubusercontent.com/32125218/63636784-16773b80-c6af-11e9-86b4-c655f662b4ad.png)\n## 리스트카드 ListCard\n```javascript\nlet data = new kakaoEmbed();\ndata\n.addListCard()\n.setCardheader('카카오 i 디벨로퍼스를 소개합니다', 'http://k.kakaocdn.net/dn/xsBdT/btqqIzbK4Hc/F39JI8XNVDMP9jPvoVdxl1/2x1.jpg')\n.addCarditem(\n    'Kakao i Developers',\n    '새로운 AI의 내일과 일상의 변화',\n    'http://k.kakaocdn.net/dn/APR96/btqqH7zLanY/kD5mIPX7TdD2NAxgP29cC0/1x1.jpg',\n    'https://namu.wiki/w/%EB%9D%BC%EC%9D%B4%EC%96%B8(%EC%B9%B4%EC%B9%B4%EC%98%A4%ED%94%84%EB%A0%8C%EC%A6%88)'\n)\n.addCarditem(\n    'Kakao i Voice Service',\n    '보이스봇 / KVS 제휴 신청하기',\n    'http://k.kakaocdn.net/dn/bE8AKO/btqqFHI6vDQ/mWZGNbLIOlTv3oVF1gzXKK/1x1.jpg',\n    'https://namu.wiki/w/%EC%96%B4%ED%94%BC%EC%B9%98'\n)\n\n/*\ndata.ouput() 출력값\n{\n  \"version\": \"2.0\",\n  \"template\": {\n    \"outputs\": [\n      {\n        \"listCard\": {\n          \"items\": [\n            {\n              \"title\": \"Kakao i Developers\",\n              \"description\": \"새로운 AI의 내일과 일상의 변화\",\n              \"imageUrl\": \"http://k.kakaocdn.net/dn/APR96/btqqH7zLanY/kD5mIPX7TdD2NAxgP29cC0/1x1.jpg\"\n            },\n            {\n              \"title\": \"Kakao i Voice Service\",\n              \"description\": \"보이스봇 / KVS 제휴 신청하기\",\n              \"imageUrl\": \"http://k.kakaocdn.net/dn/bE8AKO/btqqFHI6vDQ/mWZGNbLIOlTv3oVF1gzXKK/1x1.jpg\"\n            }\n          ],\n          \"header\": {\n            \"title\": \"카카오 i 디벨로퍼스를 소개합니다\",\n            \"imageUrl\": \"http://k.kakaocdn.net/dn/xsBdT/btqqIzbK4Hc/F39JI8XNVDMP9jPvoVdxl1/2x1.jpg\"\n          }\n        }\n      }\n    ]\n  }\n}\n*/\n// res.status(200).send(data.output());  express 사용시\n```\n![image](https://user-images.githubusercontent.com/32125218/63637799-087be780-c6bc-11e9-9af0-c4f4a667cb09.png)\n## 케로셀 Carousel\n😢 아쉽게도 Carousel은 kakaoEmbed에서 지원하고 있지 않습니다. 나중에 기회가 생기면 지원하겠습니다.\n```javascript\nlet data = new kakaoEmbed();\ndata\n.addCarousel({\n      \"type\": \"basicCard\",\n      \"items\": [\n        {\n          \"title\": \"보물상자\",\n          \"description\": \"보물상자 안에는 뭐가 있을까\",\n          \"thumbnail\": {\n            \"imageUrl\": \"http://k.kakaocdn.net/dn/83BvP/bl20duRC1Q1/lj3JUcmrzC53YIjNDkqbWK/i_6piz1p.jpg\"\n          },\n          \"buttons\": [\n            {\n              \"action\": \"message\",\n              \"label\": \"열어보기\",\n              \"messageText\": \"짜잔! 우리가 찾던 보물입니다\"\n            },\n            {\n              \"action\":  \"webLink\",\n              \"label\": \"구경하기\",\n              \"webLinkUrl\": \"https://e.kakao.com/t/hello-ryan\"\n            }\n          ]\n        },\n        {\n          \"title\": \"보물상자2\",\n          \"description\": \"보물상자2 안에는 뭐가 있을까\",\n          \"thumbnail\": {\n            \"imageUrl\": \"http://k.kakaocdn.net/dn/83BvP/bl20duRC1Q1/lj3JUcmrzC53YIjNDkqbWK/i_6piz1p.jpg\"\n          },\n          \"buttons\": [\n            {\n              \"action\": \"message\",\n              \"label\": \"열어보기\",\n              \"messageText\": \"짜잔! 우리가 찾던 보물입니다\"\n            },\n            {\n              \"action\":  \"webLink\",\n              \"label\": \"구경하기\",\n              \"webLinkUrl\": \"https://e.kakao.com/t/hello-ryan\"\n            }\n          ]\n        },\n        {\n          \"title\": \"보물상자3\",\n          \"description\": \"보물상자3 안에는 뭐가 있을까\",\n          \"thumbnail\": {\n            \"imageUrl\": \"http://k.kakaocdn.net/dn/83BvP/bl20duRC1Q1/lj3JUcmrzC53YIjNDkqbWK/i_6piz1p.jpg\"\n          },\n          \"buttons\": [\n            {\n              \"action\": \"message\",\n              \"label\": \"열어보기\",\n              \"messageText\": \"짜잔! 우리가 찾던 보물입니다\"\n            },\n            {\n              \"action\":  \"webLink\",\n              \"label\": \"구경하기\",\n              \"webLinkUrl\": \"https://e.kakao.com/t/hello-ryan\"\n            }\n        ]}\n    ]}\n)\n\n/*\ndata.ouput() 출력값\n{\n  \"version\": \"2.0\",\n  \"template\": {\n    \"outputs\": [\n      {\n        \"carousel\": {\n          \"type\": \"basicCard\",\n          \"items\": [\n            {\n              \"title\": \"보물상자\",\n              \"description\": \"보물상자 안에는 뭐가 있을까\",\n              \"thumbnail\": {\n                \"imageUrl\": \"http://k.kakaocdn.net/dn/83BvP/bl20duRC1Q1/lj3JUcmrzC53YIjNDkqbWK/i_6piz1p.jpg\"\n              },\n              \"buttons\": [\n                {\n                  \"action\": \"message\",\n                  \"label\": \"열어보기\",\n                  \"messageText\": \"짜잔! 우리가 찾던 보물입니다\"\n                },\n                {\n                  \"action\": \"webLink\",\n                  \"label\": \"구경하기\",\n                  \"webLinkUrl\": \"https://e.kakao.com/t/hello-ryan\"\n                }\n              ]\n            },\n            {\n              \"title\": \"보물상자2\",\n              \"description\": \"보물상자2 안에는 뭐가 있을까\",\n              \"thumbnail\": {\n                \"imageUrl\": \"http://k.kakaocdn.net/dn/83BvP/bl20duRC1Q1/lj3JUcmrzC53YIjNDkqbWK/i_6piz1p.jpg\"\n              },\n              \"buttons\": [\n                {\n                  \"action\": \"message\",\n                  \"label\": \"열어보기\",\n                  \"messageText\": \"짜잔! 우리가 찾던 보물입니다\"\n                },\n                {\n                  \"action\": \"webLink\",\n                  \"label\": \"구경하기\",\n                  \"webLinkUrl\": \"https://e.kakao.com/t/hello-ryan\"\n                }\n              ]\n            },\n            {\n              \"title\": \"보물상자3\",\n              \"description\": \"보물상자3 안에는 뭐가 있을까\",\n              \"thumbnail\": {\n                \"imageUrl\": \"http://k.kakaocdn.net/dn/83BvP/bl20duRC1Q1/lj3JUcmrzC53YIjNDkqbWK/i_6piz1p.jpg\"\n              },\n              \"buttons\": [\n                {\n                  \"action\": \"message\",\n                  \"label\": \"열어보기\",\n                  \"messageText\": \"짜잔! 우리가 찾던 보물입니다\"\n                },\n                {\n                  \"action\": \"webLink\",\n                  \"label\": \"구경하기\",\n                  \"webLinkUrl\": \"https://e.kakao.com/t/hello-ryan\"\n                }\n              ]\n            }\n          ]\n        }\n      }\n    ]\n  }\n}\n*/\n// res.status(200).send(data.output());  express 사용시\n```\n![image](https://user-images.githubusercontent.com/32125218/63636934-3f003500-c6b1-11e9-8da8-353b42494db1.png)\n## 바로응답 QuickReplies\n```javascript\nlet data = new kakaoEmbed();\ndata\n.addText('메뉴에서 원하는 기능을 선택해주세요')\n.addQuickReplies('날씨', { action: 'message', messageText: '날씨를 알려주세요.' })\n.addQuickReplies('뉴스', { action: 'block', messageText: '뉴스를 알려드릴께요', 'blockId': '블록 아이디' });\n\n/*\ndata.ouput() 출력값\n{\n  \"version\": \"2.0\",\n  \"template\": {\n    \"outputs\": [\n      {\n        \"simpleText\": {\n          \"text\": \"메뉴에서 원하는 기능을 선택해주세요\"\n        }\n      }\n    ],\n    \"quickReplies\": [\n      {\n        \"action\": \"message\",\n        \"messageText\": \"날씨를 알려주세요.\",\n        \"label\": \"날씨\"\n      },\n      {\n        \"action\": \"block\",\n        \"messageText\": \"뉴스를 알려드릴께요\",\n        \"blockId\": \"블록 아이디\",\n        \"label\": \"뉴스\"\n      }\n    ]\n  }\n}\n*/\n// res.status(200).send(data.output());  express 사용시\n```\n![image](https://user-images.githubusercontent.com/32125218/63637013-58ee4780-c6b2-11e9-8f48-09e6ba083cb6.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcjaewon%2Fkakaoembed","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcjaewon%2Fkakaoembed","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcjaewon%2Fkakaoembed/lists"}