Solutions

Meetings & scheduling

The calendar it could not see, said out loud.

#design-teampublic channel2 tool calls

Free/busy answered for three of four people; the fourth's calendar was not shared, which comes back as an error in that entry rather than as an empty week. An empty week reads as free, so the difference is reported rather than guessed at, and nothing is booked until the asker chooses.

design-team

Mei2:41 PM

@attest_tag book the roadmap review with the four of us Thursday afternoon

attest_tagApp2:41 PM

  • http_request · GET people.googleapis.com/v1/people:searchContacts · 3 matches
  • http_request · POST www.googleapis.com/calendar/v3/freeBusy · 4 calendars · 1 error

Thursday 18 Sep, 14:00–15:00 ET is clear for you, Sam and Priya.

  • Dan — free/busy returned notACalendarUser for his address: his calendar is not shared with you. That is not the same as free, so I have not counted him either way.
  • 15:30 is the next hour clear for the other three, if you would rather not overlap his usual review slot.

Say the word and I’ll book 14:00 and let Dan decline, or I’ll draft him a note asking which afternoon suits.

google/gemini-flash4.8k in310 out$0.0026Configure

Names, figures, repositories and customers are changed; token counts and cost are illustrative. The ask, and the shape of the answer, are as they were.

How the turn went

The error is the answer, and a read that is not certain is not rounded up.

  1. 01

    An error in one entry, not an empty week

    Free/busy answers per calendar. A calendar the asker cannot see comes back with an error in that entry while the others return normally, so the call succeeds overall — which is exactly how the case gets missed. The entry is read, and its error is carried into the reply.

  2. 02

    Unknown is not free

    The difference matters only once, and it matters a lot: a person whose hours are unknown is reported as unknown. Nothing in the model’s answer is allowed to turn an absent list of busy blocks into an afternoon somebody is available.

  3. 03

    Nothing is written while a question is open

    No card appears, because no write was decided. The two ways forward are offered and the thread waits; the booking case is one sentence away if the asker wants it.

What it needs

The setup, in the console.

Connection
The Google Workspace preset: an OAuth client an admin registers once, with the parts you mean to use ticked — Gmail, Calendar, Drive, Contacts — attached to the channel.
Credential
Each person's own sign-in, from a Connect button the bot DMs them, held per user. No shared token exists for a channel to spend.
Nothing else
Free/busy is a read. This whole turn ran without a write, so no policy, approver or card was involved.

What it will not do

Enforced outside the model.

  • It will not report a calendar it could not read as free.

  • It cannot open the other person's calendar to find out; the only token in play is the asker's own.

Try it

Say it in a channel it is in.

The sentence as it was typed. It works in any channel the bot has been invited to that carries the connection above — no command syntax, no form, and follow-ups in the thread need no mention.

@attest_tag book the roadmap review with the four of us Thursday afternoon

  • Google Calendar
  • http_request

Bring the channel this would live in.

Sign up, connect the service above in one channel, and type this sentence yourself — or run the same binary on your own infrastructure.

All solutions