Alexa-hostedスキルを使用してスキルをエンドツーエンドで作成する



Alexa-hostedスキルを使用してスキルをエンドツーエンドで作成する

Alexa-hostedスキルを使うと、AlexaがホストするAWSリソースを使ってスキルをすばやく強化することができます。また開発者コンソールのコードエディターを組み合わせて使うことで、AWS Lambdaのコードを編集したり変更をデプロイしたりできます。Alexa-hostedスキルの編集やデプロイに、ASK CLIを使うこともできます。

よくある質問

どのようなサービスが含まれますか?
Alexa-hostedスキルでは、スキルの作成、編集、公開がすべて開発者コンソールで完結します。AWS Lambdaエンドポイントを始め、メディアストレージ用のAmazon S3バケット、Amazon S3を使用したセッション永続性管理用のキー値テーブルにアクセスできます。コードエディターを使えば、スキルのバックエンドコードを編集し、AWS Lambdaに直接デプロイできます。スキルを作成すると、サービスによりコード管理用のAWS CodeCommitリポジトリもセットアップされます。ASK CLIを使ってこのリポジトリにアクセスしてスキルを編集できます。
Alexa-hostedスキルにはどうすればアクセスできますか?
Alexa-hostedスキルは、開発者コンソールのスキルの作成ページから作成できます。ページの下に、スキルのバックエンドリソースをホストするオプションが表示されます。Alexaがホストオプションを選択します。スキルを作成すると、音声モデル、AWSリソース、コードエディターが有効になり、開発者コンソールが音声モデルのビルドを開始します。
利用制限はありますか?
AWSの無料利用枠内に制限されています。アカウントごとに次の制限が適用されます。AWS Lambda: 月あたり、100万件のAWS Lambdaリクエスト、320万秒のコンピューティング時間を利用できます。Amazon S3: 月あたり、5 GBのAmazon S3ストレージ、20,000件のGETリクエスト、2,000件のPUTリクエスト、15 GBのデータ転送を利用できます。AWS CodeCommit: 月あたり、50 GBのストレージ、10,000件のGitリクエストを利用できます。
AWSアカウントは必要ですか?
必要ありません。AWSアカウントを使うことなく、Alexa開発者コンソールから直接必要なリソースをプロビジョニングして、Alexaスキルを強化できます。そのほかのAWSサービスを利用する必要がある場合やAWS無料利用枠を超えた場合、追加のリソースのプロビジョニングには独自のAWSアカウントが必要です。
スキルがAWS無料利用枠のしきい値を超えた場合どうなりますか?
AWS無料利用枠の上限を超えると、少なくとも1つのスキルを個人のAWSアカウントまたは別のクラウドサービスアカウントに移動させることで利用量を制限以内に抑えるために30日間の猶予が与えられます。
Alexa-hostedスキルのAmazon S3ストレージの使用状況はどこで確認できますか?
Amazon S3の使用状況は、開発者コンソールのコードエディタタブのメディアストレージに表示されます。使用状況には、セッション永続性用データのストレージなどが含まれます。
Alexa-hostedスキルとして作成できるスキルの種類を教えてください。
Alexa-hostedスキルとして作成できるのはカスタムスキルです。Alexa-hostedスキルを使って、スマートホームスキルなどプリビルドモデルを使用したスキルを作成することはできません。
Alexa-hostedスキルはすべてのロケールで利用できますか? リソースとエンドポイントがホストされるのはどのリージョンですか?
Alexa-hostedスキルはすべてのロケールで利用できます。すべてのリソースが米国東部(バージニア北部)地域でホストされます。このため、このリージョンから遠い場所で利用するスキルには、レイテンシーの問題が発生する場合があります。
Alexa-hostedスキルを別のサービスに移行するにはどうすればよいですか?
Alexa-hostedスキルを別のサービスに移行するには、開発者コンソールでエンドポイントを変更し、新しいエンドポイントにコードを手動でコピーして貼り付けます。また、Amazon S3でホストしているリソースもすべて移動する必要があります。
既存のスキルの代わりにAlexa-hostedスキルを使うにはどうすればよいですか?
新しいAlexa-hostedスキルを作成してから、そのAlexa-hostedスキルにコンテンツを追加する必要があります。現時点では、既存のスキルをAlexa-hostedスキルに移行することはできません。
Alexa-hostedスキルでサポートされているプログラミング言語には何がありますか?
Alexa-hostedスキルでは現在、Node.jsのバージョン8をサポートしています。
自分のファイルは他のアカウントと共有されますか?
サービスはファイルやリソースを、他のユーザーのアカウントから切り離された個々のアカウントに配置します。開発者コンソールは、個々のアカウントとリソースをアカウント内でプロビジョニングし、管理します。
Alexa-hostedスキルを使用する場合は、メディアファイルや表形式データは暗号化されますか?
はい。Alexa-hostedスキルは、メディアファイルと表形式データにはAmazon S3を使用し、AWSがサポートする暗号方式を使用します。
Alexa-hostedスキルで、NPMインストールを実行できますか?
Amazonでは、ビルドスクリプトを実行するために、スキルの一部としてAWS CodeBuildをプロビジョニングします。NPMインストールは、ビルドスクリプトの一部として実行されます。依存関係をpackage.jsonに配置できるためNPMインストールを実行する必要はありません。デプロイボタンをクリックすると、AWS CodeBuildはNPMインストールを実行します。
Alexa-hostedスキルにライブラリや新しい依存関係を追加するにはどうすればよいですか?
依存関係やライブラリは、スキルのAWS Lambdaパッケージ内にあるpackage.jsonファイルに追加できます。デプロイボタンをクリックすると、依存関係が取得されてビルドされます。
Amazon CloudWatchからAWS Lambdaログにアクセスするにはどうすればよいですか?
Alexa-hostedスキルでは、限定的にAWSコンソールを表示してスキルの開発に重要な情報にアクセスできるようになっています。スキルのAmazon Cloudwatchログにアクセスするには、コードエディターの左下隅にあるLogs: Amazon CloudWatchリンクをクリックします。すると、AWSコンソールの一部が表示され、ログにアクセスできます。
Alexa-hostedスキルでセッション永続性を使うにはどうすればよいですか?
まず、package.jsonファイルのdependenciesセクションに、次のnpm依存関係を追加します。
"ask-sdk-s3-persistence-adapter": "^2.0.0"

次に、index.jsファイルに以下を追加します。

// 1. ask persistence adapterの読み込み
const persistenceAdapter = require('ask-sdk-s3-persistence-adapter');

// 2. persistence adapterをスキルビルダーに追加
exports.handler = Alexa.SkillBuilders.custom()
    .addRequestHandlers(
        LaunchRequestHandler,
...
        SesssionEndedRequestHandler
    )
    .addErrorHandlers(ErrorHandler)
    .withPersistenceAdapter(
        new persistenceAdapter.S3PersistenceAdapter({bucketName:process.env.S3_PERSISTENCE_BUCKET})
    );
    .lambda();

// 3. アトリビュートを保存するためのサンプルハンドラー
async handle(handlerInput){

    const attributesManager = handlerInput.attributesManager;
    let s3Attributes = {"counter":10};
    attributesManager.setPersistentAttributes(s3Attributes);
    await attributesManager.savePersistentAttributes();

    let speechOutput = `こんにちは、ハローワールド! 保存したカウンターは${s3Attributes.counter}です`;

    return handlerInput.responseBuilder
        .speak(speechOutput)
        .getResponse();
},

// 4. アトリビュートを読み込むためのサンプルハンドラー
async handle(handlerInput){

    const attributesManager = handlerInput.attributesManager;
    const s3Attributes = await attributesManager.getPersistentAttributes() || {};
    console.log('s3Attributes is: ', s3Attributes);

    const counter = s3Attributes.hasOwnProperty('counter')? s3Attributes.counter : 0;

    let speechOutput = `こんにちは、ハローワールド! カウンターは${counter}です`;

    return handlerInput.responseBuilder
        .speak(speechOutput)
        .getResponse();
},
Alexa-hostedスキルでメディアファイルを使うにはどうすればよいですか?
画像やオーディオなどのメディアファイルは、Alexa-hostedスキルでプロビジョニングされたAmazon S3バケットにアップロードできます。アップロードするには、コードエディターの左下隅にあるMedia storage: Amazon S3リンクをクリックします。すると、新しいブラウザタブが開き、AWSコンソールのAmazon S3機能に移動します。バケット名とフォルダがamzn1-ask-skill-xxxxxxx-xxxx-buildsnapshotbucket-xxxxx/Media/のように表示されます。

スキルのindex.jsからAmazon S3のファイルにアクセスするには、util.jsを要求し、ユーティリティ関数getS3PreSignedUrl()を使って署名済みURLを入手する必要があります。以下のコードは、picture.jpgファイルをリクエストした場合の例です。

URLの有効期間は60秒です。また、ユーティリティ関数から有効期間を上書きすることはできません。

const Util = require('util.js');
...
handle(handlerInput){

    const pictureUrl = Util.getS3PreSignedUrl("Media/picture.jpg");    
    return handlerInput.responseBuilder
        .speak('画像付きのハローワールドです')
        .withStandardCard('card title', 'card text', pictureUrl)
        .getResponse();
}
エンドポイントを変更するとどうなりますか?
Alexa-hostedスキルはAWS Lambdaエンドポイントをプロビジョニングし、スキルをエンドポイントにリンクします。ホストされるエンドポイントを変更すると、スキルはAlexa-hostedスキルではなくなり、コンソールのコードエディターで新しいエンドポイントにデプロイしなくなります。コンソールでエンドポイントを変更すると、コードタブにホストするエンドポイントに再接続するというオプションが表示されます。
コードを開発中エンドポイントにデプロイするにはどうすればよいですか?
Alexa-hostedスキルが公開されると、コンソールには2つのステージのスキルが表示されます。1つは公開中、1つは開発中です。スキルの開発中ステージでは、コードエディターを使ってコードの編集、保存、AWS Lambdaエンドポイントの開発中バージョンへのデプロイができます。このアクションは、スキルの公開中エンドポイントに影響しません。その後、テストタブに移動し、変更をテストできます。
開発中エンドポイントを公開中エンドポイントに昇格させるにはどうすればよいですか?
スキルの音声モデルを変更した場合は、スキルの再認定を申請する必要があります。スキルのコードのみを変更した場合、コードエディターの公開中にするボタンをクリックしてコードを開発中から公開中に昇格させます。このアクションでは、公開したスキルの公開中コードが置換されます。
公開中エンドポイントを簡単に修正するにはどうすればよいですか?
Alexa-hostedスキルの公開中コードを修正するには、まず開発中ステージで変更を行い、変更をテストしてから、スキルの公開中エンドポイントに変更を昇格させることをおすすめします。公開中コードを簡単に修正し、開発中コードにしたくない別の変更を行う場合、開発中エンドポイントを直接修正できます。ただし、変更をテストすることはできません。開発中ステージでコードエディターを開き、コードを編集してから、変更を直接公開中エンドポイントにデプロイします。このアクションは公開中スキルに影響します。
ASK CLIを使ってAlexa-hostedスキルを使い始めるにはどうすればよいですか?
開発者コンソールを使ってAlexa-hostedスキルを作成した後、ASK CLIでスキルを編集してデプロイできます。
  1. 開発者コンソールを使って新しいスキルを作成し、スキルのバックエンドリソースをホストする方法としてAlexaがホストを選択します(まだ行っていない場合)。
  2. コマンドプロンプトでask -vを実行し、ASK CLIのバージョン1.7.0以降がインストールされていることを確認します。以前のバージョンがインストールされている場合は、最新バージョンのASK CLIをインストールする手順に従ってください。
  3. Alexa-hostedスキルのリポジトリをクローンするには、任意のディレクトリに移動し、ask clone --skill-id "your-skill-id"を実行します。スキルIDはamzn1.ask.skill.1のような形になります。または、ask cloneを実行し、スキルのリストからAlexa-hostedスキルを選択します。ask cloneの詳細については、cloneコマンドを参照してください。
ASK CLIではAlexa-hostedスキルのリポジトリをどのように使用しますか?
ask cloneコマンドでは、スキルのバックエンドコードでGitリポジトリを含むフォルダや、対話モデル、スキルマニフェストを作成できます。このリポジトリは以下のブランチで設定されます。
  • devブランチ。開発者コンソールに表示される最新の保存状態に対応します。
  • masterブランチ。開発ステージのAWS Lambdaエンドポイントにデプロイされている内容に対応します。
  • prodブランチ。スキルが既に公開中である場合、公開中のAWS Lambdaエンドポイントにデプロイされている内容に対応します。
ASK CLIで一般的なコマンドはAlexa-hostedスキルにどのように機能しますか?
以下に、Gitリポジトリのアクティビティと開発者コンソールのアクティビティがどのように対応するかを示します。
  • devブランチへプッシュする操作は、開発者コンソールのコードタブで保存をクリックすることと同じです。
  • devをプッシュしてからdevmasterへマージしてmasterへプッシュする操作は、開発者コンソールのコードタブでデプロイをクリックすることと同じです。
  • masterprodへマージしてからprodへプッシュする操作は、開発者コンソールのコードタブで公開するをクリックすることと同じです。これは公開中のスキルのバックエンドコードを簡単に修正するのみで、スロット、インテント、発話の変更のような対話モデルの更新はデプロイされません。

以下に、ask deployコマンドを使用する手順を示します。この手順では、devmasterブランチにコマンドを実行し、ローカルコードベースをスキルの開発ステージのAWS Lambdaエンドポイントにプッシュします。

ASK CLIを使用してAlexa-hostedスキルに変更をデプロイするには:

  1. devブランチで変更を行います。たとえば、<変更を行う>
    <Gitリポジトリのルートディレクトリに移動する>の後、以下のコマンドを実行します。
    git add .
    git commit -m "commit message"
  2. ask deployコマンドを実行します。このコマンドは、devブランチをmasterにマージして、リモートdevブランチとリモートmasterブランチに変更をプッシュします。

変更をテストしたら、開発者コンソールを使ってスキルをAlexaスキルストアに公開するプロセスを開始します。詳細については、スキルをテストして認定を申請するを参照してください。

ASK CLIを使って公開中AWS Lambdaエンドポイントを簡単に修正するにはどうすればよいですか?
公開済みのスキルについて、公開中のコードベースを簡単に修正するには、開発者コンソールで公開するをクリックして変更を公開に昇格させるか、以下を実行してmasterブランチをprodにマージすることができます。
git checkout prod
git merge master
git push

このアクションはそのスキルを使っているすべてのユーザーに影響します。スロット、インテント、発話の変更のような対話モデルの更新はデプロイされません。また簡単な修正をdevブランチとmasterブランチにマージして、変更が失われないようにする必要があります。そうしないと、スキルが認定に合格したときや変更を公開に昇格させたときなど、開発ステージのスキルが公開されたときに簡単な修正は上書きされてしまいます。このような場合、masterブランチのコードがデプロイされ、prodブランチのコードは強制的なマージにより置き換えられます。

ASK CLI認証情報ヘルパーで問題が発生したらどうすればよいですか?
以前のバージョンのGitをインストールした状態でAWS CodeCommit認証情報ヘルパーを設定していると、以下のようなエラーが表示されることがあります。この問題に対処するには、バージョン2.9以降にGitを更新します。
`fatal: unable to access`
`'https://git-codecommit.us-east-1.amazonaws.com/v1/repos/.../':`
`The requested URL returned error: 403`