あなたのAlexaダッシュボード 設定

カスタムスキルをテストする

デプロイ中に新しいスキルをテストするオプションは複数あります。

  • 開発者ポータルの「テスト」ページに表示されるサービスシミュレーターを使用した基本的なテストを実施する
  • Alexaが使えるデバイスを使用して音声でテストする

テストを始める前に、以下を実施してください。

  1. 以下のトピックに記載されている通りに、ウェブサービスまたはLambda関数を構築します。
  2. 音声インターフェース用のインテントとサンプル発話を定義して、開発者ポータルに入力します。
  3. 該当する場合には、作成するスキルで利用する画像、オーディオファイル、ビデオファイルがパブリックからアクセス可能なウェブサイトでホストされていることを確認します。

テスト手順の概要

AWS Lambda関数をテストする

AWS LambdaAmazon Web Servicesが提供するサービスの1つ)上のAWS Lambda関数として、新しいAlexa機能のクラウドベースのサービスを作成した場合は、以下の手順を実行してください。これらの手順の詳細については、下のセクションで説明しています。

  1. Alexaが使えるデバイス(Amazon Echoなど)を使用する場合、その端末が開発者アカウントに登録されていることを確認してください。
  2. カスタムスキルのAWS Lambda関数を作成する」を参照の上、コード用のLambda関数を作成または更新し、Alexa Skills Kitを関数のトリガーとして設定します。Lambda関数の更新したコードをアップロードします。
  3. 開発者ポータルでスキルを登録します。「開発者ポータルでカスタムスキルを登録および管理する」を参照してください。テストのためには、以下のフィールドに入力する必要があります。
    • スキルの基本情報: スキルタイプ(カスタム対話モデル)、名前呼び出し名
    • 対話モデル: インテントスキーマサンプル発話カスタムスロットタイプ
    • コンフィギュレーション: エンドポイントLambda ARN」オプションを選択して、関数のARNを入力します。
    • テスト: 「有効」に設定します。
  4. 音声インターフェースで定義した質問またはコマンドで、新しいAlexa機能をテストします。「テストとデバッグ」を参照してください。

    サービスシミュレーターを使用して、コマンドを入力し、サービスから送信されるJSON応答を確認することもできます。

ウェブサービスをテストする

独自のエンドポイントでホスティングしているウェブサービスとして新しいAlexa機能のクラウドベースのサービスを作成した場合は、以下の手順を実行します。これらの手順の詳細については、下のセクションで説明しています。

  1. Alexaが使えるデバイス(Amazon Echoなど)を使用している場合、その端末を開発者アカウントに登録していることを確認してください。
  2. インターネットでアクセス可能なエンドポイントにウェブサービスをデプロイします。「ウェブサービスをテスト用のエンドポイントにデプロイする」を参照してください。
  3. 開発者ポータルでスキルを登録します。「開発者ポータルでカスタムスキルを登録および管理する」を参照してください。テストのためには、以下のフィールドに入力する必要があります。
    • スキルの基本情報: スキルタイプ(カスタム対話モデル)、名前呼び出し名
    • 対話モデル: インテントスキーマサンプル発話カスタムスロットタイプ
    • コンフィギュレーション: HTTPSエンドポイントオプションを選択して、サービスのエンドポイントのURLを入力します。
    • SSL Certificate: いずれか1つのオプションを選択します。テスト用に自己署名のSSL証明書を使用する場合は、証明書を作成して開発者ポータルにアップロードします。「自己署名証明書を使用するようにウェブサービスをコンフィギュレーションする」を参照してください。
    • テスト: 「有効」に設定します。
  4. 音声インターフェースで定義した質問またはコマンドで、新しいAlexa機能をテストします。該当する場合には、視覚対話と音声対話をテストします。「テストとデバッグ」を参照してください。

    サービスシミュレーターを使用して、コマンドを入力し、サービスから送信されるJSON応答を確認することもできます。

テスト用にAlexaが使えるデバイスを登録する

Alexaが使えるデバイス(Amazon Echoなど)を使用してテストするには、その端末を、Amazon開発者ポータルに開発者アカウントを登録する際に使用したのと同じメールアドレスに登録する必要があります。Amazon開発者アカウント以外のアカウントを使用して、すでにその端末をセットアップしている場合は、以下の手順を実行してください。

  1. ウェブバージョンのAmazon Alexaアプリ(alexa.amazon.com)にアクセスし、Amazon開発者アカウントでサインインします。
  2. 画面の指示に従い、開発者アカウントに端末を再登録します。この操作を行うと、既存のメールアドレスの登録が解除されますのでご注意ください。
  3. 端末のユーザーとして開発者アカウント以外のアカウントを再度追加する場合は、ファミリー機能を使用できます。

ウェブサービスをテスト用のエンドポイントにデプロイする

サービスシミュレーターまたはAlexaが使えるデバイスを使用してスキルをテストするには、インターネットでアクセス可能なエンドポイントにウェブサービスをデプロイする必要があります。

サービスは、HTTPS経由でのリクエスト送信をサポートするすべてのクラウドサービスでホストできます。ウェブサービスのデプロイとコンフィギュレーションの詳細については、クラウドホスティングサービスのドキュメントを参照してください。

ウェブサービスで自己署名証明書を使用する

Alexaサービスがウェブサービスと通信する際、ユーザーのリクエストとそれに対する応答はインターネットを介して送受信されます。Alexaでは、機密性および保全性を確保するために、必ずSSL/TLSによるHTTP接続が使用されます。

テストの際にこの要件を満たすには、自己署名のSSL証明書を使用できます。この場合、証明書を自分で作成し、スキルを設定する際に開発者ポータルにアップロードします。Alexaへの接続時にその証明書を提示するようにエンドポイントを設定します。このオプションは、テストでのみ使用できます。

以下のセクションを参照して、テスト用の自己署名証明書を設定してください。以下の手順では、Linuxプラットフォーム上でOpenSSLを使用します。

テスト用に秘密鍵と自己署名証明書を作成する

  1. 以下のコマンドを実行して、秘密鍵を作成します。

       openssl genrsa -out private-key.pem 2048
    
  2. テキストエディターを使用して、次の形式のコンフィギュレーションファイルを作成し、.cnfファイル(例: configuration.cnf))として保存します。

    [req]
    distinguished_name = req_distinguished_name
    x509_extensions = v3_req
    prompt = no
    
    [req_distinguished_name]
    C = US
    ST = Provide your two letter state abbreviation
    L = Provide the name of the city in which you are located
    O = Provide a name for your organization
    CN = Provide a name for the skill
    
    [v3_req]
    keyUsage = keyEncipherment, dataEncipherment
    extendedKeyUsage = serverAuth
    subjectAltName = @subject_alternate_names
    
    [subject_alternate_names]
    DNS.1 = Provide your fully qualified domain name
    
  3. コンフィギュレーションファイルの次の内容を独自の値で置き換えます。

    ST: Provide your two letter state abbreviation
    L: Provide the name of the city in which you are located
    O: Provide a name for your organization
    CN: Provide a name for the skill
    DNS.1: Provide the fully qualified domain name for your endpoint
    

    DNS.1」セクションには、エンドポイントのドメイン名を指定する必要があります。そのため、ドメイン名が分かってから、証明書の作成をするとよいでしょう。

    完成したコンフィギュレーションファイルのサンプルは、以下を参照してください。

  4. 以下のコマンドを使用して証明書を生成します。使用したprivate-key.pemファイルとconfiguration.cnfファイルの名前を指定します。

    openssl req -new -x509 -days 365 \
                -key private-key.pem \
                -config configuration.cnf \
                -out certificate.pem
    

これにより、certificate.pemというファイルに自己署名証明書が作成されます。

証明書の.pemファイル、秘密鍵の.pemファイル、コンフィギュレーションの.cnfファイルをセキュリティ保護された場所に保存し、証明書を使用してスキルのコンフィギュレーションを更新します

証明書の完成したコンフィギュレーションファイルは、以下の例のようになります。

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
C = US
ST = WA
L = Seattle
O = My Company Name
CN = Wise Guy

[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @subject_alternate_names

[subject_alternate_names]
DNS.1 = wiseguy.mywebserver.com

自己署名証明書を使ってAlexaスキルのコンフィギュレーションを更新する

証明書を作成したら、開発者ポータルでコンフィギュレーションを更新する必要があります。秘密鍵と異なり、証明書には公開データしか含まれないため、サービスを識別する目的でAmazonと共有することができます。これにより、Alexaは証明書の公開鍵の有効性を確認できます。

  1. 開発者ポータルのAlexaセクションにログインします。開発者ポータルのコンソールページで、「Alexa」をクリックします。
  2. 「Alexa Skills Kit」ボックスで、「Get Started」をクリックして「Alexa Skills Kit」ページを開きます。作成済みのスキルがすべて表示されます。

  3. リストから変更するスキルを探して、「Edit」をクリックします。
  4. SSL Certificate」をクリックします。このセクションは、HTTPSエンドポイントを使用している場合にのみ表示されます。
  5. I will upload a self-signed certificate」オプションを選択します。
  6. 証明書の.pemファイルをテキストエディターで開き、コンテンツをすべてコピーし、表示されたテキストボックスに貼り付けます。テキストを貼り付けたボックスは次のようになります。

    ----BEGIN CERTIFICATE----
    Encrypted data
    -----END CERTIFICATE-----
    

自己署名証明書を使ってエンドポイントをコンフィギュレーションする

Alexaがリクエストを送信すると、サービスは証明書を提示する必要があります。証明書の「subject alternate name」は、エンドポイントのドメイン名と一致する必要があります。

たとえば、サービスのエンドポイントがhttps://wiseguy.mywebserver.com/wiseguyにあるとします。この場合、エンドポイントは「subject alternate name」にwiseguy.mywebserver.comと設定されている有効な証明書を提示する必要があります。この名前は、証明書の生成に使用したコンフィギュレーションに指定してください。

この証明書を提示するエンドポイントをコンフィギュレーションします。このコンフィギュレーションの詳細は、ウェブサービスのホスティング方法によって異なります。たとえば、Amazon Web Services Elastic Beanstalkを使用している場合、AWSコマンドラインインターフェースを使って証明書をアップロードします。

その他のSSLリソース

SSLと自己署名証明書についてのその他のリソースは以下の通りです。これらのリンクは外部のサイトに移動しますのでご注意ください。

サービスシミュレーターを使用した基本的なテスト

開発者ポータルでは、端末を使わないテストのためのツールを提供しています。

  • 音声シミュレーターでは、プレーンテキストまたはSSMLでフレーズを入力して、Alexaがどのようにテキストを読み上げるかを聞くことができます。
  • サービスシミュレーターでは、発話を入力し、サービスに送信されたJSONリクエストとサービスから返されたJSON応答の両方を確認することができます。また、応答を再生して、Alexaがどのように応答を読み上げるかを聞くこともできます。

これらのツールは、開発者ポータルのスキルのTestページで利用できます。

音声シミュレーター

  • 音声シミュレーターのテキストボックスに聞きたいテキストを入力して、「Listen」をクリックします。
  • プレーンテキストまたはSSMLでマークアップしたテキストを入力できます。
  • SSMLで入力する場合、<speak>タグは必要ありません
  • 音声シミュレーターは、スキルのサービスとの対話はしません。そのため、最小限のスキルのコンフィギュレーションをする前でも、読み上げテキストを聞くことができます。たとえば、対話モデルを完成させる前にスキルに使用するSSMLの出力を確認したいときなどに使えます。

サービスシミュレーター

  • シミュレーターを使ったテストの前に、以下に記載した、スキルのテストに最低限必要なデータを入力する必要があります。
  • 発話を入れてテストする際には、英字、スペース、ピリオド、アポストロフィのみ使用できます。発話に数字を含める必要がある場合は、文字で記述します(「1」ではなく「いち」)。
  • サービスから送信されたJSON応答が表示されたら、応答の下にある「Listen」(または再生アイコン)をクリックしてAlexaの音声で応答を聞きます。
  • シミュレーターを使用したテストでは、スキルの応答に含まれるカードはAlexaアプリに送信されません(端末を使用した場合は送信されます)。そのため、シミュレーターはAlexaアプリのホームカードがどのように表示されるかを確認するためには使用できません。
  • Display.RenderTemplateディレクティブを使用している場合は、Echo Showのディスプレイテンプレートと非常によく似た内容がサービスシミュレーターに表示されますが、その表示は対話式ではありません。

サービスシミュレーターは、以下のテストには対応していません。

  • AudioPlayer ディレクティブ
  • PlaybackController ディレクティブ
  • Dialog ディレクティブ
  • VideoApp ディレクティブ
  • ユーザーのパーミッション
  • ユーザーのアカウントリンク

テストとデバッグ

一般的なテストの推奨事項

  • 呼び出し名をテストします。言いやすく、Alexaで一貫して認識される名前にしてください。Alexaに認識されない頻度が高い場合は、名前の変更を検討してください。呼び出し名の詳細については、「呼び出し名を決定する」を参照してください。
  • 音声インターフェースのサンプル発話をすべてテストします。

    メモ: テストの実行中、たいていの場合は新しくサンプル発話を追加する必要が生じます。新しく追加したサンプル発話は、テスト可能になるまでに少し時間がかかることがあります。特に、呼び出し名を含む発話(「アレクサ、<呼び出し名>で双子座の運勢を調べて」など)は、テスト可能になるまでに時間がかかることがあります。

  • スロット値を変えたり、わずかに異なるフレーズを使ったりして、さまざまなバリエーションでサンプル発話をテストします。非常によく似たサンプル発話には特に注意を払ってください。

    サンプル発話のスロット値の定義については、「カスタム対話モデルのリファレンス」を参照してください。

  • Alexaから送信された異なるタイプのリクエストに、サービスが正しく応答することを確認します。

    • LaunchRequest
    • IntentRequest
    • SessionEndedRequest
  • すべてのインテントが、サンプルフレーズとそのフレーズのバリエーションによって正しくトリガーされることを確認します。インテントの定義については、以下を参照してください。
  • Alexaアプリで、スキルの詳細ページ(「スキル」オプションの下)を確認します。アイコン、説明、サンプルフレーズ、その他のフィールドが、Alexaに追加した機能をユーザーが理解するのに役立つ有意義な情報を提供していることを確認します。
  • テスト中に他のユーザーを観察できる場合は、各インテントを呼び出すためにユーザーが使用したフレーズを記録し、それに応じてサンプル発話を更新してください。
  • 開発者ポータルで指定したサンプルフレーズを特にテストします。これらのフレーズは新規のユーザーが初めて試すもののため、正常に機能することを確認することが重要です。

スキルの認定を申請する前に実施する必要のあるテストの詳細については、「カスタムスキルの認定要件」を参照してください。

ユーザーエラー用のスロットをテストする

スロット値を含むインテントについては、値の抜けや不正な値など、さまざまな順序と組み合わせをテストしてください。AMAZON.DATEAMAZON.NUMBERAMAZON.DURATIONなどの標準スロットタイプのいずれかを使っている場合は、ユーザーが言ったこれらのスロットに対応する単語が指定のデータタイプに変換できないときに、コードが適切に応答することを確認します(スロット値の詳細は、「カスタム対話モデルのリファレンス」を参照してください)。

たとえば、ユーザーが指定した2つの数字を追加するスキルには、以下のように、2つのAMAZON.NUMBERスロットとサンプル発話を定義するインテントが含まれることがあります。

NumberAddIntent add {xValue} and {yValue}

このフレーズを、xValueスロットとyValueスロットに数字以外の単語を指定してテストし、サービスが適切な応答(端末が数値データを聞き取れなかったことがユーザーに分かるような応答)を返すことを確認します。

同様に、スロットが常に固定値のセットを含む場合、ユーザーがこのセットにない値を言ったときにサービスが正しく応答することを確認します。たとえば、「Daily Horoscopes」では、Signスロットに有効な星座を想定します。Signスロットに星座名のいずれにも該当しない値が含まれる場合に、ユーザーに分かりやすいエラーメッセージをサービスが提供することを確認します。

想定外の入力や対話エラーへの応答に関する推奨事項は、Alexaの発話内容を参照してください。

テスト時にAmazon Alexaアプリを使用する

Amazon Alexaアプリは、Fire OS、Android、iOS端末、またはパソコンのウェブブラウザ(http://alexa.amazon.com/)で使用できる、無料のコンパニオンアプリです。このアプリでは、テストに役立つ2つのツールが提供されています。

  • ホームカード。これらのカードは通常、Alexaスキルからの音声の応答を補完する視覚的な情報をユーザーに提供するために使用します。たとえば、ユーザーがAlexaに天気を聞いたとき、詳細な予報は視覚的なカードのほうに提供されます。
  • Alexaの履歴。正しいインテントがトリガーされたかどうかにかかわらず、Alexaとの対話をすべて記録します。Alexaが発話をどう解釈したかを正確に把握したり、音声インターフェースの問題を遡って追跡したりする場合に有効です。

端末を登録したのと同じアカウントを使ってAmazon Alexaアプリにログインする必要があることにご注意ください。

  • Fire OS端末の場合、Amazon Alexaアプリには、端末が登録されたアカウントで自動的にログインされます。
  • iOS、Amazon Android以外の端末、ウェブブラウザの場合、アプリを初めて起動したときにログイン画面が表示されます。アカウントを切り替えるには、「設定」、「ログアウト」の順にクリックしてください。

Amazon Alexaアプリのホームカード

ホームカードを確認するには、Amazon Alexaアプリを開いて、ナビゲーションから「ホーム」をクリックします。

自分のサービスから返されたホームカードは、自由に制御することができます。開発の初期段階では、すべてLaunchRequestリクエストとIntentRequestリクエストからカードを返すとよいでしょう。基本的なデバッグ情報(トリガーされたインテント名など)を含めることで、動作を確認しやすくなります。エンドユーザー用のサービスを準備する段階に入ったら、通常のエンドユーザーエクスペリエンスに必要なカードだけを返すよう変更します。

これらのカードに加えて、Alexaはサービスとの対話で生じたエラーに対してカードを返します。一般的なエラーの一部を以下に記載します(全部ではありません)。

エラーカード 考えられる原因
想定外の通信エラー Alexaが、サービスに接続してリクエストを送信できない場合に発生します。さまざまな理由が考えられます。

開発者ポータルのコンフィギュレーションで指定したエンドポイントが正しくない。
ウェブサービスがオンラインになっていない。
エンドポイントがポート443経由のトラフィックを受け付けるようコンフィギュレーションされていない。
SSLハンドシェイクエラー SSLのコンフィギュレーションが正しくない場合に発生します。たとえば、自己署名証明書を使用しており、エンドポイントで提示された証明書の公開鍵が開発者ポータルのコンフィギュレーションで指定された鍵と一致しない場合に、このエラーが発生します。
プロトコル違反 サービスの応答が仕様に従っていない場合に発生します。たいていはコードのエラーが原因です。たとえば、サービスがハンドルされない例外とみなして終了した場合、Alexaから受信する応答は正しくありません。
ホスト名検証エラー 証明書のDNS.1設定に指定したドメイン名がエンドポイントのドメイン名と一致しない場合に発生します。

証明書のコンフィギュレーションファイルに指定したドメイン名が正確に一致することを確認してください。プロトコル(https://)または末尾のスラッシュを含めないでください。

たとえば、サービスのエンドポイントがhttps://wiseguy.mywebserver.com/wiseguyにある場合、証明書のDNS.1エントリーは次のように設定する必要があります。

wiseguy.mywebserver.com
SSLハンドシェイク開始時に名前の認識不可 Apache HTTP Serverの古いバージョンを使用してウェブサーバーをホストし、そのサーバーがServerNameまたはServerAliasを使ってコンフィギュレーションされていない場合に発生します。

解決するには、サーバーを2.4.10以降のバージョンにアップグレードするか、ServerName/ ServerAliasをサーバーのコンフィギュレーションファイルに追加します。

Amazon Alexaアプリの履歴

Amazon Alexaアプリには、ユーザーとの対話の完全な履歴が表示されます。履歴の各項目には、ユーザーの発話の書き起こしテキストが示されます。

履歴を確認するには、Amazon Alexaアプリを開き、「設定」、「履歴」の順にクリックします。

発話がどのようにテキストに変換されたかを確認することは、サービスが想定通りに応答しない場合に特に役立ちます。たとえば、以下のような場合です。

  • Alexaが呼び出し名を正しく理解しなかったために、サービスがリクエストを受け取らなかった。
  • サービスに送信されたインテントは想定したものと異なっていた。
  • 正しいインテントが送信されたが、スロットデータが想定外だった。
  • Alexaがユーザーのコマンドを正しく理解しなかったために、サービスにインテントが送信されなかった。

その他のテストおよびデバッグ用ツール

ログファイルも、テストに有効なオプションの1つです。特に、サービスが応答を送信できない問題を検知するのに有効です。

Elastic Beanstalkでのログのセットアップとアクセスの例は、「サンプルカスタムスキルをウェブサービスとしてデプロイする」の「ログファイルにアクセスする」セクションを参照してください。

次のステップ