Google을 통한 개인화

개시하다


Google 보좌관으로 사용자 정보에 맞는 정보를 제공하지 않겠습니까?
예를 들어 연속으로 시작하는 사용자에게 매일 시작해 주셔서 감사합니다.😸」사용자의 위치 정보에 대응하는 정보를 제공하고 게임의 최고 득점을 저장해 보자.
사용자 데이터가 저장되면 할 수 있는 동작의 폭도 커질 것 같아요!💪
다음은 Action Google에서 사용할 수 있는 사용자 데이터를 저장하는 방법입니다.

대화에만 데이터 저장


사용 예:

  • 짧은 단어를 표지로 저장합니다.
  • 앞의 질문에 대한 답변을 1개 이상 활용하고 싶다.
  • 사용법


    한 대화에서만 (시작 -> 종료 전) 정보를 저장하고 싶을 때 conversationToken 활용해 보세요.
    동작의Fullfillment 처리Actions on Google Node.js client libraryconv.data 사용 방법
    새 변수와 값만 설정하면 됩니다.
    ↓의 샘플 코드 제작conv.data.count으로 호칭될 때마다 계수한다.
    app.intent('今何回目', conv => {
      if (!conv.data.count) {
        conv.data.count = 0;
      }
      const count = ++conv.data.count;
      conv.ask("今は" + count + "回目ですよ");
    });
    

    작업 사용자 저장소에 저장


    이용 예

  • 동작의 시작 횟수에 따라 시작할 때의 대화를 변경하고자 합니다.
  • 매번 사용자에게 위치 정보를 요청하지 않기를 바랍니다.
  • 사용법


    사용자 저장소는 Action on Google이 제공하는 모든 동작의 데이터 저장 영역으로, 대화에 걸쳐 데이터를 저장합니다.
    이것도 간단한 사용 방법conv.user.storage으로 새로운 변수와 값만 설정하면 된다.
    고려 사항
  • 저장할 수 있는 데이터의 최대 크기는 10KB입니다.초과할 경우 외부 DB를 활용하는 것도 고려해보세요.

  • iOS, 안드로이드에서는 공유할 수 없습니다.(Action이 시작되면 가능하므로 수정합니다.)
  • app.intent('住所を設定', conv => {
      // ユーザストレージのaddressに保存
      conv.user.storage.address = '今夜月の見える丘';
      conv.ask("おすすめの住所を設定しましたよ");
    });
    
    app.intent('どこ住んでるの?', conv => {
      // ユーザストレージのaddressを取得
      conv.ask("私は" + conv.user.storage.address + "に住んでますよ。とてもいいところです。");
    });
    

    lastseen을 이용하다

    lastseen 사용자가 마지막으로 방문한 시간을 시간 스탬프로 돌려줍니다.
    일주일 만에 시동이 걸린 상황에서 "2주 만이네요. 기다렸어요.🌝」이렇게 손을 뗄 수 없는 문장을 컨트롤할 수 있다.
    사용하려면 conv.user.last.seen만 방문하면 됩니다.
    직접 사용하면2018-12-09T13:59:07.000Z그렇게UTC,사용Moment Timezone등간편하게활용할 수 있었으면 좋겠습니다.
    const moment = require('moment-timezone');
    
    app.intent('Default Welcome Intent', conv => {
      // 前回の起動情報があるか確認
      if (conv.user.last.seen) {
        // 
        const lastSeen = moment(conv.user.last.seen).tz("Asia/Tokyo").format('YYYY年MM月DD日 HH:mm:ss');
        conv.ask(lastSeen + " 以来ですね。久しぶりだね、元気にしてたかい?");
      } else {
        conv.ask("Let's start developing on Actions on Google!");
      }
    });
    

    사용자 ID 가져오기


    지금까지 Action on Google에서 제공한 저장소에 대해 썼지만, 외부 DB에 데이터를 저장하기 위해서는 사용자의 ID가 필요합니다.
    사용자 ID는 Action Google에서 제공하지 않으며 직접 작성하여 관리해야 합니다.
    (2018년 3월까지 속성conv.user.id이 있었으나 디프리캣이 돼 내년 2019년 3월 삭제될 예정이다.【참고:Anonymous User Identity
    처리 시 사용자 ID를 생성한 후 사용자 스토리지 디바이스에서 관리할 수 있습니다.
    샘플 코드는 uuidnpm 라이브러리를 사용하여 사용자 ID를 생성합니다.
    사용자 스토리지 디바이스가 아닌 경우 이 생성되고 설정됩니다.
    const uuid = require('uuid/v4');
    
    // 例: uuidv4を用いて生成する。
    const generateUUID = () => {
      return uuid();
    }
    
    let userId;
    // ユーザIDがユーザストレージに保存済みかどうか
    if ('userId' in conv.user.storage) {
      userId = conv.user.storage.userId;
    } else {
      // なければ生成する
      userId = generateUUID();
      conv.user.storage.userId = userId
    }
    
    const data = "Something you want to save";
    saveDataToDB(userId, data);
    

    개발 기술: 사용자 저장 리셋 방법


    디버깅을 할 때 테스트 데이터를 통해 사용자 저장 장치를 여러 번 리셋해야 합니다.
    이 경우 사용자 저장소를 빈 대상으로 덮어씁니다.
    conv.user.storage = {}; 
    
    또한 작업이 게시된 경우 Action Directory의 작업 상세 화면 아래에 있는'재설정 애플리케이션'부터 시작할 수 있습니다.

    총결산


    약간의 정보라면 외부의 DB를 사용하지 않아도 간단하게 저장할 수 있다.
    조금이라도 공을 들여 영리한 조수가 되어보는 게 어떨까.

    참조 링크

  • Save Data in Conversation  |  Actions on Google  |  Google Developers
  • General Best Practices  |  Actions on Google  |  Google Developers
  • 좋은 웹페이지 즐겨찾기