Clova Extension 음성기반 게임 기획 및 설계 / FaaS를 이용한 개발 Clova Platform
Session 1: Clova Extension 음성기반 게임 기획 및 설계
- Clova Extension 개요 및 사례소개
- 구구단놀이 기획 및 설계
- 나라이름 맞추기 기획 및 설계
세션 2: Ncloud FaaS를 이용한 서버없이 Clova Extension 개발
- FaaS 개요 및 사용방법
- 구구단놀이 게임 Extension 구현
- 나라이름 맞추기 Extension 구현
코인 헬퍼 Extension 사례를 통한 Extension 디자인/설계 세션 발표 자료 입니다.
목표 1. 코인 헬퍼 Extension의 개요를 이해한다.
목표 2. Extension의 목표 수립 과정을 살펴본다.
목표 3. Extension의 사용자 시나리오 및 스크립트를 작성 과정을 살펴본다.
목표 4. Extension의 진행 Flow 및 인터렉션 모델을 정의 하는 과정을 살펴본다.
Chatbot Extension 개요 및 Chatbot Builder 사용법Clova Platform
6월 1일 Clova Dev Days Session 3 발표자료
Session 3: Chatbot Extension 개요 및 Chatbot Builder 사용법
- Chatbot Extension 개요 및 특징
- Chatbot Extension 사례 소개
- Chatbot Builder 사용법 및 챗봇 개발 데모
Clova Extension 음성기반 게임 기획 및 설계 / FaaS를 이용한 개발 Clova Platform
Session 1: Clova Extension 음성기반 게임 기획 및 설계
- Clova Extension 개요 및 사례소개
- 구구단놀이 기획 및 설계
- 나라이름 맞추기 기획 및 설계
세션 2: Ncloud FaaS를 이용한 서버없이 Clova Extension 개발
- FaaS 개요 및 사용방법
- 구구단놀이 게임 Extension 구현
- 나라이름 맞추기 Extension 구현
코인 헬퍼 Extension 사례를 통한 Extension 디자인/설계 세션 발표 자료 입니다.
목표 1. 코인 헬퍼 Extension의 개요를 이해한다.
목표 2. Extension의 목표 수립 과정을 살펴본다.
목표 3. Extension의 사용자 시나리오 및 스크립트를 작성 과정을 살펴본다.
목표 4. Extension의 진행 Flow 및 인터렉션 모델을 정의 하는 과정을 살펴본다.
Chatbot Extension 개요 및 Chatbot Builder 사용법Clova Platform
6월 1일 Clova Dev Days Session 3 발표자료
Session 3: Chatbot Extension 개요 및 Chatbot Builder 사용법
- Chatbot Extension 개요 및 특징
- Chatbot Extension 사례 소개
- Chatbot Builder 사용법 및 챗봇 개발 데모
Clova Extensions Kit을 활용하여 개발된 라마마 익스텐션에 대해서 띵스플로우 개발자가 개발 경험을 공유하는 세션 발표 자료 입니다.
목표1. Clove Extension API 서버 개발
목표2. 라마마 익스텐션의 인터렉션 모델 개발 과정
목표3. 챗봇 컨텐츠 개발 5가지 포인트
( PDF 파일을 다운로드를 하셔야 깨끗하게 보실 수 있습니다. )
구글의 챗봇 프레임워크인 Dialogflow로 카카오톡 챗봇을 만드는 방법을 설명한 발표 자료입니다. 궁금한 점이 있으시면 페이스북 챗봇 개발자 모임을 방문해 주시기 바랍니다.
< 챗봇 개발자 모임 >
- https://www.facebook.com/groups/ChatbotDevKR/
< PDF 파일 >
- https://goo.gl/cDfY41
< 소스 코드 >
- https://github.com/deepseasw/dialogflow_kakaotalk_chatbot
슬라이드 원본
http://hatemogi.github.com/netty-startup/
프로젝트 소스
https://github.com/hatemogi/netty-startup/
Netty는 JAVA환경에서 고성능 네트워크 서버를 개발할 수 있는 매우 유용한 프레임워크입니다만, 비동기(asynchronous) 이벤트 기반 (event-driven) 처리에 익숙하지 않은 개발자에게는 처음 접근하기 어려운 점이 있습니다. 이 과정에서는 기존 멀티쓰레드와 동기식(synchronous) I/O처리에만 익숙했던 개발자도 차근차근 따라해보며 비동기 I/O처리의 기본 개념을 이해하고, Netty를 본격적으로 활용해 볼 수 있도록 예제 개발을 함께 해보려 합니다.
Clova Extensions Kit을 활용하여 개발된 라마마 익스텐션에 대해서 띵스플로우 개발자가 개발 경험을 공유하는 세션 발표 자료 입니다.
목표1. Clove Extension API 서버 개발
목표2. 라마마 익스텐션의 인터렉션 모델 개발 과정
목표3. 챗봇 컨텐츠 개발 5가지 포인트
( PDF 파일을 다운로드를 하셔야 깨끗하게 보실 수 있습니다. )
구글의 챗봇 프레임워크인 Dialogflow로 카카오톡 챗봇을 만드는 방법을 설명한 발표 자료입니다. 궁금한 점이 있으시면 페이스북 챗봇 개발자 모임을 방문해 주시기 바랍니다.
< 챗봇 개발자 모임 >
- https://www.facebook.com/groups/ChatbotDevKR/
< PDF 파일 >
- https://goo.gl/cDfY41
< 소스 코드 >
- https://github.com/deepseasw/dialogflow_kakaotalk_chatbot
슬라이드 원본
http://hatemogi.github.com/netty-startup/
프로젝트 소스
https://github.com/hatemogi/netty-startup/
Netty는 JAVA환경에서 고성능 네트워크 서버를 개발할 수 있는 매우 유용한 프레임워크입니다만, 비동기(asynchronous) 이벤트 기반 (event-driven) 처리에 익숙하지 않은 개발자에게는 처음 접근하기 어려운 점이 있습니다. 이 과정에서는 기존 멀티쓰레드와 동기식(synchronous) I/O처리에만 익숙했던 개발자도 차근차근 따라해보며 비동기 I/O처리의 기본 개념을 이해하고, Netty를 본격적으로 활용해 볼 수 있도록 예제 개발을 함께 해보려 합니다.
드랍박스, nDrive 등과 같은 클라우드 스토리지 서비스들은 데이터를 어떻게 저장하는지에 대한 이론적 내용과 실제 구현 내용을 살펴봅니다. 이 발표에서는 OpenStack 의 swift라는 Object Storage 를 이용하여 이론이 어떻게 구현되어있는지 알아봅니다.
<마비노기 영웅전>의 사례에 기반하여 다음의 내용을 설명합니다.
1. 국내 및 해외에서 라이브 서비스 중에 발생하는 작업장 이슈에 대응하기 위해서 실시간 로그 수집 프로세스를 구축하면서 고민하였던 내용과
2. 수집한 로그 데이터를 활용하여 온라인 액션 게임에서 캐릭터 애니메이션 패턴간의 유사도(TF-IDF, Cosine Similarity)를 분석하여 현업 실무의 어뷰징 탐지에 활용한 사례를 공유합니다.
라이브 서비스 환경에서 국내 및 해외의 실시간 로그 수집에 대해서 고민하시는 개발자나 온라인 게임에서의 봇탐지에 관심있는 분석가들에게 유용한 사례를 소개해드릴 수 있을 것으로 생각합니다.
[2017년 SW 마에스트로 100+ 컨퍼런스]
- 발표자: 오픈스택 한국 커뮤니티 조성수
- 행사 정보: https://www.facebook.com/swmaestro/photos/a.816861878341341.1073741828.812223648805164/1832957773398408/?type=3&theater&ifg=1
빌드? 우선 사용부터 매뉴얼? Getting started 한 번 돌려보기 TV 리모컨 버튼 5개 전문가는 교육받아 만들어진다? 경험=시간+시행착오+성공실패 오픈소스 트러블슈팅 “메시지” 구글링 오픈소스 함부로 수정하지 마라 최신 버전을 대하는 우리의 자세 LTS로 대동단결 팀장 설득하기 오픈소스는 공짜가 아닙니다. 저도 기여하고 싶어요 2,000년 톰캣을 시작으로 Ant, Eclipse, JUnit, JMeter를 거쳐 현재 개발에 잘 사용하고 있는 Yona, Git, VSCode, Jenkins, CentOS, VirtualBox, Nginx, Node.js, Express.js, MariaDB, Uptime, Mocha, SonarQube, ZAP 이야기 등입니다.
https://www.youtube.com/watch?v=5LHOTBxG0hc
Klaytn 플랫폼 및 SDK 소개
Ground X가 주도하여 개발한 Public Blockchain 플랫폼인 Klaytn의 아키텍처와 SDK에 대해 소개합니다. Klaytn은 엔터프라이즈와 서비스를 지향하는 블록체인 플랫폼으로 1초의 블록 생성 및 확정 시간과 4000 TPS의 성능을 달성한 고성능의 블록체인 플랫폼입니다. 본 발표에서는 Klaytn의 네트워크 구조와 블록 생성 및 검증을 담당하는 Governance Council, 그리고 플랫폼의 전반적인 아키텍처에 대해서 설명합니다. 그리고 Klaytn에서 블록체인 애플리케이션을 개발할 때 사용할 수 있는 SDK인 caver-js와 caver-java에 대해서도 소개합니다. 마지막으로 Klaytn을 개발하고 메인넷 Cypress를 런칭하기까지의 개발 후기에 대해서도 공유할 예정입니다.
This document discusses Clova Face, a facial recognition technology from Naver. It can recognize faces with over 99.98% accuracy and works efficiently on CPUs. Clova Face has applications in fintech, online education, membership authentication, video editing, and mobile payments. It provides solutions like automatic self check-ins, E-KYC verification, and auto highlights for livestreams. Clova Face Sign is a SaaS version that allows clients to integrate the facial recognition capabilities through APIs and SDKs while complying with privacy regulations.
Clova Tech Summit 2: Serverless로 만드는 쉽고 효율적인 Clova Extension 2Clova Platform
This document discusses NCP Cloud Functions and the Clova Extension Kit (CEK). It describes how Cloud Functions can be used to build actions that are triggered by requests from CEK. Examples are provided of finding a lost phone and rolling a dice. The document also outlines future plans to more directly connect Cloud Functions and CEK and allow actions to be registered directly through the Clova developer center.
Clova Extensions Kit을 활용하여 개발된 배달의민족 익스텐션에 대해서 우아한형제들 개발자가 개발 경험을 공유하는 세션 발표 자료 입니다.
목표1. 배달의민족 Extension의 개발 목표
목표2. Clova Extension 개발 허들
목표3. 시간 낭비를 줄일 수 있는 개발팁
2. 목차
• Clova Platform 개요
• Clova extension 개발 준비 개요
• Clova extension 등록 – 호출명, 서버정보, 배포정보
• 인터렉션모델 등록
• Clova extension 서버 API 개발
• Clova 앱과 스피커에서 익스텐션 호출 테스트
7. LG U+ IPTV STB
- LG U+ IPTV UHD급 이상의 STB 내 Clova 제공 (2017년 12월 적용)
시청 중,
리모콘 side음성버튼
or (음성) LGU플러스야
로 음성명령 수행
‘효리네민박 틀어줘’ ‘스릴러영화 추천해줘’전면 검색키>
전체화면모드, 클로바스러운 검색홈으로 제안
Clova Interface Connect 적용 사례
8. Clova Interface Connect 적용 사례 (Friends +)
스피커로 '셋탑을 컨트롤' 할 수 있습니다.
브라운과 샐리에게 "유플티비"라는 호출어로 지시해보세요.
"유플티비, 눈물 쏙 빼는 영화 찾아줘"
"유플티비, tvN 틀어줘"
10. Clova extension 이란?
• Clova 플랫폼에서 작동하는 3rd party 애플리케이션으로서, 예를 들면 음성명령으로 음악을 재
생하거나 쇼핑, IoT기기 제어 등이 가능합니다.
• 사용자의 의도(예: 음성명령)에 따라 extension이정확하게 동작할 수 있도록 Clova 플랫폼 내부
적으로 음성인식, 대화분석 등 Clova 인공지능 기술이 적용되어 있습니다.
11. extension으로 무엇을 할 수 있나요?
• Extension 종류
• (서비스중) Custom extension: 3rd party 서버에서 제공하는 응답(예: 음성,
이미지 등)을 제공할 수 있습니다.
• 예) "팟빵에서 뉴스공장 틀어줘" 라고 하면 "팟빵 extension"이 해당 음원을 들
려줍니다.
• (예정) Chatbot extension: 고객이 자주 묻는 질문(FAQ)과 답변을 등록하여
사업자 대신 챗봇이 답변을 하게 하는 extension입니다.
• 예) ”네이버고객센터 실행해줘 à 네이버 쇼핑 가격 비교하는 방법
알려줄래?”
• (제휴문의) Clova Home extension: IoT 기기제어가 가능
• 예) "클로바, TV 좀 켜줘" 라고 하면 클로바가 TV를 켭니다
18. 마법 구슬(Magic ball)
• 개요
• 마법 구슬은 사용자의 물음에 미리 정의해놓은 20가지의 긍정 또
는 부정 표현 중 하나를 응답으로 돌려주는 extension입니다.
• 실행 방법
• 마법구슬 시작해줘 à 아무거나 소원, 희망 사항을 얘기하면 됨
• 마법구슬에게 로또 당첨될지 물어봐줘
https://developers.naver.com/console/clova/guide/CEK/Examples/Extension_Examples.md#MagicBall
19. 마법 구슬(Magic ball)
• 인터렉션 모델
• 사용자의 발화와 관계없이 응답을 선택해서 내려주기 때문에 interaction 모델이 간단합니다.
20. 마법 구슬(Magic ball)
• API 소스코드
• https://github.com/naver/clova-extension-sample-magicball
• 익스텐션 응답
• https://github.com/naver/clova-extension-sample-magicball/blob/github-public/intent/answer.go
21. 빗소리(Rain sound)
• 개요
• 빗소리는 사용자의 요청에 미리 녹음해둔 빗소리 음원 파일(.mp3)를 클라이
언트가 재생하도록 응답하는 extension입니다.
• 사용자는 빗소리를 몇 번 반복해서 들을지 결정할 수 있으며, 이 extension의
interaction 모델은 반복 횟수에 대한 값을 slot으로 정의하고 있습니다.
• 클라이언트가 음원을 재생할 수 있도록 응답 메시지에 안내 문구 뿐만 아니
라 AudioPlayer.Play 지시 메시지를 포함시켜 CEK로 보내줍니다.
• 실행 방법
• 빗소리 시작해줘
• 빗소리 열어줘
• 빗소리한테 2번 반복해달라고 해줘
https://developers.naver.com/console/clova/guide/CEK/Examples/Extension_Examples.md#RainSound
22. 빗소리(Rain sound)
• 인터렉션 모델
• 사용자는 빗소리를 몇 번 반복해서 들을지 결정할 수 있으며, 이 extension의 interaction 모델은 반복 횟수에 대한 값을 slot으로 정의
하고 있습니다.
25. 주사위 놀이(Dice drawer)
• 개요
• 주사위 놀이는 사용자의 요청에 가상의 주사위를 굴려 나온 주사위의 눈과 눈
의 합계를 알려주는 extension입니다.
• 굴릴 주사위 개수가 하나인지 두 개 이상 인지에 따라 응답으로 돌려주는 표현
이 달라집니다.
• 실행 방법
• 주사위 놀이 시작해줘
• 주사위 놀이에서 주사위 2개 던져줘
• 주사위 놀이에게 5개 굴려달라고 해
https://developers.naver.com/console/clova/guide/CEK/Examples/Extension_Examples.md#DiceDrawer
26. 주사위 놀이(Dice drawer)
• 인터렉션 모델
• 사용자는 주사위를 몇 개 던질 지 결정할 수 있으며, 이 extension의 interaction 모델은 주사위 개수에 대한 값을 slot으로 정의하고 있
습니다.
29. 코인 헬퍼(Coin helper)
• 개요
• 코인 헬퍼는 사용자의 요청에 외부 가상 화폐 거래소에서 제공하는 RESTAPI
를 호출하여 시세 정보를 돌려주는 extension입니다.
• 실행 방법
• 코인헬퍼 시작해줘
• 코인헬퍼에서 시세 알려줘
• 코인헬퍼에서 비트코인 시세 물어봐줘
https://developers.naver.com/console/clova/guide/CEK/Examples/Extension_Examples.md#CoinHelper
30. 코인 헬퍼(Coin helper)
• 인터렉션 모델
• 사용자는 어떤 거래소의 정보를 이용할지 어떤 가상화폐의 시세를 조회할지 결정할 수 있으며, 이 extension의 interaction 모델은 거
래소와 가상 화폐 종목에 대한 값을 slot으로 정의하고 있습니다.
33. Clova extension 개발 준비 – 1 (필수)
• 익스텐션서버
• REST API 서버로서, Clova platform은 Clova console에 등록한 REST API 서버URL로 응답과 요청을 주
고 받습니다.
• Clova platform은 1) 익스텐션 실행 2) 인텐트 실행 3) 익스텐션 종료라는 3가지 type의 요청을 보내고,
익스텐션 서버는 여기에 맞게 응답을 하면 됩니다.
• 익스텐션 서버는 https로 외부망으로 통신할 수 있는 서버이어야 하며, 포트는 80 또는 443로만 통신
합니다.
35. Clova extension 개발 준비 – 2 (필수)
• 인터렉션 모델
• 일종의 대화시나리오와 비슷합니다만, 기계인 익스텐션 서버가 사람의 대화를 이해하여 작동할 수 있
도록 Clova console에 입력하는 문장 및 메타정보들입니다.
• 인터렉션 모델에는 사용자로부터 입력될 만한 문장들과 각 문장이 어떤 실행 명령(이를 '인텐트'라고
합니다.)으로 연결될 지를 설정합니다.
• 인텐트를 실행할 때 필요한 정보들은 '슬롯'이라는 것으로 정의하여 처리합니다.
• 예를 들면, 피자주문하는 익스텐션의 경우 인텐트와 슬롯은 아래와 같습니다.
• 예) 사용자의 대화: "페퍼로니 피자 2판 주문해줘" --> 'OrderPizza'라는 이름으로 피자주문 처리용 인텐트로 정
의
• 예) 'OrderPizza'인텐트가 실제 피자를 주문하기 위해 필요한 정보는 '피자명'과 '수량'이며, 이는 각기
'pizzaType', 'pizzaAmount'라는 슬롯으로 정의
36. Clova extension 개발 준비 – 3 (선택)
• OAuth 인증 서버
• 만약 익스텐션이 써드파티 계정
인증이 필요하다면 익스텐션 서버
와 함께 OAuth 인증을 구현하셔야
필요합니다.
• OAuth 인증 서버는 Clova console
에 등록된 인증정보를 이용하여
인증을 처리하고, 인증이 완료되
면 접근토큰을 반환해야 합니다.
• 인증서버 구축 예) 배달의 민족,
LG 전자, LGU +
관련 가이드: https://www.slideshare.net/ClovaPlatform/clova-tech-summit-3-clova-extension-oauth-89597569
38. 익스텐션 기본 정보 등록하기
• Clova console에 접속해서 'Clova Extensions Kit'을 클릭한 다음 '새로운 익스텐션 만들기'를 누릅니다.
• URL: https://developers.naver.com/console/clova/
• 익스텐션 정보 설정
• type은 Custom Extension으로 선택하고, 나머지 값들도 입력합니다.
• 오디오플레이어 사용 여부는 '아니오'로 합니다. '예'로 하는 경우는 음원을 재생하는 경우에 사용합니다.
39. Clova extension 호출명 설정
• 가전기기를 제어하는 Custom extension (이하 '익스텐션') 서비스를 그려 보도록
하겠습니다.
• 먼저 익스텐션 실행할 때 부르는 이름, 즉 '호출명'을 정해야하는데, 몇 가지 제
약이 있습니다.
• 일반적인 명사는 안됨 (예: 박사 (X) )
• 브랜드나 유니크한 명사가 접목된 단어 가능: (예: 짱구박사(O))
• 혹시나 음성인식이 잘 안되는 경우는 다른 호출명으로 하셔야 할 수 있으니, Clova앱에서 인
식이 잘 되는지 확인해보시길 바랍니다.
40. 서버 연동 설정
• 외부에서 접근가능한 RESTAPI 서버의 endpoint URL을 입력합니다. 계정연결 여부는 '아니요'로 둡니다.
41. 배포정보 설정
• 여기서 테스트용 지시어와 대표 표현 문장은 아까 작동 시나리오에서 나왔던 문장에 호출명을
붙여서 사용자가 테스트할 수 있는 문장을 입력합니다.
• 짱구박사를 시작해줘
• 짱구박사에서 거실 전등 켜줘
• 짱구박사에서 거실 전등 꺼줘
43. 익스텐션의 작동 시나리오
• 첫번째는 익스텐션에게 바로 질문하고 답을 받는 것입니다. (싱글턴, single-turn)
• 사용자: 클로바, 짱구박사에서 거실 전등 켜줘
• 익스텐션: 거실 전등이 켜졌습니다.
• 두번째는 익스텐션을 실행한 다음에 질문하고 답을 받는 것입니다. (멀티턴,
multi-turn)
• 사용자: 클로바, 짱구박사를 시작해줘
• 익스텐션: 안녕하세요. 짱구박사가 시작되었습니다. 제어하고 싶은 가전기기와 동작 방법
을 말씀하세요.
• 사용자: 거실 전등 켜줘.
• 익스텐션: 거실 전등이 켜졌습니다.
44. 익스텐션 작동 시나리오 고려사항
• 이제 해야할 일은 시나리오가 클로바 플랫폼에서 작동하도록 하는 것인데요.
• 문제는 사용자가 같은 말을 물어보더라도, 위에서 정의한 글자그대로 말하지는
않는다는 점입니다.
• 예) 거실 전등 켜줘
• 예) 거실 점등 해줘
• 예) 거실 불켜줘
• 이렇게 같은 의도이지만 다양한 표현을 입력하고 인터렉션 모델에 이러한 여러
문장 케이스들을 잘 정리해놔야 더 똑똑한 익스텐션을 만들 수 있겠습니다.
45. 인터렉션 모델 등록하기 – 슬롯 등록
• 짱구박사는 집안의 지역 IoT기기를 제어
할 것이므로 인텐트는 하나만 등록하면 되
고, 슬롯은 ’집안의 다양한 장소들이'이 되
겠습니다.
• 슬롯 등록하기 전에
• 슬롯에는 커스텀 슬롯과 빌트인 슬롯 2가
지가 있습니다.
• 빌트인 슬롯은 아래와 같이 사람들이 이미
인지하는 용어들을 모아둔 것으로, 사용하
겠다고 체크하면 편리하게 사용하실 수 있
습니다.
• 집안의 다양한 장소들은 커스텀 슬롯
으로 등록합니다.
• IOT_TYPE
• 거실: 리빙룸
• 안방: 침실
• 부억: 키친
• 베란다
47. 인터렉션 모델 등록하기 – 인텐트 등록
• 우측의 '사용중인 Intent' 옆의 + 버튼을 눌러서 ‘turnOnIntent’입력하고 '만들기' 버튼을 누릅니다.
• 사용자 표현 리스트에 사용자들이 입력할 것 같은 대화들을 입력하는데, slot과 의도에 해당하는
문장들은 다양하게 입력합니다.
• 문장의 가짓수는 많을 수록 더욱 대화의도 파악은 잘 됩니다.
• 거실 전등 켜줘
• 안방 불 켜줘
• 침실 점등 해줘
49. 인터렉션 모델 등록하기 – 인텐트 슬롯 등록
• 사용자 표현 리스트에서 ’거실'이라는 단어를 드래그한 다음 앞에서 입력한 ‘homeSlotType’이란 이름으로
매핑해줍니다.
• 매핑이 완료되면 Slot 에 해당하는 글씨들이 아래와 같이 하이라이트 됩니다.
50. 인터렉션 모델 빌드하기
• ‘저장’ 버튼을 누른 다음
• 우측 상단의 '빌드' 버튼을 눌러 인터렉션 모델을 빌드합니다. 빌드가 완료되면 다시 '빌드'라는 버튼으로 바뀝니다.
51. 인터렉션 모델 테스트
• 아직 REST API 서버 개발전이지만, 등록한 인터렉션 모델이 잘 동작하는지 확
인합니다.
• '빌드' 버튼 아래에 '테스트'를 누릅니다.
52. 인터렉션 모델 테스트
• 체크할 포인트는 인터렉션 모델에 등록한 문장과 비슷한 문장을 입력하더라도 slot과 intent값을 리턴하는지 확인하는
것입니다.
• 예)
• 거실 전등 켜줘 (인터렉션 모델에 있는 문장)
• 부억 점등 해줘 (인터렉션 모델에 있는 문장과 비슷한 유형이지만, slot 이 다른 문장)
• 침실 불 켜줘 (비슷한 문장)
61. 실행 상태 확인
• http://localhost:8080/
* 주의:
Clova 서버 포트는 80 또는 443만 가능
application.properties 에 아래 내용 추가
server.port=80
62. 아주 간단한 Rest API 작성 - Controller
• 코드
• 실행 결과
@RestController
@RequestMapping("/clova")
public class DemoApiController {
@ResponseBody
@RequestMapping(value = "/v1/hello", method= RequestMethod.GET, produces = "application/json" )
public String hello() {
return "hello clova api!";
}
}
http://localhost:8080/clova/v1/hello
63. 첫 RestAssured 테스트 케이스 작성
• src-test-java 밑에 HelloWorldRestAssured class 추가후 아래와 같이 메소드 입력
• 주요 API 설명
• given()
• 입력값 설정 (파라미터, 헤더 등 )
• when()
• get(path) : 지정된 path로 get 요청
• post(path) : 지정된 path로 post 요청
• … 등등
• then()
• 호출 결과 검증 ( statusCode(), body(), equals() 등등…)
@Test
public void naverShouldBeOK() {
given().when().get("/v1/hello").then().statusCode(200);
}
64. 서버가 처리해야할 작업 - 1
• Clova 요청 메시지의 request type에 따라 지정된 포맷의 응답 리턴
• Request type
• LaunchRequest : 익스텐션의 시작 (“짱구박사 시작해줘” 했을 경우)
• SessionEndedRequest : 익스텐션의 종료 (“종료해줘” )
• IntentRequest
• Custom Intent à 개발자 콘솔에 입력한 Intent 와 Slot
• Built-in Intent à
https://developers.naver.com/console/clova/guide/CEK/References/CEK_API.md#cek-api-레퍼런스
65. 서버가 처리해야할 작업 – 2
https://developers.naver.com/console/clova/guide/CE
K/References/CEK_API.md#cek-api-레퍼런스
응답메시지 구조
66. 서버가 처리해야할 작업 – 3
• 멀티턴 처리
• 응답 메시지의 shouldEndSession은 false
• 계속 유지해야 할 값은 sessionAttribute에 담아서 전송
http://stg.developers.naver.com/console/clova/guide/CEK/Guide
s/Build_Custom_Extension.md#DoMultiturnDialog
67. 컨트롤러 api
@RequestMapping(value = "/extension", method= RequestMethod.POST, produces = "application/json" )
@ResponseBody
public ResponseEntity<MyExtensionMessage> weather (@RequestBody Map<String, Object> map) {
Map m = (HashMap)map.get("request");
String type = (String) m.get("type");
MyExtensionMessage mm = null;
if(type.equals("LaunchRequest")) { // extension 시작
mm = new MyExtensionMessage("turnOnIntent", "안녕 짱구 박사를 시작합니다. 제어하려는 전등을 말씀 하세요. ", false, "PlainText");
} else if (type.equals("IntentRequest")) { // extension의 인텐트 시작
Map intent = (HashMap) m.get("intent");
String intentName = (String) intent.get("name");
Map slots = (HashMap) intent.get("slots");
String slotName = "";
String slotValue = "";
if (intentName.equals("turnOnIntent")) {
if (slots != null) {
Map myslot = (HashMap) slots.get("homeSlotType");
slotName = (String) myslot.get("name");
slotValue = (String) myslot.get("value");
System.out.println("slotName===" + slotName);
System.out.println("slotValue===" + slotValue);
}
mm= new MyExtensionMessage("turnOnIntent", slotValue + "의 전등을 켰습니다. ", true, "PlainText");
// Built-in Intent 처리
} else if (intentName.equals("Clova.YesIntent")) {
mm = new MyExtensionMessage(intentName, "예 라고 하셨나요?", true, "PlainText");
} else if (intentName.equals("Clova.NoIntent")) {
mm = new MyExtensionMessage(intentName, "노 라고 하셨나요?", true, "PlainText");
} else if (intentName.equals("Clova.GuideIntent")) {
mm = new MyExtensionMessage("hearTestIntent", "부산 날씨는 어때라고 해보세요", false, "PlainText");
} else if (intentName.equals("Clova.CancelIntent")) {
mm = new MyExtensionMessage("hearTestIntent", "짱구 박사 실행을 취소합니다. 안녕", true, "PlainText");
}
} else if (type.equals("SessionEndedRequest")) { // extension 종료
mm = new MyExtensionMessage("turnOnIntent", "짱구 박사를 종료합니다. ", false, "PlainText");
}
return new ResponseEntity<MyExtensionMessage>(mm, HttpStatus.OK);
}
73. 테스트 단계
• 개발자 콘솔에 test할 네이버 계정 등록
• 음성 테스트 방법1 – Clova 앱
• Clova 앱에 해당 아이디로 로그인 후
• à “짱구박사 시작해줘” 라고 했을 때 익스텐션 서버로 LaunchRequest가 오는지, 익스텐션의 응답이 음성으로 나가는지 확인
• 음성 테스트 방법2 – Friends 스피커
• 테스터로 등록된 아이디로 Clova앱을 이용해서 스피커 설정
• à “짱구박사 시작해줘” 라고 했을 때 익스텐션 서버로 LaunchRequest가 오는지, 익스텐션의 응답이 음성으로 나가는지 확인
74. Appendix.
• Clova 플랫폼 개발자 문서 : https://developers.naver.com/console/clova/guide/
• Design 챕터 / Clova Extensions Kit 챕터 / Clova Developer Console 챕터 참고
• 튜토리얼 및 샘플 코드 참고
• 샘플 코드 Github
• 마법 구슬 : https://github.com/naver/clova-extension-sample-magicball
• 빗소리 : https://github.com/naver/clova-extension-sample-rainsound
• 주사위 놀이 : https://github.com/naver/clova-extension-sample-dice
• 코인 헬퍼 : https://github.com/naver/clova-extension-sample-coinhelper