[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で少し作成してみてから検討したいと思います。