Calendar

Save a routing form

calendar_save_routing_form · Changes data · Markdown

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.

With these arguments
{
  "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"
  }
}
What comes back
{
  "routing_form": {
    "slug": "get-started",
    "title": "Book a fitting or a fleet service",
    "description": null,
    "person": null,
    "url": "https://cncto.co/book/halverson-cycle/get-started",
    "questions": [
      {
        "key": "name",
        "label": "Your name",
        "type": "text",
        "required": true,
        "options": []
      },
      {
        "key": "email",
        "label": "Email",
        "type": "email",
        "required": true,
        "options": []
      }
    ],
    "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"
    },
    "active": true,
    "responses": 0
  }
}

Use it when

Different visitors should book different things or different people: fleets with the fleet manager, a single bike with the workshop.

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

NameTypeWhat it is
slugRequiredstringIts address, e.g. "get-started". Matches ^[a-z0-9][a-z0-9-]{0,59}$.
personstringPut it on this person's own calendar. Up to 254 characters.
titlestring1 to 120 characters.
descriptionstringUp to 2,000 characters.
questionsarray of objects{key, label, type: text|long_text|select|checkbox|number|email|phone, required, options}. Up to 20 items.
routesarray 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.
fallbackobjectWhere everyone else goes, as a route's "to".
activeboolean

The call

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

Terminal
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.

CodeWhenWhat to do
not_set_up404The business has no calendar yet.Create it with calendar_setup, then call again.
invalid_input400A 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_taken409A meeting type on that calendar already has the slug.Pick another slug.

Give this to your agent.

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