Save a routing form
Creates or changes a routing form that asks visitors a few questions and sends each to the right meeting type, host, site or message.
$0.001 a call
From your agent’s balance. A call that fails costs nothing.
An example
Before people book, ask how many bikes they need looked after, and have our fleet manager call anyone with more than 20 instead.
Your agent callscalendar_save_routing_form$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.
{
"slug": "get-started",
"title": "Book a fitting or a fleet service",
"questions": [
{
"key": "name",
"label": "Your name",
"type": "text",
"required": true
},
{
"key": "email",
"label": "Email",
"type": "email",
"required": true
},
{
"key": "bikes",
"label": "How many bikes need looking after?",
"type": "select",
"required": true,
"options": [
"1 or 2",
"3 to 20",
"More than 20"
]
}
],
"routes": [
{
"when": [
{
"question": "bikes",
"is": "More than 20"
}
],
"to": {
"message": "Thank you. Our fleet manager will call you within one working day."
}
}
],
"fallback": {
"meeting_type": "bike-fitting"
}
}Use it when
Different visitors should book different things or different people: fleets with the fleet manager, a single bike with the workshop.
- For one kind of meeting with its own booking page, use
calendar_save_meeting_type.
What it does
Create or change a routing form, like Cal.com's: questions a visitor answers before booking, and routes that send them to a meeting type (for a round-robin type, perhaps only some of its hosts), another site, or a message. The first route whose conditions all hold wins; everyone else takes the fallback. It lives at its calendar's address beside the meeting types: cncto.co/book/<calendar>/<slug>. A question keyed name (text) or email (email) fills in the booking form. Only the fields you pass change. Each answer set is kept (calendar_list_routing_responses) and the bot hears of it (calendar.routed).
What comes back
The routing form: its address, questions, routes with where each goes, the fallback, whether it is active, and how many people answered it. Every reply also carries cost_usd and balance_usd.
Inputs
| Name | Type | What it is |
|---|---|---|
slugRequired | string | Its address, e.g. "get-started". Matches ^[a-z0-9][a-z0-9-]{0,59}$. |
person | string | Put it on this person's own calendar. Up to 254 characters. |
title | string | 1 to 120 characters. |
description | string | Up to 2,000 characters. |
questions | array of objects | {key, label, type: text|long_text|select|checkbox|number|email|phone, required, options}. Up to 20 items. |
routes | array of objects | [{"when": [{"question": "<a question's key>", "<is|is_not|any_of|none_of|contains|at_least|below>": <value>}, ...], "to": {"meeting_type": "demo", "hosts": ["ana@example.com"]} | {"url": "https://..."} | {"message": "..."}}], tried in order. Up to 30 items. |
fallback | object | Where everyone else goes, as a route's "to". |
active | boolean |
The call
Over MCP, call calendar_save_routing_form on https://api.conecto.chat/mcp/calendar. Over REST:
curl -X POST https://api.conecto.chat/v1/tools/calendar_save_routing_form \
-H "Authorization: Bearer $CONECTO_KEY" \
-H "Content-Type: application/json" \
-d '{"slug":"get-started","title":"Book a fitting or a fleet service","questions":[{"key":"name","label":"Your name","type":"text","required":true},{"key":"email","label":"Email","type":"email","required":true},{"key":"bikes","label":"How many bikes need looking after?","type":"select","required":true,"options":["1 or 2","3 to 20","More than 20"]}],"routes":[{"when":[{"question":"bikes","is":"More than 20"}],"to":{"message":"Thank you. Our fleet manager will call you within one working day."}}],"fallback":{"meeting_type":"bike-fitting"}}'When it refuses
A refused call costs nothing and says what to do next.
| Code | When | What to do |
|---|---|---|
not_set_up404 | The business has no calendar yet. | Create it with calendar_setup, then call again. |
invalid_input400 | A new form has no title, questions or fallback, a condition names a question the form doesn't ask, or a route goes nowhere it can. | Fix what the message names; each route goes to one meeting type, web address or message. |
slug_taken409 | A meeting type on that calendar already has the slug. | Pick another slug. |
More Calendar tools
All 13 tools- Set up the calendar
calendar_setupSets the business's calendar or a person's own: name, booking address, time zone, weekly hours, closed days, reminder emails and confirmation calls.$0.001 a call - Get the calendar setup
calendar_get_setupThe calendar's settings, booking page, iCal link, connected Google calendar, meeting types, and its people's own calendars.Free* - Connect Google Calendar
calendar_connectA link that opens a page naming the business, where the owner, or a person for their own page, connects Google Calendar in one click.Free* - Save a meeting type
calendar_save_meeting_typeCreates 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 - List meeting types
calendar_list_meeting_typesEvery meeting type people can book, the business's and each person's own, with its hosts and booking page.Free* - Find free times
calendar_find_timesFree start times for a meeting type between two dates, in the time zone you ask for.Free* - Book a meeting
calendar_bookBooks a free time for someone, who gets a confirmation email with an invite and a link to change it.$0.01 a call - List bookings
calendar_list_bookingsBookings between two times (from now on by default), soonest first, with each one's hosts, guests and confirmation call.Free*
Give this to your agent.
Set up Conecto from https://conecto.chat/SKILL.md