반응형

 Google Assistant 는 구글이 제공하는 인공지능 플랫폼이다. 앞서 포스팅 했던 Google Home 도 Google Assistant를 지원하는 디바이스의 하나이다. Google Home 등에서 동작하는 어플리케이션을 개발하기 위해서는 Actions On Google 에서 개발을 해야 한다.


 Google Assistant 기반 App 을 개발하기 위해서는 Action Project를 생성하고 api.ai agent를 만들어야 한다. 

 "Actions Project"는 개발하는 App에 대한 메타데이터를 정의하고, 승인과정까지 관리하게 한다.

 "API.AI Agent"는 "Intent" 를 정의하는데, 

 "Intent"란 사용자의 발화에 대한 응답을 의미하고, 이 응답은 "fullfillment"에 의해러 이루어진다.


다음은 Actions on Google 의 홈페이지에서 예제로 제공하는 Sample App 을 기준으로 설명한다. (https://developers.google.com/actions/get-started/create-project-agent) 다음 URL에서 샘플 앱을 다운로드 한다. 


https://github.com/actions-on-google/apiai-facts-about-google-nodejs/archive/master.zip


압축을 풀면 intent 샘플 Json 파일을 가지고 있는 FactsAboutGoogle.zip 과 fullfillment 에서 web service를 위한 firbase deploy가 가능한 node.js 용 서버 프로그램이 들어 있다.


1. Actions on Google 에서 Actions Project 생성하기

 Actions on Google 의 Console로 들어가서 Add/Import Project를 누르고, 프로젝트 이름과 지역을 설정한다.

 FactsApp 이라는 프로젝트를 생성한다.


2. Actions 추가하기

 프로젝트를 생성하면 actions을 추가할 수 있는데, 여기에서는 API.AI 를 이용해서 생성한다. API.AI를 클릭하면 팝업이 나타나는데 CREATE ACTIONS ON API.AI를 클릭한다.

 

 이후 api.ai 의 console로 들어가게 되는데, Description을 입력하겨 SAVE를 클릭한다.

 그리고 왼쪽에 Gear 모양을 클릭하면 FactsApp에 대해서 설정할 수 있는데, "Export and Import"를 클락하고 Restore From Zip 을 클릭한다. Restore하고 나서 Intents 를 보면 다음처럼 몇가지 Intents 가 생성되어 있음을 할 수 있다.



3. Intents 보기

Google 의 설명 페이지에 보면 다음의 Flow 그림이 있다. 이 그림은 Intent 의 동작을 나타내주는 것이다. 샘플에서는 6개의 Intent가 있고 이중 2개(tell_fact, tell_cat_fact)는 choose_fact, choose_cats Intent 의 Context에 속해 있는 intent이다.

- Default Welcome Intent : 사용자가 app을 Invoke 할때 Trigger되는 Intent이다. api.ai 에서 해당 intent를 클릭해보면 다음과 같은데, WELCOME Event에 반응하고 Text Response를 주는 것을 볼 수 있다. "ACTIONS ON GOOLGE" 을클릭해보면 Integration 에 대한 정보, 즉 "Actions on Google" 로 Integration 되어 있다는 것을 알 수 있다.


- choose_fact Intent: choose_fact는 사용자의 발화를 분석하여 사용자가  google history 를 질의하거나, google headerquaters를 질의하는지를 판단하여 개별 발화에 대해서(예를 들어 The history of Google, Headquaters) 해당 발화의 category라는 파라미터로  fact-category 라는 entity에 값을 설정해 준다. (Action)

 예를 들어 Headquaters 라고 발화하게 되면 @fact-category entity의 category 파라미터에 Headquaters 라는 값을 설정해 주는 것이다. 그리고 해당 발화가 되면 Action 에서는 Prompts 로 음성안내를 해주는데, "Which category of cat do you want to hear? History or headquaters?" 라고 안내해준다. 여기에 대해서 반응하게 되면 tell_fact intent가 동작하게 된다.



- tell_fact intent: tell_fact intent는 choose_fact Intent의 후속 intent로 choose_fact-followup context 생성 또는 빠져나가게 된다. (input, output context) output context 부분에는 숫자 5로 lifespan이 있는데 5초를 의미하는 듯.

- choose_cat intent & tell_cat_fact intent : 이 두 인텐트는 앞에서 설명한 choose_fact intent 와 tell_fact intent와 동작하는 것이 동일하다.


4. Fullfillment

 3의 그림에 보면 가운데 fullfillment web service가 있다. 이는 intent에서 뭘 실행해야 하는지를 의미한다. intent를 클릭해보면 choose_fact, choose_cats, tell_fact, tell_cat_fact intent는 모드 web_hook 을 fullfillment로 가진다. 이는 해당 인텐트가 실행될때 web service로 관련 값을 던져주라는 것이다.


 이 URL은 https 가 기본이다. 개인이 테스트 해보려면, 무료 DNS와 https 를 위한 인증서가 필요하다. http://alnova2.tistory.com/1152 에 관련 내용을 포스팅 하였다.



 이후 포스팅에서는 api.ai 에서 실제 라즈베리 파이를 이용하여 구글홈과 연계해서 온도, 습도 센서 및 전원을 제어해 보도록 하겠다.

반응형
Posted by alias
,