[Alexa] 최초의 스킬 개발 @ASK SDK v2 for Node.js

이 페이지의 개요



ASK SDK v2 for Node.js를 사용한 기술 개발 절차 설명 을 참고로, sdk v1로 스킬을 작성한 적이 있는 필자가 시도했을 때의 주의점을 공유합니다.

ASK SDK v2 for Node.js



설정 방법은 여기 에 있습니다.

핸들러의 정의 방법이 상당히 바뀌고 있다고 생각합니다. Intent 마다 독립시켜 쉬워지고 있는 것 같은.

주의점



기본적으로는, 설명 페이지대로 문제없이 v2를 시험할 수 있었습니다만, 정말로 처음 만지는 분이라면 곤란할지도 모른다 점을 올려 둡니다.

node.js 버전



절차 페이지에서는 다음과 같이 async를 사용합니다. 따라서 Lambda 함수의 런타임은 nodejs8.10을 선택합시다.
exports.handler = async function (event, context) {

관리 콘솔의 경우 기능 설정의 "함수 코드"에서 설정.



아마도 ASK CLI를 사용하여 배포하면 자동으로 최신 런타임이 선택되지 않을 것이라고 생각하지만, Serverless Framework를 사용하고 있으며 현재 최신 버전 (v 1.27.3) 의 node.js 템플릿이라면 6.10이 serverless.yml로 설정되어 있기 때문에 한 번 이끼했습니다.

ErrorHandler 추가



메인의 handler의 정의로, ErrorHandler를 추가하는 addErrorHandlers(ErrorHandler)를 선언하고 있습니다.

# 다른 Handler와 별개로 Error 처리의 정의를 할 수 있게 된 것 같네요.
exports.handler = async function (event, context) {
  console.log(`REQUEST++++${JSON.stringify(event)}`);
  if (!skill) {
    skill = Alexa.SkillBuilders.custom()
      .addRequestHandlers(
        LaunchRequestHandler,
        HelloWorldIntentHandler,
        HelpIntentHandler,
        CancelAndStopIntentHandler,
        SessionEndedRequestHandler,
      )
      .addErrorHandlers(ErrorHandler)
      .create();
  }

  return skill.invoke(event,context);
}

설명 페이지 내에서 ErrorHandler 선언 설명이 생략된 것 같습니다.
const ErrorHandler = {
    canHandle(handlerInput) {
        return true;
    },
    handle(handlerInput) {
        return handlerInput.responseBuilder.speak('うまく処理できませんでした。')
        .getResponse();
    }
};

끝에



v1에서 마이그레이션하거나 호환성을 유지하기 위한 어댑터 도 제공되고 있는 것 같네요. 기존의 스킬을 일부러 재작성할지 어떨지, 메리트/단점은 아직 판별되지 않기 때문에, 새로운 스킬을 v2로 조금 작성해 보고 나서 검토하고 싶습니다.

좋은 웹페이지 즐겨찾기