Calendar

Save a meeting type

calendar_save_meeting_type · Changes data · Markdown

Creates or changes a kind of meeting people can book, on the business's calendar or a person's, taken by one host, a round robin or everyone.

$0.001 a call

From your agent’s balance. A call that fails costs nothing.

An example

Add a 45-minute bike fitting in the workshop on Saturdays, and ask people for their height when they book.

Your agent callscalendar_save_meeting_type$0.001 a call

The example business is Halverson Cycle & Repair, a bike shop with a repair workshop in Portland, Oregon. The reply is the one the tool really gives.

With these arguments
{
  "slug": "bike-fitting",
  "title": "Bike fitting",
  "length_minutes": 45,
  "location": {
    "kind": "in_person",
    "value": "Halverson Cycle & Repair, 1830 SE Ash St, Portland, OR 97214"
  },
  "buffer_after": 15,
  "hours": [
    {
      "day": "saturday",
      "start": "10:00",
      "end": "16:00"
    }
  ],
  "questions": [
    {
      "label": "Your height in inches",
      "type": "number",
      "required": false
    }
  ]
}
What comes back
{
  "meeting_type": {
    "slug": "bike-fitting",
    "meeting_type": "bike-fitting",
    "person": null,
    "title": "Bike fitting",
    "description": "",
    "length_minutes": 45,
    "location": {
      "kind": "in_person",
      "value": "Halverson Cycle & Repair, 1830 SE Ash St, Portland, OR 97214"
    },
    "buffer_before": 0,
    "buffer_after": 15,
    "notice_minutes": 120,
    "days_ahead": 60,
    "slot_interval": 45,
    "max_per_day": null,
    "hours": [
      {
        "day": "saturday",
        "start": "10:00",
        "end": "16:00"
      }
    ],
    "questions": [
      {
        "key": "your_height_in_inches",
        "label": "Your height in inches",
        "type": "number",
        "required": false,
        "options": []
      }
    ],
    "ask_phone": "optional",
    "offer_confirmation_call": true,
    "phone_assistant_books_this": false,
    "active": true,
    "booking_url": "https://cncto.co/book/halverson-cycle/bike-fitting"
  }
}

Use it when

The business offers a new kind of appointment, an appointment's length, place, hours or questions change, a kind of meeting should go to whichever of several people is free, or each booking should get a Google Meet room of its own (location kind google_meet).

  • For the calendar's own hours, time zone and closed days, use calendar_setup.

What it does

Create or change a kind of meeting people can book, like a Cal.com event type. It gets its own booking page. Only the fields you pass change. With person it is on that person's own calendar. A business type can be hosted by people like a Cal.com team event, once you choose how (there is no default): round_robin gives each booking to one host free then (the highest priority, then the fewest of this type that month for their weight, then whoever was booked longest ago; fixed hosts join every meeting), collective needs every host free and invites them all. Hosts use their own calendars' hours and Google calendars, unless the type sets hours of its own. Each host keeps their own page, which lists the business types they take; a round robin booked there goes to them. Location kinds: video (a link), phone (we call the attendee), call_us (they call a number), in_person (an address), custom.

What comes back

The meeting type as saved: slug, title, length, location, buffers, notice, days ahead, hours, questions, phone and confirmation-call options, whether it is active and its booking URL; for a hosted type its hosts, each with their own link to it. Every reply also carries cost_usd and balance_usd.

Inputs

NameTypeWhat it is
slugRequiredstringIts address on the booking page, e.g. "intro-call". Matches ^[a-z0-9][a-z0-9-]{0,59}$.
personstringPut it on this person's own calendar (their email) instead of the business's. Up to 254 characters.
titlestring1 to 120 characters.
descriptionstringUp to 2,000 characters.
length_minutesinteger5 to 480.
locationobjectWhere it happens. google_meet gives each booking a Google Meet room of its own once the calendar that takes it is connected to Google (a video link on meet.google.com does the same); video is one fixed link, phone means you call them, call_us your number in value, in_person an address.
location.kindstringOne of: ,video,google_meet,phone,call_us,in_person,custom.
location.valuestringUp to 500 characters.
assignmentstringHow a business type's hosts take its bookings, required with hosts (no default): round_robin or collective; "" takes the hosts off, back to the business's own calendar. One of: ,round_robin,collective.
hostsarray of objectsThe people who take its bookings, replacing the list. Each is on the account; their calendar is made with their name if they have none. Up to 50 items.
hosts[].personRequiredstringUp to 254 characters.
hosts[].fixedbooleanIn every meeting (round robin).
hosts[].prioritystringRound robin: higher goes first (default medium). One of: lowest,low,medium,high,highest.
hosts[].weightintegerRound robin: 200 takes twice the share of 100 (default 100). 1 to 1,000.
buffer_beforeinteger0 to 240.
buffer_afterinteger0 to 240.
notice_minutesintegerMinimum notice before a booking. 0 to 43,200.
days_aheadinteger1 to 365.
slot_intervalintegerMinutes between possible start times (default: the length). 5 to 480.
max_per_dayintegerThe most of this type a day; for a hosted type, each host's most. 1 to 200.
hoursarray of objectsIts own weekly hours; leave out to use the calendar's (for hosts, each one's own). Up to 50 items.
hours[].dayRequiredstringOne of: monday,tuesday,wednesday,thursday,friday,saturday,sunday.
hours[].startRequiredstringMatches ^([01][0-9]|2[0-3]):[0-5][0-9]$|^24:00$.
hours[].endRequiredstringMatches ^([01][0-9]|2[0-3]):[0-5][0-9]$|^24:00$.
questionsarray of objectsExtra questions on the booking form: {label, type: text|long_text|select|checkbox|number|email|phone, required, options}. Up to 20 items.
ask_phonestringOne of: off,optional,required.
offer_confirmation_callbooleanOffer "call me the day before to confirm" on the form.
phone_assistant_books_thisbooleanWhat the phone assistant books when a caller asks (a business type).
activeboolean

The call

Over MCP, call calendar_save_meeting_type on https://api.conecto.chat/mcp/calendar. Over REST:

Terminal
curl -X POST https://api.conecto.chat/v1/tools/calendar_save_meeting_type \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"slug":"bike-fitting","title":"Bike fitting","length_minutes":45,"location":{"kind":"in_person","value":"Halverson Cycle & Repair, 1830 SE Ash St, Portland, OR 97214"},"buffer_after":15,"hours":[{"day":"saturday","start":"10:00","end":"16:00"}],"questions":[{"label":"Your height in inches","type":"number","required":false}]}'

When it refuses

A refused call costs nothing and says what to do next.

CodeWhenWhat to do
not_set_up404The calendar, or a host's own calendar, is not set up yet and the account has no name for them.Run calendar_setup (with person and name for a host), then call again.
not_found404A host or person is not on the account.Add them with admin_save_person, or leave them out.
slug_taken409A routing form on that calendar already has the slug.Pick another slug.
invalid_input400A new meeting type has no title, its hours or questions are not valid, hosts came without an assignment, or hosts were given for a person's own type.Give a title, hours as {day, start, end}, questions with a label and a type from the list, and hosts only on the business's types, with assignment round_robin or collective.

Give this to your agent.

Set up Conecto from https://conecto.chat/SKILL.md