Google Assistant를 통해 Watson Assistant와 대화하기 (Conversational Actions 버전)

했던 일



Google Assistant를 통해 Watson Assistant와 상호 작용하는 샘플은 이미 IBM Developer 사이트에 게시되었으며 git에서 코드도 게시되었습니다.
다만, Google Assistant의 「Actions On Google」은, 원래는 「Dialogflow」라고 하는 것이 이용되고 있었지만, 2020/6에 「Conversational Actions」가 릴리스 되어 이쪽이 표준이 된 것 같습니다. 공개된 샘플은 Dialogflow 전제와 같으므로, 이 기사에서는 Conversational Actions에서 Watson Assistant 상호작용해 보았습니다.



다만, 대응은 아직 중도반단으로, 이하의 제약이 있습니다.
・Google Assistant의 고정 장면(Watson에서 말하는 다이얼로그)에서 대화하도록 하고 있지만, 검증으로 확인하고 있는 한, 같은 장면에 3회 되돌리면 강제적으로 대화가 종료되어 버린다
・Watson Assitant의 대화 종료를 주워, Google Assistant측의 대화를 종료하는 핸들링이 미실장

참고 Watson Assistant를 사용하여 Google 액션 만들기
htps : //로 ゔぇぺぺr. 이 bm. m / jp / te ch의 ぉ ギエ s / 아 - r-Rese r ゔ 치온 s /

참고.watson-google-assistant
htps : // 기주 b. 코 m / BM / 와트 ぉ - 오 ぇ - s s t

개요



Conversational Actions에서 IBM Cloud Functions를 통해 Watson Assistant에 요청 및 응답을 받습니다. IBM Cloud Functions에서 Conversational Actions 및 Watson Assistant와 상호 작용하도록 json 매개변수에서 데이터를 교환합니다.



해설



Conversational Actions 설정



Main Invocation과 No_match 인텐트에서 webhooks를 호출하는 설정으로 둡니다. 그리고 "askwatson"이라는 Scene을 만들고 있습니다. 이렇게하면 Webhooks를 통해 Watson Assistant에 요청이 날아가고 google Assistant에서는 'askwatson'이라는 장면에서 처리가 진행됩니다.

자세한 내용은 절차 참조.

Conversational Actions 요청 퍼스



Conversational Actions에서 요청을 받고 구문 분석하는 부분의 코드는 아래에 나와 있습니다.
sessionId 및 scene의 이름을 가져와 전역 변수에 저장합니다.
왓슨 어시스턴트의 컨텍스트는 Google 어시스턴트의 세션 스토리지라는 매개변수에 저장되어 있다고 가정합니다.

참고.Session storage
ぇぺぺrs. 오, ぇ. 코 m / 아시 stan t / 안녕 r 사치 오나 l / s 토라 게 세시 온
if (!args.__ow_body) {
        return reject(errorResponse('body is required'));
      }
      console.log("__ow_body:")
      console.log(args.__ow_body);
      const rawBody = Buffer.from(args.__ow_body, 'base64').toString('ascii');
      console.log("rawBody:");
      console.log(rawBody);
      const body = JSON.parse(rawBody);
      console.log("body:");
      console.log(body);

      // google assistant attributes hold our context
      const googleAssistantSessionStorage = body.session.params;
      console.log('googleAssistantSessionStorage attributes:');
      console.log(googleAssistantSessionStorage);
      if (typeof googleAssistantSessionStorage.hasOwnProperty(googleAssistantSessionStorage, 'watsonContext')) {
        console.log("set watsonContext from googleAssistantSessionStorage.")
        context = googleAssistantSessionStorage.watsonContext;
      } else {
        context = {};
      }

      //global googleSesionId
      googleSesionId = body.session.id
      googleScene = body.scene.name

      const query = body.intent.query;
      console.log('input:' + body.intent.query);
      console.log('context:'+context)

Watson Assistant의 응답을 Conversational Actions로 반환



sessionId와 scene을 설정하고 Watson Assistant의 컨텍스트는 Google Assistant의 세션 저장소에 저장하고 반환합니다.

참고 : conversational actions의 webhook 매개 변수
ぇぺぺrs. 오, ぇ. 코 m / 아시 s 탄 t / 안녕 r 사치 오나 l / 우 ぇ b 호오 ks
function sendResponse(response, resolve,reject) {
  try{
    console.log('Begin sendResponse');
    // console.log(response);

    // Combine the output messages into one message.
    const output = response.result.output.text.join(' ');
    console.log('Output text: ' + output);

    resolve({
      body:formatResponseForGoogleConv(output)
      });
  }catch(err){
    reject({body:formatResponseForGoogleConv(err)});
  }
}

function formatResponseForGoogleConv(outputText){
  console.log("outputText");
  console.log(outputText);
  console.log("googleSesionId");
  console.log(googleSesionId);
  console.log("context");
  console.log(context);
  console.log("googleScene");
  console.log(googleScene);
  return {
    "session": {
      "id": googleSesionId,
      "params": {
        "watsonContext":context
      }
    },
    "prompt": {
      "override": false,
      "firstSimple": {
        "speech": outputText,
        "text": ""
      }
    },
    "scene": {
      "name": googleScene,
      "slots": {},
      "next": {
        "name": "askwatson"
      }
    }
  }
}

절차



리포지토리는 이쪽. 이용 순서는 Readme에 기재되어 있습니다.
htps : // 기주 b. 코 m / 굉장히 아오키 / 와트 ぉ ー お お ぇ - 있어 s 단 t / b ぉ b / 뭐 r / 레아 D 째. md

좋은 웹페이지 즐겨찾기