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