Set up services, team and branches
manage_booking_servicesSet up WHAT people book, WHERE and WITH WHOM, and the packs and memberships they can buy: services and classes (each with its length, price, whether it is paid online at booking, and whether it is confirmed instantly or waits for the owner), the team (each person's weekly hours, per branch), and branches (locations of one business — a franchise's gyms, a clinic's sites). Use it whenever the owner describes more than one thing to book, more than one person taking bookings, or more than one place. Turn their words into the lists yourself; pass only the entries that change (matched by name — "Sam" updates Sam). Order: branches first, then people (their hours name a branch), then services (they name people). A paid service ("payment": "full" or "deposit") is always confirmed once paid; a free one confirms instantly only if the owner says so ("confirmation": "instant"), otherwise the owner confirms each booking. Before calling, read get_appointments_status (its services field lists what exists) and show the owner the plan in one short message. The website booking form shows the new choices after the next publish; chat books them straight away. Existing services, team members and branches can be removed or replaced, while passes can be stopped from sale; these changes affect live booking choices and prices. Confirm replacements or removals before calling. ON A SITE THAT STILL HOLDS SEVERAL DESIGNS this builds the site: Mondovo copies the chosen design into the working site (or reuses the copy made earlier), adds to that, and the response carries its new site_id and a build_transition — relay its tell_user and use the new site_id from then on. Pass variation_id for the design the user picked; omitted, Mondovo uses the design already built or the only one edited, and otherwise answers choose_design so you can ask the user.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| staff | No | JSON list of team members: [{"name":"Sam","role":"Senior physio","hours":[{"day":"mon","start":"09:00","end":"17:00","location":"Ealing"}]}]. hours REPLACE that person's whole schedule; "location" names a branch (omit when there is one place). {"name":"…","remove":true} removes someone. | |
| passes | No | JSON list of packs and memberships sold online: [{"name":"5-session pack","kind":"pack","price":340,"sessions":5,"valid_days":180,"services":["Physio"]}, {"name":"Unlimited classes","kind":"membership","price":40,"interval":"month","sessions":null}]. A pack is N sessions paid once (valid_days = how long it lasts, null = no expiry); a membership is paid every month/year (sessions = per-period limit, null = unlimited). "services" = which services it covers (omit = every paid service). Customers buy them in the booking widget and use them instead of paying when they book, once signed in to their account. {"name":"…","remove":true} stops selling one (buyers keep theirs). | |
| site_id | Yes | The site, from list_sites | |
| services | No | JSON list of services: [{"name":"Initial assessment","duration_minutes":45,"price":95,"payment":"none"|"deposit"|"full","deposit":20,"confirmation":"instant"|"owner","capacity":1,"staff":["Sam","Ana"],"description":"…"}]. price/deposit are in the site currency's main unit (95 = £95). "staff" = who performs it (omit on a new service = everyone on the team; [] = nobody in particular, the business's own hours). capacity > 1 = several people per time, only for services nobody in particular does (a room, a court) — a person always takes one appointment at a time; for group sessions with a leader use a class. {"name":"…","remove":true} deletes one; {"rename_from":"Old name","name":"New name"} renames. A CLASS (fixed times, several people each): {"name":"Spin","kind":"class","duration_minutes":45,"capacity":20,"price":12,"schedule":[{"day":"mon","start":"07:00","instructor":"Sarah","location":"Ealing"}]} — schedule is the WHOLE weekly timetable; capacity = spots per session; the instructor is busy for one-to-ones during it. PEOPLE-BASED places (a restaurant table service, a group tour): "capacity_unit":"people","capacity":40 (covers per time),"max_party":8 — each booking takes its party size. QUESTIONS asked at booking: "questions":[{"label":"Insurer","type":"select","options":["Bupa","AXA","Self-pay"],"required":true},{"label":"Pre-authorisation code"}] (types: text, long_text, select, checkbox, phone; replaces the list). ONLINE: "meeting":"link","meeting_url":"https://zoom.us/j/…" (the owner's own room) or "meeting":"google_meet" (a new Meet per booking; needs Google Calendar connected) — the link is sent only after booking. | |
| locations | No | JSON list of branches: [{"name":"Ealing","address":"…","timezone":"Europe/London","photo_url":"https://…","hours":[{"day":"sat","start":"10:00","end":"14:00"}]}]. hours here are the branch's own opening hours, used only by services nobody in particular performs. Give "timezone" (IANA) only when a branch is in a different time zone from the business; its team hours and time off are then on that clock. {"name":"…","remove":true} removes one. | |
| user_goal | No | Optional: the user's goal behind this call, in one short sentence of plain words (e.g. "add a page so customers can book tables"). No names, emails or other personal details. | |
| variation_id | No | On a site that still holds several designs: the design to build the site from (from list_variations). Mondovo copies it into the working site and adds to that. Omit on a site that is already built. |