スキルにAmazon定義済みタスクを追加する



スキルにAmazon定義済みタスクを追加する

プロバイダースキルは、1つ以上のカスタムタスク、または、ほかのスキルがDirect Skill Connectionsを通じてリクエストできるAmazon定義済みタスクを実装できます。ここでは、Amazon定義済みタスクの実装手順を紹介します。カスタムタスクについては、スキルにカスタムタスクを追加するを参照してください。

現時点で、Amazon定義済みタスクの実装を承認されているプロバイダーは次のとおりです。

  • 印刷: ヒューレットパッカード、キヤノン、エプソン
  • レストラン予約: OpenTable
  • 配車予約: Uber

スキルをAmazon定義済みタスクのプロバイダーにするためのスキル更新プロセス

スキルをAmazon定義済みタスクのプロバイダーにするための大まかなスキル更新の流れは次のとおりです。

  1. スキルマニフェストを更新し、タスクのプロバイダーとしてスキルを登録します。
  2. タスクを実行するハンドラーを実装します。
  3. プロバイダースキルをテストします。
  4. プロバイダースキルの認定を申請します。

ステップ1: スキルマニフェストを更新し、タスクのプロバイダーとしてスキルを登録する

Skill Connectionsサポートをスキルに追加するには、スキルマニフェストtasksフィールドを追加します。以下の例を参照してください。

nameフィールドには、スキルが実行できるタスクの名前が含まれます。versionフィールドには、タスクのバージョンが含まれます。この例のマニフェストでは、このスキルはAMAZON.PrintPDFタスクのバージョン1のプロバイダーとして登録されています。

例:プロバイダースキルのスキルマニフェスト

以下は、スキルマニフェストを更新し、タスクのプロバイダーとしてスキルを登録する方法の例です。

{
   "manifest": {
       "publishingInformation": {
           "locales": { ... }
        },
       "apis": {
           "custom": {
               "endpoint": {
                   "uri": "..."
                },
               "interfaces": [],
               "tasks" : [
                    {
                     "name": "AMAZON.PrintPDF",
                     "version": "1"
                    }
                ]
            }
        },
       "manifestVersion": "..."
    }
}

ステップ2: タスクを実行するハンドラーを実装する

プロバイダースキルは、タスクを実行するハンドラーを実装します。

タスクを処理したら、プロバイダーは、タスク実行の結果としてTasks.CompleteTaskディレクティブを送信し、タスクの完了とすべての情報を伝える必要があります。

プロバイダースキルがTasks.CompleteTaskディレクティブを返す際、shouldSessionEndアトリビュートをtrueに設定する必要があります。

例:タスクを実行するハンドラーを実装する

以下は、タスクを実行するハンドラーを実装する方法の例です。この例は、Amazonタスクを示しています。

const ConnectionsRequestHandler = {
    canHandle(handlerInput) {
        const request = handlerInput.requestEnvelope.request;
        return request.type === 'LaunchRequest'
            && request.task.name == "AMAZON.PrintPDF";
    },
    handle(handlerInput) {
        return handlerInput.responseBuilder
            .addDirective({
                "type": "Tasks.CompleteTask",
                "status": {
                    "code": "200",
                    "message": "印刷に成功しました"
                }
            })
            .withShouldEndSession(true)
            .getResponse();
    }
};

応答のアトリビュート

typeディレクティブの種類です。ここでは、タスクリクエストを完了するTasks.CompleteTaskが使われます。
statusコードとメッセージが含まれます。コードには任意の有効なHTTPコードが入ります。

スキルのリクエスターとプロバイダーのサンプルコード

リクエスタースキルは、プロバイダースキルにタスクリクエストを送信します。

例:タスクリクエスト

{
    "type": "LaunchRequest",
    "requestId": "string",
    "timestamp": "string",
    "locale": "string",
    "task": {
        "name": "AMAZON.PrintPDF",
        "version": "1",
        "input": {
            "@type": "PrintPDFRequest",
            "@version": "1",
            "title": "フライホイール",
            "description": "フライホイール",
            "url": "http://www.example.com/flywheel.pdf"
        }
    }
}

例:プロバイダースキルがAMAZON.PrintPDFタスクリクエストを処理する

プロバイダースキルがタスクリクエストを受け取ったら、そのタスクを実行できる場合は処理する必要があります。以下は、プロバイダースキルが受け取ったAMAZON.PrintPDFタスクリクエストを処理する方法の例です。

const PrintPDFTaskHandler = {
    canHandle(handlerInput) {
        const request = handlerInput.requestEnvelope.request;
        return request.type === 'LaunchRequest'
            && request.task.name == "AMAZON.PrintPDF";
    },
    handle(handlerInput) {
        console.log("AMAZON.PrintPDFタスクを処理しています。");

        // PDFの印刷ロジック

        const speechText = "印刷リクエストを確認しました。";

        return handlerInput.responseBuilder
            .speak(speechText)
            .addDirective({
                "type": "Tasks.CompleteTask",
                "status": {
                    "code": "200",
                    "message": "印刷に成功しました"
                }
            })
            .withShouldEndSession(true)
            .getResponse();
    }
};

ステップ3: プロバイダースキルをテストする

ASK開発チームでは、有効なタスクリクエストをプロバイダースキルに送信できるテスト用のリクエスタースキルを提供しています。プロバイダースキルがこのテスト用リクエスタースキルと対話できるようにするには、次の手順を実行します。これらの各コマンドは1行で入力するようにしてください。現時点で、テスト用リクエスタースキルが送信できるのは、Amazon定義済みタスクのみです。

プロバイダースキルをテストする

  1. プロバイダースキルでテストを有効にしておきます。詳細については、スキルのテストを参照してください。
  2. Alexa開発者コンソールでプロバイダースキルを開き、テストタブを選択します。
  3. 有効なタスクリクエストを使ってテストするには、次のコマンドを入力します。
    open connection tester and send valid connection request with parameters <skill-id>--<task-name>
    <skill-id>の部分を、プロバイダースキルのskillIdに置き換えます。<task-name>は、AMAZON.PrintPDFなど、有効なAmazon定義済みタスクの名前で置き換えます。このコマンドは、有効なスキーマを指定して、開発中ステージのプロバイダースキルにリクエストを送信します。たとえば、プロバイダースキルがAMAZON.PrintPDFタスクをどう処理するかをテストしたい場合、次のコマンドを入力します。
    open connection tester and send valid connection request with parameters amzn1.ask.skill.12345678-90ab-cdef-1234-567890abcdef--AMAZON.PrintPDF
  4. 無効なタスクリクエストを使ってテストするには、次のコマンドを入力します。
    open connection tester and send invalid connection request with parameters <skill-id>--<task-name>
    このコマンドは、無効なスキーマを指定して、開発中ステージのプロバイダースキルにリクエストを送信します。たとえば、プロバイダースキルが無効なスキーマを使ってAMAZON.PrintPDFタスクをどう処理するかをテストしたい場合、次のコマンドを入力します。
    open connection tester and send invalid connection request with parameters amzn1.ask.skill.12345678-90ab-cdef-1234-567890abcdef--AMAZON.PrintPDF

ステップ4: プロバイダースキルの認定を申請する

プロバイダースキルのテストが完了したら、スキルの認定を申請できます。Amazonがスキルを認定したら、スキルは公開されます。リクエスターがこのスキルで提供するタスクに対してタスクリクエストを送信すると、Alexaはプロバイダースキルをリクエストの実行候補として検討します。

プロバイダースキルとして認定されるには、快適なユーザーエクスペリエンスを実現する以下の動作要件を満たす必要があります。

  • プロバイダースキルが、リクエスタースキルがリクエストしたタスクを実行できること。たとえば、プロバイダースキルがウェブページの印刷スキルであれば、リクエスタースキルからリクエストされたときにそのタスクを実行できる必要があります。
  • プロバイダースキルは、リクエスタースキルから受け取ったペイロードが無効または空の場合も適切に処理する必要があります。たとえば、画像を印刷するプロバイダースキルの場合、指定された画像のURLが無効であれば、プロバイダースキルがユーザーにURLが無効であることを知らせる必要があります。ペイロードが無効または空の場合、ユーザーにわかりやすい音声プロンプトでこうしたエラーを適切に処理する必要があります。
  • プロバイダースキルがリクエスタースキルに代わって実行するすべてのアクションは、プロバイダースキルのサンプルフレーズや呼び出し名でプロバイダースキルを呼び出すことでキャンセルできます。ユーザーがこのスキルと直接対話した場合とまったく同じです。たとえば、ライドシェアのプロバイダースキルで、ユーザーが「アレクサ、ライドシェアをキャンセル」と言ったとします。この発話により、ユーザーがこのスキルから直接ライドシェアの手配をしたときと同じキャンセルダイアログが出される必要があります。