

AWS Marketplace API 参考已重组。有关支持的 API 操作的更多信息，请参阅 [AWS Marketplace API 参考](https://docs.aws.amazon.com/marketplace/latest/APIReference/Welcome.html)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用优惠套装
<a name="work-with-offer-sets"></a>

AWS Marketplace 优惠套装使卖家能够将多个私人报价打包成统一的多产品可交易套餐供买家使用。此功能可满足复杂企业环境中客户对全面端到端解决方案不断增长的需求。

传统上，买家必须从多个卖家那里发现和购买单个产品，这导致了分散的体验、整合挑战和更长的采购周期。优惠集允许 AWS Marketplace 合作伙伴将多个优惠组合在一起，通过协调的私有优惠来简化交易流程，客户只需一次性批准即可查看和接受所有组件。

优惠套装与解决方案配合使用，可提供全面的多产品组合。解决方案提供丰富的营销内容，包括详细描述、架构图和用例文档，而报价集则处理可交易的包装和统一采购的商业条款。

## 优惠套装实体
<a name="offer-set-entity"></a>

报价套装是一个容器，将 2-7 个私人报价组合成一个可交易的套餐。套餐中的每项报价均保持其各自不同的定价、付款条款、期限和最终用户许可协议 (EULA)，而报价集则为买家提供统一的发现和接受体验。

**主要特征：**
+ 将多个私人优惠分组（最少 2 个，最多 7 个）
+ 让买家只需一次操作即可统一接受所有报价
+ 为每个报价提供不同的条款，保持灵活性
+ 为每种产品创建单独的协议，允许在购买后进行独立管理
+ 可以选择与增强营销内容的解决方案相关联

优惠套装实体类型为`OfferSet@1.0`。

**实体标识符**

优惠套装使用标`offerset-*`识符格式（例如，`offerset-abc123def456`）。

**实体 ARN 格式**

优惠套装遵循标准的 AWS ARN 格式：

```
arn:aws:aws-marketplace:{region}:{account-id}:AWSMarketplace/OfferSet/{offerset-id}
```

示例：

```
arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/OfferSet/offerset-abc123def456
```

## 优惠套装入门
<a name="getting-started-with-offer-sets"></a>

本节提供有关使用 AWS Marketplace 目录 API [变更类型](https://docs.aws.amazon.com/marketplace/latest/APIReference/API_Change.html)创建和管理优惠集的详细信息。

开始之前，请确保您已具备以下条件：
+ 有效的 AWS Marketplace 卖家注册和公开资料。有关更多信息，请参阅[注册并创建您的卖家资料](https://docs.aws.amazon.com/marketplace/latest/userguide/create-public-profile.html)。
+ 访问 API 并完成卖家先决条件。有关更多信息，请参阅 [AWS Marketplace 目录 API 的访问控制](https://docs.aws.amazon.com/marketplace/latest/APIReference/catalog-api-access-control.html)。
+ 了解了使用 AWS Marketplace Catalog API 的基础知识，请参阅[使用 AWS Marketplace 目录 API](https://docs.aws.amazon.com/marketplace/latest/APIReference/catalog-apis.html)。

## 列出优惠套装
<a name="list-offer-sets"></a>

要列出您账户中的所有优惠套装，请调用 `ListEntities` API 操作，`EntityType`设置为`OfferSet`。

**请求**

```
POST /ListEntities HTTP/1.1
Content-type: application/json

{
  "Catalog": "AWSMarketplace",
  "EntityType": "OfferSet"
}
```

**响应**

```
{
  "EntitySummaryList": [
    {
      "EntityType": "OfferSet",
      "EntityId": "offerset-xyz123",
      "EntityArn": "arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/OfferSet/offerset-xyz123",
      "LastModifiedDate": "2025-06-25T23:46:25Z",
      "OfferSetSummary": {
        "Name": "Enterprise Security Solution Offer Set",
        "State": "Released",
        "ReleaseDate": "2025-06-25T23:46:20Z",
        "SolutionId": "soln-abc987",
        "AssociatedOfferIds": [
          "offer-abc123",
          "offer-def456",
          "offer-ghi789"
        ]
      }
    }
  ],
  "NextToken": null
}
```

### 按州筛选优惠套餐
<a name="filter-offer-sets-by-state"></a>

您可以使用`EntityTypeFilters`参数按州筛选优惠集。

**请求**

```
POST /ListEntities HTTP/1.1
Content-type: application/json

{
  "Catalog": "AWSMarketplace",
  "EntityType": "OfferSet",
  "EntityTypeFilters": {
    "OfferSetFilters": {
      "State": {
        "ValueList": [
          "Released"
        ]
      }
    }
  }
}
```

### 按解决方案 ID 筛选优惠集
<a name="filter-offer-sets-by-solution-id"></a>

您可以使用`EntityTypeFilters`参数按解决方案 ID 筛选选件集。

**请求**

```
POST /ListEntities HTTP/1.1
Content-type: application/json

{
  "Catalog": "AWSMarketplace",
  "EntityType": "OfferSet",
  "EntityTypeFilters": {
    "OfferSetFilters": {
      "SolutionId": {
        "ValueList": [
          "soln-abc987"
        ]
      }
    }
  }
}
```

### 按发布日期筛选优惠套餐
<a name="filter-offer-sets-by-release-date"></a>

您可以按发布日期筛选优惠集，并使用`EntityTypeFilters`和`EntityTypeSort`参数对结果进行排序。

**请求**

```
POST /ListEntities HTTP/1.1
Content-type: application/json

{
  "Catalog": "AWSMarketplace",
  "EntityType": "OfferSet",
  "EntityTypeFilters": {
    "OfferSetFilters": {
      "ReleaseDate": {
        "AfterValue": "2025-11-01"
      }
    }
  },
  "EntityTypeSort": {
    "OfferSetSort": {
      "SortBy": "ReleaseDate",
      "SortOrder": "DESCENDING"
    }
  }
}
```

## 描述一套优惠套装
<a name="describe-offer-set"></a>

要获取有关特定优惠套餐的详细信息，请调用 `DescribeEntity` API 操作。

**请求**

```
GET /DescribeEntity?catalog=AWSMarketplace&entityId=offerset-xyz123 HTTP/1.1
```

**响应**

```
{
  "EntityType": "OfferSet@1.0",
  "EntityId": "offerset-xyz123",
  "EntityArn": "arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/OfferSet/offerset-xyz123",
  "LastModifiedDate": "2025-06-25T23:46:25Z",
  "DetailsDocument": {
    "Id": "offerset-xyz123",
    "Name": "Enterprise Security Solution Offer Set",
    "BuyerNotes": "Complete security solution including endpoint protection and network monitoring",
    "State": "Released",
    "SolutionId": "soln-abc987",
    "ReleaseDate": "2025-06-25T23:46:20Z",
    "AssociatedOffers": [
      {
        "OfferId": "offer-abc123"
      },
      {
        "OfferId": "offer-def456"
      },
      {
        "OfferId": "offer-ghi789"
      }      
    ]
  }
}
```

## 创建优惠套装
<a name="create-offer-set"></a>

使用`CreateOfferSet`更改类型创建处于 “草稿” 状态的新优惠套餐实体。这是报价集生命周期的第一步，即建立基础实体，在向买家发布商品之前，该实体将配置为报价关联和元数据。

**请求语法**

```
POST /StartChangeSet HTTP/1.1
Content-type: application/json

{
  "Catalog": "AWSMarketplace",
  "ChangeSet": [
    {
      "ChangeType": "CreateOfferSet",
      "Entity": {
        "Type": "OfferSet@1.0"
      },
      "ChangeName": "CreateOfferSetChange",
      "DetailsDocument": {
        "Name": "Enterprise Security Solution Offer Set"
      }
    }
  ]
}
```

为要添加`CreateOfferSet`更改类型的字段提供信息：
+ `Entity`（对象）（必填）-正在创建的实体类型。
  + `Type`（字符串）（必填）-必须是`OfferSet@1.0`。
+ `DetailsDocument`（对象）（必填）-请求的详细信息。
  + `Name`（字符串）（必填）-与优惠集关联的名称，以便您和您的客户更容易阅读。最小长度：1 个字符。最大长度：150 个字符。

**响应语法**

已根据您的请求创建更改集。对该请求的响应为您提供了变更集的和，如下所示。`ChangeSetId` `ChangeSetArn`

```
{
  "ChangeSetId": "example123456789012abcdef",
  "ChangeSetArn": "arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/ChangeSet/example123456789012abcdef"
}
```

变更请求被添加到队列中并进行处理。这包括验证信息以确保其符合 AWS Marketplace 指南。验证过程可能需要几分钟。

您可以通过 AWS Marketplace 管理门户网站查看请求的状态，也可以使用 API 操作直接通过 Catalog AP `[DescribeChangeSet](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/API_DescribeChangeSet.html)` I 查看请求的状态。

成功处理后， AWS Marketplace 生成一个处于 “草稿” 状态的选件集，其唯一标识符前缀`offerset-`为。

## 更新优惠套装信息
<a name="update-offer-set-information"></a>

使用`UpdateInformation`变更类型修改现有报价套装的详细信息，包括其名称和买家备注。

**请求语法**

```
POST /StartChangeSet HTTP/1.1
Content-type: application/json

{
  "Catalog": "AWSMarketplace",
  "ChangeSet": [
    {
      "ChangeType": "UpdateInformation",
      "Entity": {
        "Type": "OfferSet@1.0",
        "Identifier": "offerset-abc123"
      },
      "DetailsDocument": {
        "Name": "Updated Enterprise Security Offer Set",
        "BuyerNotes": "Complete security solution including endpoint protection, network monitoring, and professional services implementation"
      }
    }
  ]
}
```

为要添加`UpdateInformation`更改类型的字段提供信息：
+ `Entity`（对象）（必填）-正在更新的实体。
  + `Identifier`（字符串）（必填）-您的报价套装编号。有关更多信息，请参阅 [标识符](catalog-apis.md#identifier)。
  + `Type`（字符串）（必填）-必须是`OfferSet@1.0`。
+ `DetailsDocument`（对象）（必填）-必须至少提供一个字段。
  + `Name`（字符串）（可选）-显示名称对买家可见。最小长度：1 个字符。最大长度：150 个字符。
  + `BuyerNotes`（字符串）（可选）-有关报价集的详细信息，可帮助买家了解其目的和内容。最小长度：1 个字符。最大长度：1,000 个字符。

**响应语法**

已根据您的请求创建更改集。对该请求的响应为您提供了变更集的和，如下所示。`ChangeSetId` `ChangeSetArn`

```
{
  "ChangeSetId": "example123456789012abcdef",
  "ChangeSetArn": "arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/ChangeSet/example123456789012abcdef"
}
```

变更请求被添加到队列中并进行处理。这包括验证信息以确保其符合 AWS Marketplace 指南。验证过程可能需要几分钟。

您可以通过 AWS Marketplace 管理门户网站查看请求的状态，也可以使用 API 操作直接通过 Catalog AP `[DescribeChangeSet](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/API_DescribeChangeSet.html)` I 查看请求的状态。

## 将优惠与优惠套餐关联起来
<a name="associate-offers"></a>

使用`AssociateOffers`更改类型将多个 AWS Marketplace 优惠与一个优惠套餐关联起来。这将创建报价和优惠集之间的关系，使报价成为优惠集可交易配置的一部分。

该操作是等效的，无论选件的当前状态如何，都允许关联选件，从而在发布单个选件之前实现完整的配置。每个优惠只能属于一个优惠套装。

**重要**  
针对个人`OfferSetId`的优惠是不可变的，只能在创建优惠时进行设置。在使用将优惠与优惠套餐关联之前`AssociateOffers`，您必须先创建各个报价，并在创建优惠`OfferSetId`时指定。如果您需要添加的现有报价不正确`OfferSetId`，则必须使用正确的`OfferSetId`指定内容创建新的报价。

有关所需的 IAM 权限的信息，请参阅[优惠套餐的 IAM 权限](#iam-permissions-offer-sets)。

**请求语法**

```
POST /StartChangeSet HTTP/1.1
Content-type: application/json

{
  "Catalog": "AWSMarketplace",
  "ChangeSet": [
    {
      "ChangeType": "AssociateOffers",
      "Entity": {
        "Type": "OfferSet@1.0",
        "Identifier": "offerset-abc123"
      },
      "DetailsDocument": {
        "Offers": [
          {
            "OfferId": "offer-xyz789"
          },
          {
            "OfferId": "offer-def456"
          },
          {
            "OfferId": "offer-ghi123"
          }
        ]
      }
    }
  ]
}
```

为要添加`AssociateOffers`更改类型的字段提供信息：
+ `Entity`（对象）（必填）-正在更新的实体。
  + `Identifier`（字符串）（必填）-您的报价套装编号。有关更多信息，请参阅 [标识符](catalog-apis.md#identifier)。
  + `Type`（字符串）（必填）-必须是`OfferSet@1.0`。
+ `DetailsDocument`（对象）（必填）-请求的详细信息。
  + `Offers`（数组）（必填）-要关联的 AWS Marketplace 优惠列表。最少：1 件商品。最多：7 个项目。
    + `OfferId`（字符串）（必填）- AWS Marketplace 报价的标识符。最小长度：1 个字符。最大长度：36 个字符。

**响应语法**

已根据您的请求创建更改集。对该请求的响应为您提供了变更集的和，如下所示。`ChangeSetId` `ChangeSetArn`

```
{
  "ChangeSetId": "example123456789012abcdef",
  "ChangeSetArn": "arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/ChangeSet/example123456789012abcdef"
}
```

变更请求被添加到队列中并进行处理。这包括验证信息以确保其符合 AWS Marketplace 指南。验证过程可能需要几分钟。

您可以通过 AWS Marketplace 管理门户网站查看请求的状态，也可以使用 API 操作直接通过 Catalog AP `[DescribeChangeSet](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/API_DescribeChangeSet.html)` I 查看请求的状态。

### 异步错误
<a name="associate-offers-asynchronous-errors"></a>

以下错误特定于 AWS Marketplace 目录 API 中的`AssociateOffers`操作。当您在处理更改集`DescribeChangeSet`之后调用时，会返回这些错误。有关使用`DescribeChangeSet`获取变更请求状态的更多信息，请参阅[使用变更集](catalog-apis.md#working-with-change-sets)。


| 错误代码 | 错误消息 | 
| --- | --- | 
| 优惠太多了 | 将最多 7 个优惠关联到优惠集。 | 
| 不兼容的 OFFER\_SET\_REFERENCE | 确保所有报价都是专门为此优惠套装创建的。 | 
| 无效的更新请求 | 优惠套装发布后，无法执行所请求的更改。 | 

## 取消优惠与优惠套餐的关联
<a name="disassociate-offers"></a>

使用`DisassociateOffers`更改类型从一个 AWS Marketplace 优惠组合中移除多个报价。此等性操作删除关联关系，同时保留选件的属性。`OfferSetId`在与同一套报价重新关联之前，已取消关联的报价不会被买家发现。它们不能与其他优惠套餐相关联。

**请求语法**

```
POST /StartChangeSet HTTP/1.1
Content-type: application/json

{
  "Catalog": "AWSMarketplace",
  "ChangeSet": [
    {
      "ChangeType": "DisassociateOffers",
      "Entity": {
        "Type": "OfferSet@1.0",
        "Identifier": "offerset-abc123"
      },
      "DetailsDocument": {
        "Offers": [
          {
            "OfferId": "offer-xyz789"
          }
        ]
      }
    }
  ]
}
```

为要添加`DisassociateOffers`更改类型的字段提供信息：
+ `Entity`（对象）（必填）-正在更新的实体。
  + `Identifier`（字符串）（必填）-您的报价套装编号。有关更多信息，请参阅 [标识符](catalog-apis.md#identifier)。
  + `Type`（字符串）（必填）-必须是`OfferSet@1.0`。
+ `DetailsDocument`（对象）（必填）-请求的详细信息。
  + `Offers`（数组）（必填）-要取消关联的商品列表。最少：1 件商品。最多：7 个项目。
    + `OfferId`（字符串）（必填）— AWS Marketplace 商品的标识符。最小长度：1 个字符。最大长度：36 个字符。

**响应语法**

已根据您的请求创建更改集。对该请求的响应为您提供了变更集的和，如下所示。`ChangeSetId` `ChangeSetArn`

```
{
  "ChangeSetId": "example123456789012abcdef",
  "ChangeSetArn": "arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/ChangeSet/example123456789012abcdef"
}
```

更改请求将添加到队列中并进行处理。这包括验证信息以确保其符合 AWS Marketplace 指南。验证过程可能需要几分钟。

您可以通过 AWS Marketplace 管理门户网站查看请求的状态，也可以使用 API 操作直接通过 Catalog AP `[DescribeChangeSet](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/API_DescribeChangeSet.html)` I 查看请求的状态。

### 异步错误
<a name="disassociate-offers-asynchronous-errors"></a>

以下错误特定于 AWS Marketplace 目录 API 中的`DisassociateOffers`操作。当您在处理更改集`DescribeChangeSet`之后调用时，会返回这些错误。有关使用`DescribeChangeSet`获取变更请求状态的更多信息，请参阅[使用变更集](catalog-apis.md#working-with-change-sets)。


| 错误代码 | 错误消息 | 
| --- | --- | 
| 无效的更新请求 | 优惠套装发布后，无法执行所请求的更改。 | 

## 将解决方案与优惠集关联
<a name="associate-solution-with-offer-set"></a>

使用`AssociateSolution`更改类型将单个 AWS Marketplace 解决方案与优惠集相关联。这创建了一种关系，使买家能够发现优惠集与解决方案的关联，并访问解决方案的丰富营销内容，例如详细描述、架构图和用例文档。

**注意**  
这是一个松散耦合的关联。AWS Marketplace 不强制解决方案和套餐之间保持一致。解决方案不能包含任何 AWS Marketplace 产品、与优惠组合中的产品不同的产品或重叠的产品。出于营销和发现目的，您可以完全灵活地关联自己拥有的任何解决方案。

有关所需的 IAM 权限的信息，请参阅[优惠套餐的 IAM 权限](#iam-permissions-offer-sets)。

**请求语法**

```
POST /StartChangeSet HTTP/1.1
Content-type: application/json

{
  "Catalog": "AWSMarketplace",
  "ChangeSet": [
    {
      "ChangeType": "AssociateSolution",
      "Entity": {
        "Type": "OfferSet@1.0",
        "Identifier": "offerset-abc123"
      },
      "DetailsDocument": {
        "SolutionId": "soln-xyz789"
      }
    }
  ]
}
```

为要添加`AssociateSolution`更改类型的字段提供信息：
+ `Entity`（对象）（必填）-正在更新的实体。
  + `Identifier`（字符串）（必填）-您的报价套装编号。有关更多信息，请参阅 [标识符](catalog-apis.md#identifier)。
  + `Type`（字符串）（必填）-必须是`OfferSet@1.0`。
+ `DetailsDocument`（对象）（必填）-请求的详细信息。
  + `SolutionId`（字符串）（必填）— 要关联的 AWS Marketplace 解决方案的标识符。最小长度：1 个字符。最大长度：50 个字符。必须匹配图案`^soln-[A-Za-z0-9]+$`。

**响应语法**

已根据您的请求创建更改集。对该请求的响应为您提供了变更集的和，如下所示。`ChangeSetId` `ChangeSetArn`

```
{
  "ChangeSetId": "example123456789012abcdef",
  "ChangeSetArn": "arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/ChangeSet/example123456789012abcdef"
}
```

更改请求将添加到队列中并进行处理。这包括验证信息以确保其符合 AWS Marketplace 指南。验证过程可能需要几分钟。

您可以通过 AWS Marketplace 管理门户网站查看请求的状态，也可以使用 API 操作直接通过 Catalog AP `[DescribeChangeSet](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/API_DescribeChangeSet.html)` I 查看请求的状态。

### 异步错误
<a name="associate-solution-asynchronous-errors"></a>

以下错误特定于 AWS Marketplace 目录 API 中的`AssociateSolution`操作。当您在处理更改集`DescribeChangeSet`之后调用时，会返回这些错误。有关使用`DescribeChangeSet`获取变更请求状态的更多信息，请参阅[使用变更集](catalog-apis.md#working-with-change-sets)。


| 错误代码 | 错误消息 | 
| --- | --- | 
| 不兼容\_解决方案\_关联 | 在关联新解决方案之前，先取消与现有解决方案的关联。 | 
| 无效的更新请求 | 优惠套装发布后，无法执行所请求的更改。 | 

## 取消解决方案与选件集的关联
<a name="disassociate-solution-from-offer-set"></a>

使用`DisassociateSolution`更改类型删除解决方案和优惠集之间的关联。这会将解决方案的营销内容从优惠集中移除，同时保持优惠集的可交易功能。

**请求语法**

```
POST /StartChangeSet HTTP/1.1
Content-type: application/json

{
  "Catalog": "AWSMarketplace",
  "ChangeSet": [
    {
      "ChangeType": "DisassociateSolution",
      "Entity": {
        "Type": "OfferSet@1.0",
        "Identifier": "offerset-abc123"
      },
      "DetailsDocument": {
        "SolutionId": "soln-xyz789"
      }
    }
  ]
}
```

为要添加`DisassociateSolution`更改类型的字段提供信息：
+ `Entity`（对象）（必填）-正在更新的实体。
  + `Identifier`（字符串）（必填）-您的报价套装编号。有关更多信息，请参阅 [标识符](catalog-apis.md#identifier)。
  + `Type`（字符串）（必填）-必须是`OfferSet@1.0`。
+ `DetailsDocument`（对象）（必填）-请求的详细信息。
  + `SolutionId`（字符串）（必填）-要取消关联的解决方案的标识符。最小长度：1 个字符。最大长度：50 个字符。

**响应语法**

已根据您的请求创建更改集。对该请求的响应为您提供了变更集的和，如下所示。`ChangeSetId` `ChangeSetArn`

```
{
  "ChangeSetId": "example123456789012abcdef",
  "ChangeSetArn": "arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/ChangeSet/example123456789012abcdef"
}
```

更改请求将添加到队列中并进行处理。这包括验证信息以确保其符合 AWS Marketplace 指南。验证过程可能需要几分钟。

您可以通过 AWS Marketplace 管理门户网站查看请求的状态，也可以使用 API 操作直接通过 Catalog AP `[DescribeChangeSet](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/API_DescribeChangeSet.html)` I 查看请求的状态。

### 异步错误
<a name="disassociate-solution-asynchronous-errors"></a>

以下错误特定于 AWS Marketplace 目录 API 中的`DisassociateSolution`操作。当您在处理更改集`DescribeChangeSet`之后调用时，会返回这些错误。有关使用`DescribeChangeSet`获取变更请求状态的更多信息，请参阅[使用变更集](catalog-apis.md#working-with-change-sets)。


| 错误代码 | 错误消息 | 
| --- | --- | 
| 无效的更新请求 | 优惠套装发布后，无法执行所请求的更改。 | 

## 发布优惠套装
<a name="release-offer-set"></a>

使用`ReleaseOfferSet`更改类型向买家提供报价套装。发布后，优惠套餐将从 “草稿” 状态转换为 “已发布” 状态，通过该状态变为可被发现 AWS Marketplace，并且关联的优惠只能作为统一套餐的一部分找到。

已发布的优惠集生成两个级别的通知：个人优惠和优惠集本身。所有个人报价通知均包含现有通知渠道（[电子邮件通知](https://docs.aws.amazon.com/marketplace/latest/userguide/email-notifications.html)和 [Amazon EventBridge 活动](https://docs.aws.amazon.com/marketplace/latest/userguide/notifications-eventbridge.html)）。 OfferSetId 系统会针对关键事件（例如优惠套装发布时间）发送优惠套餐级别通知。

**请求语法**

```
POST /StartChangeSet HTTP/1.1
Content-type: application/json

{
  "Catalog": "AWSMarketplace",
  "ChangeSet": [
    {
      "ChangeType": "ReleaseOfferSet",
      "Entity": {
        "Type": "OfferSet@1.0",
        "Identifier": "offerset-abc123"
      },
      "DetailsDocument": {}
    }
  ]
}
```

为要添加`ReleaseOfferSet`更改类型的字段提供信息：
+ `Entity`（对象）（必填）-正在更新的实体。
  + `Identifier`（字符串）（必填）-您的报价套装编号。有关更多信息，请参阅 [标识符](catalog-apis.md#identifier)。
  + `Type`（字符串）（必填）-必须是`OfferSet@1.0`。
+ `DetailsDocument`（对象）（必填）-此操作的空对象。

**响应语法**

已根据您的请求创建更改集。对该请求的响应为您提供了变更集的和，如下所示。`ChangeSetId` `ChangeSetArn`

```
{
  "ChangeSetId": "example123456789012abcdef",
  "ChangeSetArn": "arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/ChangeSet/example123456789012abcdef"
}
```

更改请求将添加到队列中并进行处理。这包括验证信息以确保其符合 AWS Marketplace 指南。验证过程可能需要几分钟。

您可以通过 AWS Marketplace 管理门户网站查看请求的状态，也可以使用 API 操作直接通过 Catalog AP `[DescribeChangeSet](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/API_DescribeChangeSet.html)` I 查看请求的状态。

### 异步错误
<a name="release-offer-set-asynchronous-errors"></a>

以下错误特定于 AWS Marketplace 目录 API 中的`ReleaseOfferSet`操作。当您在处理更改集`DescribeChangeSet`之后调用时，会返回这些错误。有关使用`DescribeChangeSet`获取变更请求状态的更多信息，请参阅[使用变更集](catalog-apis.md#working-with-change-sets)。


| 错误代码 | 错误消息 | 
| --- | --- | 
| 缺少买家备注 |  BuyerNotes 在发布优惠套装之前提供。 | 
| 缺少报价 | 在发布优惠集之前，请将至少两个优惠与其关联起来。 | 
| 每件商品的优惠太多了 | 每件商品只能将一个报价与该优惠组合关联起来。 | 
| 不一致的报价\_货币\_代码 | 确保所有关联的报价都有匹配项 CurrencyCode。 | 
| 不一致的报价可用性结束日期 | 确保所有关联的报价都有匹配项 AvailabilityEndDate。 | 
| 不一致的报价定位规则 | 确保所有关联的报价都有匹配项 TargetingRule。 | 
| 不兼容的 OFFER\_TARGETING\_RULE | 只有以买家为目标的报价才能与报价组合相关联。 | 
| 已过期的优惠 | 取消已过期报价与优惠套餐的关联或延长其期限。 AvailabilityEndDates | 
| 报价草稿 | 在发布优惠套餐之前发布所有关联的报价。 | 
| 不兼容\_解决方案\_状态 | 在有限状态或公共状态下提供解决方案。 | 
| 无效的更新请求 | 优惠套装发布后，无法执行所请求的更改。 | 

## 优惠套装生命周期
<a name="offer-set-lifecycle"></a>

优惠套餐生命周期包括以下阶段：

### 创建阶段
<a name="creation-phase"></a>

使用`CreateOfferSet`更改类型创建处于 “草稿” 状态的优惠套餐实体。优惠套装将获得一个唯一标识符，并以 “草稿” 状态开始。

### 配置阶段
<a name="configuration-phase"></a>

在配置过程中，您：
+ 使用`UpdateInformation`（姓名、买家备注）添加或更新元数据
+ 创建个人私密报价，`OfferSetId`在报价创建过程中指定
+ 使用将优惠与优惠集相关联 `AssociateOffers`
+ （可选）关联`AssociateSolution`用于增强营销内容的解决方案

**重要**  
针对个人`OfferSetId`的优惠是不可变的，只能在创建优惠时进行设置。在使用将优惠与优惠套餐关联之前`AssociateOffers`，您必须先创建各个报价，并在创建优惠`OfferSetId`时指定。如果您需要添加的现有报价不正确`OfferSetId`，则必须使用正确的`OfferSetId`指定内容创建新的报价。

### 验证阶段
<a name="validation-phase"></a>

在发布优惠套装之前，请确保：
+ 该优惠套装包含 2 到 7 个优惠
+ 所有相关优惠必须是：
  + 处于 “已发布” 状态
  + 活动
  + 使用相同的货币
  + 定位同一个买家 AWS 账户 ID
  + 具有相同的到期日期

### 发布阶段
<a name="release-phase"></a>

准备就绪后，使用`ReleaseOfferSet`变更类型将选件集从 “草稿” 状态转换为 “已发布” 状态。这样，买家就可以通过 AWS Marketplace该报价集找到了。

### Post-release 管理
<a name="post-release-management"></a>

**到期管理：**
+ 优惠套装的有效到期日按所有关联优惠中最早的到期日计算
+ 您可以使用现有的报价管理功能（`UpdateAvailability`更改类型）修改个别报价的到期日期

**优惠套装修改：**

当买家请求更改已发布的报价套装时，请使用娱乐工作流程：

1. 创建新的优惠套餐实体

1. 对于不需要更改的报价，请通过 AWS Marketplace 管理门户克隆现有报价

1. 对于需要修改的报价，使用请求的更改创建新报价，并指定新的报价 `OfferSetId`

1. 使用将所有优惠（克隆的和新的）与新的优惠集相关联 `AssociateOffers`

1. 使用发布新优惠套装 `ReleaseOfferSet`

1. 通过设置关联优惠的可用性结束日期，使原始优惠设置失效

## 优惠套餐的 IAM 权限
<a name="iam-permissions-offer-sets"></a>

要使用 AWS Marketplace 目录 API 使用优惠集，您需要特定的 IAM 权限。本节介绍选件集操作所需的权限和跨实体授权要求。

### 所需的 IAM 操作
<a name="required-iam-actions"></a>

要进行优惠集操作，需要执行以下 IAM 操作：
+ `aws-marketplace:StartChangeSet`— 所有选件集变更类型（包括创建、更新、关联和发布操作）均为必填项
+ `aws-marketplace:DescribeChangeSet`— 需要检查变更集执行的状态和结果
+ `aws-marketplace:ListEntities`— 需要在您的账户中列出优惠套装
+ `aws-marketplace:DescribeEntity`— 需要检索有关优惠套餐的详细信息

### 资源权限
<a name="resource-permissions"></a>

使用以下 ARN 模式授予对特定资源的权限：
+ **优惠套装** — `arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/OfferSet/*`
+ **个人优惠** — `arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/Offer/*`
+ **解决方案** — `arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/Solution/*`

要获得更严格的权限，请将通配符 (\*) 替换为特定的实体标识符。

### Cross-entity 授权
<a name="cross-entity-authorization"></a>

某些选件集操作需要对选件集和关联实体的权限：

**AssociateOffers**
+ `aws-marketplace:StartChangeSet`对报价套装实体的权限
+ `aws-marketplace:StartChangeSet`允许`AssociateWithOfferSet`更改关联的每个单独报价实体的类型

**AssociateSolution**
+ `aws-marketplace:StartChangeSet`对报价套装实体的权限
+ `aws-marketplace:StartChangeSet`对关联的解决方案实体具有`AssociateWithOfferSet`更改类型的权限

**注意**  
仅对选件或解决方案拥有`DescribeEntity`（只读）权限不足以进行关联操作。您必须拥有与优惠套餐关联的实体的`AssociateWithOfferSet`更改类型的`StartChangeSet`权限。

### 示例 IAM policies
<a name="example-iam-policies"></a>

**基本报价套装管理**

此政策提供基本优惠集操作的权限，无需跨实体关联：

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "aws-marketplace:StartChangeSet",
        "aws-marketplace:DescribeChangeSet",
        "aws-marketplace:ListEntities",
        "aws-marketplace:DescribeEntity"
      ],
      "Resource": [
        "arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/OfferSet/*"
      ]
    }
  ]
}
```

**Cross-entity 的权限 AssociateOffers**

本政策演示了以下操作所需的特定权限和条件 AssociateOffers：

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "aws-marketplace:StartChangeSet",
      "Resource": "arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/OfferSet/*",
      "Condition": {
        "StringEquals": {
          "catalog:ChangeType": ["AssociateOffers"]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "aws-marketplace:DescribeEntity",
      "Resource": "arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/Offer/*"
    },
    {
      "Effect": "Allow",
      "Action": "aws-marketplace:StartChangeSet",
      "Resource": "arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/Offer/*",
      "Condition": {
        "StringEquals": {
          "catalog:ChangeType": ["AssociateWithOfferSet"]
        }
      }
    }
  ]
}
```

要获得更严格的权限，请将通配符 (\*) 替换为特定的实体标识符。

**Cross-entity 的权限 AssociateSolution**

本政策演示了以下操作所需的特定权限和条件 AssociateSolution：

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "aws-marketplace:StartChangeSet",
      "Resource": "arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/OfferSet/*",
      "Condition": {
        "StringEquals": {
          "catalog:ChangeType": ["AssociateSolution"]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "aws-marketplace:DescribeEntity",
      "Resource": "arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/Solution/*"
    },
    {
      "Effect": "Allow",
      "Action": "aws-marketplace:StartChangeSet",
      "Resource": "arn:aws:aws-marketplace:us-east-1:123456789012:AWSMarketplace/Solution/*",
      "Condition": {
        "StringEquals": {
          "catalog:ChangeType": ["AssociateWithOfferSet"]
        }
      }
    }
  ]
}
```

要获得更严格的权限，请将通配符 (\*) 替换为特定的实体标识符。