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 对象必须包含:
id(string):在提供商范围内保持稳定且唯一。name(string)address(object或格式化的string)location(包含纬度和经度的object)phone_number(string,建议采用 E.164 格式)website_url(string,URL)platform_url(string,指向您平台上该商家规范详情页的 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_sizeoffset+limit- 或
next_page_token(不透明 Token;如果支持,建议优先使用) changes_token(string,可选):指示自 上次同步检查点以来数据是否发生变化。
响应必须包含:
checksum(boolean):指示自所提供的changes_token对应的检查点以来是否发生了任何变化(如果未提供,则为true)。businesses(Business[]):当前页的载荷。- 与您所选方式对应的分页元数据:
page、page_size、total_pages(可选),或offset、limit、total(可选),或next_page_token(string | 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_availabilitymake_reservationreservation_confirmation