ChatGPT のレストラン予約コンバージョンプラグインは現在ベータ版で、 承認済みのパートナーとテストを行っています。利用を申し込むには、次のフォームにご記入ください。
こちら
目的
レストラン予約など、利用者の行動意図が明確なユースケースで、ChatGPT がパートナーのプラグインを直接呼び出せるようにすることを目指しています。
パートナーから検索用フィードを提供いただくと、その MCP サーバーに接続して、ファネルの最終段階にあたるコンバージョンアクションを実行できます。そのためには、パートナーのプラグインがウィジェット名、ツール名、ツール入力に関する標準仕様に従う必要があります。
この仕様に沿ったプラグインを開発する場合は、 ChatGPT 加盟店向けフォームから利用をお申し込みください。
ユーザー体験
ユーザーが近くのレストランを検索すると、レストランのエンティティカードと サイドバーに 予約 ボタンが表示されます。このボタンから、そのレストランの 予約サービスの UI を開くことができます。
レストランの UI にある予約ボタン:

このボタンから開いた予約モーダル:

必須仕様(現時点)
現在の予約連携で必須となるのは、以下のみです。
- ウィジェット名:
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
クエリパラメーター:
- ページネーション:いずれか 1 つの方式を使用
page+page_sizeoffset+limit- または
next_page_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