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



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

Alexa-hostedスキルを使うと、AlexaがホストするAWSリソースを使ってスキルをすばやく強化することができます。また開発者コンソールのコードエディターを組み合わせて使うことで、コードの変更をデプロイできます。Alexa-hostedスキルの作成から公開まで、すべてをコンソールで完結できます。

よくある質問

どのようなサービスが含まれますか?
Alexa-hostedスキルでは、スキルの作成、編集、公開がすべて開発者コンソールで完結します。AWS Lambdaエンドポイントを始め、メディアストレージ用のAmazon S3バケット、Amazon S3を使用したセッション永続性管理用のキー値テーブルにアクセスできます。コードエディターを使えば、スキルのバックエンドコードを編集し、AWS Lambdaに直接デプロイできます。スキルを作成すると、開発者コンソールによりコード管理用のCodeCommitリポジトリがセットアップされます。
Alexa-hostedスキルにはどうすればアクセスできますか?
Alexa-hostedスキルには、開発者コンソールのスキルの作成ページからアクセスできます。ページの下に、スキルのバックエンドリソースをホストするオプションが表示されます。Alexaがホストオプションを選択します。スキルを作成すると、音声モデル、AWSリソース、コードエディターが有効になり、開発者コンソールが音声モデルのビルドを開始します。その後、開発者コンソールのシミュレーターを使ってスキルのテストを行えるようにするには、コードエディターを使って少なくとも1回はAWS Lambdaにデプロイする必要があります。
利用制限はありますか?
AWSの無料利用枠内に制限されています。アカウントごとに次の制限が適用されます。AWS Lambda: 月あたり、100万件のAWS Lambdaリクエスト100万件、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スキルを強化できます。そのほかのAWSサービスを利用する必要がある場合やAWS無料利用枠を超えた場合、追加のリソースのプロビジョニングには独自のAWSアカウントが必要です。
スキルがAWS無料利用枠のしきい値を超えた場合どうなりますか?
AWS無料利用枠の上限を超えると、少なくとも1つのスキルを個人のAWSアカウントまたは別のクラウドサービスアカウントに移動させることで利用量を制限以内に抑えるために30日間の猶予が与えられます。
Alexa-hostedスキルとして作成できるスキルの種類を教えてください。
Alexa-hostedスキルとして作成できるのはカスタムスキルです。Alexa-hostedスキルを使って、スマートホームスキルなどプリビルドモデルを使用したスキルを作成することはできません。
Alexa-hostedスキルはすべてのロケールで利用できますか? リソースとエンドポイントがホストされるのはどのリージョンですか?
Alexa-hostedスキルはすべてのロケールで利用できます。パブリックベータの間は、すべてのリソースが米国東部(バージニア北部)地域でホストされます。このため、このリージョンから遠い場所で利用するスキルには、レイテンシーの問題が発生する場合があります。
Alexa-hostedスキルを別のサービスに移行するにはどうすればよいですか?
パブリックベータの間は、コンソールでエンドポイントを変更し、新しいエンドポイントにコードを手動でコピーして貼り付ける必要があります。また、S3でホストしているリソースもすべて移動する必要があります。
Alexa-hostedスキルでASK CLIを使うことはできますか?
今はまだ、Alexa-hostedスキルにASK CLIを使うことはできません。現時点では、開発者コンソールを使って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. スキルビルダーをアダプターを使用して初期化
const skillBuilder = Alexa.SkillBuilders.custom().withPersistenceAdapter(
    new persistenceAdapter.S3PersistenceAdapter({bucketName:process.env.S3_PERSISTENCE_BUCKET})
    );

// 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スキルでプロビジョニングされたS3バケットにアップロードできます。アップロードするには、コードエディターの左下隅にあるMedia storage: Amazon S3リンクをクリックします。すると、新しいブラウザタブが開き、AWSコンソールのS3機能に移動します。バケット名とフォルダーがamzn1-ask-skill-xxxxxxx-xxxx-buildsnapshotbucket-xxxxx/Media/のように表示されます。

スキルのindex.jsから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スキルの公開中コードを修正するには、まず開発中ステージで変更を行い、変更をテストしてから、スキルの公開中エンドポイントに変更を昇格させることをおすすめします。公開中コードを簡単に修正し、開発中コードにしたくない別の変更を行う場合、開発中エンドポイントを直接修正できます。ただし、変更をテストすることはできません。開発中ステージでコードエディターを開き、コードを編集してから、変更を直接公開中エンドポイントにデプロイします。このアクションは公開中スキルに影響します。