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