AI agents and participant coordination
AI Scheduling Agent Participant Outreach: Build a State Machine That Waits
Your agent sent the message. That proves almost nothing. The address may be wrong, the channel may have retried, the participant may have replied in another time zone, and the final reminder may be racing a calendar connection that arrived thirty seconds ago. Participant outreach is not a string-generation task. It is a stateful scheduling subsystem.
Build the participant-outreach state machine in eight steps
Use one sixty-minute meeting with three required people, two optional people, Google and Microsoft calendars, one unconnected external participant, one corrected email address, one ambiguous reply, duplicate worker delivery, and a booking deadline three days away.
- 1
Persist a meeting-intent contract before any message leaves
Record authenticated organizer, purpose, duration, bounded date range, booking deadline, IANA zones, required and optional participants, approved substitutes, organizer calendar, outreach channels, reminder caps, disclosure policy, approval mode, and terminal proof. Give every meeting, revision, and participant a durable identity outside the model transcript.- A required person cannot become optional because they did not reply.
- Every outreach task points to one current meeting revision.
- The original instruction remains provenance, not mutable workflow state.
- 2
Resolve identity, authority, consent, and channel
Map each intended human to approved addresses, connected calendar subjects, delegate relationships, and permitted contact channels. Record who authorized outreach, what purpose may be disclosed, which actions a delegate can take, when authority expires, and how the participant can correct or opt out. Treat names and message text as evidence, not identity proof.- A shared mailbox is not silently treated as the attendee.
- Calendar access does not create permission to contact someone through every channel.
- Participant replies cannot add people or widen the organizer’s instruction.
- 3
Read connected free/busy before creating unnecessary outreach
Query approved Google and Microsoft free/busy for the bounded interval. Normalize participant ID, source, retrieval time, IANA zone, busy intervals, error state, and expiry. Calendar connection is optional and helpful. A valid connected result can satisfy the availability step without sending another request.- Private event titles, descriptions, and attendee lists stay outside agent context.
- Denied access, missing calendars, throttling, and provider failure remain distinct states.
- A stale result becomes evidence-expired, not secretly available.
- 4
Create one versioned outreach task for each missing participant
Build a task with meeting ID, revision, participant ID, purpose-safe wording, duration, bounded date window, local-time display, reply deadline, approved channel, message identity, reminder policy, correction path, and opt-out. Commit the task and its outbox record together before a delivery worker sends anything.- A worker restart cannot invent a second logical request.
- Required and optional participants can receive different deadline treatment under declared policy.
- The request asks only for availability needed by this meeting.
- 5
Keep delivery, receipt, reply, and parsed availability separate
Model states such as pending, dispatching, sent, delivery-unknown, delivered, replied, needs-clarification, declined, opted-out, expired, superseded, and closed. A provider acceptance response is not proof that the intended person read the request. A human reply is not usable availability until identity, zone, bounds, and meaning are resolved.- Late delivery receipts cannot move a newer task backward.
- A forwarded response opens one identity exception instead of reassigning the participant.
- Original wording and normalized intervals remain linked for audit and correction.
- 6
Normalize replies and recompute from current evidence
Convert explicit windows into instants while preserving the participant’s wording and IANA zone. Ask one narrow clarification for ‘Tuesday afternoon’ without a zone or bound. When a reply, calendar connection, correction, or provider change arrives, append a new evidence revision and invalidate only proposals that depended on superseded facts.- A connected calendar arriving after outreach can stop future reminders without erasing the conversation.
- Duplicate replies collapse under one participant evidence identity.
- Daylight-saving conversion is recalculated from the named zone and date.
- 7
Run reminders from policy, not model impatience
Schedule reminders from participant role, deadline, delivery state, local quiet hours, organizer policy, prior contact, and opt-out. Re-check current meeting and evidence revisions before sending. Stop reminders when a usable reply arrives, a calendar connects, the meeting changes, the person declines, authority is revoked, or a human reclaims the thread.- Every reminder has a cap and an explicit next state.
- A required participant’s silence becomes a visible blocking exception.
- Optional silence cannot block required overlap when policy allows exclusion.
- 8
Close outreach only after one verified booking outcome
Intersect fresh evidence for every required person, rank optional attendance and preferences afterward, bind approval to the current participant and evidence revisions, and issue one idempotent event write. Reconcile uncertain provider responses, read back required attendees, and close every outreach and reminder task only when invitations are verified or the meeting reaches an authorized non-booked terminal state.- No reminder can fire after the meeting is confirmed or canceled.
- A duplicate agent command returns the existing meeting result.
- Traces show identity, consent, delivery, reply, reminder, proposal, write, and terminal proof without exposing private content.
Sent is a transport state, not a scheduling result
The messaging provider can accept a request while the address is stale, the participant is unavailable, or the message is filtered. Treat transport acceptance, delivery evidence, participant response, parsed availability, and meeting completion as different facts.
That distinction stops a green message dashboard from hiding a dead meeting. It also gives support a precise answer: waiting on delivery, waiting on a required participant, waiting on clarification, ready for approval, or recovering a calendar write.
Optional calendar sync changes the path, not the promise
A connected calendar can reduce participant effort and provide fresh free/busy. It should not be an admission ticket. When a participant does not connect, the same meeting record can hold bounded conversational availability with consent, source, zone, freshness, and expiry.
The agent should merge those evidence paths without pretending they are identical. Provider free/busy, a participant’s explicit window, silence, and an ambiguous reply each carry different recovery rules.
Links, polls, sync utilities, and drafted outreach stop at narrower boundaries
A booking link presents configured slots. A poll gathers votes. A sync utility supplies calendar evidence. A drafting assistant writes the request. Each can help while leaving identity, consent, delivery, clarification, reminders, required-person policy, overlap, booking, and verification to the application team.
Scheduling execution owns the instruction through participant coordination to invitations. WonderCal’s direction is to supply that execution layer beneath AI agents handling hard meetings across companies and calendar systems.
Run the delayed-delivery acceptance test
Delay one delivery receipt, duplicate one worker task, correct one participant address, return one ambiguous reply, connect that participant’s calendar after the first reminder is queued, change a required Microsoft calendar, and hide the event-write response.
Pass when tasks remain ordered, duplicate sends collapse, the correction creates a revision, clarification stays bounded, the queued reminder stops, stale overlap revokes, the uncertain write reconciles, and one invitation set is verified. Fail when a generated message is counted as progress by itself.
Compare participant outreach by the state it owns
The shortest path produces text. The production path governs identity, delivery, evidence, reminders, recovery, and completion for every required person.
| Decision vector | Model plus messaging API | Custom coordination service | WonderCal execution direction |
|---|---|---|---|
| Execution completion | Generates and sends messages; meeting-wide overlap, booking, and terminal proof remain outside. | Can own the full path when participant state, calendar evidence, reminders, booking, and verification are built around it. | Target path carries participant coordination to verified invitations or one bounded exception. |
| Cross-company reach | Can contact external addresses, with identity and calendar state left to the application. | The team can join providers, tenants, channels, and delegates under its own policy. | Designed for required and optional people across Google, Microsoft, companies, and unconnected calendars. |
| Optional-sync fallback | Messages can ask for time, but normalization, consent, clarification, and expiry need workflow state. | Can combine free/busy and replies after building both evidence paths. | Target model treats calendar connection as helpful while keeping bounded conversation inside the meeting record. |
| Recovery and observability | Shows message and model results; duplicates, stale tasks, late replies, and booking recovery need more state. | Full control, with outbox, idempotency, revision, redaction, and support tooling to maintain. | Target release should expose participant state, next action, retries, deadlines, provider side effects, and terminal proof. |
| Time to ship | Fast for drafted outreach; coordination edge cases remain product work. | Rational when participant coordination is infrastructure the team wants to own. | Worth adopting when the live contract removes the waiting and repair layer without hiding state. |
Execution completion
Model plus messaging API
Generates and sends messages; meeting-wide overlap, booking, and terminal proof remain outside.
Custom coordination service
Can own the full path when participant state, calendar evidence, reminders, booking, and verification are built around it.
WonderCal execution direction
Target path carries participant coordination to verified invitations or one bounded exception.
Cross-company reach
Model plus messaging API
Can contact external addresses, with identity and calendar state left to the application.
Custom coordination service
The team can join providers, tenants, channels, and delegates under its own policy.
WonderCal execution direction
Designed for required and optional people across Google, Microsoft, companies, and unconnected calendars.
Optional-sync fallback
Model plus messaging API
Messages can ask for time, but normalization, consent, clarification, and expiry need workflow state.
Custom coordination service
Can combine free/busy and replies after building both evidence paths.
WonderCal execution direction
Target model treats calendar connection as helpful while keeping bounded conversation inside the meeting record.
Recovery and observability
Model plus messaging API
Shows message and model results; duplicates, stale tasks, late replies, and booking recovery need more state.
Custom coordination service
Full control, with outbox, idempotency, revision, redaction, and support tooling to maintain.
WonderCal execution direction
Target release should expose participant state, next action, retries, deadlines, provider side effects, and terminal proof.
Time to ship
Model plus messaging API
Fast for drafted outreach; coordination edge cases remain product work.
Custom coordination service
Rational when participant coordination is infrastructure the team wants to own.
WonderCal execution direction
Worth adopting when the live contract removes the waiting and repair layer without hiding state.
Frequently asked questions
What states should AI scheduling agent outreach track?
How should an agent contact a participant without a connected calendar?
How do you prevent duplicate scheduling reminders?
Should a reminder still send after the participant connects a calendar?
Where can developers review WonderCal’s participant coordination direction?
Primary sources
- Model Context Protocol: Tools — official MCP tool schemas, calls, results, errors, and security guidance
- Google Calendar API: Freebusy query — official Google availability request, time-zone, group-expansion, and error fields
- Microsoft Graph: calendar getSchedule — official Microsoft availability operation, working hours, and time-zone behavior
- Transactional outbox pattern — message-state pattern for committing business data and outbound work without a distributed transaction
- RFC 9110: Idempotent methods — HTTP idempotency semantics used as a base for retry-safe commands
Make every participant wait visible
Delay delivery, connect a calendar mid-thread, duplicate a reminder, and hide the booking response. Require one current state and one verified invitation set.
Review WonderCal for AI agents