SMAPIエラーコード



SMAPIエラーコード

Alexaスキル管理API(SMAPI)は、Alexaスキル管理タスクをプログラムで実行できるRESTful HTTPインターフェースを提供します。スキル管理タスクには、スキルの新規作成や対話モデルの更新などがあります。問題が発生すると、SMAPIはHTTP応答を4xxまたは5xx HTTPステータスコードで返します。これらのエラー応答の一部には、応答本文にJSON形式のerrorオブジェクトが含まれます。 errorオブジェクトには、プログラムでのエラー応答に使用できるcodevalidationDetailsオブジェクトが含まれています。

Errorオブジェクト構造

各errorオブジェクトには、次のフィールドが含まれます。

  • code – 失敗した検証のカテゴリーを一意に識別する、機械が読み取り可能な形式の文字列です。使用可能な値の詳細な一覧については、エラーコードの一覧を参照してください。
  • validationDetails – 検証が失敗した理由と、開発者が提供したリソースのどの箇所でエラーが発生したかの詳細を含む、機械が読み取り可能な形式のオブジェクトです。
  • message – 検証の失敗を説明する、人間が読める形式の文字列です。

エラーコードの一覧

次の一覧には、SMAPIがエラー応答で送信できるすべてのエラーコード値が含まれています。各エラーコード値は、詳細と例へのリンクです。

Errorオブジェクトの詳細と例

次のセクションでは、想定されるエラーコードの詳細と例を示します。

CONFLICTING_INSTANCES

SMAPIは、リクエスト内のある1つのフィールドの存在、またはそのフィールドの値が別のフィールドの存在または値と競合すると、CONFLICTING_INSTANCESエラーコードを返します。

次の例では、開発者が提供したスキルマニフェストisAvailableWorldwidetrueに設定し、かつdistributionCountriesの値も含まれている場合のerrorオブジェクトを示します。

{
  "error": {
    "code": "CONFLICTING_INSTANCES",
    "message": "Instance at \"$.manifest.publishingInformation.distributionCountries\" is not expected when boolean instance with value \"true\" at property path \"$.manifest.publishingInformation.isAvailableWorldwide\" is present.",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.publishingInformation.isAvailableWorldwide",
        "dataType": "boolean",
        "value": true
      },
      "conflictingInstance": {
        "type": "BODY",         
        "propertyPath": "$.manifest.publishingInformation.distributionCountries"
      }
    }
  }
}

CONTENT_PARSE_FAILURE

リクエストで指定されたリソース(画像など)の解析でエラーが発生した場合、SMAPIはCONTENT_PARSE_FAILUREのエラーコードを返します。

以下は、リクエストで指定された画像を解析できなかった場合のerrorオブジェクトの例です。

{
  "error":{
    "code":"CONTENT_PARSE_FAILURE",
    "message":"Image with identifier \"www.someFeed.com\" at property path \"$.manifest.publishingInformation.locales.en-Us.feeds[0].uri\" was not parseable.",
    "validationDetails":{
      "originalInstance": {
        "type": "BODY",
        "propertyPath": "$.manifest.publishingInformation.locales.en-Us.feeds[0].uri",
        "dataType": "string",
        "value":"www.someFeed.com"
      },
      "reason": {
        "type": "MALFORMED_INPUT",
        "contentType": "image"
      }
    }
  }
}

DENIED_FEATURE_ACCESS

ホワイトリストに登録された開発者だけが利用できる、公開済みの機能が含まれているが、リクエストを行っている開発者がホワイトリストに登録されていない場合、SMAPIはDENIED_FEATURE_ACCESSエラーコードを返します。エラーメッセージまたはvalidationDetailsオブジェクトには、機能へのアクセスをリクエストするための連絡先情報が含まれている場合があります。

次の例は、開発者が提供したスキルマニフェストに、リクエストを行っている開発者がホワイトリスト登録されていないcategory値が含まれている場合の、errorオブジェクトを示しています。

{
  "error": {
    "code": "DENIED_FEATURE_ACCESS",
    "message": "User is not whitelisted for the \"Example Whitelist Only Category\" feature and, therefore, cannot use string instance with value \"EXAMPLE_WHITELIST_ONLY\" at \"$.manifest.publishingInformation.category\".Further information: \"example-request-access@amazon.com\"",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.publishingInformation.category",
        "dataType": "string",
        "value": "EXAMPLE_WHITELIST_ONLY"
      },
      "feature": {
        "name": "Example Whitelist Only Category",
        "contact": "example-request-access@amazon.com"
      }
    }
  }
}

次の例は、開発者が提供したスキルマニフェストに、リクエストを行っている開発者がホワイトリスト登録されていないインターフェースが含まれている場合の、errorオブジェクトを示しています。

{
  "error": {
    "code": "DENIED_FEATURE_ACCESS",
    "message": "User is not whitelisted for the \"Example Whitelist Only Interface\" feature and, therefore, cannot use instance at \"$.manifest.apis.custom.exampleInterface\"",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.apis.custom.exampleInterface"
      },
      "feature": {
        "name": "Example Whitelist Only Interface"
      }
    }
  }
}

DUPLICATE_ARRAY_ITEMS

リクエスト内の開発者が提供した配列に、重複する項目またはプロパティが含まれている場合、SMAPIはDUPLICATE_ARRAY_ITEMSエラーコードを返します。

次の例は、開発者が提供したスキルマニフェストfeeds配列に、重複したurl値が含まれている場合の、errorオブジェクトを示しています。

{
  "error": {
    "code": "DUPLICATE_ARRAY_ITEMS",
    "message": "Array item at property path \"$.manifest.apis.flashBriefing.locales.en-US.feeds[1].url\" and array item at property path \"$.manifest.apis.flashBriefing.locales.en-US.feeds[3].url\" have the same value: \"www.example.com/rss\".Item values must be unique.",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.apis.flashBriefing.locales.en-US.feeds[1].url",
        "dataType": "string",
        "value": "www.example.com/rss"
      },
      "conflictingInstance": {
        "type": "BODY",         
        "propertyPath": "$.manifest.apis.flashBriefing.locales.en-US.feeds[3].url",
        "dataType": "string",
        "value": "www.example.com/rss"
      }
    }
  }
}

EXPECTED_COMPLIANCE_AGREEMENT

スキルが必須契約のいずれかに準拠していない場合、SMAPIはEXPECTED_COMPLIANCE_AGREEMENTエラーコードを返します。たとえば、このエラーは、開発者のスキルが、輸出条件に準拠していると認定されていない場合に返されます。

次の例は、スキルが輸出条件に準拠している必要があるが、開発者が提供したスキルマニフェストisExportCompliantfalseであると指定している場合のerrorオブジェクトを示しています。

{
  "error": {
    "code": "EXPECTED_COMPLIANCE_AGREEMENT",
    "message": "The skill must be export compliant.By setting boolean instance at \"$.manifest.privacyAndCompliance.isExportCompliant\" to true, you certify the following: \"I certify that this Alexa skill may be imported to and exported from the United States and all other countries and regions in which Alexa operates its program or in which I've authorized sales to end users (without the need for Amazon to obtain any license or clearance or take any other action) and is in full compliance with all applicable laws and regulations governing imports and exports, including those applicable to software that makes use of encryption technology.\""
  },
  "validationDetails": {
    "agreementType": "EXPORT_COMPLIANCE"
  }
}

ある開発者が提供したフィールドの存在または値が、別の開発者が提供したフィールドの存在または値によって決まる期待値と一致しない場合、SMAPIはEXPECTED_RELATED_INSTANCEエラーコードを返します。

次の例は、開発者が提供したスキルマニフェストがスマートホームAPIを使用しているが、スキルのカテゴリーをSMART_HOMEとして設定しない場合のerrorオブジェクトを示しています。

{
  "error": {
    "code": "EXPECTED_RELATED_INSTANCE",
    "message": "String instance with value \"SMART_HOME\" at property path \"$.manifest.publishingInformation.category\" is expected to be present when instance at property path \"$.manifest.apis.smartHome\" is present",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.apis.smartHome"
      },
      "expectedInstance": {
        "type": "BODY",         
        "propertyPath": "$.manifest.publishingInformation.category",
        "dataType": "string",
        "value": "SMART_HOME"
      }
    }
  }
}

開発者が提供したフィールドまたは値が、リクエスト本文で提供した他のフィールドリストの、少なくとも1つと一致(または1つと完全一致)しなくてはならない場合に、SMAPIはEXPECTED_RELATED_INSTANCESを返します。

以下は、ガジェットをサポートするためにスキルがGAME_ENGINEインターフェース、GADGET_CONTROLLERインターフェースのいずれか、または両方をサポートする必要がある場合のerrorオブジェクトの例です。

{
  "error":{
    "code": "EXPECTED_RELATED_INSTANCES",
    "message": "At least one of instance at property path \"$.manifest.publishingInformation.gadgetSupport\", instance at property path \"$.manifest.publishingInformation.gadgetSupport\" is expected to be present when \"string\" instance with value \"GADGET_CONTROLLER\" at property path \"$.manifest.apis.custom.interfaces[3].type\" is present.",
    "validationDetails":{
      "originalInstance": {
        "type": "BODY",
        "propertyPath": "$.manifest.apis.custom.interfaces[0].type",
        "dataType": "string",
        "value": "GADGET_CONTROLLER"
      },
      "expectedInstance": {
        "type": "INSTANCES",
        "instances": [
        {
          "type": "BODY",
          "propertyPath": "$.manifest.publishingInformation.gadgetSupport"
        },
        {  
          "type": "BODY",
          "propertyPath": "$.manifest.publishingInformation.gameEngine"
        }
        ]
      }, 
      "reason": {
        "type": "EXPECTED_ATLEAST_ONE_RELATED_INSTANCE"
      }
    }
  }
}

以下は、ビデオスキルAPIをサポートするためにスキルがアカウントリンク、セキュリティプロファイルのいずれか(両方ではない)をサポートする必要がある場合のerrorオブジェクトの例です。

{
  "error":{
    "code": "EXPECTED_RELATED_INSTANCES",
    "message": "Exactly one of instance at property path \"$.accountLinking\", instance at property path \"$.manifest.securityProfile\" is expected to be present when instance at property path \"$.manifest.apis.video\" is present.",
    "validationDetails":{
      "originalInstance": {
        "type": "BODY",
        "propertyPath": "$.manifest.apis.video"
      },
      "expectedInstance": {
        "type": "INSTANCES",
        "instances": [
        {
          "type": "BODY",
          "propertyPath": "$.manifest.securityProfile"
        },
        {  
          "type": "BODY",
          "propertyPath": "$.accountLinking"
        }
        ]
      }, 
      "reason": {
          "type": "EXPECTED_EXACTLY_ONE_RELATED_INSTANCE"
      }
    }
  }
}

INCONSISTENT_ENDPOINTS

リクエストに複数の異なるタイプのエンドポイントが含まれているが、それらは同一であると考えられる場合、SMAPIはINCONSISTENT_ENDPOINTSエラーコードを返します。

次の例は、開発者が提供したスキルマニフェストが、エンドポイントをあるロケーションのHTTP URLとして指定したが、別のロケーションではAmazonリソースネーム(ARN)として指定している場合のerrorオブジェクトを示しています。

{
  "error": {
    "code": "INCONSISTENT_ENDPOINTS",
    "message": "Endpoint of value \"https://www.example.com\" at property path \"$.manifest.apis.custom.endpoint.uri\" is not of same type as endpoint of value \"arn:aws:lambda:us-east-1:123456789012:function:example-function\" at property path  \"$.manifest.apis.custom.regions.na.endpoint.uri\": Original type: \"https\", Inconsistent type:\"arn\".",
    "validationDetails": {
      "originalEndpoint": {
        "propertyPath": "$.manifest.apis.custom.endpoint.uri",
        "value": "https://www.example.com",
        "type": "https"
      },
      "inconsistentEndpoint": {
        "propertyPath": "$.manifest.apis.custom.regions.na.endpoint.uri",
        "value": "arn:aws:lambda:us-east-1:123456789012:function:example-function",
        "type": "arn"
      }
    }
  }
}

INVALID_ARRAY_SIZE

開発者が提供したコレクション内の項目数が検証で許容範囲内にない場合、SMAPIはINVALID_ARRAY_SIZEエラーコードを返します。

次の例は、開発者が提供したスキルマニフェストにサンプルフレーズが含まれていないが、検証に少なくとも1つのサンプルフレーズが必要である場合の、errorオブジェクトを示しています。

{
  "error": {
    "code": "INVALID_ARRAY_SIZE",
    "message": "Size of Array instance at property path \"$.manifest.publishingInformation.locales.en-US.examplePhrases\" is outside the allowed range: Actual number of items: 0, Minimum number of items: 1.",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.publishingInformation.locales.en-US.examplePhrases"
      },
      "actualNumberOfItems": 0,
      "minimumNumberOfItems": 1
    }
  }
}

次の例は、開発者が提供したスキルマニフェストに含まれるサンプルフレーズが多すぎる場合のerrorオブジェクトを示しています。

{
  "error": {
    "code": "INVALID_ARRAY_SIZE",
    "message": "Size of Array instance at property path \"$.manifest.publishingInformation.locales.en-US.examplePhrases\" is outside the allowed range: Actual number of items: 10, Maxmimum number of items: 4",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.publishingInformation.locales.en-US.examplePhrases"
      },
      "actualNumberOfItems": 10,
      "maximumNumberOfItems": 4
    }
  }
}

INVALID_CONTENT_TYPE

開発者が提供するURLで見つかったリソースのメディアの種類が、検証で想定されている、または許可されているコンテンツの種類と一致しない場合、SMAPIはINVALID_CONTENT_TYPEエラーコードを返します。

次の例は、開発者が提供するURLの画像が、許可されている画像の種類のいずれにも一致しない場合のerrorオブジェクトを示しています。

{
  "error": {
    "code": "INVALID_CONTENT_TYPE",
    "message": "Resource with identifier \"https://www.example.com/smallIconUri\" at property path \"$.manifest.publishingInformation.locales.en-US.smallIconUri\" has invalid content type.Allowed content types: [\"image/png\", \"image/jpg\"]",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.publishingInformation.locales.en-US.smallIconUri",
        "dataType": "string",
        "value": "https://www.example.com/smallIconUri"
      },
      "allowedContentTypes": [
        "image/png",
        "image/jpg"
      ]
    }
  }
}

INVALID_DATA_TYPE

開発者が提供した値のデータ型が、検証で想定されている、または許可されているデータ型と一致しない場合、SMAPIはINVALID_DATA_TYPEエラーコードを返します。

次の例は、開発者が提供したスキルマニフェストのデータ型が、許可されているデータ型と一致しない場合のerrorオブジェクトを示しています。

{
  "error": {
    "code": "INVALID_DATA_TYPE",
    "message": "Instance at property path \"$.manifest.publishingInformation.distributionCountries\" of type \"string\" does not match any allowed primitive types [\"array\"].",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.publishingInformation.distributionCountries",
        "dataType": "string"
      },
      "allowedDataTypes": [
        "array"
      ]
    }
  }
}

INVALID_ENUM_VALUE

開発者が提供した値が列挙内の要素(許可されている値のセット)のいずれにも一致しない場合、SMAPIはINVALID_ENUM_VALUEエラーコードを返します。

次の例は、スキルマニフェストの開発者提供の列挙値が許可されている値のいずれにも一致しない場合のerrorオブジェクトを示しています。

{
  "error": {
    "code": "INVALID_ENUM_VALUE",
    "message": "String instance at property path \"$.manifest.publishingInformation.distributionCountries[0]\" has invalid enum value: \"UAA\"",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.publishingInformation.distributionCountries[0]",
        "dataType": "string",
        "value": "UAA"
      }
    }
  }
}

INVALID_IMAGE_ATTRIBUTES

開発者が提供した画像の1つ以上のアトリビュートが、検証で想定されている、または許可されているアトリビュートと一致しない場合、SMAPIはINVALID_IMAGE_ATTRIBUTESエラーコードを返します。

次の例は、開発者が提供した画像が、許可されている画像のディメンションのいずれにも一致しない場合のerrorオブジェクトを示しています。

{
  "error": {
    "code": "INVALID_IMAGE_ATTRIBUTES",
    "message": "Image with identifier \"www.example.com\" at property path \"$.manifest.publishingInformation.locales.en-US.largeIconUri\" is invalid.\nExpected dimensions: \"[512x512, 108x108]\"\nMaximum allowed size, respectively: \"[2.8MB, 2.0MB]\".\nFound image of dimension \"512x511\", of size \"2.8MB\".",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.publishingInformation.locales.en-US.largeIconUri",
        "dataType": "string",
        "value": "www.example.com"
      },
      "actualImageAttributes": {
        "dimension": {
          "widthInPixels": 511,
          "heightInPixels": 512
        },
        "size": {
          "value": 2.8,
          "unit": "MB"
        }
      },
      "allowedImageAttributes": [
        {
          "dimension": {
            "widthInPixels": 512,
            "heightInPixels": 512
          },
          "maximumSize": {
            "value": 2.8,
            "unit": "MB"
          }
        },
        {
          "dimension": {
            "widthInPixels": 108,
            "heightInPixels": 108
          },
          "maximumSize": {
            "value": 2.0,
            "unit": "MB"
          }
        }
      ]
    }
  }
}

INVALID_INTEGER_VALUE

開発者が提供した整数値が、許可されている値のいずれにも一致しない場合、SMAPIはINVALID_INTEGER_VALUEエラーコードを返します。

次の例は、開発者が提供した整数が、許容値の範囲外である場合のerrorオブジェクトを示しています。

{
  "error": {
    "code": "INVALID_INTEGER_VALUE",
    "message": "Integer instance at property path \"$.manifest.publishingInformation.authorizationNumber\" is outside the allowed range: Actual value: 1, Minimum value: 10.",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.publishingInformation.authorizationNumber",
        "dataType": "integer",
        "value": 1
      },
      "minimumIntegerValue": 10
    }
  }
}
{
  "error": {
    "code": "INVALID_INTEGER_VALUE",
    "message": "Integer instance at property path \"$.manifest.publishingInformation.gadgetSupport.maxGadgetButtons\" is outside the allowed range: Actual value: 7, Maximum value: 4",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.publishingInformation.gadgetSupport.maxGadgetButtons",
        "dataType": "integer",
        "value": 7
      },
      "maximumIntegerValue": 4
    }
  }
}

INVALID_REQUEST_PARAMETER

リクエストに無効なパラメーターが含まれる場合、SMAPIはINVALID_REQUEST_PARAMETERエラーコードを返します。

以下は、リクエスト本文がnullの場合のerrorオブジェクトの例です。

{
  "error": {
    "code": "INVALID_REQUEST_PARAMETER",
    "message": "Parsing error due to missing body.",
    "validationDetails": {
      "originalInstance" : {
        "type" : "BODY"
      },
      "reason": {
        "type": "EXPECTED_NOT_EMPTY_VALUE"
      }
    }
  }
}

以下は、リクエスト本文を解析できない場合のerrorオブジェクトの例です。

{
  "error": {
    "code": "INVALID_REQUEST_PARAMETER",
    "message": "Parsing error due to invalid body.",
    "validationDetails": {
      "originalInstance" : {
        "type" : "BODY"
      },
      "reason": {
        "type": "MALFORMED_INPUT"
      }
    }
  }
}

以下は、リクエストのパラメーターが提供される回数が多すぎる場合のerrorオブジェクトの例です。

{
  "error": {
    "code": "INVALID_REQUEST_PARAMETER",
    "message": "Query parameter \"skill\" is provided an invalid number of times.Actual Occurences: 11, Maximum Occurences: 10, Minimum Occurences: 1",
    "validationDetails": {
      "originalInstance": {
        "type": “QUERY_PARAMETER”,
        "name": "skill"
      },
      "reason": {
        "type": "INVALID_NUMBER_OF_OCCURENCES",
        "actualOccurences": 11,
        "maximumOccurences": 10,
        "minimumOccurences": 1
      }
    }
  }
}

以下は、プロパティパスに含まれるプロパティ数が多すぎる場合のerrorオブジェクトの例です。

{
  "error": {
    "code": "INVALID_REQUEST_PARAMETER",
    "message": "Instance at property path \"$.manifest.apis.flashBriefing\" has too many properties.Actual properties: 2, Maximum properties: 1",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",
        "propertyPath": "$.manifest.apis.flashBriefing"
      },
      "reason": {
        "type": "INVALID_NUMBER_OF_PROPERTIES",
        "actualProperties": 2,
        "maximumProperties": 1
      }
    }
  }
}

INVALID_STRING_LENGTH

開発者が提供した文字列の長さが、検証で許可されている長さよりも短い、または長い場合、SMAPIはINVALID_STRING_LENGTHエラーコードを返します。

次の例は、開発者が提供したスキルマニフェストに、短すぎるサンプルフレーズ(最初の例)と長すぎるサンプルフレーズ(2番目の例)が含まれている場合の、errorオブジェクトを示しています。

{
  "error": {
    "code": “INVALID_STRING_LENGTH”,
    "message": "Length of String instance with value \"a\" at property path \"$.manifest.publishingInformation.locales.en-US.examplePhrases[1]\" is outside the allowed range: Actual length: 1, Minimum length: 2.",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.publishingInformation.locales.en-US.examplePhrases[1]",
        "dataType": "string",
        "value": "a"
      },
      "actualStringLength": 1,
      "minimumStringLength": 2
    }
  }
}
{
  "error": {
    "code": “INVALID_STRING_LENGTH”,
    "message": "String instance with value \"Example Custom Skill Name Example Custom Skill Name Example Custom Skill Name Example Custom Skill Name Example Custom Skill Name Example Custom Skill Name\" at property path \"$.manifest.publishingInformation.locales.en-US.name\" is outside the allowed range: Actual length: 155, Maximum length: 50.",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.publishingInformation.locales.en-US.name",
        "dataType": "string",
        "value": "Example Custom Skill Name Example Custom Skill Name Example Custom Skill Name Example Custom Skill Name Example Custom Skill Name Example Custom Skill Name"
      },
      "actualStringLength": 155,
      "maximumStringLength": 50
    }
  }
}

INVALID_STRING_PATTERN

開発者が提供した文字列が、検証で想定されてない、または許可されているパターンまたは形式と一致しない場合、SMAPIはINVALID_STRING_PATTERNエラーコードを返します。errorオブジェクトには、標準の形式または正規表現と想定されるパターンが含まれています。

次の例は、開発者が提供したスキルマニフェストに、想定されているarnプレフィックスで始まらないエンドポイント値が含まれている場合のerrorオブジェクトを示しています。

{
  "error": {
    "code": "INVALID_STRING_PATTERN",
    "message": "String instance with value \"*.123\" at property path \"$.manifest.music.endpoint\" does not match the regular expression: \"^arn\".",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.music.endpoint",
        "dataType": "string",
        "value": "*.123"
      },
      "expectedRegexPattern": "^arn"
    }
  }
}

以下は、ビデオプレイヤーのURIが正しい形式でない場合のerrorオブジェクトの例です。

{
  "error": {
    "code": "INVALID_STRING_PATTERN",
    "message": "String instance with value \"http://example.com?q=Spaces should be encoded\" at property path \"$.manifest.apis.video.locales.videoWebPlayerUri\" is not a valid \"URI\" format.",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",
        "propertyPath": "$.manifest.apis.video.locales.videoWebPlayerUri",
        "dataType": "string",
        "value": "http://example.com?q=Spaces should be encoded"
      },
      "expectedFormat":"URI"
    }
  }
}

INVALID_URL_DOMAIN

開発者が提供したドメイン名がRFC 1034 section 3およびRFC 1123 section 2.1に準拠して有効でない場合、SMAPIはINVALID_URL_DOMAINエラーコードを返します。

次の例は、開発者が提供したドメイン名が有効でない場合のerrorオブジェクトを示しています。

{
  "error": {
    "code": "INVALID_URL_DOMAIN",
    "message": "String instance with value \"www.example.con\" at property path \"$.manifest.accountLinking.domains[2]\" is not a valid URL domain.",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.accountLinking.domains[2]",
        "dataType": "string",
        "value": "www.example.con"
      }
    }
  }
}

INVALID_URL_FORMAT

開発者が提供したURLが有効でない場合、SMAPIはINVALID_URL_FORMATエラーコードを返します。

次の例は、開発者が提供したURLが有効でない場合のerror オブジェクトを示しています。

{
  "error": {
    "code": "INVALID_URL_FORMAT",
    "message": "String instance with value \"httpa://www.myprivacypolicy.example.com\" at property path \"$.manifest.privacyAndCompliance.locales.en-US.privacyPolicyUrl\" is not a valid URL.",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.privacyAndCompliance.locales.en-US.privacyPolicyUrl",
        "dataType": "string",
        "value": "httpa://www.myprivacypolicy.example.com"
      }
    }
  }
}

MISSING_REQUIRED_PROPERTY

リクエストが、必要なオブジェクトまたはプロパティを提供できない場合、SMAPIはMISSING_REQUIRED_PROPERTYエラーコードを返します。プロパティが存在し、値が含まれていないが、検証に少なくとも1つの値が必要な場合、SMAPIはUNEXPECTED_EMPTY_OBJECTエラーを返します。

次の例は、開発者が提供したスキルマニフェストに必要なpublishingInformationオブジェクトが含まれていない場合のerrorオブジェクトを示しています。

{
  "error": {
    "code": "MISSING_REQUIRED_PROPERTY",
    "message": "Object instance at property path \"$.manifest\" has missing required property: \"publishingInformation\"",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest"
      },
      "requiredProperty": "publishingInformation"
    }
  }
}

MUTUALLY_EXCLUSIVE_ARRAY_ITEMS

開発者が提供した配列内の複数の項目またはプロパティ同士で相互互換性がない場合、SMAPIはMUTUALLY_EXCLUSIVE_ARRAY_ITEMSエラーコードを返します。

次の例は、開発者が提供したスキルマニフェストに、permissions配列内に重複するpermissionスコープが含まれている場合の、errorオブジェクトを示しています。

{
  "error": {
    "code": "MUTUALLY_EXCLUSIVE_ARRAY_ITEMS",
    "message": "Array item at property path \"$.manifest.apis.permissions[0]\" with value \"alexa::devices:all:address:full:read\" cannot coexist in array with array item at \"$.manifest.apis.permissions[3]\" with value \"alexa:devices:all:address:country_and_postal_code:read\"",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.apis.permissions[0]",
        "dataType": "string",
        "value": "alexa::devices:all:address:full:read"
      },
      "conflictingInstance": {
        "type": "BODY",         
        "propertyPath": "$.manifest.apis.permissions[3]",
        "dataType": "string",
        "value": "alexa:devices:all:address:country_and_postal_code:read"
      }
    }
  }
}

PARAMETER_EXPIRED

リクエスト内の期限付きトークンが期限切れの場合、SMAPIはPARAMETER_EXPIREDエラーコードを返します。

以下は、リストスキルなどのページ分割APIがページ分割パラメーターに期限切れトークンを使った場合のerrorオブジェクトの例です。

{
  "error": {
    "code": "PARAMETER_EXPIRED",
    "message": "Query parameter \"nextToken\" with value \"adsasdasdsafa231\" is expired.",
    "validationDetails": {
      "originalInstance": {
        "type": “QUERY_PARAMETER”,
        "name": "nextToken",
        "value": "adsasdasdsafa231"
      }
    }
  }
}

PRECONDITION_NOT_MET

開発者が提供したif-matchなどの前提条件ヘッダーが要件を満たさない場合、SMAPIはPRECONDITION_NOT_METエラーコードを返します。

以下は、リクエストが対話モデルのETagにif-match条件を含み、渡されたEtagの値がリソースの最新バージョンに関連付けられていない場合のerrorオブジェクトの例です。

{
  "error": {
    "code": "PRECONDITION_NOT_MET",
    "message": "Resource \"InteractionModel\" doesn't exist for the request header \"If-Match\" with value \"{etag value}\". \nPlease ensure that the resource exists unless you are specifying '*' as If-Match header value.",
    "validationDetails": {
      "originalInstance": {
        "type": "HEADER",
        "name": "If-Match",
        "value": "{etag value}"
      },
      "reason": {
        "type": "RESOURCE_DOES_NOT_EXIST",
        "resource": {
          "name": "INTERACTION_MODEL"
        },
        "details": "ENSURE_RESOURCE_EXISTS_FOR_ETAG"
      }        
    }
  }
}

OPERATION_NOT_ALLOWED

リクエストが制限された操作を実行しようとした場合、SMAPIはOPERATION_NOT_ALLOWEDエラーコードを返します。

以下は、移行中のためにスキルを更新できない場合のerrorオブジェクトの例です。

{
  "error":{
    "code":"OPERATION_NOT_ALLOWED",
    "message": "Resource \"skill\" is locked for the query parameter \"skill\" with value \"123\".Skill is in migration, please refer developer documentation.",
    "validationDetails":{
      "originalInstance": {
         "type": “QUERY_PARAMETER”,
         "name": "skill",
         "value": "123"
      },        
      "reason": {    
         "type": "RESOURCE_LOCKED", 
          "resource": {
           "name": "SKILL"
         },
      "details": "SKILL_IN_MIGRATION"        
      }
    }
  }
}

以下は、リクエストが開発中のスキルに未来の公開時刻を設定しようとした場合のerrorオブジェクトの例です。この操作は実行できません。

{
  "error":{
    "code":"OPERATION_NOT_ALLOWED",
    "message":"Resource \"skill\" is in \"development\", expected stage is certified for the query parameter \"skill\" with value \"123\".",
    "validationDetails":{
      "originalInstance": {
        "type": “QUERY_PARAMETER”,
        "name": "skill",
        "value": "123"
      }, 
      "reason": {
        "type": "UNEXPECTED_RESOURCE_STAGE",
        "resource": {
          "name": "SKILL",
          "stage": "development"
        },
        "allowedStages": [ "certified" ]
      }             
    }
  }
}

以下は、リクエストがHTTPS以外のエンドポイントにSSL証明書を設定しようとしている場合のerrorオブジェクトの例です。

{
  "error":{
    "code":"OPERATION_NOT_ALLOWED",
    "message": "Resource \"skill\" has a property \"$.manifest.apis.custom.regions.NA.endpoint.uri\" which is expected to be \"https\" for the query parameter \"skill\" with value \"123\"",
    "validationDetails":{
      "originalInstance": {
        "type": “QUERY_PARAMETER”,
        "name": "skill",
        "value": "123"
      },
      "reason": {
        "type": "UNEXPECTED_RESOURCE_PROPERTY",
        "resource": {
          "name": "SKILL",
          "property": {
            "propertyPath": "$.manifest.apis.custom.regions.NA.endpoint.uri"
          }
        },
        "expectedProperty": "https"
      }
    }
  }
}

以下は、リクエストが特定のリージョンを指定していないためにSSL証明書が設定されていない場合のerrorオブジェクトの例です。

{
  "error":{
    "code":"OPERATION_NOT_ALLOWED",
    "message": "Resource \"skill\" does not have a property \"$.manifest.apis.custom.regions.NA\" for the query parameter \"skill\" with value \"123\"",
    "validationDetails":{
      "originalInstance": {
        "type": “QUERY_PARAMETER”,
        "name": "skill",
        "value": "123"
      },
      "reason": {
        "type": "MISSING_RESOURCE_PROPERTY",
        "resource": {
          "name": "SKILL",
          "property": {
            "propertyPath": "$.manifest.apis.custom.regions.NA"
          }
        }  
      }
    }
  }
}

RESOURCE_NOT_FOUND

開発者が提供したリソース識別子でリソースが見つからない場合、SMAPIはRESOURCE_NOT_FOUNDエラーコードを返します。リソース識別子には、URL、Amazonリソースネーム(ARN)、UUID、スキルID、スキルのステージなどが含まれます。

次の例は、開発者が提供するURLでリソースが見つからない場合のerrorオブジェクトを示しています。

{
  "error": {
    "code": "RESOURCE_NOT_FOUND",
    "message": "Resource with identifier \"www.example.com/rss\" at property path \"$.manifest.publishingInformation.locales.en-Us.feeds[0].uri\" was not found.",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.publishingInformation.locales.en-Us.feeds[0].uri",
        "dataType": "string",
        "value": "www.example.com/rss"
      }
    }
  }
}

以下は、指定したIDとステージのスキルが見つからなかった場合のerrorオブジェクトの例です。

{
  "error": {
    "code":"RESOURCE_NOT_FOUND",
    "message":"Resource \"SKILL\" with identifier \"skillId\" with stage \"live\" was not found.",         
    "validationDetails":{
      "originalInstance" : {
        "type": "PATH_PARAMETER",
        "name": "skill",
        "value": "skillId"
      },
      "reason": {
        "type": "RESOURCE_DOES_NOT_EXIST",
        "resource": {
          "name": "SKILL",
          "stage": "live"
        }
      }
    }
  }
}

UNEXPECTED_EMPTY_OBJECT

リクエストがプロパティに値を提供できなかったが、検証に少なくとも1つの値が求められる場合、SMAPIはUNEXPECTED_EMPTY_OBJECT エラーコードを返します。プロパティ自体が見つからないが必須の場合、SMAPIはMISSING_REQUIRED_PROPERTYエラーを返します。

次の例は、開発者が提供したスキルマニフェストに、apisオブジェクトの情報がまったく含まれていない場合のerrorオブジェクトを示しています。

{
  "error": {
    "code": "UNEXPECTED_EMPTY_OBJECT",
    "message": "Object instance at property path \"$.manifest.apis\" has no property defined.",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.apis"
      }
    }
  }
}

UNEXPECTED_PROPERTY

リクエストが検証で想定されていないオブジェクト、フィールド、またはプロパティを渡した場合、SMAPIはUNEXPECTED_PROPERTYエラーコードを返します。

次の例は、開発者が提供したスキルマニフェストにタイプミス(「privacyPolicyUrl」ではなく「privacyPolicyUr」)が含まれている場合のerrorオブジェクトを示しています。

{
  "error": {
    "code": "UNEXPECTED_PROPERTY",
    "message": "Object instance at property path \"$.manifest.privacyAndCompliance.locales.en-US\" has unexpected property: \"privacyPolicyUr\"",
    "validationDetails": {
      "originalInstance": {
        "type": "BODY",        
        "propertyPath": "$.manifest.privacyAndCompliance.locales.en-US"
      },
      "unexpectedProperty": "privacyPolicyUr"
    }
  }
}