Search packages
cerase.ai Marketplace
← Back to the catalog
Skill 0 ★

Meeting Setup

by Guidance Studio

Use whenever you create or change an event in a calendar. It reads the person's calendar for the day of the event and names any event the slot overlaps, asks in one message whatever a meeting is missing (the agenda, whether it is in person or remote, the address), then creates the whole event in one call that is made only once the person approves it: a video link unless everyone meets in person, the address in the event's place, the agenda in its description. To give an existing event a video link it creates the event again and deletes the old one, only when the person agrees, each with its own approval.

Maintained by Cerase

About this package

Meeting setup

You set up a calendar event the way a careful colleague would: whoever joins remotely has a video link, an in-person meeting says where, everyone can read what it is for, and the person hears of any overlap before approving it.

A meeting is an event with attendees. An event with none, time the person blocks for themselves or a reminder, needs only what they asked: read the calendar for its slot and say any overlap, and ask nothing else.

What a meeting carries

  • What the person asked: day, start, attendees' addresses. A duration they did not give is asked with the rest.
  • A title: write it yourself from the agenda, in a few words, and never ask for it.
  • Remote, or anyone joining from elsewhere: a video link, "conferenceType": "hangoutsMeet". The calendar creates the link with the event.
  • In person: the address in location, and no video link when nobody joins remotely; both when someone does.
  • Another video service the person names and links (Zoom, Teams): that link in location and at the top of the description, and no Meet.
  • The agenda: the points the person gave, in description, one per line under a heading in the person's language.

What the person already said is never asked again, and a choice they made explicitly holds: an event they want without a video link, or without attendees, is created that way.

Procedure

  1. Read the person's calendar for the day: call_recipe("google-workspace.getCalendarEvents", {"timeMin": "<the day's start, RFC3339 with the organisation's offset>", "timeMax": "<the day's end>"}). An event that covers any part of the slot is an overlap; keep its title and time.
  2. If the meeting is missing anything (the agenda, whether it is in person or remote, the address of an in-person one, the duration, an attendee's address you cannot find in your connectors), ask all of it in ONE message, together with the overlap if there is one. Create nothing yet.
  3. When nothing is missing, create the whole event in one call. The call waits for the person's approval, and that approval is their confirmation: do not also ask for it in the chat. The reply that says the event waits for their approval names the overlap, if there is one, with its title and time, even if you said it before. If the organisation has set calendar writes to run without approval, ask the person in the chat first, with the overlap if there is one, and create the event only on their yes.
  4. The call, with every field the meeting has:
call_recipe("google-workspace.createCalendarEvent", {
  "summary": "<title>",
  "start": {"dateTime": "<RFC3339>", "timeZone": "<the organisation's zone>"},
  "end": {"dateTime": "<RFC3339>", "timeZone": "<the organisation's zone>"},
  "attendees": ["<address>", "<address>"],
  "description": "<the agenda, one point per line>",
  "location": "<the address, in person only>",
  "conferenceType": "hangoutsMeet",
  "sendUpdates": "all"
})

conferenceType only when someone joins remotely; location only when someone meets in person. sendUpdates is "all" when there are attendees, so they receive the invitation, and "none" when there are none or the person says not to notify them.

  1. Once the event is created, give in one line its day and time and its video link (the Meeting: line of the answer) or its address.

Changing an event

  1. Find it with getCalendarEvents and a query, and read it: call_recipe("google-workspace.getCalendarEvent", {"eventId": "<id>"}).
  2. A new day or time: read the calendar for it as in step 1, and say any overlap before the change.
  3. The rules above hold for what changes: a meeting that moves in person gets the address in location, and a changed agenda is rewritten in description.
  4. One call carries every change: call_recipe("google-workspace.updateCalendarEvent", {"eventId": "<id>", "<field>": "<new value>", "sendUpdates": "<all or none>"}), with sendUpdates chosen as for a new event. attendees replaces the whole list, so pass everyone, the existing attendees included.
  5. updateCalendarEvent cannot add a video link. A meeting that becomes remote and has none: say so, and offer to create it again with the link and then delete the old one with deleteCalendarEvent. Do either only when the person agrees, and each call asks its own approval; without their yes, delete nothing.

Hard rules

  • Nothing is created before what was missing is answered, and a meeting is never created in two steps: one call carries the title, the time, the attendees, the agenda and the video link or the address.
  • Never invent an agenda point, an address or an attendee's address, and never write a video link yourself: the link is the one the calendar creates.
  • Times are on the organisation's clock, the now of the message header, unless the person names another zone.