---
title: "AI 购物代理和自定义店面"
description: "AI 购物代理和 Shop 应用链接暂时无法选择配送日期，但你的日期规则在结账时仍然适用。告诉代理需要日期，并让 Hydrogen 或 Headless 店面写入日期，结账就会接受。"
contentType: "docs"
locale: "zh"
localized: true
source: "https://orderrules.com/zh/docs/delivery/ai-shopping-agents-and-headless"
slug: "delivery/ai-shopping-agents-and-headless"
---
## AI 购物代理（ChatGPT、Gemini、Copilot）和 Shop 应用链接

**它们暂时无法选择配送日期。Shopify 没有给应用提供向代理询问日期的方式。** 你的日期规则在结账时仍适用于它们的订单：

- 选择 **拦截** 时，结账会请顾客回到你的店铺完成订单并选择日期。
- 选择 **接受** 时，订单会通过，顾客在订单确认（感谢）页面选择日期，或之后登录账户在订单状态页面选择。

参见[未选配送日期的订单](/docs/delivery/orders-without-a-delivery-date)。

### 告诉代理需要日期

OrderRules → **配送日期** → **订单与发货** → **告诉 AI 代理需要配送日期**。复制现成的常见问题，并添加到 Shopify 免费的 **Knowledge Base** 应用，买家询问你的店铺时，AI 代理会读取其中的内容。在配送政策中加入同样的句子也有帮助。

![OrderRules 中告知 AI 代理需要日期的区块，附有可复制到 Shopify Knowledge Base 应用的现成 FAQ](/images/docs/delivery-ai-agents-faq.png)

## 自定义店面（Hydrogen、Headless、自建代理）

OrderRules 的配送日期选择器是主题应用区块，所以只会出现在 Online Store 主题上。基于 Storefront API 构建的店面不会显示它，无论是 Hydrogen 还是自建的 React 或 Next.js 应用。**结账仍会执行你的规则。**

要让买家在你自己的店面选择日期，请用选择器使用的同一组字段把日期写入购物车。下面的查询适用于 Storefront API 2026-10。

### 1. 读取开放日期

```graphql
query OrderRulesDelivery {
  shop {
    metafield(namespace: "order_rules", key: "delivery") { value }
  }
}
```

`value` 是 JSON。你需要的部分：

| 字段 | 含义 |
|---|---|
| `rules[]` | 配送规则：`id`、`scope`（`storewide` / `product` / `collection` / `tag`）、`requireDate`、`requireSlot`、`slotTemplateId`、`allowedDates`（YYYY-MM-DD，已排除截单和提前期） |
| `defaultRuleId` | 全店规则（如果有） |
| `productRuleMap` | 数字商品 id → 规则 id |
| `collectionProductIds` / `tagProductIds` | 集合或标签规则覆盖哪些商品 |
| `blackouts` | 休息日（YYYY-MM-DD） |
| `slotTemplates[id].windows[]` | 时间段：`id`、`label`、`start`、`end` |
| `capacity[date][slotId or "_all"]` | 剩余可预约数；`0` 表示已满 |

只有同时满足以下条件时才显示某个日期：

- 它在规则的 `allowedDates` 中；
- 它不在 `blackouts` 中；
- `capacity[date]._all` 不是 `0`。

当 `requireDate` 为 true 时，日期是必填的。每当你更改配送设置以及有订单进来之后，元字段都会刷新。请把它当作只读：格式属于内部实现，可能会变化。

### 2. 写入所选日期

**整个订单一个日期。** 购物车属性：

```graphql
mutation SetDeliveryDate($cartId: ID!) {
  cartAttributesUpdate(cartId: $cartId, attributes: [
    { key: "_os_dp", value: "d|2026-11-04|am" }
    { key: "delivery_date", value: "2026-11-04" }
    { key: "delivery_slot", value: "am" }
  ]) {
    cart { id }
    userErrors { field message }
  }
}
```

- `_os_dp` 是结账检查读取的内容。格式为 `d|YYYY-MM-DD|slotId`；没有时间段时把时段留空，例如 `d|2026-11-04|`。
- `delivery_date` 和 `delivery_slot` 是你的订单列表、标签、CSV 导出和名额统计读取的内容。

**或者按商品选择日期。** 行属性：

```graphql
mutation AddDatedLine($cartId: ID!) {
  cartLinesAdd(cartId: $cartId, lines: [{
    merchandiseId: "gid://shopify/ProductVariant/123"
    quantity: 1
    attributes: [{ key: "_os_dpl", value: "d|2026-11-04|am" }]
  }]) {
    cart { id }
    userErrors { field message }
  }
}
```

某一行自己的 `_os_dpl` 优先于订单级的 `_os_dp`。没有 `_os_dpl` 的行使用订单级日期。

### 3. 检查

带着一个需要日期的商品进入结账。

- **不带日期：** 结账会显示“Please choose a delivery date…”。
- **带有效日期：** 结账会继续，订单的附加详情下会显示该日期。

## 用链接代替店面

对于聊天、邮件或社交媒体销售，请使用[带配送日期的结账链接](/docs/delivery/checkout-links-with-delivery-date)。它会创建一个已设好日期的购物车链接。

## 相关内容

- [未选配送日期的订单](/docs/delivery/orders-without-a-delivery-date) · [结账保护](/docs/delivery/checkout-protection) · [下单后的配送日期](/docs/delivery/delivery-date-after-order)
