For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
主导航

餐厅预订转化规范

将餐厅预订插件集成到 ChatGPT 预订流程的接口约定。

ChatGPT 中的餐厅预订转化插件目前处于 Beta 阶段, 正在与获批的合作伙伴一起测试。如需申请使用权限,请填写此表单

点击此处

目的

我们的目标是让 ChatGPT 在餐厅预订等用户意向明确的场景中直接调用合作伙伴的插件。

合作伙伴向我们提供用于搜索的数据源后,我们就可以连接其 MCP 服务器,执行转化漏斗底部的转化操作。为此,合作伙伴的插件必须遵循统一的组件名称、工具名称和工具输入约定。

如果您想构建符合本规范的插件,请通过 ChatGPT 商家表单申请使用权限。

用户体验

当用户搜索附近的餐厅时,餐厅实体卡片和 侧边栏中会显示 预订 按钮,点击后可打开该餐厅预订服务提供商的 界面。

餐厅界面中的预订按钮:

餐厅界面中的预订按钮

点击该按钮后打开的预订模态框:

点击预订按钮后打开的预订模态框

必需的接口约定(当前)

当前的预订集成仅要求满足以下条件:

  • 组件名称:ui://widget/restaurant-reservation.html
  • 工具名称:restaurant_reservation

restaurant_reservation 必须设置:

_meta.ui.resourceUri = "ui://widget/restaurant-reservation.html";

任何由组件直接调用的工具都必须设置:

_meta["openai/widgetAccessible"] = true;

restaurant_reservation 输入

最小载荷(始终发送):

{
  "restaurant_id": "string"
}

我们也可能发送以下载荷。您可以用它在模态框中进行乐观渲染(例如,在数据填充期间避免显示骨架屏或加载状态):

{
  "restaurant_name": "string",
  "restaurant_image": "string",
  "restaurant_address": {
    "address": "string",
    "city": "string",
    "state": "string",
    "zipcode": "string",
    "country": "string"
  }
}

数据源要求(搜索集成)

为了让预订按钮能够路由到相应服务,我们会接入合作伙伴提供的商家数据源。

目的和范围

本数据源约定定义了:

  • 匹配和排序所需的最少商家数据。
  • 支持分页的列表 API。
  • 变更检测机制,以避免不必要的全量获取。

商家记录(最少必需字段)

Business 对象必须包含:

  • idstring):在提供商范围内保持稳定且唯一。
  • namestring
  • addressobject 或格式化的 string
  • location(包含纬度和经度的 object
  • phone_numberstring,建议采用 E.164 格式)
  • website_urlstring,URL)
  • platform_urlstring,指向您平台上该商家规范详情页的 URL)

建议采用的最小数据结构:

{
  "id": "biz_123",
  "name": "Acme Coffee",
  "address": {
    "line1": "123 Market St",
    "line2": "Suite 5",
    "locality": "San Francisco",
    "region": "CA",
    "postal_code": "94105",
    "country": "US",
    "formatted": "123 Market St, Suite 5, San Francisco, CA 94105, US"
  },
  "location": {
    "latitude": 37.793,
    "longitude": -122.396
  },
  "phone_number": "+14155551234",
  "website_url": "https://acmecoffee.example",
  "platform_url": "https://provider.example/biz/biz_123"
}

如果无法提供结构化的地址组成部分,address 可以是单个 格式化字符串,但必须保持格式一致且便于阅读。

分页列表端点

端点示例:

  • GET /v1/businesses

查询参数:

  • 分页:选择一种方式
  • page + page_size
  • offset + limit
  • next_page_token(不透明 Token;如果支持,建议优先使用)
  • changes_tokenstring,可选):指示自 上次同步检查点以来数据是否发生变化。

响应必须包含:

  • checksumboolean):指示自所提供的 changes_token 对应的检查点以来是否发生了任何变化(如果未提供,则为 true)。
  • businessesBusiness[]):当前页的载荷。
  • 与您所选方式对应的分页元数据:
  • pagepage_sizetotal_pages(可选),或
  • offsetlimittotal(可选),或
  • next_page_tokenstring | null

请求和响应示例

请求:

GET /v1/businesses?page=1&page_size=2&changes_token=sync_2026_03_10

响应:

{
  "checksum": true,
  "page": 1,
  "page_size": 2,
  "total_pages": 120,
  "businesses": [
    {
      "id": "biz_123",
      "name": "Acme Coffee",
      "address": {
        "line1": "123 Market St",
        "locality": "San Francisco",
        "region": "CA",
        "postal_code": "94105",
        "country": "US",
        "formatted": "123 Market St, San Francisco, CA 94105, US"
      },
      "location": {
        "latitude": 37.793,
        "longitude": -122.396
      },
      "phone_number": "+14155551234",
      "website_url": "https://acmecoffee.example",
      "platform_url": "https://provider.example/biz/biz_123"
    },
    {
      "id": "biz_124",
      "name": "Golden Diner",
      "address": "200 Howard St, San Francisco, CA 94105, US",
      "location": {
        "latitude": 37.789,
        "longitude": -122.391
      },
      "phone_number": "+14155559876",
      "website_url": "https://goldendiner.example",
      "platform_url": "https://provider.example/biz/biz_124"
    }
  ]
}

我们将商家数据源用作搜索索引。查询时,我们通过模糊匹配(名称 + 位置或地址)检索候选项,然后根据名称和地址的相似度进行排序和去重,并将位置、电话号码和 URL 作为辅助信号。

建议添加的扩展功能(当前非必需)

为了让用户在聊天中完成端到端的完整预订流程,我们建议添加:

  • refresh_availability
  • make_reservation
  • reservation_confirmation