ChatGPT のレストラン予約用コンバージョンプラグインは現在ベータ版で、承認済みのパートナーとテストを進めています。利用をご希望の場合は、以下のフォームにご記入ください。
利用申請フォーム
目的
レストランを予約したいときなど、ユーザーが具体的な行動を起こそうとしている場面で、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 に住所全体を 1 つの文字列として指定できます。その場合も、書式を統一し、人が読んで理解できる表記にしてください。
ページネーション対応の店舗一覧エンドポイント
エンドポイントの例:
GET /v1/businesses
クエリパラメーター:
- ページネーションには以下の 3 方式のいずれかを使用
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