mcpField
C
channel3-api

channel3-api

github.com/channel3-ai开发12206 次安装2 天前更新
代码仓库

关于 channel3-api

channel3-api 是面向开发者的 Channel3 商品目录 API 集成技能,帮助根据输入选择端点,并说明搜索模式、筛选器、SDK、命令行及 React 商店组件的用法。

主要功能

  1. 01按商品任务选择 API 端点
  2. 02文本和图片商品搜索指引
  3. 03结构化筛选器与地区设置指引
  4. 04SDK 和命令行用法说明
  5. 05React 商店组件用法说明
  6. 06商品查询、推荐和提醒

适用场景

  1. 01为商品查询或图片选择合适端点
  2. 02使用 Channel3 UI 组件构建商店
  3. 03根据商品 ID 获取相似商品
  4. 04将商家 URL 解析为目录商品

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/channel3-ai/skills --skill channel3-api

安装后在 Claude Code 中输入/channel3-api确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
api-reference.md
conversations.md
sdk-4-upgrade.md
variants.md

详细介绍

Channel3 API 集成指南

Channel3 是一个通用产品目录 API。请选择与开发者输入相匹配的端点。

开发者提供了……使用
自由文本查询、图片 URL,或两者兼有POST /v1/search
丰富的自然语言需求描述(终端用户消息、Agent 上下文)使用 config.mode: "agentic" 调用 POST /v1/search — 参见选择搜索模式
要构建的 React 商店界面(网格、筛选器、PDP、变体)Channel3 UI shadcn registry — 使用带类型的组件,不要手动构建
Channel3 product_id,并想查找相似商品POST /v1/similar
Channel3 product_id,并想获取完整详情GET /v1/products/{id}
product_id 和变体选项(颜色/尺码/...),并想查找匹配的商品报价使用 selected_options 调用 GET /v1/products/{id}(SDK)/ 使用 option_<name>=<label> 查询参数(HTTP)
商家 URL,并想获取规范商品POST /v1/lookup
筛选条件,但没有查询(某个品牌/类别/网站的所有商品)POST /v1/browse
用于购物的聊天界面(流式 Agent)POST /v1/conversations — 参见 references/conversations.md
点击/交易归因数据GET /v1/reporting/clicks / GET /v1/reporting/transactions
product_id,并想设置价格/可用性/报价变更提醒POST /v1/product-subscriptions(webhooks)— 参见商品订阅
product_id,并想查看历史价格GET /v0/price-tracking/history/{id}
自由文本词条,并想查找匹配的类别 slugGET /v1/categories/search
颜色限制(蓝色、藏青色、红色等)在 POST /v1/search 或 POST /v1/similar 中使用 filters.colors — 将颜色名称映射为 sRGB 十六进制值;绝不要使用 filters.attributes.color
非颜色类结构化属性(材质、镜框颜色等)在 POST /v1/search 或 POST /v1/similar 中使用 filters.attributes — 通过 Category.attributes 查找 handle/值(跳过 color handle)

基础 URL: https://api.trychannel3.com
身份验证: x-api-key 标头(服务端)。浏览器客户端使用短期有效的客户端令牌 — 参见 references/conversations.md。
完整文档: docs.trychannel3.com(SDK 设置、各端点参考、错误处理、重试、异步用法)
离线快速参考: references/api-reference.md · 从 SDK 3.x 升级: references/sdk-4-upgrade.md

反模式(请先阅读)

  • 不要使用 /v1/similar 处理自由文本查询或图片。 Similar 接受的是 Channel3 product_id,而不是查询。如果用户描述了商品或提供了图片,请使用 /v1/search(query 和/或 image_url)。
  • 如果按标题调用 /v1/search 即可,就不要为了给 /v1/similar 提供初始商品而使用 /v1/lookup。 Lookup 需要几秒钟,而且可能无法处理未编入目录的 URL。预期流程是 search → 获取 product.id → similar。必要时可以使用先 lookup 再 similar 的方式,但对大多数情况而言,这并非最佳流程。
  • Locale(country / currency)会限制返回的商家报价。 跨区域商店可以省略 country,只设置 currency: "EUR"。默认值为 en / US / USD。
  • 筛选条件优于在查询中堆砌条件,但在查询中堆砌条件也好过丢弃限制条件。 价格、品牌、类别、颜色、性别、商品状况、可用性、促销和尺寸都有结构化筛选器 — 在默认/关键词模式下,这是获得精准结果的最佳途径。如果无法通过筛选器表达某个限制条件,请将其放入 query,而不是完全省略。只有无法枚举的内容(美学描述、型号名称、使用场景)才使用仅含 query 的表述。Agentic 模式则相反:将完整上下文都放入 query。

快速开始

npm install @channel3/sdk           # TypeScript
pip install channel3-sdk            # Python

另有 Go SDK 可用——参见 docs.trychannel3.com/sdk。

在环境中设置 CHANNEL3_API_KEY(可在 trychannel3.com 免费获取密钥)。然后即可进行最简端到端调用:

import { Channel3 } from '@channel3/sdk';

const client = new Channel3({ apiKey: process.env.CHANNEL3_API_KEY });
const page = await client.products.search({ query: 'running shoes', limit: 5 });
const products = page.data;  // Product[]
from channel3_sdk import Channel3

client = Channel3(api_key="YOUR_API_KEY")
page = client.products.search(query="running shoes", limit=5)
products = page.items  # list[Product]

SDK 4.0 说明:TypeScript 使用命名导入(import { Channel3 })、对象形式的请求(client.products.retrieve({ product_id }))和与传输格式一致的 snake_case 请求字段。分页调用会返回一个 Page——在 TS 中使用 .data,在 Python 中使用 .items,两者都支持异步迭代。仍在使用 SDK 3.x 代码?参见 references/sdk-4-upgrade.md。

可通过构造函数(new Channel3({ country: 'GB', currency: 'GBP' }))或 CHANNEL3_LANGUAGE / CHANNEL3_COUNTRY / CHANNEL3_CURRENCY 环境变量为整个客户端设置区域默认值;每次调用中的 config.country / config.currency / config.language 始终优先。关于异步客户端、错误类、重试、超时和日志记录,请参见 docs.trychannel3.com/sdk。

CLI(终端与测试)

如果要在终端中临时探索 API——检查筛选条件的格式是否正确、获取一个 product_id 以用于集成测试,或在没有项目的情况下进行一次性调用——请使用 Channel3 CLI。它会自动跟踪 API 规范。

npm install -g @channel3/cli
export CHANNEL3_API_KEY="..."

channel3 products search --query-param "running shoes" --limit 5 \
  --filters '{"price":{"max_price":100},"gender":"male"}' \
  --format jsonl \
  --query 'products[].{id: id, title: title, offers: offers[].{domain: domain, price: price.price, url: url}}'

--query-param 是搜索词;--query 是对响应进行 JMESPath 投影的表达式。在 0.4.1 及更早的 CLI 版本中,搜索词使用的是 --query——旧命令需要更新。

生产代码请使用 SDK。CLI 用于终端操作。

UI 组件(React)

Channel3 UI 是一个开源(MIT)React 组件库,通过 shadcn registry 分发,并直接使用 @channel3/sdk 的类型——搜索或获取产品返回的 Product 可直接传入。

npx shadcn@latest add https://ui.trychannel3.com/r/all.json
  • 组件块 — product-search(搜索栏 + 分面筛选 + 无限滚动网格)和 product-details(完整 PDP:图库、变体选择、优惠对比、价格历史、推荐)。
  • 按需选用 — 组件(product-card、variant-selector、offers-list、image-gallery,……)和钩子(useProductSearch、useVariantSelection、useProductRecommendations,……)。
  • 采用纯展示设计 — 组件通过 props 接收 Channel3 数据,并通过回调发出操作意图;它们不会调用 API,也不会接触你的密钥。在服务器上(CHANNEL3_API_KEY 所在的位置)获取并整理数据,然后传入结果。
  • SDK 主版本升级时 — 从 registry 重新安装(add --overwrite),而不是手动修复组件类型;参见 references/sdk-4-upgrade.md。
  • 传入完整的 SDK 响应对象,而不是裁剪后的子集 — 例如,PriceHistoryResponse 要求包含 canonical_product_id。跨越 JSON 边界时,Date 字段会变成 ISO 字符串;请在边界处进行转换(z.coerce.date())。

端点

搜索 — POST /v1/search

文本、图像或文本+图像搜索。返回分页的 Product Page。

const page = await client.products.search({
  query: 'running shoes under $100',
  filters: { price: { max_price: 100 }, gender: 'male' },
  limit: 10,
});
const products = page.data;
page = client.products.search(
    query="running shoes under $100",
    filters={"price": {"max_price": 100}, "gender": "male"},
    limit=10,
)
products = page.items

单次调用的区域覆盖设置:config: { country: 'GB', currency: 'GBP' }。完整筛选条件格式见 references/api-reference.md;各端点的完整架构见 docs.trychannel3.com/api-reference。

选择搜索模式

通过 config.mode 设置:

  • default(词法 + 语义)——适用于几乎所有调用。
  • agentic——适用于你没有撰写的丰富自然语言需求,例如最终用户的消息,或你的 Agent 传递累积的上下文。将完整上下文放入 query,让 LLM 规划器将其拆解为结构化子搜索,而不是手动构建筛选条件。耗时数秒。Channel3 的 MCP 服务采用此模式,因此它能为你自己的 Agent 循环提供 MCP 级别的行为。
  • keyword——仅词法搜索,延迟最低;与图像输入不兼容。适用于小众场景(广告定向、实时搜索);不适合常规搜索。
结构化属性和颜色筛选条件

颜色条件使用 filters.colors,而不是 filters.attributes。 将颜色词(海军蓝、蓝色、红色……)映射为 sRGB 十六进制值。filters.attributes 仅用于非颜色属性标识符(材质、镜框颜色等)。

const page = await client.products.search({
  query: 'leather sofa',
  filters: {
    category_ids: ['sofas'],
    attributes: { material: ['Leather'] },
    colors: {
      palette: [
        { hex: '#001f3f' }, // navy — use colors for any color intent
        { hex: '#ffffff', percentage: 0.3 },
      ],
    },
  },
  limit: 10,
});
  • colors.palette——产品必须包含列出的每种颜色(AND)。hex 为 sRGB(#rrggbb);percentage(0–1)是可选值,表示该颜色在产品图片中所占的最低比例。
  • attributes——Record<string, string[]>。键为非颜色属性标识符(例如 material、frame-color);同一键中的值为 OR,不同键之间为 AND。通过 client.categories.retrieve({ slug }) → Category.attributes 查询某个类别的有效标识符和值。此处不要传入 color 标识符——请改用 filters.colors。同时提供类别筛选条件时,每个属性键都必须至少对其中一个类别有效。

不要猜测属性标识符或值——对于非颜色属性,categories.retrieve 是唯一可信来源。返回的产品包含 structured_attributes(例如 { color: ["Navy"], material: ["Leather"] }),可用于展示;请通过 filters.colors 筛选颜色,不要将 structured_attributes.color 传入 filters.attributes。

对于原始 HTTP 调用或非 SDK 调用方:

curl -X POST https://api.trychannel3.com/v1/search \
  -H "x-api-key: $CHANNEL3_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"running shoes","filters":{"price":{"max_price":100}},"limit":10}'
相似商品 — POST /v1/similar

根据已有的 Channel3 product_id 查找“类似商品”。 几乎总是以之前 /v1/search 响应中的商品作为起点。返回相同的分页结构;源商品会被排除。

const search = await client.products.search({ query: 'red leather jacket', limit: 5 });
const seedId = search.data[0].id;

const similar = await client.products.findSimilar({
  product_id: seedId,
  filters: { gender: 'female', price: { max_price: 200 } },
  limit: 10,
});
search = client.products.search(query="red leather jacket", limit=5)
seed_id = search.items[0].id

similar = client.products.find_similar(
    product_id=seed_id,
    filters={"gender": "female", "price": {"max_price": 200}},
    limit=10,
)

建议使用筛选条件,将结果限定在相同范围内(性别、品牌、类别、价格)。若要查找“类似商品,但颜色为海军蓝”,请使用 filters.colors(例如 { hex: '#001f3f' }),而不是 filters.attributes.color。非颜色属性使用 filters.attributes。如果商品尚未进入目录,则返回 404——请改用商品标题调用 /v1/search。

查询 — POST /v1/lookup

将商家 URL 解析为规范的 Channel3 Product。仅当开发者唯一掌握的商品标识是 URL 时(例如用户粘贴的链接),才使用此接口。

const { product } = await client.products.lookup({
  url: 'https://merchant.com/products/red-jacket',
});
result = client.products.lookup(url="https://merchant.com/products/red-jacket")
product = result.product

延迟:未缓存的 URL 通常需要 2–10 秒(实时提取),已缓存的 URL 则不到 1 秒。对于非商品页面(类别列表、搜索结果、主页),返回 422;超时时返回 504。max_staleness_hours(默认值为 3)用于限制缓存的新鲜度。响应包含与 GET /v1/products/{id} 相同、已填充数据的 variants 和 structured_attributes。获得 product.id 后,请将其用于 client.products.retrieve() 或 client.products.findSimilar()。

商品详情 — GET /v1/products/{product_id}

获取已知 product_id 对应的完整 Product。响应结构与搜索结果相同,但会根据当前选项完整填充 variants,包括各选项值的可用性和缩略图。此调用免费。

const product = await client.products.retrieve({
  product_id: 'prod_abc123',
  country: 'GB',
  currency: 'GBP',
});
product = client.products.retrieve("prod_abc123", country="GB", currency="GBP")

通过 config 指定地区设置(language、country、currency、length_unit、weight_unit);通过 filters.website_ids 限定零售商(接受域名,例如 "nike.com")。如果该商品在请求的地区没有商家报价,则返回 404——请使用在相同地区设置下调用 /v1/search 获取的 product_id,或省略地区设置以回退到默认值。

变体与 selected_options

包含变体的 Product 会携带:

  • variants.options — 每个维度(例如 Color、Size)及其 values(label、exists、available;对于将颜色作为产品切换的配置,还可包含可选的 thumbnail_url 和 product_id)。
  • variants.selected — 当前响应中已解析的维度([{ name: "Color", label: "Navy" }, ...])。
  • structured_attributes — 已解析变体的提取属性值(例如 { color: ["Navy"], material: ["Leather"] })。

若要在不同的变体配置下重新获取产品,请传入 selected_options(SDK)或 option_<DimensionName>=<Label> 查询参数(HTTP)。可以组合多个维度;维度名称会保留大小写,并与产品系列中的名称进行不区分大小写的匹配。

const product = await client.products.retrieve({
  product_id: 'prod_abc123',
  selected_options: { Color: 'Blue', Size: 'XL' },
});
curl -X GET \
  "https://api.trychannel3.com/v1/products/prod_abc123?option_Color=Blue&option_Size=XL" \
  -H "x-api-key: $CHANNEL3_API_KEY"

服务器会返回形状相同的 Product,并更新 variants.selected 以反映已解析的配置。请将你请求的选项与 variants.selected 进行比较,以检测服务器端的调整(例如,请求颜色下的请求尺码不可用)。

如需了解完整的变体模型——搜索与详情的差异、product_id 导航(颜色对应独立产品),以及 exists/available UI 层级——请参阅 references/variants.md。在 React 中,Channel3 UI 的 useVariantSelection hook 会为你实现这一选择与重新解析流程。

浏览 — POST /v1/browse

仅使用筛选条件的产品列表——不包含查询词或图片。可用于呈现品牌页、类别页或零售商商品集。必须至少提供 brand_ids、category_ids 或 website_ids 中的一项(否则返回 422);其他所有 SearchFilters 字段也都适用。返回的分页结构与搜索相同。

const page = await client.products.browse({
  filters: { brand_ids: ['MpZS'], sale: 'on_sale' },
  limit: 20,
});
page = client.products.browse(
    filters={"brand_ids": ["MpZS"], "sale": "on_sale"},
    limit=20,
)
对话 — POST /v1/conversations

基于轮次的对话式购物:开发者发送用户消息,Channel3 运行 Agent(搜索、比较、优化),并以流式方式返回回复。浏览器客户端使用在你的服务器上签发的短期客户端令牌进行身份验证——API 密钥不会发送到浏览器。

// Server: mint a token for the browser session
const { token, expires_at } = await client.conversations.clientTokens.create({
  ttl_seconds: 900,
});

// Browser: authenticate with the token via the `auth` option
const browserClient = new Channel3({
  auth: () => Promise.resolve({ headers: { Authorization: `Bearer ${token}` } }),
});
const stream = await browserClient.conversations.createTurnStream({
  message: { parts: [{ type: 'text', text: 'running shoes under $100' }] },
  conversation_id, // omit to start a new thread
});
for await (const event of stream) {
  if (event.type === 'part.delta') process.stdout.write(event.delta);
}

完整的身份验证模型、SSE 事件参考和 Python 示例:references/conversations.md。

报告 — /v1/reporting/...

为你的 API 密钥提供点击和交易归因,可按你为请求添加标签的 user_id 进行筛选(见下文的用户归因)。

  • GET /v1/reporting/clicks?start_date=&end_date= — 商品链接点击
  • GET /v1/reporting/transactions?start_date=&end_date= — 归因销售额
const clicks = await client.reporting.listClicks({
  start_date: new Date('2026-08-01T00:00:00Z'), // Date objects, not ISO strings
  end_date: new Date('2026-08-17T00:00:00Z'),
  user_id: 'user_123', // optional
});
clicks.data; // Click[]
clicks.response.summary; // aggregates, e.g. { total_clicks }

每次调用的日期范围上限为 90 天(默认:最近 30 天);响应采用分页方式(page / limit,最多 100 条)。字段参考:references/api-reference.md。

产品订阅 — /v1/product-subscriptions

当产品的优惠发生变化时,通过 webhook 发送提醒:包括价格、可用性,以及商家上架或下架优惠。可用于补货提醒、优惠发现和降价通知,无需轮询。免费 — 不扣除积分。

目前仅支持 HTTP — SDK 和 CLI 尚不支持产品订阅。

curl -X POST https://api.trychannel3.com/v1/product-subscriptions \
  -H "x-api-key: $CHANNEL3_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "product_id": "2yh8WH5",
    "events": ["offer.price.changed", "offer.availability.changed"],
    "domains": ["nike.com"]
  }'
  • 事件(每个订阅选择至少 1 个):offer.price.changed、offer.availability.changed、offer.created、offer.deleted。
  • 范围:domains(最多 25 个商家域名;省略则涵盖所有优惠)和/或 selection(固定一个变体配置,例如 [{"name": "Size", "label": "L"}] — 与产品上的 variants.selected 格式相同)。
  • 幂等创建 — 内容相同的有效订阅(事件、域名和选择均相同)会返回现有订阅。来自 /v1/lookup 的 product_id 会自动规范化;如果查找仍在处理中,创建请求会返回 409 — 使用相同 ID 重试。
  • 管理:GET /v1/product-subscriptions?status=&cursor=&limit= · GET /v1/product-subscriptions/{id} · DELETE /v1/product-subscriptions/{id}(删除请求返回后,该订阅不会再发送任何事件)。
  • 投递:事件会通过 POST 发送到你在账户的 dashboard webhook 管理门户(Svix)中注册的端点。端点按账户配置,而非按订阅配置 — 每个启用了相应事件类型的端点都会收到事件。验证 svix-signature 标头(HMAC-SHA256,Standard Webhooks 格式,每个端点使用各自的 whsec_ 密钥),并根据事件 id 去重。载荷架构、重试和验证代码:docs.trychannel3.com/product-subscription-webhooks。
  • 频率:订阅会为产品安排优先级较高的每日重新抓取;仅当刷新检测到变化时才会触发事件,并非按固定时间表触发。
价格跟踪 — /v0/price-tracking/...

不建议新的集成使用价格跟踪订阅 — 请改用产品订阅。迁移时,请取消现有跟踪(client.priceTracking.stop({ canonical_product_id });使用 client.priceTracking.listSubscriptions() 查找当前订阅),然后创建产品订阅。

价格历史功能未弃用 — 产品订阅没有对应功能:

  • client.priceTracking.retrieveHistory({ canonical_product_id, days }) — 默认 90 天,最多 90 天;返回 current_price、min/max/mean/std_dev、current_status(low / typical / high)
const history = await client.priceTracking.retrieveHistory({
  canonical_product_id: 'prod_abc123',
  days: 90,
});
console.log(history.statistics?.current_price, history.statistics?.current_status);
品牌和网站 — /v1/brands*、/v1/websites*

查询辅助工具,主要用于获取搜索筛选器所需的 ID。

  • client.brands.search({ query, limit? }) — 按名称查找品牌;按相关性排序,最多返回 limit 个匹配项(默认 5 个,最多 20 个)
  • client.brands.retrieve({ brand_id }) — 按 ID 查找
  • client.brands.list() — 按游标分页的 Page;for await 会遍历已等待的页面。遍历至结束会扫描整个品牌目录(数千个品牌,需要调用 API 多页);请务必提前中断,或者在只需查找一个品牌时使用 client.brands.search。
  • client.websites.retrieve({ query: 'nike.com' }) — 按名称或域名查找一家零售商
  • client.websites.search({ query, category_ids? }) / client.websites.list({ category_ids? }) — 查找零售商,可选仅查找在指定类别中销售的零售商(list 会遍历排名前 5,000 个;请提前中断)
// Find a brand ID for filtering
const { brands } = await client.brands.search({ query: 'Nike', limit: 5 });
const brandId = brands[0]?.id;  // top match — inspect `brands` to disambiguate when multiple match
类别 — /v1/categories*

查找可传入 SearchFilters.category_ids / exclude_category_ids 的类别 slug,以及可传入 SearchFilters.attributes 的属性键和值。Slug 是稳定且适合 URL 的标识符(例如 shoes、sofas、handbags)——优先使用它们,而不是内部 ID。分类体系并未涵盖所有可能的子类别,未知 slug 会被静默丢弃,因此请始终通过 client.categories.search 查找真实 slug,不要猜测。

  • client.categories.search({ query, limit? }) — 自由文本 → CategorySummary[](limit 为 1–20,默认值为 5)
  • client.categories.list({ roots_only?, page?, page_size? }) — 分页浏览,根类别优先(page_size 为 1–100,默认值为 20)
  • client.categories.retrieve({ slug }) — 完整的 Category,包含描述、属性、直接子类别和从根类别到自身的 path
const { categories } = await client.categories.search({ query: 'running shoes', limit: 5 });
const slug = categories[0].slug;

const page = await client.products.search({
  query: 'lightweight trainers',
  filters: { category_ids: [slug] },
});
result = client.categories.search(query="running shoes", limit=5)
slug = result.categories[0].slug

page = client.products.search(
    query="lightweight trainers",
    filters={"category_ids": [slug]},
)

exclude_category_ids 会排除该类别及其所有后代类别。

Category.attributes 列出了可用于 SearchFilters.attributes 的已索引属性句柄。使用非颜色 slug(例如 material、frame-color)。产品上的 color 条目仅供参考——请使用 filters.colors 筛选颜色,而不是 attributes.color。

const category = await client.categories.retrieve({ slug: 'sofas' });
const materialAttr = category.attributes.find(a => a.slug === 'material');
//   materialAttr?.values → ["Leather", "Velvet", "Linen", ...]

const page = await client.products.search({
  query: 'leather sectional',
  filters: {
    category_ids: ['sofas'],
    attributes: { material: ['Leather'] },
    colors: { palette: [{ hex: '#001f3f' }] }, // navy via colors filter
  },
});

用户归因

在任何请求中传入最终用户的 ID,以便在报告中归因其点击和销售。原始 HTTP 请求使用 x-user-id 标头;Python SDK 使用 user_id 关键字参数(会映射到该标头);在 TypeScript 中,通过请求选项传入该标头。Channel3 会将其附加到响应中的购买 URL。最多 128 个字符;仅允许字母、数字和 . _ @ -。

await client.products.search(
  { query: 'desk lamp' },
  { headers: { 'x-user-id': 'user_123' } },
);
client.products.search(query="desk lamp", user_id="user_123")
curl -X POST https://api.trychannel3.com/v1/search \
  -H "x-api-key: $CHANNEL3_API_KEY" -H "x-user-id: user_123" \
  -H "Content-Type: application/json" -d '{"query":"desk lamp"}'

联盟链接

响应中的每个 ProductOffer.url 都是带有联盟跟踪的链接。在任何界面中都将它们显示为购买按钮——通过这些 URL 带来的销售无需额外设置即可赚取佣金。使用 offer.domain 识别零售商,并使用 offer.max_commission_rate 比较不同商家的潜在收益。

缓存与时效性

  • 缓存 ID,而不是数据。 product.id 和类别 slug 稳定不变——可放心缓存。产品的其他所有信息(价格、库存情况、优惠、图片、描述、变体)都不稳定;商家更新目录时,这些信息会发生变化。
  • 在展示时刷新。 向用户展示产品前,使用 GET /v1/products/{id}(client.products.retrieve)重新获取——此调用免费,并会返回当前价格、库存、已加载的变体库存情况和最新优惠 URL。
  • 优惠 URL 有效期较短。 切勿缓存 ProductOffer.url 并在之后提供;展示购买链接前应重新获取。
  • 标题、图片等展示字段可使用较短的 TTL(几分钟到几小时);避免将价格或库存情况缓存数小时或数天。

区域代码

  • 语言: en、de、fr、it、es、nl、sv、fi、pt、cs、el、ro
  • 国家/地区: US、GB、EU、AU、CA、IE、DE、AT、FR、BE、IT、ES、NL、SE、FI、PT、CZ、GR、RO
  • 货币: USD、CAD、AUD、GBP、EUR、SEK、CZK、RON
  • 长度单位: mm、cm、m、in、ft · 重量单位: mg、g、kg、oz、lb

仅设置 country 时,服务端会推断 currency(GB → GBP)和 language(GB → en)。三者均未设置时,默认值为 en / US / USD。length_unit / weight_unit 只控制尺寸的显示单位——未设置时会返回商家指定的单位。

何时改用 MCP

如果宿主已支持无代码 Agent 集成,请改用 Channel3 MCP,而不是编写 API 代码。

遇到问题时

评论

支持 Markdown