This document describes the Agentic Commerce Protocol - Product Feed implementation.
The Agentic Commerce Protocol - Product Feed is a system for generating and transforming product feed data in JSON format, compliant with the Agentic Commerce Protocol - Product Feed standard by OpenAI. The system uses a modular, mapper-based architecture to transform internal product data into the required feed format.
ChatGPTFeedMarshaller)The ChatGPTFeedMarshaller orchestrates the entire feed generation process. It iterates through products and applies mappers sequentially, manages file I/O and JSON serialization with the Jackson ObjectMapper, and cleans up artifacts from previous runs before processing. It supports file splitting into multiple JSON files with configurable product limits and handles ZIP compression with configurable compression levels.
ChatGPTProvider)The ChatGPTProvideris a factory pattern implementation for creating the following mapper instances:
The ChatGPTProductMapper is responsible for basic product data mapping.
The ChatGPTProductLinkMapper generates product detail page URLs that open in the PWA.
The ChatGPTProductImageMapper generates valid product image links.
The ChatGPTCommonDataMapper generates feed-level metadata, such as seller URL and name, and country information.
The ChatGPTFeedValidator validates the JSON created. It is responsible for rejecting incomplete JSON data when the feed configuration requires it.
ChatGPTProductMapperImpl)The ChatGPTProductMapperImpl maps the following core product attributes:
Source - ICM Product | Target - JSON Attributes | Description |
|---|---|---|
SKU | item_id | |
Product name | title | |
Short/long description | description | |
Manufacturer/supplier name | brand | Tries manufacturer first, then supplier |
Category path (the product's default catalog category) | product_category | The root and last leaf category only |
List/sale price | price and currency | |
Online status | availability |
|
condition | Default is set to | |
is_eligible_search | Default is set to | |
is_eligible_checkout | Default is set to |
All the configurations below are defined as properties in the syndication-target.properties file.
The configuration keys must start with intershop.syndication.target.ChatGPTProductFeed. and end with the key suffixes listed below:
Key | Description |
|---|---|
(default: | If neither the manufacturer nor the supplier name is available, the attribute falls back to a generic brand. Otherwise, the brand attribute is omitted from the JSON file for that product. |
(default: | You can use the category ID instead of the localized display name if the category ID provides better data for the feed. If set to |
(default: | Use this key to configure separate price and currency attributes. The feed specification states that the price format should be: By default, price and currency are combined into a single attribute, for example, |
ChatGPTProductLinkMapperImpl)The ChatGPTProductLinkMapperImpl generates PWA product detail page URLs using URL rewriting. It uses the same URL rewriting functionality that is used for generating the sitemap for the PWA3+ feed. As defined for the PWA3+, the URL includes product name, category path, and the category name and SKU as URL query parameter.
ChatGPTProductImageMapper)The ChatGPTProductImageMapper uses the image_url feed configuration for the image-view and image-type to select the product image for the primary product image. It also handles optional additional images by using the image-view and image-type configured for one or more additional_image_urls. If no view and type combination is configured for the additional_image_urls, the attribute is not included in the JSON.
It uses image type/view configurations stored as syndication custom attributes during the configuration in the feed UI.
ChatGPTCommonDataMapperImpl)This mapper applies feed-level attributes (required for all products in the feed).
Java Object Attribute | JSON Attribute | Source of the Data |
|---|---|---|
storeCountry | store_country | From feed configuration, or the feed locale country code is used as fallback |
targetCountries | target_countries | From comma-delimited feed configuration, or the feed locale is used as fallback |
sellerName | seller_name | From feed configuration, or it uses "Demo Shop" as default |
sellerUrl | seller_url | From the property |
returnPolicyPageUrl | return_policy | From feed configuration, or it uses seller URL as fallback |
ChatGPTFeedValidatorImpl)The ChatGPTFeedValidatorImpl validates the mapped product data against OpenAI requirements. It checks mandatory attributes such as id, title, description, availability, image_url, price, etc. If the feed configuration to Include Only Complete Products is set to yes, it removes incomplete products from the JSON data file. Otherwise, all products—even incomplete ones—get written into the JSON files.
This is the core product entity for the JSON serialization.
It has the following required attributes:
id - maps to JSON item_id
title
description
link - maps to JSON url
imageLink - maps to JSON image_url
availability
The optional attributes are:
brand
category - maps to JSON product_category
price
currency
additionalImageLinks - maps to JSON additional_image_urls
The fixed data flags are:
condition - by default, set to new
enableSearch - maps to JSON is_eligible_search and defaults to true
enableCheckout - maps to JSON is_eligible_checkout and defaults to false
This is the container holding the products and feed metadata.
products - The list of ChatGPTProduct objects
storeCountry - A single country code that maps to JSON store_country
targetCountries - A list of country codes that maps to JSON target_countries
sellerName - The store name that maps to JSON seller_name
sellerUrl - The store URL that maps to JSON seller_url
returnPolicyPageUrl - The return policy page URL that maps to JSON return_policy
The options for availability have the following values: in_stock, out_of_stock, pre_order, backorder, and unknown. Only in_stock and out_of_stock are used. If the product is online, in_stock is used.
Initialize the mappers and the validator with the provider.
Loop through each product in the iterator and check if a new JSON file is needed (based on maxNumberOfProductsPerJsonFile). Create a new ProductFeed object with the common data.
Use the mappers to map product data through the following pipeline:ProductMapper - Maps basic product attributesLinkMapper - Creates product URLImageMapper - Creates image URLsValidator - Checks the quality of the data
Depending on the feed configuration, add (valid) products to the current feed.
Write the feed to a JSON file with pretty-printing.
If compression is enabled, the generated JSON files get compressed into ZIP archive and clean up afterwards.
The following table shows the configurations stored in the database table Syndication_AV:
Parameter | Type | Purpose | Default |
|---|---|---|---|
| String | Store location country code | Locale country |
| String | Comma-delimited target countries | Locale country |
| String | Store name in the feed | "Demo Shop" |
| String | Return policy URL | Seller URL |
| Int | ZIP compression (0-9, -1=none) | -1 (=no compression, plain JSON) |
| Boolean | Include only complete products | |
| String | The selected image view and type for Example: |
These are configurations stored in properties, for example, in the syndication-targets.properties file.
The property keys must all start with: intershop.syndication.target.ChatGPTProductFeed.
Parameter | Type | Purpose | Default |
|---|---|---|---|
| Int | Products per JSON file | 100 |
| Boolean | Separate price and currency attributes
| false |
| Boolean | Generic brand fallback | false |
| Boolean | Use category ID versus localized display name | false |
| String | PWA product page pipeline. Tells URL rewriting which rewrite rule to use when generating product detail page URLs | Required |
The implementation handles missing or incomplete data, with fallbacks for some attributes.
Validation prevents incomplete products from affecting the feed, but can be circumvented in the UI if required.
The system logs warnings for file deletion and configuration parsing issues.
If required, new mappers can be added or replaced by replacing the ChatGPTProvider implementation.
There are configurations in the properties and the feed configuration that change the data written, reducing the need for code changes.
The modular design allows customization via syndication-targets.properties.
The information provided in the Knowledge Base may not be applicable to all systems and situations. Intershop Communications will not be liable to any party for any direct or indirect damages resulting from the use of the Customer Support section of the Intershop Corporate Website, including, without limitation, any lost profits, business interruption, loss of programs or other data on your information handling system.