mcpField
R
restaurant-booking

restaurant-booking

github.com/gooseworks-ai生産性1.3k488 回インストール3 日前に更新
リポジトリ

restaurant-booking について

restaurant-bookingは、Notteのブラウザー自動化でレストランを予約するスキルです。OpenTableでの手順とResyを使う代替フローに加え、予約後のカレンダー登録も案内します。

主な機能

  1. 01Notteブラウザーセッションの開始
  2. 02レストラン、日付、時刻、人数の選択
  3. 03連絡先の入力と予約送信
  4. 04ページ取得による予約確認
  5. 05予約後のカレンダー登録

活用シーン

  1. 01OpenTableで席を予約
  2. 02Resyを使ったレストラン予約
  3. 03予約確定の確認
  4. 04予約をカレンダーに追加

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/gooseworks-ai/goose-skills --skill restaurant-booking

インストール後、Claude Code で/restaurant-bookingを入力して読み込まれたか確認します。

同梱ファイルskill.meta.json

詳細

レストランの予約

セットアップ

認証情報を ~/.gooseworks/credentials.json から読み込みます。

export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])")
export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))")

~/.gooseworks/credentials.json が存在しない場合は、npx gooseworks login を実行するようユーザーに伝えてください。

すべてのエンドポイントで Bearer 認証を使用します:-H "Authorization: Bearer $GOOSEWORKS_API_KEY"

Orthogonal 経由の Notte ブラウザー自動化を使って予約します。

要件

  • Orthogonal CLI(npm install -g @orth/cli)または API キー
  • 予約者情報:名前、メールアドレス、電話番号

クイックフロー

  1. Notte セッションを開始する
  2. 予約サイトに移動する(OpenTable を推奨)
  3. 日付、時刻、人数を選択する
  4. 連絡先フォームに入力する
  5. 送信して確認する

CLI の方法(推奨)

1. Notte セッションを開始する
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/start"}'
  --body '{"browser_type":"chromium","headless":true,"solve_captchas":true,"idle_timeout_minutes":10}'

レスポンスから session_id を保存します。

2. OpenTable に移動する
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute"}'
  --body '{"type":"goto","url":"https://www.opentable.com/r/{restaurant}?datetime=2026-02-17T19:00&covers=2"}'
3. 時間帯をクリックする
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute"}'
  --body '{"type":"click","selector":"button:has-text(\"7:00 PM\")"}'
4. 座席を選択する(表示された場合)
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute"}'
  --body '{"type":"click","selector":"button:has-text(\"Select\")"}'
5. フォームに入力する
# First name
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute"}'
  --body '{"type":"fill","selector":"input#firstName","value":"John"}'

# Last name
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute"}'
  --body '{"type":"fill","selector":"input#lastName","value":"Doe"}'

# Email
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute"}'
  --body '{"type":"fill","selector":"input#email","value":"[email protected]"}'

# Phone
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute"}'
  --body '{"type":"fill","selector":"input#phoneNumber","value":"4155551234"}'
6. 利用規約に同意する
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute"}'
  --body '{"type":"click","selector":"text=I agree to the restaurant"}'
7. 予約を送信する
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute"}'
  --body '{"type":"click","selector":"button:has-text(\"Complete reservation\")"}'
8. 確認を検証する
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/scrape"}'
  --body '{"only_main_content":true}'

レスポンスに「confirmed」と表示されていることを確認します。

API の方法(curl)

# Start session
curl -X POST "https://api.orth.sh/v1/run" \

  -H "Content-Type: application/json" \
  -d '{
    "api": "notte",
    "path": "/sessions/start",
    "body": {
      "browser_type": "chromium",
      "headless": true,
      "solve_captchas": true,
      "idle_timeout_minutes": 10
    }
  }'

# Execute actions (same pattern)
curl -X POST "https://api.orth.sh/v1/run" \

  -H "Content-Type: application/json" \
  -d '{
    "api": "notte",
    "path": "/sessions/{session_id}/page/execute",
    "body": {"type":"goto","url":"https://www.opentable.com/..."}
  }'

主なセレクター(OpenTable)

項目セレクター
名input#firstName
姓input#lastName
メールアドレスinput#email
電話番号input#phoneNumber
利用規約のチェックボックスtext=I agree to the restaurant
送信button:has-text('Complete reservation')
時間帯button:has-text('7:00 PM')
座席の選択button:has-text('Select')

レストラン ID の確認

OpenTable を検索して、URL から抽出します:

  • restref=1906 → Foreign Cinema
  • URL パス内のレストランのスラッグ

URL の形式例:

https://www.opentable.com/r/{restaurant-slug}?restref={id}&datetime={YYYY-MM-DDTHH:MM}&covers={n}

ヒント

  • OpenTable ではテーブルが 5 分間確保されます。すばやく進めてください
  • fill アクションでは value パラメーターを使います(text を指定した type ではありません)
  • 利用規約にはチェックボックスを直接ではなく、ラベルのテキストをクリックして同意します
  • クレジットカードは不要です。予約は無料です
  • 確認メールは自動送信されます

Resy を使う場合

レストランが Resy を使用している場合:

https://resy.com/cities/{city}/venues/{restaurant}?date={YYYY-MM-DD}&seats={n}

流れは同様ですが、セレクターが異なります。まずページをスクレイピングして、フォームのフィールドを確認してください。

予約後

  1. gog calendar create でカレンダーの予定を作成します
  2. 参加者と場所を追加します
  3. 説明に確認番号を記載します

コメント