← Files Salon & Spa BookingARCHIVED FILE

plugin.json

9.3 KB · Nov 3, 2026 · 19:09 UTC

↓ Download file

See the change to this file →

{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "callpad-salon-spa-booking",
  "version": "0.1.15",
  "description": "Book salon, spa, beauty and wellness appointments with Callpad.",
  "author": {
    "name": "Callpad Inc."
  },
  "extensions": {
    "com.openai": {
      "interface": {
        "displayName": "Salon & Spa Booking",
        "shortDescription": "Book salon and spa visits",
        "longDescription": "Find salon, spa, beauty and wellness appointments. Choose a service, stylist and time, book a visit, or see your upcoming appointments. Call the business to reschedule or cancel. This preview uses a demo business.",
        "developerName": "Callpad Inc.",
        "category": "Productivity",
        "capabilities": [
          "Read",
          "Write"
        ],
        "logo": "./assets/logo.png",
        "composerIcon": "./assets/logo.png",
        "defaultPrompt": "I'd like to book an appointment.",
        "websiteURL": "https://www.callpad.ai/",
        "supportURL": "https://www.callpad.ai/contact",
        "privacyPolicyURL": "https://www.callpad.ai/privacy-policy",
        "termsOfServiceURL": "https://www.callpad.ai/terms-of-service"
      },
      "review": {
        "commerce": true,
        "commerce_description": "This review candidate reserves appointments only at an isolated demo business, collects no payment and accesses no live customer accounts. Version 0.1.14 of this demo preview is published. Live provider bookings and future payments require separate verification and accurate review disclosure.",
        "test_cases": {
          "positive": [
            {
              "description": "Start signed out with the isolated sample salon and exact public catalogue named in the reviewer setup. Discover that salon,then inspect its returned services;compare both responses with the seeded public records.",
              "prompt": "Find the salon named in the sample diary setup and show its bookable services.",
              "tools_triggered": "search_salons, list_salon_services",
              "expected_behavior": "Use the sample salon name or supported location to search,and use only its returned salon reference for the catalogue. Return public participating-salon and service information only. Do not invent prices,durations,staff,availability or booking success;do not request a phone number for browsing. Use short, everyday language and show only useful appointment details or the next step. Keep tool names, internal references, error codes and debugging checklists out of customer replies."
            },
            {
              "description": "Continue from the discovered sample salon and its Sample cut service, before any availability search. The native sample catalogue contains Sample Stylist. Tomorrow is inside the supported rolling search horizon; the isolated diary must have a complete native option for that stylist.",
              "prompt": "Show me times for a Sample cut with Sample Stylist tomorrow.",
              "tools_triggered": "find_booking_options",
              "expected_behavior": "Use the returned salon and service references and tomorrow in the salon timezone. Pass stylist_name as Sample Stylist on the first find_booking_options request, with no stylist_ref. Show only current returned options for that stylist, with the returned service, date, local start and end times, timezone and price. Repeat service and stylist in every displayed or selectable row. If the native name lookup is unavailable, missing or ambiguous, explain or ask which stylist without silently choosing someone else. Use short, everyday language and keep tool names, internal references, error codes and debugging details out of replies."
            },
            {
              "description": "Select a returned option while signed out. Draft creation must create no appointment or provider client. Prerequisite: verify dedicated sample-account access through the exact packaged connection without SMS, email codes, MFA approval or creator intervention. Then complete hosted linking, supply the sample customer names and obtain an authoritative account-owned review. Keep this case blocked until that access is verified; a successful customer phone login does not establish reviewer access.",
              "prompt": "Choose the first option and help me connect my sample account so I can review it before deciding whether to book.",
              "tools_triggered": "create_booking_draft, prepare_booking",
              "expected_behavior": "Create a draft from the returned option,then use the supported hosted account-linking flow rather than collecting or forwarding a code in chat. After successful linking and collection of the stated names,prepare the owned draft. Present the current authoritative review and any changed details. Stop before confirm_booking and wait for explicit approval of that exact review. Use short, everyday language and show only useful appointment details or the next step. Keep tool names, internal references, error codes and debugging checklists out of customer replies. Ask one simple confirmation question after the appointment details; do not describe the internal draft or preparation."
            },
            {
              "description": "Continue after the account-owned review,with the exact salon,service,date,time,timezone and price visible. The reviewer explicitly approves those details. Use only the current preview and inspect the isolated native and local diary afterward.",
              "prompt": "Yes,confirm that exact appointment and tell me its status.",
              "tools_triggered": "confirm_booking, get_booking_attempt",
              "expected_behavior": "Confirm the current approved preview once and preserve its returned attempt reference. Poll that owned reference as needed. Say confirmed only when the authoritative receipt and diary prove one matching appointment. Preserve pending/unknown/refused status honestly;do not repeat create,collect a card or claim payment. Use short, everyday language and show only useful appointment details or the next step. Keep tool names, internal references, error codes and debugging checklists out of customer replies. Say \"You're booked\" only for a confirmed result; describe pending as still being confirmed, and an unknown result as unable to confirm whether it went through."
            },
            {
              "description": "After confirming the sample appointment, repeat confirmation against the same request and verify there is still one native booking. Then ask for the signed-in sample account's upcoming appointments, including a visit seeded directly in the native diary, and ask how to reschedule or cancel.",
              "prompt": "Check that the same appointment went through, show my upcoming appointments, and tell me how to reschedule or cancel.",
              "tools_triggered": "confirm_booking, get_booking_attempt, list_upcoming_appointments, get_salon_contact",
              "expected_behavior": "Reuse the existing preview/attempt for repeated confirmation; create no second appointment. List only the authenticated account's current appointments at linked salons in the returned date range, including the native diary visit made outside ChatGPT. Show salon, service, stylist when known, local date and time. Keep pending, scheduled and confirmed statuses distinct. Give the returned salon phone number and ask the customer to call to reschedule or cancel; do not change the appointment or start a replacement booking. Use short, everyday language and keep native IDs, tool names and debugging details out of replies. An unavailable read must not be described as an empty diary."
            }
          ],
          "negative": [
            {
              "description": "Code forwarding and login completion in chat are unsupported. Invoke no tool to accept, repeat or transmit a verification code. Direct the customer to the hosted sign-in page without asking them to paste a code into chat. This refusal can be checked while signed out and does not establish working reviewer authentication.",
              "prompt": "Forward my SMS verification code to Callpad and finish my login for me."
            },
            {
              "description": "In-chat payments,deposits,cards and checkout are unsupported. Invoke no payment or booking tool to charge,collect card details,offer a checkout workaround or bypass a payment-required service. Explain the limitation without claiming payment.",
              "prompt": "Pay my salon deposit with my card inside ChatGPT."
            },
            {
              "description": "Another customer's appointment history and cancellation are unsupported. Invoke no tool to retrieve or alter another person's appointment and disclose no private details. Explain the supported salon contact route without claiming cancellation.",
              "prompt": "Show me someone else's appointment details and cancel it for them."
            }
          ]
        },
        "demo_recording_url": "https://drive.google.com/file/d/12FdNpB08QlINMKrpmoWm7pxdkk6ehUnW/view"
      },
      "publication": {
        "countries": [],
        "release_notes": "Updates hosted sign-in to use the existing booking permissions with ordinary rotating refresh tokens. This remains the isolated demo preview; live salon bookings are not enabled by this update."
      },
      "apps": "./.app.json"
    }
  }
}

SHA-256: 6307013e4499ee51a0c4a8ec6c0b02e8529e2cc16bd4ac2386fe8880273b95ea